删除南方CASS10.1批量分幅图框模板里的文字(如批注:)(是CAD插件程序,插件后缀.lsp)

复制下列代码到记事本中,另存并改文件后缀名为.lsp即可在CASS当插件使用

(defun c:BatchDelComments (/ *error* acadApp docs folder files file fullpath doc msp ent count)
  (vl-load-com)
  ;; 错误处理函数
  (defun *error* (msg)
    (if (and doc (not (vlax-object-released-p doc))) 
      (vla-close doc)
    )
    (princ (strcat "\n错误: " msg))
  )
  
  ;; 设置CAD应用对象
  (setq acadApp (vlax-get-acad-object))
  (setq docs (vla-get-documents acadApp))
  
  ;; 获取当前文件夹
  (setq folder (getvar 'dwgprefix))
  (if (not (wcmatch folder "*\\"))
    (setq folder (strcat folder "\\"))
  )
  
  ;; 获取DWG文件列表
  (setq files (vl-directory-files folder "*.dwg" 1))
  (if (not files)
    (progn 
      (alert "文件夹中未找到DWG文件!")
      (exit)
    )
  )
  
  (princ "\n开始批量删除附注文字...")
  (princ (strcat "\n找到 " (itoa (length files)) " 个DWG文件"))
  
  (setq count 0)
  (foreach file files
    (setq fullpath (strcat folder file))
    (princ (strcat "\n处理文件: " file))
    
    (setq doc (vl-catch-all-apply 'vla-open (list docs fullpath)))
    
    (if (vl-catch-all-error-p doc)
      (princ (strcat "\n◆ 无法打开文件: " file))
      (progn
        (setq msp (vla-get-modelspace doc))
        (vlax-for ent msp
          (if (wcmatch (vla-get-objectname ent) "*Text")
            (if (wcmatch (vla-get-textstring ent) "*附注*")
              (progn
                (vla-delete ent)
                (setq count (1+ count))
              )
            )
          )
        )
        
        ;; 保存处理后的文件
        (vla-saveas doc (strcat folder (vl-filename-base file) " .dwg"))
        (vla-close doc)
      )
    )
  )
  
  (alert (strcat "批量处理完成!\n总文件数: " (itoa (length files)) "\n删除附注数: " (itoa count)))
  (princ)
)

;; 清除旧定义防止冲突
(if (not (vl-catch-all-error-p (vl-catch-all-apply 'c:BatchDelComments nil)))
  (progn
    (vl-catch-all-apply 'vlax-put (list (vlax-get-acad-object) 'ActiveDocument (vla-get-activedocument (vlax-get-acad-object))))
    (princ "\nBatchDelComments命令已准备就绪,输入BatchDelComments运行。")
  )
)
(princ)

修改LSP插件以删除特定文字

将原代码中的*附注*修改为*批注*,以匹配需要删除的文字内容。以下是修改后的关键部分代码:

(if (wcmatch (vla-get-textstring ent) "*批注*")
  (progn
    (vla-delete ent)
    (setq count (1+ count))
  )
)

扩展匹配模式

若需要删除多种类型的注释文字,可使用多模式匹配:

(if (or (wcmatch (vla-get-textstring ent) "*批注*")
        (wcmatch (vla-get-textstring ent) "*说明*")
        (wcmatch (vla-get-textstring ent) "*注释*"))
  (vla-delete ent)
)

添加文字样式过滤

为防止误删其他文字,可增加文字样式过滤条件:

(if (and (wcmatch (vla-get-textstring ent) "*批注*")
         (eq (vla-get-StyleName ent) "Standard"))
  (vla-delete ent)
)

批量处理改进方案

对于大批量文件处理,建议添加进度显示和错误日志:

(setq logFile (open "C:\\DeleteLog.txt" "w"))
(foreach file files
  (write-line (strcat "Processing: " file) logFile)
  ;; 处理代码...
  (if (vl-catch-all-error-p doc)
    (write-line (strcat "Error with: " file) logFile)
  )
)
(close logFile)

使用前注意事项

  1. 备份原始DWG文件
  2. 在测试文件上验证效果
  3. 确认CAD已启用LSP文件加载
  4. 确保有足够的文件操作权限

加载插件方法

将修改后的LSP文件保存后,在CAD命令行输入:

(load "文件路径/BatchDelComments.lsp")

然后执行BatchDelComments命令运行程序。

你可能感兴趣的:(南方CASS,批量分幅图框模板,CAD插件.lsp)