求大神帮我修改下lisp代码,chatgpt写的在cad报错.
本帖最后由 轻尘 于 2023-3-9 12:54 编辑脚本需求:作为专业间提资,需要多重分解在0-GPS图层上的块,然后保留含有*vp*关键字图层上的图元并删除其余图元。chatgpt最终代码如下:
(defun unlock-all-layers() ;定义一个函数,解锁所有图层
(setq layers (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))) ;获取所有图层
(vla-foreach layer layers ;遍历所有图层
(vla-put-locked layer :vlax-false) ;将图层锁定状态改为false
)
)
(defun explode-gps-blocks() ;定义一个函数,多次分解在0-GPS图层上的块,直到不再有0-GPS图层的块
(setq blkref (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))) ;获取当前文档中所有块参照
(setq blkrefcount (vla-get-count blkref)) ;获取块参照数量
(setq gpslayer (vl-catch-all-apply 'vla-getlayer (list "0-GPS"))) ;获取名为"0-GPS"的图层
(setq i 0) ;初始化计数器i
(while (< i blkrefcount) ;循环遍历所有块参照
(setq curblkref (vla-item blkref i)) ;获取当前块参照
(if (eq (vla-get-layer curblkref) gpslayer) ;判断当前块参照是否在"0-GPS"图层上
(progn ;如果在"0-GPS"图层上
(vl-catch-all-apply 'vla-explode (list curblkref)) ;执行块参照分解操作
(setq i -1) ;将计数器i设为-1,下一轮循环重新开始
)
)
(setq i (+ i 1)) ;计数器i加1
)
)
(defun delete-objects-without-vp() ;定义一个函数,删除不含有vp关键字的图层上的图元对象
(setq layers (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))) ;获取所有图层
(vla-foreach layer layers ;遍历所有图层
(setq layername (vla-get-name layer)) ;获取图层名
(if (not (vl-string-search "vp" layername)) ;判断图层名中是否含有"vp"关键字
(progn ;如果不含有"vp"关键字
(setq objects (vla-get-objects layer)) ;获取当前图层上的所有图元对象
(vla-foreach obj objects ;遍历所有图元对象
(vla-delete obj)) ;删除当前图元对象
)
)
)
)
(unlock-all-layers) ;解锁所有图层
(repeat 100 ;执行100次以下操作
(explode-gps-blocks) ;多次分解在0-GPS图层上的块,直到不再有0-GPS图层的块
)
(delete-objects-without-vp) ;删除不含有vp关键字的图层上的图元对象
试试,先保存图哈,不保证不崩溃
(defun c:tt (/ allx ss n)
(defun allx (blkobj / lst lst1)
(setq lst (vlax-safearray->list
(vlax-variant-value (vla-explode blkobj))
)
)
(vla-delete blkobj)
(foreach n lst
(if (equal (vla-get-ObjectName n) "AcDbBlockReference")
(allx n)
(if (null (vl-string-search "vp" (vla-get-layer n)))
(vla-delete n)
)
)
)
)
(setq ss (ssget "x" '((0 . "INSERT") (8 . "0-GPS"))))
(repeat (setq n (sslength ss))
(setq blkobj (vlax-ename->vla-object (ssname ss (setq n (1- n)))))
(allx blkobj)
)
)
牛逼,我们落伍了 告诉它运行错误,修改看看 wzg356 发表于 2023-3-8 17:23
告诉它运行错误,修改看看
试了还是不行,我百度应该是括号的问题。 什么叫不删除关键字vp得图元 第一个defun确实少了个括号 ,内容没有测试 liuhe 发表于 2023-3-8 21:25
什么叫不删除关键字vp得图元
就是图层名中包含vp的图元例如P-VPIPE-W 轻尘 发表于 2023-3-9 10:16
就是图层名中包含vp的图元例如P-VPIPE-W
图元名是自动生成的编码。你怎么标记的?你说的是块名?扩展数据?上个图纸看看呗 liuhe 发表于 2023-3-9 19:57
图元名是自动生成的编码。你怎么标记的?你说的是块名?扩展数据?上个图纸看看呗
那句话,就一闪而过的纳闷
页:
[1]
2