合并两条多段线
大家好,我不知道为什么,但我的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
谢谢 一个叫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 所以你可以这样做:
(SETQ coordinate1 (plverts ent1))要获得两者的分数,只需附加两个列表。 我想我不明白。
是否希望一条连续的pline合并两条具有穿过形状中点的顶点的现有线,并添加端盖?
所附jpg中显示的顶点顺序不会有任何重叠段
-大卫
这应该有帮助(减去图案填充)。 这是另一个示例,从点列表中创建柱线。
; 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]