Kablamtron 发表于 2022-7-6 15:12:31

希望创建或修改El


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

BIGAL 发表于 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。把它放在一个独特的图层上,然后删除图层,如果你必须再次这样做。

Kablamtron 发表于 2022-7-6 15:46:11

解决了!
 
几个月来我没有太多时间来做这件事,但我完成了。
 
请随意检查/纠正我做错的任何事情。
 
在2002年效果很好,R14还没有尝试过其他的。
 

;ReCalculate Levs by Bradley Linscott
(prompt "type rlev to activate")
(defun *error* (msg)
(princ msg)
(princ)
)
(defun loop () ;loop
(setq singlepnt (entget (ssname pnts LoopCount))) ;get one point
(setq zcoord (cadddr (assoc 10 singlepnt))) ;get z co-ord
(setq zcoordstr (rtos zcoord 2 1))
(setq zcoordstr (cons 1 zcoordstr)) ;format z coordinate
(setq name (assoc 1 singlepnt)) ;get name
(entmod (subst zcoordstr name singlepnt)) ;update database
)
(defun c:rlev (/ txtstr pt1 pnts)
(prompt "select text")
(setq pnts (Ssget (List'(0 . "TEXT")))) ;selection set
(Setq SSL (Sslength pnts)) ;get length of ze selection set
(Setq LoopCount 0);Initialize loop counter
(Repeat SSL ;Loop
(loop)

(Setq LoopCount (1+ LoopCount)) ;Count Loop

) ; close repeat
) ; close defun

Lee Mac 发表于 2022-7-6 15:49:26

嗨,Kablamtron,
 
我可能会在你的Lisp程序中改变一些事情(没有什么不符合你的Lisp程序的地方,但我认为只有一些改进)
 

;ReCalculate Levs by Bradley Linscott
(prompt "type rlev to activate")

(defun c:rlev (/ ss i eLst zcoord)
(prompt "\nSelect Text >")
(if (setq ss (ssget (list (cons 0 "TEXT"))))
   (progn
   (setq i (sslength ss))
   (while (not (minusp (setq i (1- i))))
   (setq eLst (entget (ssname ss i))
         zcoord (rtos (cadddr (assoc 10 eLst)) 2 1))
   (entmod (subst (cons 1 zcoord)(assoc 1 eLst) eLst))))
   (princ "\n<!> No Text Selected <!> "))         
(princ)
)

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

Kablamtron 发表于 2022-7-6 16:12:28

很酷,谢谢你的建议,哈哈,它更紧凑了(还在学习!)。
 
再次感谢李

Lee Mac 发表于 2022-7-6 16:13:51

 
没问题,很乐意帮忙。
 
如果你对我的修改有任何疑问,尽管问
页: [1]
查看完整版本: 希望创建或修改El