乐筑天下

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

[编程交流] 将多段线投影到等高线li

[复制链接]

10

主题

44

帖子

34

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 16:24:53 | 显示全部楼层 |阅读模式
大家好

如果可能,解决附件中的问题
引导我
项目图纸
回复

使用道具 举报

17

主题

1274

帖子

25

银币

后起之秀

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

铜币
260
发表于 2022-7-5 16:32:55 | 显示全部楼层
 
层MCURVE上的等高线多段线的间隔为2.5。你想解决什么问题?
回复

使用道具 举报

10

主题

44

帖子

34

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 16:43:46 | 显示全部楼层
谢谢你的回复
我想将层“2222”中的pline投影到层“MCURVE”中的等高线上
在pline和等高线之间的交点处
如果等高线之间有多段线的顶点,则对其进行插值以找到Z值,并在绘制3dpolyline的末尾
回复

使用道具 举报

10

主题

44

帖子

34

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 16:46:52 | 显示全部楼层
很抱歉在附件lisp中使用了无意义的名称
我不是专业人士
我尝试whit attachment lisp
App相交曲线。lsp
项目图纸
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:51:41 | 显示全部楼层
将ssget“_CP”与intersectwith方法一起使用。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:02:54 | 显示全部楼层
一个简单的技巧是计算出inters点,因为你的对齐是0.0,pline是475.0,制作一个pline选择集,取1个pline,得到z,将你的对齐设置为z,然后一个简单的defun这是一个手动版本。
 
  1. (setq obj1 (vlax-ename->vla-object (car (entsel "\nPick 1st object"))))
  2. (while (setq obj2 (vlax-ename->vla-object (car (entsel "\nPick 2nd object"))))
  3. (setq elv (vla-get-elevation obj2))
  4. (vla-put-elevation obj1 elv)
  5. (setq pt (vlax-invoke obj1 'intersectWith obj2 acExtendNone))
  6. (alert (strcat "X=" (rtos (car pt) 2 2)  "\nY=" (rtos (cadr pt) 2 2) "\nZ=" (rtos elv 2 2)))
  7. )
回复

使用道具 举报

10

主题

44

帖子

34

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 17:10:00 | 显示全部楼层
尊敬的bigal您好:
如果你打开我的绘图和lisp文件,你会注意到我将在“MCURVE”层中绘制一条与等高线“Z”对齐的三维多段线
我可以在路线和等高线的交点处得到“Z”值,但当曲线之间路线的顶点时,我不能得到“Z”值
我们在land and civil3d中使用投影对象到曲面,我当然会做类似的事情,不使用曲面,但使用等高线和插值来实现对齐的所有顶点
非常感谢。
回复

使用道具 举报

17

主题

1274

帖子

25

银币

后起之秀

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

铜币
260
发表于 2022-7-5 17:13:56 | 显示全部楼层
为什么不从等高线创建一个曲面,然后将对象投影到等高线曲面?
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 17:23:23 | 显示全部楼层
不是百分之百确定,但你可以试试这个:
 
  1. (defun c:flw23pel-new ;fencelwpoly23dpolyelevations
  2. ( / *error* bbucs ucsf osm cec ss1 ss2 i lw pl sss ssl sspl e sss1 ssl1 sspl1 ppl1 z1 ppl2 pll par 3dpl lws )
  3. (vl-load-com)
  4. (defun *error* ( msg )
  5.    (if ucsf
  6.      (command "_.UCS" "_P")
  7.    )
  8.    (command "_.ZOOM" "_P")
  9.    (foreach e 3dpl
  10.      (if (vlax-erased-p e)
  11.        (entdel e)
  12.      )
  13.    )
  14.    (foreach e lws
  15.      (if (vlax-erased-p e)
  16.        (entdel e)
  17.      )
  18.    )
  19.    (if osm
  20.      (setvar 'osmode osm)
  21.    )
  22.    (if cec
  23.      (setvar 'cecolor cec)
  24.    )
  25.    (if msg
  26.      (prompt msg)
  27.    )
  28.    (princ)
  29. )
  30. (defun bbucs ( ss / UCS2WCSMatrix WCS2UCSMatrix n ent minpt maxpt minptlst maxptlst minptbbx minptbby minptbbz minptbb maxptbbx maxptbby maxptbbz maxptbb )
  31.    (vl-load-com)
  32.    ;; Doug C. Broad, Jr.
  33.    ;; can be used with vla-transformby to
  34.    ;; transform objects from the UCS to the WCS
  35.    (defun UCS2WCSMatrix ()
  36.      (vlax-tmatrix
  37.        (append
  38.          (mapcar
  39.           '(lambda (vector origin)
  40.            (append (trans vector 1 0 t) (list origin))
  41.          )
  42.          (list '(1 0 0) '(0 1 0) '(0 0 1))
  43.          (trans '(0 0 0) 0 1)
  44.          )
  45.          (list '(0 0 0 1))
  46.        )
  47.      )
  48.    )
  49.    ;; transform objects from the WCS to the UCS
  50.    (defun WCS2UCSMatrix ()
  51.      (vlax-tmatrix
  52.        (append
  53.          (mapcar
  54.           '(lambda (vector origin)
  55.            (append (trans vector 0 1 t) (list origin))
  56.          )
  57.          (list '(1 0 0) '(0 1 0) '(0 0 1))
  58.          (trans '(0 0 0) 1 0)
  59.          )
  60.          (list '(0 0 0 1))
  61.        )
  62.      )
  63.    )
  64.    (if ss
  65.      (progn
  66.        (repeat (setq n (sslength ss))
  67.          (setq ent (ssname ss (setq n (1- n))))
  68.          (vla-TransformBy (vlax-ename->vla-object ent) (UCS2WCSMatrix))
  69.          (vla-getboundingbox (vlax-ename->vla-object ent) 'minpoint 'maxpoint)
  70.          (vla-TransformBy (vlax-ename->vla-object ent) (WCS2UCSMatrix))
  71.          (setq minpt (vlax-safearray->list minpoint))
  72.          (setq maxpt (vlax-safearray->list maxpoint))
  73.          (setq minptlst (cons minpt minptlst))
  74.          (setq maxptlst (cons maxpt maxptlst))
  75.        )
  76.        (setq minptbbx (caar (vl-sort minptlst '(lambda (a b) (< (car a) (car b))))))
  77.        (setq minptbby (cadar (vl-sort minptlst '(lambda (a b) (< (cadr a) (cadr b))))))
  78.        (setq minptbbz (caddar (vl-sort minptlst '(lambda (a b) (< (caddr a) (caddr b))))))
  79.        (setq maxptbbx (caar (vl-sort maxptlst '(lambda (a b) (> (car a) (car b))))))
  80.        (setq maxptbby (cadar (vl-sort maxptlst '(lambda (a b) (> (cadr a) (cadr b))))))
  81.        (setq maxptbbz (caddar (vl-sort maxptlst '(lambda (a b) (> (caddr a) (caddr b))))))
  82.        (setq minptbb (list minptbbx minptbby minptbbz))
  83.        (setq maxptbb (list maxptbbx maxptbby maxptbbz))
  84.      )
  85.    )
  86.    (list minptbb maxptbb)
  87. )
  88. (if (= 0 (getvar 'worlducs))
  89.    (progn
  90.      (command "_.UCS" "_W")
  91.      (command "_.PLAN" "")
  92.      (setq ucsf t)
  93.    )
  94.    (command "_.PLAN" "")
  95. )
  96. (setq osm (getvar 'osmode))
  97. (setvar 'osmode 0)
  98. (setq cec (getvar 'cecolor))
  99. (setvar 'cecolor "3")
  100. (prompt "\nSelect OPEN "STRAIGHT" LWPOLYLINES that lie in plane parallel to WCS - PROJECTION LWPOLYLINES (NOT ELEVATION)...")
  101. (setq ss1 (ssget "_:L" (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>"))))
  102. (while (or
  103.           (not ss1)
  104.           (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))))
  105.         )
  106.    (prompt "\nEmpty sel.set... Please reselect again...")
  107.    (setq ss1 (ssget "_:L" (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>"))))
  108. )
  109. (prompt "\nSelect LWPOLYLINES that lie in plane parallel to WCS - ELEVATION LWPOLYLINES (NOT PROJECTION)...")
  110. (setq ss2 (ssget (list '(0 . "LWPOLYLINE") '(-4 . "<or") '(210 0.0 0.0 1.0) '(210 0.0 0.0 -1.0) '(-4 . "or>"))))
  111. (while (not ss2)
  112.    (prompt "\nEmpty sel.set... Please reselect again...")
  113.    (setq ss2 (ssget (list '(0 . "LWPOLYLINE") '(-4 . "<or") '(210 0.0 0.0 1.0) '(210 0.0 0.0 -1.0) '(-4 . "or>"))))
  114. )
  115. (repeat (setq i (sslength ss1))
  116.    (setq lw (ssname ss1 (setq i (1- i))))
  117.    (setq lws (cons lw lws))
  118.    (entdel lw)
  119. )
  120. (foreach lw lws
  121.    (entdel lw)
  122.    (setq pl (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= (car x) 10)) (entget lw))))
  123.    (entdel lw)
  124.    (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>"))))
  125.    (setq ssl (ssnamex sss))
  126.    (setq sspl (mapcar 'cadr (apply 'append (mapcar '(lambda ( x ) (vl-remove-if-not 'listp x)) ssl))))
  127.    (entdel lw)
  128.    (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))))))))))
  129.    (entdel lw)
  130.    (setq sss1 (ssget "_F" (list (car pl) (mapcar '+ (car sspl) (mapcar '* (mapcar '- (car pl) (car sspl)) (list 1e+3 1e+3)))) (list '(0 . "LWPOLYLINE") '(-4 . "<or") '(210 0.0 0.0 1.0) '(210 0.0 0.0 -1.0) '(-4 . "or>"))))
  131.    (if sss1
  132.      (progn
  133.        (setq ssl1 (ssnamex sss1))
  134.        (setq sspl1 (mapcar 'cadr (apply 'append (mapcar '(lambda ( x ) (vl-remove-if-not 'listp x)) ssl1))))
  135.        (setq sspl1 (vl-sort sspl1 '(lambda ( a b ) (< (distance (car pl) a) (distance (car pl) b)))))
  136.        (setq ppl1 (car sspl1))
  137.        (setq ppl1 (mapcar '+ '(0 0) ppl1))
  138.        (if ppl1
  139.          (setq z1 (+ (cdr (assoc 38 (entget (ssname (ssget "_C" ppl1 ppl1) 0)))) (* (- (cdr (assoc 38 (entget (ssname (ssget "_C" (car sspl) (car sspl)) 0)))) (cdr (assoc 38 (entget (ssname (ssget "_C" ppl1 ppl1) 0))))) (/ (distance (car sspl) (car pl)) (distance (car sspl) (mapcar '+ '(0 0) ppl1))))))
  140.          (setq z1 0.0)
  141.        )
  142.        (setq pll (cons (list (caar pl) (cadar pl) z1) pll))
  143.      )
  144.    )
  145.    (foreach p (cdr pl)
  146.      (entdel lw)
  147.      (setq par (vlax-curve-getparamatpoint lw (list (car p) (cadr p) (cdr (assoc 38 (entget lw))))))
  148.      (setq ppl1 (last (vl-remove-if '(lambda ( x ) (minusp (- par (vlax-curve-getparamatpoint lw (vlax-curve-getclosestpointto lw (list (car x) (cadr x) (cdr (assoc 38 (entget lw))))))))) sspl)))
  149.      (entdel lw)
  150.      (setq ppl1 (mapcar '+ '(0 0) ppl1))
  151.      (if (and ppl1 (not (equal ppl1 (last pl) 1e-6)))
  152.        (progn
  153.          (setq sss1 (ssget "_F" (list ppl1 (mapcar '+ ppl1 (mapcar '* (mapcar '- p ppl1) (list 1e+3 1e+3)))) (list '(0 . "LWPOLYLINE") '(-4 . "<or") '(210 0.0 0.0 1.0) '(210 0.0 0.0 -1.0) '(-4 . "or>"))))
  154.          (setq ssl1 (ssnamex sss1))
  155.          (setq sspl1 (mapcar 'cadr (apply 'append (mapcar '(lambda ( x ) (vl-remove-if-not 'listp x)) ssl1))))
  156.          (setq sspl1 (vl-sort sspl1 '(lambda ( a b ) (< (distance (mapcar '+ '(0 0) ppl1) a) (distance (mapcar '+ '(0 0) ppl1) b)))))
  157.          (setq ppl2 (cadr sspl1))
  158.          (setq ppl2 (mapcar '+ '(0 0) ppl2))
  159.          (if ppl2
  160.            (setq z1 (+ (cdr (assoc 38 (entget (ssname (ssget "_C" ppl1 ppl1) 0)))) (* (- (cdr (assoc 38 (entget (ssname (ssget "_C" ppl2 ppl2) 0)))) (cdr (assoc 38 (entget (ssname (ssget "_C" ppl1 ppl1) 0))))) (/ (distance ppl1 p) (distance (mapcar '+ '(0 0) ppl1) ppl2)))))
  161.            (setq z1 0.0)
  162.          )
  163.          (setq pll (cons (list (car p) (cadr p) z1) pll))
  164.        )
  165.      )
  166.    )
  167.    (entdel lw)
  168.    (setq sspl (vl-sort (append sspl pll) '(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))))))))))
  169.    (entdel lw)
  170.    (setq pll nil)
  171.    (command "_.3DPOLY")
  172.    (foreach p sspl
  173.      (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))))
  174.        (command "_non" (list (car p) (cadr p) (cdr (assoc 38 (entget e)))))
  175.        (command "_non" p)
  176.      )
  177.    )
  178.    (command "")
  179.    (setq 3dpl (cons (entlast) 3dpl))
  180.    (entdel (entlast))
  181. )
  182. (*error* nil)
  183. )
回复

使用道具 举报

10

主题

44

帖子

34

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-5 17:28:50 | 显示全部楼层
嘻哈嘻哈
 
你好,伟大的马尔科
这些都是你帮我得到的
谢谢你,大个子
我感谢所有人
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 13:09 , Processed in 0.575147 second(s), 72 queries .

© 2020-2025 乐筑天下

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