symoin 发表于 2022-7-6 09:49:16

将多段线转换为3dpolylin

所有人都在那里,
 
我有一个在不同标高(z)上有许多点的图形,绘制多段线是因为它们将点与osnap节点连接在一起。现在我需要将这些多段线更改为三维多段线。
 
是否有任何lisp或VBA程序来执行此操作。
 
帮助总是被满足的。

ReMark 发表于 2022-7-6 09:52:52

试试这个lisp例程(pedit3d.lsp)。我从未使用过它,因此我无法告诉你它是否有效。
http://www.black-cad.homepage.t-online.de/pediten.htm

Lee Mac 发表于 2022-7-6 09:58:07

尝试以下操作:
 

;;-------------=={ 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)
)

Tyke 发表于 2022-7-6 10:01:18

如果您使用的是Civil 3D,则有一个执行此操作的命令。

David Bethel 发表于 2022-7-6 10:03:07

你是说现有的多段线已经有不同的Z值了吗?或者它们只是具有正确XY值的2D?据我所知,LWDOLYLINE不能有变化的Z值。另一种选择是,如果现有的LWWPolyline具有其UCS旋转-David

Lee Mac 发表于 2022-7-6 10:06:18

 
这就是我所想的-所以我选择了假设正确的XY值并使用高程作为Z。。。

David Bethel 发表于 2022-7-6 10:10:25

 
我假设OP是说每个点在Z轴上都是不同的????
 
哦,好吧,大卫

eldon 发表于 2022-7-6 10:12:52

 
请澄清一下,对于lisp中的达夫,您正在从与顶点具有相同x、y值的点检索z值。
 
据我所知,最初的文章是通过捕捉到三维点来绘制多段线的。多段线将捕捉到第一个节点的z值。

Lee Mac 发表于 2022-7-6 10:19:00

据我所知,OP使用的是LWpolyline,它必须位于某个高程的单个平面上。长波多段线的顶点坐标表示为该高程的二维OCS点。高程存储在别处。
 
我的代码使用LWPolyline高程作为三维多段线中每个坐标的Z值,因此三维多段线与LWPolyline相同。如果这不是要求的,我认为OP需要进一步解释。
 
我不太擅长解释我的意思,但我希望这能澄清问题!

eldon 发表于 2022-7-6 10:21:57

我认为OP错误地绘制了一条普通的LW多段线,捕捉到了先前在图形中的“点”。他可能应该首先使用三维多段线来绘制它们,然后使用魔杖将他的LW多段线转换为三维多段线,而无需再次绘制它们。
 
我想知道如何在lisp中检索z值,并将其自身附加到正确的顶点以生成所需的三维多段线,因为显然现有LWMOLYLINE的z值不符合要求。
 
也许我们把自己搞糊涂了,需要OP来澄清问题
页: [1] 2
查看完整版本: 将多段线转换为3dpolylin