guosheyang 发表于 2022-8-3 15:39:00

删除当前CAD文档中除STANDARD以外的所有多线样式



      给朋友们共享个自定义函数,删除当前CAD文档中除STANDARD以外所有未被使用的且非当前的多线样式 ,本代码功能也可以用pu命令来实现,这里仅作为供初学多线样式编码的学习资料,请大家测试 ,有问题请反馈   谢谢!
;删除当前CAD文档中除STANDARD以外的所有未被使用的且非当前多线样式
;参数:无                                    
;执行 (ygs_Keep_only_STD)                     
(defun ygs_Keep_only_STD(/ MLST_EN MLTY SS-ML YSM YSM2 YSMB)
;提取多线样式对象图元名
(setq mlst_en
   (mapcar 'cdr
   (vl-remove-if-not
'(lambda (x) (eq(car x)350))
   (dictsearch (namedobjdict) "ACAD_MLINESTYLE")
   )
)
)
(setq ss-ml(ssget "x" '((0 . "MLINE"))));多线图元选择集
(if ss-ml
(progn
(setq mlty(ss2tym ss-ml));多线图元
(setq ysmb nil);样式名表
(while(car mlty)
      (if(not(member(setq ysm(cdr(assoc 2(entget (car mlty))))) ysmb))
         (setq ysmb(cons ysm ysmb))      
      )
    (setq mlty(cdr mlty))
)
)
)
(setvar 'CMLSTYLE "STANDARD")
(foreach x mlst_en;删除standard以外的多线样式图元
(IF(and
      (/= (setq ysm2(cdr(assoc 2(entget x)))) "STANDARD");(car mlst_en)
      (not(member ysm2 ysmb))
   )
    (ENTDEL x)
)
)
)
;;;选择集转图元名表(ss是否存在 可加个if判断下)
(defun ss2tym(ss / i L)
(repeat (setq i (sslength ss))
   (setq L (cons (ssname ss (setq i (1- i))) L))
)
(reverse L)
)

自贡黄明儒 发表于 2022-8-3 15:55:00

如果 已经使用,能删除么?

guosheyang 发表于 2022-8-3 15:56:00


好像不行的   要空的才行

guosheyang 发表于 2022-8-3 16:06:00

刚才试了下   没用的空样式直接用pu命令也是可以清理掉的
页: [1]
查看完整版本: 删除当前CAD文档中除STANDARD以外的所有多线样式