CAD批量替换块(批量替换外图框)——CADc#(vba)插件实现

 如下图所示:文件夹内大量dwg图,统一把外图框替换为新的模板图框,可使用如下插件一键替换。

根据上图演示效果,处理14个文件用时13秒,平均不到1秒替换一个dwg文件的块。

使用说明:c#开发的dll插件,(特点:速度快,不用逐一打开待替换的DWG文件即可完成,支持普通块、属性块、含有属性字段的块,所有模型空间和图纸空间符合要求的块全部一键替换。)
1.打开包含新块的一个DWG图,命令行输入“netload”加载此dll插件后,输入“ kthzs ”运行此程序。
2.此插件要求新块基点位于新块最小矩形包围盒的左下角点,,否则会出现图形移位情况。
3.支持替换属性块和普通块,同时支持模型空间和多个图纸空间,一键替换所有块。

目前版本已升级到V5.5

 

以下为vba插件(特点为适用各种CAD版本,需逐一打开待替换的DWG文件)

使用方法:

第一步:
复制“XK新块.dwg”和 “替换块.dvb” 两个文件,
粘贴到需处理的cad图所在文件夹。
第二步:
打开“XK新块.dwg”(不用打开其他cad图),加载“替换块.dvb” 插件,运行即可。
(管理—>加载应用程序—>始终加载 —>运行vba宏 —>运行)


说明:插件会在cad原始图目录下新建一个“替换块”的文件夹,
新生成的cad图保存在这个文件夹中。
运行结束后关闭“XK新块.dwg”,
切记不保存此文件(不要修改此文件,否则可能影响下次使用)。
此插件要求cad原始图中所有图的图框大小相同。

附部分代码:

Sub 替换块各种尺寸()
'打开模板dwg文件,运行此插件
On Error Resume Next
Dim counter As Integer
counter = 0 '计数器,记录替换的文字数量
Dim fileName As String
Dim acadDoc As AcadDocument
Dim pt_one As Variant
Dim pt_two As Variant
Dim pt_one_old As Variant
Dim pt_two_old As Variant
Dim olddisx As Double
Dim olddisy As Double
Dim disx As Double
Dim disy As Double
Dim ent As AcadEntity
Dim str As String
Dim ptbase(2) As Double: ptbase(0) = 0: ptbase(1) = 0: ptbase(2) = 0:
Dim newblock As AcadBlock
Dim newblockname As String
Dim entb As AcadBlock
pt_one_old = ThisDrawing.GetVariable("extmin")
pt_two_old = ThisDrawing.GetVariable("extmax")
olddisx = pt_two_old(0) - pt_one_old(0)
olddisy = pt_two_old(1) - pt_one_old(1)
newblockname = "xk新块"
lj = ThisDrawing.path
Dim folderPath As String '新建个文件夹
folderPath = lj & "\替换块"
If Dir(folderPath, vbDirectory) = "" Then
        MkDir folderPath
        'MsgBox "文件夹 '更新块' 已成功创建在当前路径下。", vbInformation
End If
ljwj = Dir(lj & "\*.dwg")
zong = ThisDrawing.Name
fileName = Dir(lj & "\*.dwg")  '获取文件夹中的DWG文件
Set blockdoc = ActiveDocument '创建选择集,复制新块
Do While blockdoc.SelectionSets.Count > 0
     blockdoc.SelectionSets.Item(0).Delete
Loop
Set sel = blockdoc.SelectionSets.Add("mysel")
sel.Select acSelectionSetAll
If sel.Count > 0 Then
    Dim arr() As Object
    ReDim arr(sel.Count - 1)
    Dim newarr() As Object
    ReDim newarr(sel.Count - 1)
    For I = 0 To sel.Count - 1
       Set arr(I) = sel.Item(I)
    Next I
End If
Do While ljwj <> ""
    If ljwj <> zong Then
        Set acadDoc = Documents.Open(lj & "\" & ljwj)
        Set acadDoc = ActiveDocument
        pt_one = acadDoc.GetVariable("extmin")
        pt_two = acadDoc.GetVariable("extmax")
        disx = pt_two(0) - pt_one(0)
        disy = pt_two(1) - pt_one(1)
        For Each ent In acadDoc.ModelSpace '删除旧图框
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''省略部分代码
'''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        acadDoc.Close False
    End If
    ljwj = Dir()
Loop
MsgBox "共替换了 " & counter & " 个块,文件另存于: " & folderPath & Space(20) & vbCr
End Sub

另有版本二:针对不同图框大小,各种尺寸.dvb插件可实现自动缩放图框模版并插入到当前图。
作者:↓↓↓

CAD批量打印(可打印倾斜图框)程序最大的特点:能够可打印倾斜图框 本程序是参数一些资料根据自己的经历写出来,20120618完善了程序代码,降低了程序对图框的要求,同时完善了部分功能代码的算法,加快了运行速度,新增了完成工作后对本论坛的连接,见谅!请网友们继续........................ 注:程序只打印的图框仍然要求是,且名与第一次选择的图框名相同 请下载过的网友重新下载新的程序(含必须的文件及测试文件) 简 介 1、工程平面布置图批量打印程序(可含倾斜图框),运行前须先设置除“窗口范围”的其他打印参数。运行命令:batp 2、图框中的尺寸应为标准尺寸(mm),且包含光栅图像,中图像的四角位于图框边线的四角处。 3、运行MKWP选择图框边线上的一角点、分两次分别选择边线和内边线(也可以是图纸的最大打印范围边界线),即可生成图框中需要的光栅图像。 4、光栅图像应用的目的:能隐藏内图框不需要打印的内容,上述线型应为多段线,用户应根据自己的需要和用户图框特征,将此光栅图像与用户图框一起制作图框。 5、在制作含光栅图像的图框时,需要注意,先将光栅图像置顶,再将用户图框置于光栅图像之上,以免打印时被遮挡。 6、显示(隐藏)图像边框命令:wipeout→F→[显示(ON)/隐藏(OFF)])。 7、一次只能打印同一规格的的纸张,如果文件中有多个纸板规格,则可分次手工点选要打印的图框即可解决 欢迎大家试用,更希望对您的工作有帮助,由于水平有限,也是给急出来的,可能不尽完善,请试用的网友提出一些建设性的意见!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山水CAD插件定制

你的鼓励是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值