這個判斷式很有用,請版主幫忙寫寫吧.
我寫了一個程序,碰到這樣的一個很難解決的問題.是這樣一回事我說給大家看看:我用了
(setq a (entsel));;;選了一條樣條曲線
(setq as (cadr a));;;提取選點
........
(setq ;ssn(ssname a n)
endata (entget (car a))
spo (CDR (assoc 10 endata)));;;自動取得spline的起點座標.設成spo變量
(repeat (length endata)
(setq end (cdr (nth n endata)));;;自動取得spline的終點座標,設成end變量,
(setq n (1+ n)))
.......
當我自動提取了樣條曲線的起點和終點時,我想判別as如果接近起點就
(setq p1 "樣條曲線的起點")
如果as接近樣條曲線的終點
(setq p1 "樣條曲線的終點")
這個問題是怎樣解決啊?請大家來分享各自的見解. 是沿着曲线接近吗? 是啊有的圖元只離曲線 0.1mm 而大多數是和曲線相交. 但是小的不是很熟悉 Lisp .不知怎麼寫.
樓上的好心人,你就教教我們晚輩吧.謝謝了. ;;试试看
(defun c:test(/ e ent pt dis len)
(setq e T)
(while (and e (setq ent (entsel "\n请点选spline线:")))
(if (= (cdr (assoc 0 (entget (car ent)))) "SPLINE")
(progn
(setq e nil
pt (cadr ent)
ent (vlax-ename->vla-object (car ent))
pt (vlax-curve-getClosestPointTo ent pt)
dis (vlax-curve-getDistAtPoint ent pt)
len (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent))
pt (if (< dis (- len dis)) (vlax-curve-getStartPoint ent) (vlax-curve-getEndPoint ent))
)
(princ pt)
)
(prompt "\n不是spline线!")
)
)
(princ)
) 当然也适用于所有的曲线,如:line arc pline ellipse等 這個不錯.謝謝樓上的朋友.以后多多向你指教.我目前也寫好了一條啦.思路是這么樣的.
以下是程序:
(defun c:test_BDY(/)
(setq a (entsel))
(setq selectpoint (cadr a ))
(setvar "cmdecho" 0)
(setq os (getvar "osmode" ))
(setvar "OSMODE" 0)
(setq n 0)
(setq
endata (entget (car a))
spo (CDR (assoc 10 endata)));;;自動取得spline的起點座標.設成spo變量
(repeat (length endata)
(setq end (cdr (nth n endata)));;;自動取得spline的終點座標,設成end變量,
(setq n (1+ n)))
(setq distfulla(distance spo selectpoint))
(setq distfullb(distance end selectpoint))
(IF (> DISTFULLA DISTFULLB)
(PROGN (PRINC "\n選擇接近")
(princ spo))
(progn (PRINC "\n選擇接近")
(princ END)))
(PRINC)) 看一下:
http://www.mjtd.com/a2/list.asp?id=275 6楼的你这肯定不行!你这是直线距离而不是沿着曲线接近。 如果是沿直线距离接近那直接用(osnap (cadr (entsel "\n点选spline线:")) "end")即可。 lyy兄你那麼快就貼出來,我還想推一下BDYCAD看他甚麼時候會做出來,
下列是我之前的一段程序
(if (< (distance (cadr A) SPO) (distance (cadr A) EPO))
;;以上判斷有更精碓的方法,但讓我偷懶一下
其實我沒那麼懶,因我早就寫好了,"延伸SPLINE首尾端至某線段"中就有那麼一段
页:
[1]
2