runkeji@163.com 四樓的 LYY 你怎麼不公開那條程序了. 有很多哥們需要的. 謝謝啦. 我也看不见,不知道为什么?问问版主吧! 13樓你重新貼上來就得啦.這等小事不用煩我們的版主老大.我想他也很忙. 初级用户看不了精华帖子,
我复制了一下:
;;试试看
(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)
) 误区误区!!!!,既然是spline,那就不用求什么曲线长度.直接捕捉end就可以啦(setq el (entsel "\n选择样条曲线:"))
(if (= "SPLINE" (cdr(assoc 0 (entget (car el)))))
(setq pt (osnap (cadr el) "end"))
(progn (princ "\n不是spline")nil)
)
;;测试:
(vl-cmdf ".line" pt pause "") 那起点呢?你这里没有判断是起点还是终点,而直接使用了终点 捕捉"end"是端点.靠近起点它就是起点,靠近终点它就是终点.
对不闭合的sp,是否是起点可以用
(equal (vlax-curve-getstartpoint (car el)) pt)
判断一下,不过,这个方法对闭合的sp就不灵了:).只好求出param进行判断.
不过话说回来,前面各位的帖子也只是对pt赋起点or终点值,没有进行是否是起点,终点的区分.所以我前一个帖子的功能已经达到同样的效果.
其实想说的是:端点捕捉,就可以抓到sp的起点和终点,不像lwpline,pline,会抓到中间的节点.
页:
1
[2]