明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2266|回复: 8

[VBA][紧急求助]关于遍历多段线的问题!!!

[复制链接]
发表于 2006-9-29 23:05:00 | 显示全部楼层 |阅读模式

各位大侠好!

本人现有难题,请大家给予帮忙,在此多谢先!

我有很多AutoCAD2000的旧图,使用了参照的功能,

在旧版软件里面打印时,可以通过设置颜色来统一设置线宽,没有问题。

但是现在更新autocad版本到2006后,这个方法却不管用了,尽管设置了线宽,

但是,每次打印时,在参照块里面的多段线的线宽总是不正确,

导致打印出来的图形线宽粗细不一,非常难看。

现在,一直没有办法解决,

除了就是到每一个参照块里面把所有的多段线都打散(分解)了。

这是一个非常麻烦的工作,由于大量的图纸,这几乎就是不可行的方法了。

所以,本人在想,是否可以做个VBA程序,直接在图纸里面运行,

遍历图中的多段线和参照块,

自动将图纸中的多段线以及所有参照块中的多段线全部分解,这样就省事多了;

或者是否可以在文件目录中,放置编写好的一个小程序,不用打开CAD程序,

直接遍历文件夹中的文件,以及文件中的多段线,并分解,这样是为了避免操作参照块。

以上思路不知道是否可行,还请高人出来指点一二!

谢谢!

litsong@126.com

发表于 2006-9-30 09:37:00 | 显示全部楼层

Sub test()
On Error Resume Next

Dim MySet As AcadSelectionSet
Dim FilterType(0) As Integer
Dim FilterData(0) As Variant

ThisDrawing.SelectionSets.Item("MySet ").Delete

FilterType(0) = 0: FilterData(0) = "LWPOLYLINE,INSERT"
Set MySet = ThisDrawing.SelectionSets.Add("MySet ")
MySet.Select acSelectionSetAll, , , FilterType, FilterData

Dim i As Integer

Dim Bobj As Object

For i = 0 To MySet.Count - 1
If MySet(i).ObjectName = "AcDbPolyline" Then
MySet(i).Explode
MySet(i).Delete
Else
    For Each Bobj In ThisDrawing.Blocks(MySet(i).Name)
    If Bobj.ObjectName = "AcDbPolyline" Then
    Bobj.Explode
    Bobj.Delete
    End If
    Next
End If
Next

End Sub

 楼主| 发表于 2006-10-1 11:14:00 | 显示全部楼层

谢谢2楼的兄弟帮忙,给出了代码。

我想问一下,这个应该是不能对参考进行操作吧?

有些代码我还看不太懂

 楼主| 发表于 2006-10-1 11:23:00 | 显示全部楼层
能实现在一个文件里面对所有的参照文件都进行操作啊??
 楼主| 发表于 2006-10-1 11:29:00 | 显示全部楼层

还有,就是如果直接使用上面的代码,转而遍历文件夹中所有的*.DWG文件,然后在后台打开并运行宏代码操作。可是每次操作的文件高达2000,这样的话,系统能不能吃得消呢??真是头疼哦~~

 

发表于 2006-10-9 11:23:00 | 显示全部楼层
vba只能在cad环境下运行,不能在后台运行,要的话建议用vb写
发表于 2006-10-9 19:24:00 | 显示全部楼层

块参照多的情况下,也没有多大的影响

最近我刚刚对块进行炸开的操作,用的是过滤器的办法

这样就可以按照楼主的要求做了

 楼主| 发表于 2006-10-11 22:18:00 | 显示全部楼层

wyj7485

说的不错,我正在弄这个,是用VB来实现呢,呵呵

VBA在VB里面着实折腾不出来啊,

能不能提供点代码,以便研究研究啊?

小弟平时会用VB编写一些东西,CAD的vba不太懂,还请多多指教,

wyj7485还有楼上的兄弟chman

多谢先,呵呵

网上,好像针对这方面的资料也不多,真头疼噢:(

 楼主| 发表于 2006-10-12 20:59:00 | 显示全部楼层

显示找不到“AcadSelectionSet”???

请帮忙分析一下下面的代码,谢谢先~~

 

 

Dim obj_Acad As Object, obj_Doc As Object, obj_ModelSpace As Object  'Application对象、Document对象、ModelSpace对象
 
Public Sub AutoCADOpen(FileName As String)        '打开AutoCAD子程序
On Error Resume Next
Set obj_Acad = GetObject(, "autocad.application") '若AutoCAD已启动,则直接得到Application对象,建议先打开CAD程序
If Err Then
   Err.Clear
   On Error Resume Next
   Set obj_Acad = CreateObject("autocad.application") '若AutoCAD未启动,则运行AutoCAD程序
   If Err Then
      Err.Clear
      MsgBox "不能运行AutoCAD,请检查是否安装!", vbOKOnly, "警告!"
      Exit Sub
      End If
End If
obj_Acad.Visible = True   '设置AutoCAD为可见(或者在后台运行,不可见)
obj_Acad.Documents.open (FileName)  '打开AutoCAD图形文件
Set obj_Doc = obj_Acad.ActiveDocument '获得当前活动图形文件,即刚打开的图形文件
Set obj_ModelSpace = obj_Doc.ModelSpace '获得当前活动图形文件的模型空间

On Error Resume Next

Dim MySet As AcadSelectionSet
Dim FilterType(0) As Integer
Dim FilterData(0) As Variant

ThisDrawing.SelectionSets.Item("MySet ").Delete

FilterType(0) = 0: FilterData(0) = "LWPOLYLINE,INSERT"
Set MySet = ThisDrawing.SelectionSets.Add("MySet ")
MySet.Select acSelectionSetAll, , , FilterType, FilterData

Dim i As Integer

Dim Bobj As Object

For i = 0 To MySet.Count - 1
If MySet(i).ObjectName = "AcDbPolyline" Then
MySet(i).explode
MySet(i).Delete
Else
    For Each Bobj In ThisDrawing.Blocks(MySet(i).Name)
    If Bobj.ObjectName = "AcDbPolyline" Then
    Bobj.explode
    Bobj.Delete
    End If
    Next
End If
Next

End Sub

MsgBox "运行结束!", vbOKOnly, "工程1!"
End Sub

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

本版积分规则

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

GMT+8, 2024-11-26 23:20 , Processed in 0.174057 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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