AutoLISP代码修改协助:移除FM_RM3函数的偏移操作
修改AutoLISP脚本移除偏移操作,直接使用原始多段线坐标
以下是修改后的完整代码,以及关键修改点说明:
修改后的代码
(defun c:FM_RM3 (/ ss sset layer n en ent itm num fn fh obj pnt elv) ; 选择原始目标多段线 (setq ss (ssget "X" '((0 . "*LWPOLYLINE") (8 . "00---0--FM-RUIMTEDEFV")))) ; 确保图层0存在(若无需保留可删除此行) (or (tblsearch "LAYER" "0") (command "_.LAYER" "_New" "0" "")) (setq LAYER "0") ;start export coordinaten---------- (if ss (progn (setq itm 0 num (sslength ss)) ; 直接保存到DWG所在目录,文件名替换为txt格式 (setq fn (strcat (getvar 'DWGPREFIX) (vl-string-subst "txt" "dwg" (getvar 'DWGNAME)))) (if (/= fn nil) (progn (setq fh (open fn "w")) (while (< itm num) (setq en (ssname ss itm)) (setq ent (entget en)) (setq obj (cdr (assoc 0 ent))) (cond ((= obj "LWPOLYLINE") ; 输出多段线的Handle作为ID (princ (cdr (assoc 5 ent)) fh) (princ "\n" fh) ; 处理多段线高程,无高程则默认0.0 (setq elv (if (cdr (assoc 38 ent)) (cdr (assoc 38 ent)) 0.0)) ; 遍历输出所有顶点坐标 (foreach rec ent (if (= (car rec) 10) (progn (setq pnt (trans (cdr rec) 0 1)) (princ (strcat (rtos (car pnt) 2 8) "," (rtos (cadr pnt) 2 8) "," (rtos elv 2 8)) fh) (princ "\n" fh) ) ) ) ) (t nil) ) (setq itm (1+ itm)) ) (close fh) ) ) ) ) ;einde export coordinaten---------- (princ) );;defun (defun c:ompnl () (c:offsetmultiplepolylinestonewlayer) ) (princ "\nFM_RM3 loaded. Type FM_RM3 to run.") ;(princ "\nOffsetMultiplePolylinestoNewLayer loaded. Type OMPNL to run.") (princ) (vl-load-com)
关键修改点
- 移除偏移相关变量:删除了
offdist、direction、area1、area2等所有和偏移逻辑相关的局部变量 - 删除偏移操作代码块:完全移除了原代码中从
;start offset multi polylines----------到;einde offset multi polylines----------之间的所有偏移执行逻辑 - 修改导出数据源:导出坐标时直接读取原始图层
00---0--FM-RUIMTEDEFV的多段线,不再依赖偏移生成的图层0多段线 - 修正ID输出:将原代码中输出偏移后多段线Handle的逻辑,改为输出原始多段线的Handle(把
ENTITY替换为当前处理的ent) - 移除冗余删除操作:删除了原代码开头和结尾对图层0多段线的
erase命令,因为不再生成偏移多段线 - 简化高程判断:把原代码中冗余的高程判断逻辑简化为一行代码,保持功能不变
内容的提问来源于stack exchange,提问作者Fady Youssef
相关产品推荐
相关产品推荐

