明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2901|回复: 24

求开发一个批量合并dwg 格式文件 和批量拆分dwg 插件

[复制链接]
发表于 2025-8-26 12:52:32 | 显示全部楼层 |阅读模式
求开发一个批量合并dwg 格式文件 和批量拆分dwg 插件
回复

使用道具 举报

发表于 2025-9-1 19:36:50 | 显示全部楼层
(defun c:DWGTools (/)
  ;; 主功能选择菜单
  (initget "Insert Split")
  (setq choice (getkword "\n选择功能 [插入(I)/拆分(S)]: <I> "))
  (if (not choice) (setq choice "Insert"))

  (cond
    ((= choice "Insert") (c:BatchInsert))
    ((= choice "Split") (c:BatchSplit))
  )
  (princ)
)

(defun c:BatchInsert (/ pf path aa n i nn pp)
  ;; 批量插入功能 - 仅支持块插入
  (setvar "CMDECHO" 0)
  (setq pf (getfiled "选择要插入的DWG文件" "" "dwg" 8))
  (if (not pf) (progn (princ "\n未选择文件。") (exit)))

  (setq path (vl-filename-directory pf))
  (setq path (strcat path "\\"))
  (setq aa (vl-directory-files path "*.dwg" 1))
  (setq n (length aa))
  (setq i 0 nn 0)

  (prompt "\n正在按块插入图幅,请稍候...\n")

  (while (< i n)
    (setq pp (nth i aa))
    (setq fullpath (strcat path pp))
    (command "insert" fullpath "0,0" "1" "1" "0")
    (setq nn (1+ nn))
    (princ (strcat "第" (itoa nn) "个图块: " pp " \r"))
    (setq i (1+ i))
  )

  (command "zoom" "e" "zoom" "0.8x")
  (setvar "CMDECHO" 1)
  (princ (strcat "\n操作完成,共处理了 " (itoa nn) " 个文件。"))
  (princ)
)

(defun c:BatchSplit (/ winshell *avzzts-reg-root* *avzzts-reg-key* path folder root filename name ss ss1 i desktopPath)
  ;; 批量拆分功能 - 改进版本,默认保存到桌面
  (princ "-->图纸拆分导出")
  (setvar "cmdecho" 0)

  ;; 获取桌面路径
  (setq desktopPath (strcat (getenv "USERPROFILE") "\\Desktop\\"))

  (setq winshell (vlax-create-object "Shell.Application"))
  (setq *avzzts-reg-root* "HKEY_CURRENT_USER\\Software\\Autodesk\\avzztls")
  (setq *avzzts-reg-key* (strcat *avzzts-reg-root* "\\R" (vl-princ-to-string (atof (getvar "acadver")))))
  (setq path (vl-registry-read *avzzts-reg-key* "dwgsplitpath"))

  ;; 如果注册表中没有路径或路径无效,使用桌面路径
  (if (or (null path) (null (findfile path)))
    (progn
      (setq folder (strcat "分图_" (menucmd "M=$(edtime,$(getvar,date),YYYY-MM-DD)")))
      (setq path (strcat desktopPath folder))
      ;; 创建文件夹(如果不存在)
      (if (not (vl-file-directory-p path))
        (vl-mkdir path)
      )
    )
  )

  (setq path (strcat path "\\"))
  (setq filename (getfiled "请输入文件名" path "dwg" 1))

  ;; 如果用户取消了文件选择,退出函数
  (if (not filename)
    (progn
      (princ "\n操作已取消。")
      (setvar "cmdecho" 1)
      (return)
    )
  )

  (setq name (vl-filename-base filename))
  (setq path (vl-string-right-trim "\\" (vl-filename-directory filename)))
  (vl-registry-write *avzzts-reg-key* "dwgsplitpath" path)
  (setq path (strcat path "\\"))

  (princ "\n请选择需要分图的内容:")
  (setq i 0)
  (setq ss1 nil)
  (while (setq ss (ssget))
    (vl-cmdf "wblock"
             (strcat path name
                     "_" (menucmd "M=$(edtime,$(getvar,date),HH-MM-SS)")
                     "_" (itoa (setq i (1+ i)))
                     ".dwg")
             "" "0,0" ss "")
    (vl-cmdf "oops")
    (princ (strcat "\n已保存: " path name "_" (menucmd "M=$(edtime,$(getvar,date),HH-MM-SS)") "_" (itoa i) ".dwg"))
    (princ "\n请继续选择<右键结束>:")
    (setq ss1 ss)
  )

  (if ss1
    (progn
      (vlax-invoke-method winshell 'open path)
      (princ (strcat "\n所有文件已保存到: " path))
    )
  )

  (setvar "cmdecho" 1)
  (princ)
)

;; 提供独立命令别名
(defun c:BI () (c:BatchInsert))
(defun c:BS () (c:BatchSplit))

(princ "\nDWG工具已加载,命令: DWGTools (或 BI/BS 直接调用功能)")
(princ)
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2025-8-26 21:07:11 | 显示全部楼层
指尖 发表于 2025-8-26 20:41
批量合并和使用琴剑钣金插件

我是要自己开发一个
回复 支持 1 反对 0

使用道具 举报

发表于 2025-8-26 13:20:40 | 显示全部楼层
端上小板凳 等解决方案
回复 支持 反对

使用道具 举报

发表于 2025-8-26 13:47:45 | 显示全部楼层
不就是循环insert和wblock?问一下AI就写出来了。

点评

确实是也,把批量打印的图幅尺寸识别加入,再批量循环插insert和wblock  发表于 2025-10-28 08:59
回复 支持 反对

使用道具 举报

发表于 2025-8-26 15:02:28 | 显示全部楼层
拆分DWG的,天正就有备档拆图功能
回复 支持 反对

使用道具 举报

发表于 2025-8-26 16:16:44 | 显示全部楼层
本帖最后由 你有种再说一遍 于 2025-8-26 16:36 编辑

这个功能还是要依照需求来说,
1,是否布局作图?
是则需要视口转模型并且剪切视口外.
否则会缩放图框.
2,合并的话,是否还原为布局?
是则预留dbExtent边界到模型.
否则可以像CAD一样只提供模型部分.
3,是否批量?
是则选择C#/CPP语言,有跨文档功能.
否则Lisp只能实现半自动,或者关闭全部图纸再插入.
回复 支持 反对

使用道具 举报

发表于 2025-8-26 16:46:13 | 显示全部楼层
需求太模糊
回复 支持 反对

使用道具 举报

发表于 2025-8-26 17:07:32 | 显示全部楼层
很多批量打印插件,带有拆分DWG功能。
回复 支持 反对

使用道具 举报

发表于 2025-8-26 17:20:38 | 显示全部楼层
可以试试在论坛里面搜索
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-8-26 19:41:44 | 显示全部楼层
你有种再说一遍 发表于 2025-8-26 16:16
这个功能还是要依照需求来说,
1,是否布局作图?
是则需要视口转模型并且剪切视口外.

你有好的解决方案的不
回复 支持 反对

使用道具 举报

发表于 2025-8-26 19:59:22 | 显示全部楼层
论坛搜索下吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-26 18:10 , Processed in 0.233865 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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