supercorn 发表于 2004-9-29 08:31:00

请教版主,有关交、差集的操作。

版主:用<A href="http://bbs.mjtd.com/forum.php?mod=viewthread&tid=26390" target="_blank" >http://bbs.mjtd.com/forum.php?mod=viewthread&tid=26390</A>的方法。


Sub GetArea()<BR>                       Dim Pnt2 As Variant<BR>                       Pnt2 = ThisDrawing.Utility.GetPoint(, "选择点:")<BR>                       Dim lspPnt As String<BR>                       m = ThisDrawing.ModelSpace.Count<BR>                       ThisDrawing.SendCommand "-Boundary" &amp; vbCr &amp; "a" &amp; vbCr &amp; "o" &amp; vbCr &amp; "r" &amp; vbCr &amp; vbCr &amp; Pnt2(0) &amp; "," &amp; Pnt2(1) &amp; vbCr &amp; vbCr<BR>                       n = ThisDrawing.ModelSpace.Count<BR>                       If m &lt;&gt; n Then<BR>                                                       MsgBox ThisDrawing.ModelSpace(n - 1).Area<BR>                                                       ThisDrawing.ModelSpace(n - 1).Delete<BR>                       Else<BR>                                                       MsgBox "Err"<BR>                       End If<BR>End Sub<BR>对于解决求如图的的面积周长可能有点问题。


应该如果来求它们的差集面积?如图鼠标处的面积和周长。


雪山飞狐_lzh 发表于 2004-9-29 08:55:00

ThisDrawing.SendCommand "-Boundary" &amp; vbCr &amp; "a" &amp; vbCr &amp; "i" &amp; vbCr &amp; "y" &amp; vbCr &amp; "o" &amp; vbCr &amp; "r" &amp; vbCr &amp; vbCr &amp; Pnt2(0) &amp; "," &amp; Pnt2(1) &amp; vbCr &amp; vbCr<BR>这样会生成多个面域,做一下布尔运算求解

supercorn 发表于 2004-9-29 09:06:00

问题是如何来使用这多个面域呢?


ThisDrawing.ModelSpace(0)和ThisDrawing.ModelSpace(1)吗?

supercorn 发表于 2004-9-29 09:09:00

它跟帮助例子中的这段代码:

<PRE class=prog_in_0>Sub Ch4_CreateCompositeRegions()</PRE><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 <FONT style="BACKGROUND-COLOR: #0a246a" color=#ffffff>acSubtraction</FONT>, 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><PRE class=prog_in_end_0>有很大的出入。我就不会用<FONT style="BACKGROUND-COLOR: #0a246a" color=#ffffff>acSubtraction操作了。</FONT></PRE>

雪山飞狐_lzh 发表于 2004-9-29 09:28:00

面域从


thisdrawing.modelspace(m)





thisdrawing.modelspace(n-1)


先取出面积最大的面域与其它面域做差集运算

supercorn 发表于 2004-9-29 09:37:00

那么像如果这种情况,程序上会不会变得很复杂呢?


简单的最快的办法应该是怎么的呢?

雪山飞狐_lzh 发表于 2004-9-29 09:45:00

这样也只会生成两个面域,你测试过了么?

supercorn 发表于 2004-9-29 09:50:00

这种情况?


因为在实际使用中,可能性的情况好多,如果解决呢?


supercorn 发表于 2004-9-29 09:54:00

版主还有这种情况呢,能否给出一个比较详细的解决方法?


雪山飞狐_lzh 发表于 2004-9-29 09:55:00

看来你对Boundary命令一点也不熟,先看看帮助,再动手测试一下,上面情况只会有一个面域,下面的有5个



调用SendCommand方法之前最好先熟悉该命令的具体用法!!!
页: [1] 2
查看完整版本: 请教版主,有关交、差集的操作。