乐筑天下

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

[编程交流] 希望创建或修改El

[复制链接]

5

主题

18

帖子

14

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-7-6 15:12:31 | 显示全部楼层 |阅读模式

 
我有多个。本地测量的dxf文件,我将它们全部移动到一个大dwg图形中的公共高程。
 
我当前使用的程序以单行文本框的形式将高程标记指定给我dxf输出时使用测量设备拍摄的点。不幸的是,这些高程标记都是错误的,因为测量程序只处理局部测量。
 
因此,我必须在autocad中将所有点移动到正确的高程,然后将其重新导入到测量程序中,然后再次dxf将其输出,以便这次高程标记是正确的。
 
我想知道是否可以制作一个autolisp来创建一行文字,该文字在点旁边具有高程,或者在移动当前标记后将其修改为正确的高程。
 
请记住,一些调查包含数千个这样的点。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 15:36:14 | 显示全部楼层
在使用lisp调整dwg中的高程后,只需重新标记dwg中的所有“点”。
Q1您使用Civil 3d吗?
问题2:这些点实际上是ACAD“点”吗?
 
如果是这样,则只需全局编辑点,以固定量调整z,如果在一个层上只需移动0,0,0,然后移动0,0,23.456,即将23.445添加到高度。
 
在lisp中,只需将Z值写入文本,插入点为点的x、y。把它放在一个独特的图层上,然后删除图层,如果你必须再次这样做。
回复

使用道具 举报

5

主题

18

帖子

14

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-7-6 15:46:11 | 显示全部楼层
解决了!
 
几个月来我没有太多时间来做这件事,但我完成了。
 
请随意检查/纠正我做错的任何事情。
 
在2002年效果很好,R14还没有尝试过其他的。
 
  1. ;ReCalculate Levs by Bradley Linscott
  2. (prompt "type rlev to activate")
  3. (defun *error* (msg)
  4. (princ msg)
  5. (princ)
  6. )
  7. (defun loop () ;loop
  8. (setq singlepnt (entget (ssname pnts LoopCount))) ;get one point
  9. (setq zcoord (cadddr (assoc 10 singlepnt))) ;get z co-ord
  10. (setq zcoordstr (rtos zcoord 2 1))
  11. (setq zcoordstr (cons 1 zcoordstr)) ;format z coordinate
  12. (setq name (assoc 1 singlepnt)) ;get name
  13. (entmod (subst zcoordstr name singlepnt)) ;update database  
  14. )
  15. (defun c:rlev (/ txtstr pt1 pnts)
  16. (prompt "select text")
  17. (setq pnts (Ssget (List'(0 . "TEXT")))) ;selection set
  18. (Setq SSL (Sslength pnts)) ;get length of ze selection set
  19. (Setq LoopCount 0)  ;Initialize loop counter
  20. (Repeat SSL ;Loop
  21. (loop)
  22. (Setq LoopCount (1+ LoopCount)) ;Count Loop
  23. ) ; close repeat
  24. ) ; close defun
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:49:26 | 显示全部楼层
嗨,Kablamtron,
 
我可能会在你的Lisp程序中改变一些事情(没有什么不符合你的Lisp程序的地方,但我认为只有一些改进)
 
  1. ;ReCalculate Levs by Bradley Linscott
  2. (prompt "type rlev to activate")
  3. (defun c:rlev (/ ss i eLst zcoord)
  4. (prompt "\nSelect Text >  ")
  5. (if (setq ss (ssget (list (cons 0 "TEXT"))))
  6.    (progn
  7.      (setq i (sslength ss))
  8.      (while (not (minusp (setq i (1- i))))
  9.    (setq eLst (entget (ssname ss i))
  10.          zcoord (rtos (cadddr (assoc 10 eLst)) 2 1))
  11.    (entmod (subst (cons 1 zcoord)(assoc 1 eLst) eLst))))
  12.    (princ "\n<!> No Text Selected <!> "))         
  13. (princ)
  14. )

 
我会在ssget中使用IF语句,以防用户不选择任何内容,这就不需要错误处理程序。
 
此外,我将使用while命令而不是repeat,因为repeat最多只能处理32767个实体(整数限制)的选择设置。
 
此外,您可以将大多数变量组合在一起,并在defun函数中对其进行本地化。
 
只有几点提示
 
希望这能有所帮助
 
干杯
 
回复

使用道具 举报

5

主题

18

帖子

14

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-7-6 16:12:28 | 显示全部楼层
很酷,谢谢你的建议,哈哈,它更紧凑了(还在学习!)。
 
再次感谢李
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 16:13:51 | 显示全部楼层
 
没问题,很乐意帮忙。
 
如果你对我的修改有任何疑问,尽管问
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 19:16 , Processed in 0.321323 second(s), 64 queries .

© 2020-2025 乐筑天下

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