明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 255|回复: 9

[提问] 请教 是否有WBLOCK增强版的插件 可以自动命名文件?

  [复制链接]
发表于 前天 17:28 | 显示全部楼层 |阅读模式
本帖最后由 开心无惧 于 2025-4-27 17:55 编辑

请教大家
wblock 对话框中文件命名每次输入感觉比较麻烦,

文件名称和路径参考上次的执行,有没有比较好的方法或者其它软件,
下面是希望的操作过程

功能:优化WBLOCK命令,保存文件地址默认用上次的路径,
文件命名自动检测同名文件,数字后缀自动添加编号,非数字后缀自动添加编号“1”;

目的:为了更方便的从已打开的CAD图形中提取局部图形保存为独立的DWG文件

具体功能和步骤如下
1以WBLOCK命令为基础进行优化提升,


2在打开的CAD图纸中,可以先选择若干对象再输入快捷命令RR2,

也可以先输入RR2然后命令行提示选择若干对象,
这两种选择方式都支持所有标准选择方式(窗口选择、交叉选择、点选等)

3接着上一步骤后立即弹出窗口,此窗口是为了对已选择的CAD对象的保存路径进行设置和

对CAD文件名称命名进行设置(此窗口非打开dwg图形用的对话框)

3.1保存路径设置的原则
a首次情况:文件保存路径默认为与已打开的CAD图纸相同路径,也允许可以手动再改为其它路径;
b非首次情况:文件保存路径默认为与上一次文件保存路径,同理也允许可以手动再改为其它路径;

3.2CAD文件名称命名设置原则
a首次情况:第一次执行此代码,此时文件名称输入栏显示为空,此保存窗口会默认为是dwg格式的CAD图形文件;
然后按a.1和a.2两种情况处理

a.1手动输入文件名称:允许用户输入文件名,注意文件名都不包括文件格式后缀“
.dwg”;
a.2自动输入文件名称:单击文件保存路径中的其它dwg图形文件后,

则在输入框中自动用刚刚单击选择的那个dwg图形文件名称,
且后缀数字序号自动加1处理,如果原文件名称后缀没有序号自动补充数字1;

使用示例1:
    首次保存
    输入DWG文件名称:苹果
    实际DWG文件名称:苹果1
使用示例2:
    首次保存
    输入DWG文件名称(单击文件保存路径中的其它dwg图形文件):苹果1
    实际DWG文件名称:苹果2

b非首次情况:之前使用此代码保存过其它DWG图形,

此时文件名称输入栏显示为上一次保存的dwg图形文件名称,且后缀数字序号自动加1处理;

b.1手动输入文件名称:允许用户修改文件名;
b.2自动输入文件名称:单击文件保存路径中的其它dwg图形文件后,

则在输入框中自动用刚刚单击选择的那个dwg图形文件名称,且后缀数字序号自动加1处理;

使用示例3:
非首次保存
    自动建议:苹果2
非首次保存且存在同名文件时
    输入名称:苹果2(已存在)
    自动保存:苹果3

c文件命名原则补充:
自动编号系统自动检测同名文件
编号递增逻辑:
苹果A1 → 苹果A2,
支持纯字母名称自动添加编号(如苹果" → "苹果1")

4基点默认值为所选择图形最小外包矩形的左下角点的坐标;

5插入单位设置为毫米mm;











回复

使用道具 举报

发表于 前天 17:47 | 显示全部楼层
要求齐全,合情合理。
回复 支持 反对

使用道具 举报

发表于 前天 18:21 | 显示全部楼层
本帖最后由 llsheng_73 于 2025-4-27 18:26 编辑

第2点先选择后输入命令或者反过来,这个很简单,直接执行ssget就可以,比如(defun c:tt(/ s)(and(setq s(ssget))(alert(strcat"已选择"(itoa(sslength s))"个对象")))),不管先命令还是先选择都行
第3点通过getfiled可以解决,当然还需要通过一个东西比如ldata来把当前这个图运行程序后最终所选定的文件夹给记录下来,如果没有就直接使用当前图形的路径
同理最后一次所保存的文件名也需要记录下来
文件名自动加序号的的问题,可以通过VL-DIRECTORY-FILES得到文件夹下指定名字的文件列表,然后数个数就简单了
第4点肯定是多余的,因为又不另外增加图框什么的,直接通过WBLOCK命令行方式运行就行了,这时不会再出现这个命令的对话框,把第三步的得到的文件路径和文件名给写上就行了
第5点,可以通过cad后台打开刚保存的文件,对它的DOC对象执行SetVariable方法来设置系统变量。
至于能不能在当前DWG设置好这个变量后,再通过wblock导出的文件,这个系统变量是否被同步保存,需要实践,感觉是可以的
回复 支持 反对

使用道具 举报

发表于 前天 18:29 | 显示全部楼层
改用C#,然后只需要深度克隆,
因为C#没有跨文档限制.
回复 支持 反对

使用道具 举报

发表于 前天 18:45 | 显示全部楼层
本帖最后由 llsheng_73 于 2025-4-27 18:46 编辑

LISP也可以跨文档,比较有效的是另外创建一个cad进程,通过它来收拾其它文档,只是创建对象这一步通常会卡一下,不宜反复搞这一步,可以一开始搞好,然后一直使用它
(setq *ACAD1(vlax-create-object"AutoCAD.application"))
#<VLA-OBJECT IAcadApplication 109c2294>
_$ fi
"C:\\Users\\Administrator\\Desktop\\控制点.dwg"
_$ (setq doc (vlax-invoke-method(vlax-get-property *ACAD1 'documents)'open fi))
#<VLA-OBJECT IAcadDocument 10717374>
_$ (vla-SetVariable doc "insunits" 4)
nil
_$ (vla-getVariable doc "insunits")
#<variant 2 4>
_$ (vla-close doc)
nil
_$ (setq doc (vlax-invoke-method(vlax-get-property *ACAD1 'documents)'open fi))
#<VLA-OBJECT IAcadDocument 1071771c>
_$ (vla-getVariable doc "insunits")
#<variant 2 4>
_$ (vla-quit *ACAD1)
nil
_$
回复 支持 反对

使用道具 举报

发表于 前天 22:36 | 显示全部楼层
全部都由程序处理的,没必要开多文档,代码不需要“看见”图形,用DBX更方便。
回复 支持 反对

使用道具 举报

发表于 昨天 08:26 | 显示全部楼层
这个功能我可以写 qq 562860217
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 10:19 | 显示全部楼层
llsheng_73 发表于 2025-4-27 18:21
第2点先选择后输入命令或者反过来,这个很简单,直接执行ssget就可以,比如(defun c:tt(/ s)(and(setq s(ss ...

非常感谢
非常感谢
非常感谢
回复 支持 反对

使用道具 举报

发表于 昨天 10:48 | 显示全部楼层
要求齐全,合情合理。 标记备用
回复 支持 反对

使用道具 举报

发表于 昨天 12:17 | 显示全部楼层
kozmosovia 发表于 2025-4-27 22:36
全部都由程序处理的,没必要开多文档,代码不需要“看见”图形,用DBX更方便。

DBX无法设置系统变量,不知道在当前图形设置好系统变量INSUNIT的情况下,导出的图形或者直接通过DBX保存的dwg,这个系统变量同样有效
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-29 01:12 , Processed in 0.544398 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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