[求助]CAD vba 面内存在孤岛的面积计算?
<p><font size="2">如题,用程序做,就像Cass宗地的面积获取的功能一样?如何做?谢谢!</font></p> <p>将图形用JPG文件发上来,说的更清楚点。</p><p>一般解决方案。</p><p>1、封闭多义线,用 pl.area获得面积。</p><p> Dim Pl As AcadPolyline<br/> Pl.Area<br/></p><p>2、用面域</p><p> Dim aa As AcadRegion<br/> aa.Area<br/></p> 求出绿色阴影部分面域的面积 azjmjsj发表于2007-12-10 22:02:00static/image/common/back.gif求出绿色阴影部分面域的面积38671<p>用面域法解。多义线解起来更麻烦。</p><p>Dim aa As AcadRegion<br/> aa.Area<br/></p><p>∑面域=A面域-B面域-C面域</p><p> 在AutoCAD开发者帮助文件示例程序如下</p><pre class="prog_in_0"> ' 创建两个圆,一个代表房间,</pre><pre class="prog_in_0"> ' 另一个代表房间中的柱子</pre><pre class="prog_in_0"> Dim RoomObjects(0 To 1) As AcadCircle</pre><pre class="prog_in_0"> Dim center(0 To 2) As Double</pre><pre class="prog_in_0"> Dim radius As Double</pre><pre class="prog_in_0"> center(0) = 4</pre><pre class="prog_in_0"> center(1) = 4</pre><pre class="prog_in_0"> center(2) = 0</pre><pre class="prog_in_0"> radius = 2#</pre><pre class="prog_in_0"> Set RoomObjects(0) = ThisDrawing.ModelSpace. _</pre><pre class="prog_in_0"> AddCircle(center, radius)</pre><pre class="prog_in_0"> radius = 1#</pre><pre class="prog_in_0"> Set RoomObjects(1) = ThisDrawing.ModelSpace. _</pre><pre class="prog_in_0"> AddCircle(center, radius)</pre><pre class="prog_in_0">
</pre><pre class="prog_in_0"> ' 从这两个圆创建一个面域</pre><pre class="prog_in_0"> Dim regions As Variant</pre><pre class="prog_in_0"> regions = ThisDrawing.ModelSpace.AddRegion(RoomObjects)</pre><pre class="prog_in_0">
</pre><pre class="prog_in_0"> ' 将面域复制到面域变量中以便使用</pre><pre class="prog_in_0"> Dim RoundRoomObj As AcadRegion</pre><pre class="prog_in_0"> Dim PillarObj As AcadRegion</pre><pre class="prog_in_0">
</pre><pre class="prog_in_0"> If regions(0).Area > regions(1).Area Then</pre><pre class="prog_in_0"> ' 第一个面域是房间</pre><pre class="prog_in_0"> Set RoundRoomObj = regions(0)</pre><pre class="prog_in_0"> Set PillarObj = regions(1)</pre><pre class="prog_in_0"> Else</pre><pre class="prog_in_0"> ' 第一个面域是柱子</pre><pre class="prog_in_0"> Set PillarObj = regions(0)</pre><pre class="prog_in_0"> Set RoundRoomObj = regions(1)</pre><pre class="prog_in_0"> End If</pre><pre class="prog_in_0">' 从地板空间减去柱子空间,</pre><pre class="prog_in_0"> ' 以获得表示地毯总面积的面域。</pre><pre class="prog_in_0"> RoundRoomObj.Boolean acSubtraction, PillarObj</pre><pre class="prog_in_0">
</pre><pre class="prog_in_0"> ' 使用 Area 特性确定出地毯的总面积</pre><pre class="prog_in_0"> MsgBox "The carpet area is: " & RoundRoomObj.Area</pre><pre class="prog_in_end_0">End Sub</pre> <p><strong><font face="Verdana" color="#000000">感谢 版主 解答,感谢 azjmjsj 补充问题</font></strong></p><p><strong><font face="Verdana">上面情况可以解决</font></strong></p><p><strong><font face="Verdana">可是 我的数据中 有好多类似的情况 而且 要获得每个面 的面积 使用Text标注在图面上</font></strong></p><p><strong><font face="Verdana">该如何 批处理 获取?</font></strong></p>
页:
[1]