dcl1214 发表于 2025-11-29 14:09:30

不打开图纸修改外部dwg图纸中属性标记的可见性

(defun $xiu-gai-wai-bu-dwg-ke-jian-xing$ (dwg   tag-invisible
            /   app      blocks
            dbx   doc      dwg-n
            dwl   invisible
            open-zttag      vrs
         )
          ;修改外部dwg的可见性,注意,1是不可见,0是可见
          ;($xiu-gai-wai-bu-dwg-ke-jian-xing$(zx-czwj "电线7.dwg" "")(list(cons "选项" 0)(cons "OPO" 0)(cons "OPS" 1)(CONS "备注哦" "1 是不可见,0是可见")))

(if (and dwg
   (findfile dwg)
   (setq dwg-name (vl-filename-base dwg))
   tag-invisible
   (setq tags (mapcar 'car tag-invisible))
      )
    (progn
      (setq dbx
       (vl-catch-all-apply
         'vla-getinterfaceobject
         (list (setq app (vlax-get-acad-object))
         (if (< (setq vrs (atoi (getvar 'acadver))) 16)
         "objectdbx.axdbdocument"
         (strcat "objectdbx.axdbdocument." (itoa vrs))
         )
         )
       )
      )
      (if (vl-catch-all-error-p dbx)
(progn (setq dbx nil) (setq app nil))
      )
      (if
(vl-mkdir
    (setq
      tmp(strcat
      (getenv "temp")
      "\\"
      (menucmd
      "M=$(edtime,$(getvar,date),YYYYMODDHHMMSSMSEC)"
      )
    )
    )
)      ;
   ()
   (progn
   (setq tmp nil)
   (print "在temp目录下创建文件夹失败了,无法做块同步操作了")
   )
      )
      (and
tmp
dwg-name
(vl-file-copy
    dwg
    (setq dwg-n (vl-filename-mktemp (strcat tmp "\\" "1.dwg")))
)      ;复制一个dwg再打开
(vl-file-rename
    dwg-n
    (setqdwg-n (strcat tmp "\\" dwg-name ".dwg")
    )
)
(setq dwg dwg-n)
(setq
    open-zt (vl-catch-all-error-p
      (vl-catch-all-apply 'vla-open (list dbx dwg-n))
      )
)
(not (vl-catch-all-error-p open-zt))
      )
      (if
(and (not (vl-catch-all-error-p open-zt))
       (setq doc dbx)
)
   (progn
   (SETQ blockS(vla-get-block
      (vl-catch-all-apply
          'vla-item
          (list (vla-get-layouts doc)
          "Model"
          )
      )
      )
   )
   (vlax-for object blockS
       (if
         (AND (= "AcDbAttributeDefinition"
         (vla-get-objectname object)
      )
      (setq tag (vla-get-tagstring object))
      (vl-position tag tags)
      (setq invisible (cdr (assoc tag tag-invisible)))
         )
    (progn
      (vl-catch-all-apply
      'vla-put-invisible
      (list
          object
          invisible
      )
      )
    )
       )
   )
   (vl-catch-all-apply
       'vla-saveas
       (list doc dwg-n)
   )
   )
   (princ(strcat"dwg打开失败了: "
      dwg-name
      ".dwg"
    )
   )
      )
      (if (= 'vla-object (type dbx))
(vlax-release-object dbx)
      )
    )
)
dwg-n
)

weimeng555 发表于 2025-11-29 17:02:47

大佬,经常使用的一个功能是,批量把dwg中的动态块变成普通块的功能,此不开图修改属性标记的是否可见功能,是否可以拿来运用实现不开图批量把动态块变成普通块的效果呢?

kozmosovia 发表于 2025-12-1 14:39:22

weimeng555 发表于 2025-11-29 17:02
大佬,经常使用的一个功能是,批量把dwg中的动态块变成普通块的功能,此不开图修改属性标记的是否可见功能 ...

肯定是可以的

dcl1214 发表于 2025-12-1 13:37:40

weimeng555 发表于 2025-11-30 17:11
试过了,貌似lisp不能跨文件操作,如果要批量还是算了,还是用旧的方法批量开图运行指定lsp

批量不是单个的循环吗?

zhoupeng220 发表于 2025-11-29 15:52:58

不错,感谢分享

tranque 发表于 2025-11-29 16:32:35

感谢分享,学习一下

weimeng555 发表于 2025-11-29 16:56:55


感谢分享,学习一下+1

dcl1214 发表于 2025-11-30 08:35:32

weimeng555 发表于 2025-11-29 17:02
大佬,经常使用的一个功能是,批量把dwg中的动态块变成普通块的功能,此不开图修改属性标记的是否可见功能 ...

你试试。。。。。

weimeng555 发表于 2025-11-30 17:11:55

dcl1214 发表于 2025-11-30 08:35
你试试。。。。。

试过了,貌似lisp不能跨文件操作,如果要批量还是算了,还是用旧的方法批量开图运行指定lsp

panliang9 发表于 2025-12-1 13:27:42

谢谢楼主分享!
页: [1] 2
查看完整版本: 不打开图纸修改外部dwg图纸中属性标记的可见性