乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: symoin

[编程交流] 将多段线转换为3dpolylin

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:23:26 | 显示全部楼层
 
我所做的只是将LWPolyline转换为3DPolyline,顶点保持在完全相同的位置。。。
 
 
同上。
回复

使用道具 举报

14

主题

47

帖子

33

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 10:29:15 | 显示全部楼层
抱歉耽搁了,
 
所有人,
 
我会详细解释情况。
 
我们使用liscad处理测量数据,并在2d(所有点都有X和Y,但没有Z)和法线多段线中获取输出。然后根据测量人员提供的手绘草图编辑图纸。
 
然后,我们被要求提交三维图形(三维点和三维多段线中的多段线),因此在三维中获得另一个输出(所有点都带有X、Y和Z)和三维多段线中的多段线。
 
在最终绘图中,删除2D点并插入3d点。
 
现在有一种情况,我们必须用3DPolyline替换现有的多段线,3DPolyline应该在顶点处具有截至点的精确高程。
 
这是一条10公里以上路段的道路图。
希望这是一个清楚的情况。
回复

使用道具 举报

8

主题

1133

帖子

1164

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 10:32:10 | 显示全部楼层
现在我更困惑了。您说您引入了带有另一个测量数据输出的三维多段线。那么要制作哪些三维多段线呢
 
我想这是一个有人认为只需按一下按钮就可以将二维测量更改为三维测量的情况。(我想聪明的人会提供那个神奇的按钮)
 
下次,首先在3d中进行所有处理。将3d更改为2d很简单,但反之亦然。
回复

使用道具 举报

20

主题

338

帖子

