ff1bb5uihgn.gif
给朋友们共享个自定义函数,删除当前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)
- )
|