lamboy 发表于 2007-12-10 11:39:00

[求助]CAD vba 面内存在孤岛的面积计算?

<p><font size="2">如题,用程序做,就像Cass宗地的面积获取的功能一样?如何做?谢谢!</font></p>

兰州人 发表于 2007-12-10 15:34:00

<p>将图形用JPG文件发上来,说的更清楚点。</p><p>一般解决方案。</p><p>1、封闭多义线,用 pl.area获得面积。</p><p>&nbsp;&nbsp; Dim Pl As AcadPolyline<br/>&nbsp;&nbsp; Pl.Area<br/></p><p>2、用面域</p><p>&nbsp;&nbsp; Dim aa As AcadRegion<br/>&nbsp;&nbsp; aa.Area<br/></p>

azjmjsj 发表于 2007-12-10 22:02:00

求出绿色阴影部分面域的面积

兰州人 发表于 2007-12-11 09:22:00

azjmjsj发表于2007-12-10 22:02:00static/image/common/back.gif求出绿色阴影部分面域的面积38671

<p>用面域法解。多义线解起来更麻烦。</p><p>Dim aa As AcadRegion<br/>&nbsp;&nbsp; aa.Area<br/></p><p>∑面域=A面域-B面域-C面域</p><p>&nbsp;在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 &gt; 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: " &amp; RoundRoomObj.Area</pre><pre class="prog_in_end_0">End Sub</pre>

lamboy 发表于 2007-12-11 14:26:00

<p><strong><font face="Verdana" color="#000000">感谢 版主 解答,感谢 azjmjsj 补充问题</font></strong></p><p><strong><font face="Verdana">上面情况可以解决</font></strong></p><p><strong><font face="Verdana">可是 我的数据中&nbsp; 有好多类似的情况&nbsp; 而且 要获得每个面 的面积 使用Text标注在图面上</font></strong></p><p><strong><font face="Verdana">该如何 批处理 获取?</font></strong></p>
页: [1]
查看完整版本: [求助]CAD vba 面内存在孤岛的面积计算?