323

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 10:33:28 | 显示全部楼层
我相信这就是OP想要的,但请记住,这是一种快速而肮脏的方式。除了检查多段线的顶点数是否等于点数之外,没有其他错误陷阱。
 
  1. (defun c:pl->3dpl ( / pl-ss pnt-ss n pl-obj coords vertN p-list p i pnt pp el 3dpl-obj *MS*)
  2. (princ "\nSelect 2D Polyline:")
  3. (setq pl-ss (ssget ":s" '((0 . "LWPOLYLINE"))))
  4. (princ "\nSelect Points:")
  5. (setq pnt-ss (ssget '((0 . "AECC_POINT"))))
  6. (setq pl-obj (vlax-ename->vla-object (ssname pl-ss 0)))
  7. (setq coords (vlax-get pl-obj 'Coordinates))
  8. (setq vertN ( / (length coords) 2))
  9. (if (not (= vertN (sslength pnt-ss)))
  10.    (progn
  11.      (alert "Number Vertices of Polyline Does Not Equal Number of Pnts \n\nExiting...")
  12.      (exit)
  13.      )
  14.    )
  15. (setq n 0)
  16.   (repeat VertN
  17.    (setq p (list (nth n coords) (nth (1+ n) coords)))
  18.    (setq i 0)
  19.    (repeat VertN
  20.      (setq pnt (vlax-ename->vla-object (ssname pnt-ss i)))
  21.      (setq pp (list (vlax-get pnt 'Easting)(vlax-get pnt 'Northing)))
  22.      (if (equal p pp)
  23. (progn
  24.   (setq el (vlax-get pnt 'Elevation))
  25.   (setq p-list (append p-list (list (nth 0 p)(nth 1 p) el)))
  26.   )
  27. )
  28.      (setq i (1+ i))
  29.      )
  30.    (setq n (+ 2 n))
  31.    )
  32. (setq *MS* (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))))
  33. (setq 3dpl-obj (vla-add3dpoly *MS* (pl->var p-list)))
  34. (vlax-put-property 3dpl-obj 'Color acred)
  35. )
  36. ;Given Pointlist returns pointlist in variant form
  37. (defun PL->VAR ( pl / pl ub sa var)
  38. (setq ub (- (length pl) 1))
  39. (setq sa (vlax-make-safearray vlax-vbdouble (cons 0 ub)))
  40. (setq var (vlax-make-variant (setq sa (vlax-safearray-fill sa pl))))
  41. )
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 10:36:34 | 显示全部楼层
这里是2Dpoly到3Dpoly程序。
http://www.cadforum.cz/cadforum_en/how-to-convert-2d-polyline-to-3d-polyline-tip7266
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 10:40:17 | 显示全部楼层
在这里,我修改了Lee的提交,以查看每个LWPolyline顶点的一个点,并从中获取高程,如果不是,则获取选定LWPolyline(在该顶点)的高程。
 
  1. ;;-------------=={ LWPolylines to 3D Polylines }==------------;;
  2. ;;                                                            ;;
  3. ;;  Converts a selection of LWPolylines to 3D Polylines.      ;;
  4. ;;------------------------------------------------------------;;
  5. ;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
  6. ;;  Edited: Alan J. Thompson, 02.08.11                        ;;
  7. ;;------------------------------------------------------------;;
  8. (defun c:LWpt3D (/ ss i elist z pt)
  9. (vl-load-com)
  10. ;; © Lee Mac 2011
  11. ;; Edited by: Alan J. Thompson, 02.08.11
  12. (if (setq ss (ssget "_:L" '((0 . "LWPOLYLINE"))))
  13.    (repeat (setq i (sslength ss))
  14.      (entmakex
  15.        (append '((0 . "POLYLINE") (10 0. 0. 0.) (70 . )
  16.                ;; AJT edit
  17.                (vl-remove-if
  18.                  (function
  19.                    ;; AJT edit
  20.                    (lambda (pair) (member (car pair) '(0 10 38 40 41 42 43 70 90 91 100)))
  21.                  )
  22.                  (setq elist (entget (setq e (ssname ss (setq i (1- i))))))
  23.                )
  24.        )
  25.      )
  26.      (setq z (list (cdr (assoc 38 elist))))
  27.      (while (setq elist (member (assoc 10 elist) elist))
  28.        (entmakex
  29.          (list
  30.            (cons 0 "VERTEX")
  31.            ;; AJT edit BEGIN
  32.            (if (setq pt (ssget "_C"
  33.                                (trans (cdar elist) 0 1)
  34.                                (trans (cdar elist) 0 1)
  35.                                '((0 . "POINT"))
  36.                         )
  37.                )
  38.              (assoc 10 (entget (ssname pt 0)))
  39.              (append (assoc 10 elist) z)
  40.            )
  41.            (cons 70 32)
  42.            ;; AJT edit END
  43.            (assoc 40 elist)
  44.            (assoc 41 elist)
  45.            (assoc 42 elist)
  46.          )
  47.        )
  48.        (setq elist (cdr elist))
  49.      )
  50.      (entmakex '((0 . "SEQEND")))
  51.      (entdel e)
  52.    )
  53. )
  54. (princ)
  55. )
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-6 10:44:15 | 显示全部楼层
看看这个帖子是否有用http://www.cadtutor.net/forum/showthread.php?35545-将多段线转换为三维多段线
回复

使用道具 举报

14

主题

47

帖子

33

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 10:46:14 | 显示全部楼层
 
Eldon先生,
 
我必须删除多段线并放置三维多段线,在这种情况下,我所做的编辑已经不复存在了,因此我想用一种方法或代码将现有的多段线转换为三维多段线,每个顶点上都有点的高程。
回复

使用道具 举报

8

主题

1133

帖子

1164

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 10:51:50 | 显示全部楼层
我只是感到困惑,因为在你最初的帖子中,你没有解释到底发生了什么。如果您这样做了,那么该线程可能会用两个帖子进行排序。
 
有人挥舞着魔杖,所以我希望它能做你想做的事。
 
但是,为进行这项调查进行一点预先规划和适当的成本核算将带来回报。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-7 00:07 , Processed in 0.856120 second(s), 68 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表