多段线上的点
我希望能够得到我选择的多段线部分之间的两点。例子:
蓝线是所选多段线的一部分,X是我希望得到的两个点。
我可以通过比较角度和按距离排序得到这个结果,但肯定有更好的方法。 您只想选择直线并将其端点作为坐标返回? 我想选择一条多段线,让它返回该线段的起点和终点
我用这个做什么
https://sites.google.com/site/reidbooe/videos和观察门。avi公司 (defun AT:Segment (objPnt)
;; Retreive segment number and Start & End points
;; objPnt - List with object & point
;; Alan J. Thompson, 11.10.09 / 08.19.10
(if (vl-consp objPnt)
((lambda (seg)
(list seg
(list (vlax-curve-getPointAtParam (car objPnt) seg)
(cond ((vlax-curve-getPointAtParam (car objPnt) (1+ seg)))
((vlax-curve-getPointAtParam (car objPnt) (1- seg)))
)
)
)
)
(fix (vlax-curve-getParamAtPoint
(car objPnt)
(vlax-curve-getClosestPointTo (car objPnt) (trans (cadr objPnt) 1 0))
)
)
)
)
)
如。
(AT:Segment (entsel)) 我在开发人员的帮助下查看了曲线测量函数,但不知道如何获得端点。
非常感谢。 谢谢你的代码片段Alanjt,我为同样的目的编写的代码是waaaaayyyy to long。(DXF代码)
(vlax-curve-getClosestPointTo (car objPnt) (trans (cadr objPnt) 1 0));<------
但仍然。。随便。有时间我会努力的,谢谢你的鼓励
这可能会引起兴趣:
(defun c:Seg (/ pl ss a_10 pt_lst dst_tst seg_pts)
(if (setq pl (entsel "\nSelect Pline:"))
(progn
(setq ss (entget (car pl)))
(while (setq a_10 (assoc 10 ss))
(setq ss (member a_10 ss))
(setq
pt_lst
(cons (cdr (assoc 10 ss)) pt_lst)
ss (cdr ss)) ;_ end of setq
)
(setq dst_tst (mapcar (function (lambda (j) (distance (cadr pl) j))) pt_lst)
2pt (vl-sort dst_tst '<)
seg_pts
(list
(nth (vl-position (nth 0 2pt) dst_tst) pt_lst)
(nth (vl-position (nth 1 2pt) dst_tst) pt_lst))
)
)
)
)
Yeah, I could see where you'd have problems with vertices being close together. I still like it.
yup, bummer huh
I could've made it shorter it i did this way(not that it matters)
(setq ss (entget (car pl)) pt_lst (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) ss)))
but still.. anyhoo. i'll worked on it when i get time, thank you for the encouragement Alanjt
页:
[1]
2