明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2767|回复: 7

怎样用vba实现批量实现寻找一批cad文件中的最大封闭区域并提取出来

[复制链接]
发表于 2007-6-23 15:01:00 | 显示全部楼层 |阅读模式

怎样用vba实现批量实现寻找一批cad文件中的最大封闭区域并提取出来?

我遇到一个问题、,现在有大量的设计图纸,我要把它们的最大封闭区域找出来,并存成另外一个文件,最大封闭区域使用线段或多线段画成的,

图中的还有好多辅助的文字,。。

谢谢、!

 楼主| 发表于 2007-6-23 15:20:00 | 显示全部楼层

上图中,上面的图形式设计好的cad图形,现在我要去掉一些辅助信息、,只得到下面的图形,并保存,怎么弄?谢谢,如果一个个删除,也可以,但是图很多,工作量太大了、!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2007-6-24 12:15:00 | 显示全部楼层

这也是我正在探讨的问题.

图纸源的问题

1、去掉辅助信息比较好解决,只循环实体线(line、pline)即可。

2、一百个制图的人就有一百个习惯,有的人画图比较规矩,封闭做的比较好,有的人则画图根本不封闭,这是用VBA编程的一个难点。

 楼主| 发表于 2007-6-25 15:17:00 | 显示全部楼层

那怎么办呢?

楼上,你说的第一点怎么实现,我还没做过,这几天再看,我想用vb做个程序,然后批量打开一个文件夹中的所有dwg文件内,然后寻找里面的标注,文字信息全部删除,然后再找出里面的最大封闭图形,或者最大面域,进行填充,可以实现吧3

 楼主| 发表于 2007-6-27 13:37:00 | 显示全部楼层

遍历cad文件中的所有对象怎么做呢?比如文件中的线条、文字、标注、圆、多义线等。。。

  Dim acadapp As Object      '建立Application对象
  Dim acaddoc As Object      '建立Document对象
  Dim mospace As Object      '建立Model Space 对象
  On Error Resume Next
  Set acadapp = GetObject("autocad.application")       '若AutoCad已启动 , 则直接得到
  If Err Then
    Err.Clear
    Set acadapp = CreateObject("autocad.application")   '若AutoCad未启动,则运行它
    If Err Then
      MsgBox Err.Description
      Exit Sub
    End If
  End If
  acadapp.Visible = True                  '使AutoCad可见
  Set acaddoc = acadapp.ActiveDocument    '设acaddoc为当前图形文件
  Set mospace = acaddoc.ModelSpace        '设mospace为当前图形文件的模型空间
 
  acadapp.Top = 100   '设置AutoCad窗口的位置
  acadapp.Left = 200
  acadapp.Height = 768  '调整AutoCad窗口的大小
  acadapp.Width = 1024
  acadapp.Caption = "my first application" '设置AutoCad窗口的

发表于 2007-6-27 16:10:00 | 显示全部楼层
应该充分利用选择集
 楼主| 发表于 2007-6-27 17:15:00 | 显示全部楼层

搞定,删除我不要的,就可以

 Dim ObjNum As Long
  Dim Center(0 To 2) As Double
  Dim magnification As Double
  Center(0) = 3: Center(1) = 3: Center(2) = 0
  magnification = 10
  acaddoc.Application.Documents.Open App.Path & "\sample.dwg"
  Set acaddoc = acadapp.ActiveDocument   '设acaddoc为当前'图形文件
  Set MoSpace = acaddoc.ModelSpace
  Set paSpace = acaddoc.PaperSpace
  ObjNum = paSpace.Count
  ObjNum = MoSpace.Count
  For Each ent In MoSpace
   Debug.Print ent.entityname
   If ent.entityname <> "AcDbLine" Then
    ent.Delete
    ZoomCenter Center, magnification
    'ent.Update
   End If
  Next
End Sub

但是我怎么把刚打开的图形移动到我的坐标原点呢?

 楼主| 发表于 2007-7-3 17:12:00 | 显示全部楼层

这几天忙别的了,今天又看了一下,还是不行,也就是还是不能找到最大封闭图形,并填充/

那位知道,来指各着

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

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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