将多段线转换为3dpolylin
所有人都在那里,我有一个在不同标高(z)上有许多点的图形,绘制多段线是因为它们将点与osnap节点连接在一起。现在我需要将这些多段线更改为三维多段线。
是否有任何lisp或VBA程序来执行此操作。
帮助总是被满足的。 试试这个lisp例程(pedit3d.lsp)。我从未使用过它,因此我无法告诉你它是否有效。
http://www.black-cad.homepage.t-online.de/pediten.htm 尝试以下操作:
;;-------------=={ LWPolylines to 3D Polylines }==------------;;
;; ;;
;;Converts a selection of LWPolylines to 3D Polylines. ;;
;;------------------------------------------------------------;;
;;Author: Lee Mac, Copyright © 2011 - www.lee-mac.com ;;
;;------------------------------------------------------------;;
(defun c:LW3D ( / ss i elist z ) (vl-load-com)
;; © Lee Mac 2011
(if (setq ss (ssget "_:L" '((0 . "LWPOLYLINE"))))
(repeat (setq i (sslength ss))
(entmakex
(append '((0 . "POLYLINE") (10 0. 0. 0.))
(vl-remove-if
(function
(lambda ( pair ) (member (car pair) '(0 10 38 40 41 42 43 90 91 100)))
)
(setq elist (entget (setq e (ssname ss (setq i (1- i))))))
)
)
)
(setq z (list (cdr (assoc 38 elist))))
(while (setq elist (member (assoc 10 elist) elist))
(entmakex
(list
(cons 0 "VERTEX")
(append (assoc 10 elist) z)
(assoc 40 elist)
(assoc 41 elist)
(assoc 42 elist)
)
)
(setq elist (cdr elist))
)
(entmakex '((0 . "SEQEND"))) (entdel e)
)
)
(princ)
)
如果您使用的是Civil 3D,则有一个执行此操作的命令。 你是说现有的多段线已经有不同的Z值了吗?或者它们只是具有正确XY值的2D?据我所知,LWDOLYLINE不能有变化的Z值。另一种选择是,如果现有的LWWPolyline具有其UCS旋转-David
这就是我所想的-所以我选择了假设正确的XY值并使用高程作为Z。。。
我假设OP是说每个点在Z轴上都是不同的????
哦,好吧,大卫
请澄清一下,对于lisp中的达夫,您正在从与顶点具有相同x、y值的点检索z值。
据我所知,最初的文章是通过捕捉到三维点来绘制多段线的。多段线将捕捉到第一个节点的z值。 据我所知,OP使用的是LWpolyline,它必须位于某个高程的单个平面上。长波多段线的顶点坐标表示为该高程的二维OCS点。高程存储在别处。
我的代码使用LWPolyline高程作为三维多段线中每个坐标的Z值,因此三维多段线与LWPolyline相同。如果这不是要求的,我认为OP需要进一步解释。
我不太擅长解释我的意思,但我希望这能澄清问题! 我认为OP错误地绘制了一条普通的LW多段线,捕捉到了先前在图形中的“点”。他可能应该首先使用三维多段线来绘制它们,然后使用魔杖将他的LW多段线转换为三维多段线,而无需再次绘制它们。
我想知道如何在lisp中检索z值,并将其自身附加到正确的顶点以生成所需的三维多段线,因为显然现有LWMOLYLINE的z值不符合要求。
也许我们把自己搞糊涂了,需要OP来澄清问题
页:
[1]
2