MastroLube 发表于 2022-7-5 18:40:02

合并两条多段线

大家好,我不知道为什么,但我的Lisp程序!
 
我必须从点列表中创建一条多段线,但我真的不知道该怎么做。我到处都找了,但遗漏了一些东西。。
 
这就是我正在做的:
1、创建多段线->提取坐标
(SETQ coordinate1 (VLAX-SAFEARRAY->LIST
                  (VLAX-VARIANT-VALUE (VLAX-GET-PROPERTY obj1 'Coordinates))
                  )
)
2、进行偏移并提取坐标
(SETQ coordinate3 (VLAX-SAFEARRAY->LIST
                  (VLAX-VARIANT-VALUE (VLAX-GET-PROPERTY obj1 'Coordinates))
                  )
)
 
现在我想合并这些线(合并点列表并生成多段线)。
第二个方向与第一个方向相同,我需要反转它!
 
我有两个问题:
1.无法附加点列表,因为我得到了这样的结果:
(1 2 3 4 5 6 ..) 而不是((1 2)(3 4)(5 6)(…)
(setq lista_punti (append lista_punti (list (nth n coordinate1) (nth (1+ n) coordinate1))))
 
2、真的不知道该怎么做。。我看到了一些关于lamda函数的东西。
 
(entmakex
       (append
(list
    '(0 . "LWPOLYLINE")                ;nome
    '(100 . "AcDbEntity")
    '(100 . "AcDbPolyline")
    ;'(8 . "Muri")                ;layer
    ;'(62 . 5)                        ;colore
    (cons 90 (length coordinate1))                        ;numero vertici
    '(90 . 4)
    '(70 . 1)                        ;1 chiusa, 0 aperta
    )
;istructions here?
)
)
 
有人能给我一个建议吗?
 
http://i.imgur.com/KxOIYqb.png
谢谢

Commandobill 发表于 2022-7-5 18:52:22

一个叫freerefill的家伙不久前把这个放在了一起。虽然不是最干净的代码,但它非常可靠。
 
(defun plverts (ent / retn listy retDum add1 add2) ;
   (vl-load-com)
   (if        (= (cdr (assoc 0 (entget ent))) "LWPOLYLINE")
   (progn
(setq retnnil
      listy (vlax-safearray->list
              (vlax-variant-value
                (vla-get-coordinates (vlax-ename->vla-object ent))
              )
          )
)
(while (and (setq var1 (car listy)) (setq var2 (cadr listy)))
(setq retn (append retn (list (list var1 var2 0))))
(setq listy (cddr listy))
)
   )
   )
   retn
)                                        ; Returns a list of 3D coordinates defining the vertices of a polygon

Commandobill 发表于 2022-7-5 19:11:53

所以你可以这样做:
(SETQ coordinate1 (plverts ent1))要获得两者的分数,只需附加两个列表。

David Bethel 发表于 2022-7-5 19:17:01

我想我不明白。
 
是否希望一条连续的pline合并两条具有穿过形状中点的顶点的现有线,并添加端盖?
 
所附jpg中显示的顶点顺序不会有任何重叠段
 
-大卫

Lee Mac 发表于 2022-7-5 19:32:12

这应该有帮助(减去图案填充)。

BIGAL 发表于 2022-7-5 19:43:45

这是另一个示例,从点列表中创建柱线。
 

; co-ordsxy is a list of 2d points
(setq x -1) ; so x starts at nth 0 at start and closing
(command "PLINE" (while (= (getvar "cmdactive") 1)
                   (COMMAND (repeat (length co-ordsxy)
                            (nth (setq x (+ x 1)) co-ordsxy)
                            )
                  )
               )   
)
(command "C")
页: [1]
查看完整版本: 合并两条多段线