Jozef13 发表于 2022-7-5 14:55:18

连接多个pol的端点

尊敬的各位:,
 
我正在寻找一个lisp例程,将多条多段线的端点连接到公共点。我不需要将它们连接成一条多段线,只需在一个点上接触所有内容。
根据选择,我想获得选择中第一条多段线的“主点”,然后将所有其余多段线连接到该点,如附图所示。

ronjonp 发表于 2022-7-5 15:05:37

干得好。。。
(defun c:foo (/ cp p s x)
;; RJP » 2018-08-15
;; Puts plines and lines closest vertice to a common picked point
(cond
   ((and (setq p (getpoint "\nPick common point: "))
(setq s (ssget "_:L" '((0 . "LINE,LWPOLYLINE"))))
    )
    (foreach e        (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
      (setq cp        (car (vl-sort (list (vlax-curve-getstartpoint e) (vlax-curve-getendpoint e))
                      '(lambda (r j) (< (distance r p) (distance j p)))
             )
        )
      )
      (entmod (mapcar '(lambda        (x)
                  (cond        ((equal (list (car cp) (cadr cp)) (cdr x) 1e- (cons (car x) p))
                        (x)
                  )
                )
             (entget e '("*"))
       )
      )
    )
   )
)
(princ)
)

Jozef13 发表于 2022-7-5 15:11:41

 
完美的
非常感谢。
我一直在努力使用多段线扩展数据,但没有成功。
您可以修改它,使其也可以应用于多段线吗?
如果需要更多技巧,不要浪费时间。

Lee Mac 发表于 2022-7-5 15:16:26

还有一个-这不包括与WCS不平行的UCS:
(defunc:cpt(/a b e i p q s x)(if(and(setqs(ssget'(-04”“))(setqp(getpoint“\n指定公共点:)(setqp(transp 1 0))(repeat(setqi(1-i)e(ssnames i)x(entgete))(if(“POLYLINE”(cdr(assoc0 x))(progn(setqe(entnexte)x(entgete)a x)(while(=“VERTEX”(cdr(assoc0 x))(setqb x e(entnexte)x(entgete)))(setqq(如果(

rkmcswain 发表于 2022-7-5 15:26:07

你不能也使用约束来维护端点到端点的关系吗?

ronjonp 发表于 2022-7-5 15:32:01

很好,李

Lee Mac 发表于 2022-7-5 15:40:19

 
谢谢Ron-你也是-我喜欢你代码的简洁

ronjonp 发表于 2022-7-5 15:42:51

 
干杯

Jozef13 发表于 2022-7-5 15:50:21

 
Thnks Lee。
它工作得很好

Lee Mac 发表于 2022-7-5 15:55:51

不客气Jozef
页: [1]
查看完整版本: 连接多个pol的端点