等距分割多段线
你好我正在寻找一个lisp,该lisp将以给定的间隔(例如50m)沿多段线添加一个点,并且仅当两个相邻顶点之间的距离大于选定的线段间隔时,才在每个顶点处添加一个点。
非常感谢。 试试这个。。。
(defun c:Test (/ _Pt ss in d)
;; Tharwat 11.11.2013 ;;
(defun _Pt (pt) (entmakex (list '(0 . "POINT") (cons 10 pt))))
(if (and (setq ss (ssget '((0 . "LWPOLYLINE"))))
(setq in (getdist "\n Specify the Interval :"))
(setq d in)
)
((lambda (i / sn p)
(while (setq sn (ssname ss (setq i (1+ i))))
(while (setq p (vlax-curve-getpointatdist sn d)) (_Pt p) (setq d (+ d in)))
(mapcar '_Pt (mapcar 'cdr (vl-remove-if-not '(lambda (u) (eq (car u) 10)) (entget sn))))
(setq d in)
)
)
-1
)
)
(princ)
)
(vl-load-com)
谢谢你。
只有当两个顶点之间的距离大于选定的线段间隔时,才可能添加两个顶点之间的点吗?我的意思是,如果两个顶点相距20m,并且线段间隔为25m,那么这两个顶点之间应该没有点,无论从开始的分割落在哪里。
我希望避免两点(顶点和另一个顶点)太近。
谢谢 正如我可以告诉你们的,你们想要根据每两个顶点来比较间隔长度,并在每个间隔处添加点,对吗? 是的,没错。
谢谢
为了节省时间和一气呵成地完成日常工作,我希望您不介意上传一张示例图,用示例清楚地展示您的陈述 这是一个示例文件。
非常感谢。
绘画图纸 鲁荷,请看附件中的图纸。。。这个部门不是更好吗?
M、 R。
绘画图纸 的确,这太棒了! 这是我的版本:
(defun c:divplsegs (/ ss mind i pl ep k j dk dj d n dd m p)
(vl-load-com)
(prompt "\nSelect 2d polylines...")
(setq ss (ssget '((0 . "*POLYLINE") (-4 . "<not") (-4 . "&=") (70 .(-4 . "not>"))))
(initget 7)
(setq mind (getdist "\nSpecify min. distance for segments division: "))
(setq i -1)
(while (setq pl (ssname ss (setq i (1+ i))))
(setq ep (vlax-curve-getendparam pl))
(setq k -1.0)
(while (< (setq k (1+ k)) ep)
(setq j (1+ k))
(setq dk (vlax-curve-getdistatparam pl k))
(setq dj (vlax-curve-getdistatparam pl j))
(setq d (- dj dk))
(setq n (fix (/ d mind)))
(if (> n 1)
(progn
(setq dd (/ d (float n)))
(setq m -1.0)
(repeat n
(setq p (vlax-curve-getpointatdist pl (+ dk (* dd (setq m (1+ m))))))
(entmake (list '(0 . "POINT") (cons 10 p)))
)
)
(progn
(setq p (vlax-curve-getpointatdist pl dk))
(entmake (list '(0 . "POINT") (cons 10 p)))
)
)
)
(entmake (list '(0 . "POINT") (cons 10 (vlax-curve-getendpoint pl))))
)
(princ)
)
您好,M.R。
页:
[1]
2