wangyou236 发表于 2007-6-23 15:01:00

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

<p>怎样用vba实现批量实现寻找一批cad文件中的最大封闭区域并提取出来?</p><p>我遇到一个问题、,现在有大量的设计图纸,我要把它们的最大封闭区域找出来,并存成另外一个文件,最大封闭区域使用线段或多线段画成的,</p><p>图中的还有好多辅助的文字,。。</p><p></p><p>谢谢、!</p><p></p>

wangyou236 发表于 2007-6-23 15:20:00

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

兰州人 发表于 2007-6-24 12:15:00

<p>这也是我正在探讨的问题.</p><p>图纸源的问题</p><p>1、去掉辅助信息比较好解决,只循环实体线(line、pline)即可。</p><p>2、一百个制图的人就有一百个习惯,有的人画图比较规矩,封闭做的比较好,有的人则画图根本不封闭,这是用VBA编程的一个难点。</p>

wangyou236 发表于 2007-6-25 15:17:00

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

wangyou236 发表于 2007-6-27 13:37:00

<p>遍历cad文件中的所有对象怎么做呢?比如文件中的线条、文字、标注、圆、多义线等。。。</p><p>&nbsp; Dim acadapp As Object&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '建立Application对象<br/>&nbsp; Dim acaddoc As Object&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '建立Document对象<br/>&nbsp; Dim mospace As Object&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '建立Model Space 对象<br/>&nbsp; On Error Resume Next<br/>&nbsp; Set acadapp = GetObject("autocad.application")&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '若AutoCad已启动 , 则直接得到<br/>&nbsp; If Err Then<br/>&nbsp;&nbsp;&nbsp; Err.Clear<br/>&nbsp;&nbsp;&nbsp; Set acadapp = CreateObject("autocad.application")&nbsp;&nbsp; '若AutoCad未启动,则运行它<br/>&nbsp;&nbsp;&nbsp; If Err Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox Err.Description<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit Sub<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp; End If<br/>&nbsp; acadapp.Visible = True&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '使AutoCad可见<br/>&nbsp; Set acaddoc = acadapp.ActiveDocument&nbsp;&nbsp;&nbsp; '设acaddoc为当前图形文件<br/>&nbsp; Set mospace = acaddoc.ModelSpace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '设mospace为当前图形文件的模型空间<br/>&nbsp; <br/>&nbsp; acadapp.Top = 100&nbsp;&nbsp; '设置AutoCad窗口的位置<br/>&nbsp; acadapp.Left = 200<br/>&nbsp; acadapp.Height = 768&nbsp; '调整AutoCad窗口的大小<br/>&nbsp; acadapp.Width = 1024<br/>&nbsp; acadapp.Caption = "my first application" '设置AutoCad窗口的<br/></p>

青青20 发表于 2007-6-27 16:10:00

应该充分利用选择集

wangyou236 发表于 2007-6-27 17:15:00

<p>搞定,删除我不要的,就可以</p><p>&nbsp;Dim ObjNum As Long<br/>&nbsp; Dim Center(0 To 2) As Double<br/>&nbsp; Dim magnification As Double<br/>&nbsp; Center(0) = 3: Center(1) = 3: Center(2) = 0<br/>&nbsp; magnification = 10<br/>&nbsp; acaddoc.Application.Documents.Open App.Path &amp; "\sample.dwg"<br/>&nbsp; Set acaddoc = acadapp.ActiveDocument&nbsp;&nbsp; '设acaddoc为当前'图形文件<br/>&nbsp; Set MoSpace = acaddoc.ModelSpace<br/>&nbsp; Set paSpace = acaddoc.PaperSpace<br/>&nbsp; ObjNum = paSpace.Count<br/>&nbsp; ObjNum = MoSpace.Count<br/>&nbsp; For Each ent In MoSpace<br/>&nbsp;&nbsp; Debug.Print ent.entityname<br/>&nbsp;&nbsp; If ent.entityname &lt;&gt; "AcDbLine" Then<br/>&nbsp;&nbsp;&nbsp; ent.Delete<br/>&nbsp;&nbsp;&nbsp; ZoomCenter Center, magnification<br/>&nbsp;&nbsp;&nbsp; 'ent.Update<br/>&nbsp;&nbsp; End If<br/>&nbsp; Next<br/>End Sub</p><p>但是我怎么把刚打开的图形移动到我的坐标原点呢?</p>

wangyou236 发表于 2007-7-3 17:12:00

<p>这几天忙别的了,今天又看了一下,还是不行,也就是还是不能找到最大封闭图形,并填充/</p><p>那位知道,来指各着</p><p></p>
页: [1]
查看完整版本: 怎样用vba实现批量实现寻找一批cad文件中的最大封闭区域并提取出来