我所做的只是将LWPolyline转换为3DPolyline,顶点保持在完全相同的位置。。。
同上。 抱歉耽搁了,
所有人,
我会详细解释情况。
我们使用liscad处理测量数据,并在2d(所有点都有X和Y,但没有Z)和法线多段线中获取输出。然后根据测量人员提供的手绘草图编辑图纸。
然后,我们被要求提交三维图形(三维点和三维多段线中的多段线),因此在三维中获得另一个输出(所有点都带有X、Y和Z)和三维多段线中的多段线。
在最终绘图中,删除2D点并插入3d点。
现在有一种情况,我们必须用3DPolyline替换现有的多段线,3DPolyline应该在顶点处具有截至点的精确高程。
这是一条10公里以上路段的道路图。
希望这是一个清楚的情况。 现在我更困惑了。您说您引入了带有另一个测量数据输出的三维多段线。那么要制作哪些三维多段线呢
我想这是一个有人认为只需按一下按钮就可以将二维测量更改为三维测量的情况。(我想聪明的人会提供那个神奇的按钮)
下次,首先在3d中进行所有处理。将3d更改为2d很简单,但反之亦然。 我相信这就是OP想要的,但请记住,这是一种快速而肮脏的方式。除了检查多段线的顶点数是否等于点数之外,没有其他错误陷阱。
(defun c:pl->3dpl ( / pl-ss pnt-ss n pl-obj coords vertN p-list p i pnt pp el 3dpl-obj *MS*)
(princ "\nSelect 2D Polyline:")
(setq pl-ss (ssget ":s" '((0 . "LWPOLYLINE"))))
(princ "\nSelect Points:")
(setq pnt-ss (ssget '((0 . "AECC_POINT"))))
(setq pl-obj (vlax-ename->vla-object (ssname pl-ss 0)))
(setq coords (vlax-get pl-obj 'Coordinates))
(setq vertN ( / (length coords) 2))
(if (not (= vertN (sslength pnt-ss)))
(progn
(alert "Number Vertices of Polyline Does Not Equal Number of Pnts \n\nExiting...")
(exit)
)
)
(setq n 0)
(repeat VertN
(setq p (list (nth n coords) (nth (1+ n) coords)))
(setq i 0)
(repeat VertN
(setq pnt (vlax-ename->vla-object (ssname pnt-ss i)))
(setq pp (list (vlax-get pnt 'Easting)(vlax-get pnt 'Northing)))
(if (equal p pp)
(progn
(setq el (vlax-get pnt 'Elevation))
(setq p-list (append p-list (list (nth 0 p)(nth 1 p) el)))
)
)
(setq i (1+ i))
)
(setq n (+ 2 n))
)
(setq *MS* (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))))
(setq 3dpl-obj (vla-add3dpoly *MS* (pl->var p-list)))
(vlax-put-property 3dpl-obj 'Color acred)
)
;Given Pointlist returns pointlist in variant form
(defun PL->VAR ( pl / pl ub sa var)
(setq ub (- (length pl) 1))
(setq sa (vlax-make-safearray vlax-vbdouble (cons 0 ub)))
(setq var (vlax-make-variant (setq sa (vlax-safearray-fill sa pl))))
)
这里是2Dpoly到3Dpoly程序。
http://www.cadforum.cz/cadforum_en/how-to-convert-2d-polyline-to-3d-polyline-tip7266 在这里,我修改了Lee的提交,以查看每个LWPolyline顶点的一个点,并从中获取高程,如果不是,则获取选定LWPolyline(在该顶点)的高程。
;;-------------=={ LWPolylines to 3D Polylines }==------------;;
;; ;;
;;Converts a selection of LWPolylines to 3D Polylines. ;;
;;------------------------------------------------------------;;
;;Author: Lee Mac, Copyright © 2011 - www.lee-mac.com ;;
;;Edited: Alan J. Thompson, 02.08.11 ;;
;;------------------------------------------------------------;;
(defun c:LWpt3D (/ ss i elist z pt)
(vl-load-com)
;; © Lee Mac 2011
;; Edited by: Alan J. Thompson, 02.08.11
(if (setq ss (ssget "_:L" '((0 . "LWPOLYLINE"))))
(repeat (setq i (sslength ss))
(entmakex
(append '((0 . "POLYLINE") (10 0. 0. 0.) (70 . )
;; AJT edit
(vl-remove-if
(function
;; AJT edit
(lambda (pair) (member (car pair) '(0 10 38 40 41 42 43 70 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")
;; AJT edit BEGIN
(if (setq pt (ssget "_C"
(trans (cdar elist) 0 1)
(trans (cdar elist) 0 1)
'((0 . "POINT"))
)
)
(assoc 10 (entget (ssname pt 0)))
(append (assoc 10 elist) z)
)
(cons 70 32)
;; AJT edit END
(assoc 40 elist)
(assoc 41 elist)
(assoc 42 elist)
)
)
(setq elist (cdr elist))
)
(entmakex '((0 . "SEQEND")))
(entdel e)
)
)
(princ)
) 看看这个帖子是否有用http://www.cadtutor.net/forum/showthread.php?35545-将多段线转换为三维多段线
Eldon先生,
我必须删除多段线并放置三维多段线,在这种情况下,我所做的编辑已经不复存在了,因此我想用一种方法或代码将现有的多段线转换为三维多段线,每个顶点上都有点的高程。 我只是感到困惑,因为在你最初的帖子中,你没有解释到底发生了什么。如果您这样做了,那么该线程可能会用两个帖子进行排序。
有人挥舞着魔杖,所以我希望它能做你想做的事。
但是,为进行这项调查进行一点预先规划和适当的成本核算将带来回报。
页:
1
[2]