rouho 发表于 2022-7-5 23:45:47

等距分割多段线

你好
 
我正在寻找一个lisp,该lisp将以给定的间隔(例如50m)沿多段线添加一个点,并且仅当两个相邻顶点之间的距离大于选定的线段间隔时,才在每个顶点处添加一个点。
 
非常感谢。

Tharwat 发表于 2022-7-5 23:52:23

试试这个。。。
 

(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)

rouho 发表于 2022-7-5 23:56:50

谢谢你。
只有当两个顶点之间的距离大于选定的线段间隔时,才可能添加两个顶点之间的点吗?我的意思是,如果两个顶点相距20m,并且线段间隔为25m,那么这两个顶点之间应该没有点,无论从开始的分割落在哪里。
 
我希望避免两点(顶点和另一个顶点)太近。
 
谢谢

Tharwat 发表于 2022-7-6 00:05:28

正如我可以告诉你们的,你们想要根据每两个顶点来比较间隔长度,并在每个间隔处添加点,对吗?

rouho 发表于 2022-7-6 00:06:08

是的,没错。
 
谢谢

Tharwat 发表于 2022-7-6 00:11:17

 
为了节省时间和一气呵成地完成日常工作,我希望您不介意上传一张示例图,用示例清楚地展示您的陈述

rouho 发表于 2022-7-6 00:16:57

这是一个示例文件。
非常感谢。
绘画图纸

marko_ribar 发表于 2022-7-6 00:23:24

鲁荷,请看附件中的图纸。。。这个部门不是更好吗?
 
M、 R。
绘画图纸

rouho 发表于 2022-7-6 00:26:33

的确,这太棒了!

marko_ribar 发表于 2022-7-6 00:31:09

这是我的版本:
 

(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
查看完整版本: 等距分割多段线