明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1286|回复: 7

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

[复制链接]
发表于 2022-8-3 15:39:58 | 显示全部楼层 |阅读模式
本帖最后由 guosheyang 于 2022-8-3 18:52 编辑


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-8-3 15:55:39 | 显示全部楼层
如果 已经使用,能删除么?
 楼主| 发表于 2022-8-3 15:56:53 | 显示全部楼层
自贡黄明儒 发表于 2022-8-3 15:55
如果 已经使用,能删除么?

好像不行的   要空的才行
 楼主| 发表于 2022-8-3 16:06:23 | 显示全部楼层
刚才试了下   没用的空样式  直接用pu命令也是可以清理掉的
发表于 2024-1-8 15:59:56 | 显示全部楼层
自贡黄明儒 发表于 2022-8-3 15:55
如果 已经使用,能删除么?

黄工好,请教怎么一键将文件standard样式置为当前(文字、标注、表格、多重引线),感谢

点评

(vla-put-ActiveDimStyle **DOC** (vla-item (vla-get-DimStyles **DOC**) "standard"))  发表于 2024-1-9 07:11
发表于 2024-1-9 07:08:58 | 显示全部楼层
月下闲人 发表于 2024-1-8 15:59
黄工好,请教怎么一键将文件standard样式置为当前(文字、标注、表格、多重引线),感谢

(defun do2 (DimS)
    (if        (setq e (entsel "\n 拾取标注,设置为当前标注样式:"))
      (progn
        (setq e (car e))
        (princ "...当前标注样式为:")
        (princ
          (setq CurDim (vla-get-StyleName (vlax-ename->vla-object e)))
        )
        (vla-put-ActiveDimStyle **DOC** (vla-item DimS CurDim))
      )
    )
  )
发表于 2024-1-9 09:16:55 | 显示全部楼层
自贡黄明儒 发表于 2024-1-9 07:08
(defun do2 (DimS)
    (if        (setq e (entsel "\n 拾取标注,设置为当前标注样式:"))
      (progn

收到,非常感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 00:31 , Processed in 0.179774 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表