乐筑天下

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

[编程交流] 3D p纵断面

[复制链接]

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 17:21:03 | 显示全部楼层
@reza,你不可能得到平面多段线顶点的Z高程,这些平面多段线将被转换为三维多边形。。。相反,我建议你尽量只使用与等高线的交点。。。
 
  1. (defun c:flw23pel ;fencelwpoly23dpolyelevations
  2. ( / *error* bbucs ucsf osm cec ss1 ss2 i lw pl sss ssl sspl e )
  3. (vl-load-com)
  4. (defun *error* ( msg )
  5.    (if ucsf
  6.      (command "_.UCS" "_P")
  7.    )
  8.    (command "_.ZOOM" "_P")
  9.    (if osm
  10.      (setvar 'osmode osm)
  11.    )
  12.    (if cec
  13.      (setvar 'cecolor cec)
  14.    )
  15.    (if msg
  16.      (prompt msg)
  17.    )
  18.    (princ)
  19. )
  20. (defun bbucs ( ss / UCS2WCSMatrix WCS2UCSMatrix n ent minpt maxpt minptlst maxptlst minptbbx minptbby minptbbz minptbb maxptbbx maxptbby maxptbbz maxptbb )
  21.    (vl-load-com)
  22.    ;; Doug C. Broad, Jr.
  23.    ;; can be used with vla-transformby to
  24.    ;; transform objects from the UCS to the WCS
  25.    (defun UCS2WCSMatrix ()
  26.      (vlax-tmatrix
  27.        (append
  28.          (mapcar
  29.           '(lambda (vector origin)
  30.            (append (trans vector 1 0 t) (list origin))
  31.          )
  32.          (list '(1 0 0) '(0 1 0) '(0 0 1))
  33.          (trans '(0 0 0) 0 1)
  34.          )
  35.          (list '(0 0 0 1))
  36.        )
  37.      )
  38.    )
  39.    ;; transform objects from the WCS to the UCS
  40.    (defun WCS2UCSMatrix ()
  41.      (vlax-tmatrix
  42.        (append
  43.          (mapcar
  44.           '(lambda (vector origin)
  45.            (append (trans vector 0 1 t) (list origin))
  46.          )
  47.          (list '(1 0 0) '(0 1 0) '(0 0 1))
  48.          (trans '(0 0 0) 1 0)
  49.          )
  50.          (list '(0 0 0 1))
  51.        )
  52.      )
  53.    )
  54.    (if ss
  55.      (progn
  56.        (repeat (setq n (sslength ss))
  57.          (setq ent (ssname ss (setq n (1- n))))
  58.          (vla-TransformBy (vlax-ename->vla-object ent) (UCS2WCSMatrix))
  59.          (vla-getboundingbox (vlax-ename->vla-object ent) 'minpoint 'maxpoint)
  60.          (vla-TransformBy (vlax-ename->vla-object ent) (WCS2UCSMatrix))
  61.          (setq minpt (vlax-safearray->list minpoint))
  62.          (setq maxpt (vlax-safearray->list maxpoint))
  63.          (setq minptlst (cons minpt minptlst))
  64.          (setq maxptlst (cons maxpt maxptlst))
  65.        )
  66.        (setq minptbbx (caar (vl-sort minptlst '(lambda (a b) (< (car a) (car b))))))
  67.        (setq minptbby (cadar (vl-sort minptlst '(lambda (a b) (< (cadr a) (cadr b))))))
  68.        (setq minptbbz (caddar (vl-sort minptlst '(lambda (a b) (< (caddr a) (caddr b))))))
  69.        (setq maxptbbx (caar (vl-sort maxptlst '(lambda (a b) (> (car a) (car b))))))
  70.        (setq maxptbby (cadar (vl-sort maxptlst '(lambda (a b) (> (cadr a) (cadr b))))))
  71.        (setq maxptbbz (caddar (vl-sort maxptlst '(lambda (a b) (> (caddr a) (caddr b))))))
  72.        (setq minptbb (list minptbbx minptbby minptbbz))
  73.        (setq maxptbb (list maxptbbx maxptbby maxptbbz))
  74.      )
  75.    )
  76.    (list minptbb maxptbb)
  77. )
  78. (if (= 0 (getvar 'worlducs))
  79.    (progn
  80.      (command "_.UCS" "_W")
  81.      (command "_.PLAN" "")
  82.      (setq ucsf t)
  83.    )
  84.    (command "_.PLAN" "")
  85. )
  86. (setq osm (getvar 'osmode))
  87. (setvar 'osmode 0)
  88. (setq cec (getvar 'cecolor))
  89. (setvar 'cecolor "3")
  90. (prompt "\nSelect OPEN "STRAIGHT" LWPOLYLINES that lie in plane parallel to WCS - PROJECTION LWPOLYLINES (NOT ELEVATION)...")
  91. (setq ss1 (ssget (list '(0 . "LWPOLYLINE") '(-4 . "<or") '(70 . 0) '(70 . 128) '(-4 . "or>") '(-4 . "<or") '(210 0.0 0.0 1.0) '(210 0.0 0.0 -1.0) '(-4 . "or>") '(-4 . "<not") '(-4 . "<>") '(42 . 0.0) '(-4 . "not>"))))
  92. (while (or
  93.           (not ss1)
  94.           (vl-every '(lambda ( x ) (not (equal (caddar (bbucs (ssadd x))) (caddr (cadr (bbucs (ssadd x)))) 1e-6))) (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss1))))
  95.         )
  96.    (prompt "\nEmpty sel.set... Please reselect again...")
  97.    (setq ss1 (ssget (list '(0 . "LWPOLYLINE") '(-4 . "<or") '(70 . 0) '(70 . 128) '(-4 . "or>") '(-4 . "<or") '(210 0.0 0.0 1.0) '(210 0.0 0.0 -1.0) '(-4 . "or>") '(-4 . "<not") '(-4 . "<>") '(42 . 0.0) '(-4 . "not>"))))
  98. )
  99. (prompt "\nSelect LWPOLYLINES that lie in plane parallel to WCS - ELEVATION LWPOLYLINES (NOT PROJECTION)...")
  100. (setq ss2 (ssget (list '(0 . "LWPOLYLINE") '(-4 . "<or") '(210 0.0 0.0 1.0) '(210 0.0 0.0 -1.0) '(-4 . "or>"))))
  101. (while (not ss2)
  102.    (prompt "\nEmpty sel.set... Please reselect again...")
  103.    (setq ss2 (ssget (list '(0 . "LWPOLYLINE") '(-4 . "<or") '(210 0.0 0.0 1.0) '(210 0.0 0.0 -1.0) '(-4 . "or>"))))
  104. )
  105. (repeat (setq i (sslength ss1))
  106.    (setq lw (ssname ss1 (setq i (1- i))))
  107.    (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget lw))))
  108.    (setq sss (ssget "_F" pl (list '(0 . "LWPOLYLINE") '(-4 . "<or") '(210 0.0 0.0 1.0) '(210 0.0 0.0 -1.0) '(-4 . "or>"))))
  109.    (setq ssl (ssnamex sss))
  110.    (setq ssl (vl-remove-if '(lambda ( x ) (eq (cadr x) lw)) ssl))
  111.    (setq sspl (mapcar 'cadr (apply 'append (mapcar '(lambda ( x ) (vl-remove-if-not 'listp x)) ssl))))
  112.    (setq sspl (vl-sort sspl '(lambda ( a b ) (< (vlax-curve-getparamatpoint lw (vlax-curve-getclosestpointto lw (list (car a) (cadr a) (cdr (assoc 38 (entget lw)))))) (vlax-curve-getparamatpoint lw (vlax-curve-getclosestpointto lw (list (car b) (cadr b) (cdr (assoc 38 (entget lw))))))))))
  113.    (command "_.3DPOLY")
  114.    (foreach p sspl
  115.      (if (vl-some '(lambda ( x ) (if (vlax-curve-getparamatpoint x (list (car p) (cadr p) (cdr (assoc 38 (entget x))))) (setq e x))) (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss2))))
  116.        (command "_non" (list (car p) (cadr p) (cdr (assoc 38 (entget e)))))
  117.      )
  118.    )
  119.    (command "")
  120. )
  121. (*error* nil)
  122. )

 
HTH。,M、 R。
回复

使用道具 举报

10

主题

44

帖子

34

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 17:23:32 | 显示全部楼层
非常感谢marko_ribar
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-8-20 21:23 , Processed in 1.848272 second(s), 55 queries .

© 2020-2025 乐筑天下

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