乐筑天下

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

[编程交流] 复制最近的高程

[复制链接]

66

主题

180

帖子

119

银币

后起之秀

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

铜币
341
发表于 2022-7-5 16:36:22 | 显示全部楼层 |阅读模式
是否有lisp例程使其更容易?因为我是手工做的,太耗时了。。
 
有没有办法复制最近多段线的高程,并使其成为其他对象的高程,而不包含其高程或Z???
图纸2.dwg
回复

使用道具 举报

66

主题

180

帖子

119

银币

后起之秀

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

铜币
341
发表于 2022-7-5 17:03:38 | 显示全部楼层
我做了一个!嗯,至少我可以更快地工作。。。
如果有人能做得更好,我真的很乐意接受建议
 
  1. (vl-load-com)
  2. (defun c:qq    (/ elevations sss)
  3. (if (ssget '((0 . "*POLYLINE")))
  4.    (progn
  5.      (vlax-for    x (vla-get-activeselectionset
  6.            (vla-get-activedocument (vlax-get-acad-object))
  7.          )
  8.    (setq elevations (cons (vla-get-elevation x) elevations))
  9.      )
  10. (prompt "\n2nd Selection")
  11. (setq sss (ssget "_:L"))
  12. (command"_.CHANGE" sss "" "_P" "_E" (rtos (last elevations))
  13.       
  14.    
  15.      )
  16.     )
  17. )
  18. (princ)
  19. )
回复

举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:09:56 | 显示全部楼层
考虑以下因素:
  1. (defun c:fixelevation ( / dis dst elv ent enx idx lst src tmp vts )
  2.    (if (and (setq src (LM:ssget "\nSelect polylines with elevation: " '(((0 . "LWPOLYLINE")))))
  3.             (setq dst (LM:ssget "\nSelect polylines to modify: "      '("_:L" ((0 . "LWPOLYLINE")))))
  4.        )
  5.        (progn
  6.            (repeat (setq idx (sslength src))
  7.                (setq ent (ssname src (setq idx (1- idx)))
  8.                      lst (cons (cons ent (assoc 38 (entget ent))) lst)
  9.                )
  10.            )
  11.            (repeat (setq idx (sslength dst))
  12.                (setq enx (entget (ssname dst (setq idx (1- idx))))
  13.                      vts (mapcar 'cdr (vl-remove-if-not '(lambda ( x ) (= 10 (car x))) enx))
  14.                      dis (getmindistance (caar lst) vts)
  15.                      elv (cdar lst)
  16.                )
  17.                (foreach itm (cdr lst)
  18.                    (if (< (setq tmp (getmindistance (car itm) vts)) dis)
  19.                        (setq elv (cdr itm)
  20.                              dis tmp
  21.                        )
  22.                    )
  23.                )
  24.                (entmod (subst elv (assoc 38 enx) enx))
  25.            )
  26.        )
  27.    )
  28.    (princ)
  29. )
  30. (defun getmindistance ( ent lst / dis tmp )
  31.    (setq dis 1e308)
  32.    (foreach vtx lst
  33.        (if (< (setq tmp (distance vtx (vlax-curve-getclosestpointto ent vtx))) dis)
  34.            (setq dis tmp)
  35.        )
  36.    )
  37.    dis
  38. )
  39. ;; ssget  -  Lee Mac
  40. ;; A wrapper for the ssget function to permit the use of a custom selection prompt
  41. ;; msg - [str] selection prompt
  42. ;; arg - [lst] list of ssget arguments
  43. (defun LM:ssget ( msg arg / sel )
  44.    (princ msg)
  45.    (setvar 'nomutt 1)
  46.    (setq sel (vl-catch-all-apply 'ssget arg))
  47.    (setvar 'nomutt 0)
  48.    (if (not (vl-catch-all-error-p sel)) sel)
  49. )
  50. (vl-load-com) (princ)
回复

举报

66

主题

180

帖子

119

银币

后起之秀

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

铜币
341
发表于 2022-7-5 17:30:04 | 显示全部楼层
 
 
 
命令:fixelevation
 
选择具有高程的多段线:
选择要修改的多段线:;错误:没有函数定义:
VLAX-CURVE-GETCLOSESTPOINTTO
 
 
有一个错误,先生,我想更改的不是突出的多段线,而是文字(位置Z)、引线(顶点Z)、直线(星形/端点Z)。。。
回复

举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:46:30 | 显示全部楼层
请尝试上面更新的代码。
回复

举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 12:37 , Processed in 2.408954 second(s), 62 queries .

© 2020-2025 乐筑天下

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