请教版主,有关交、差集的操作。
版主:用<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" & vbCr & "a" & vbCr & "o" & vbCr & "r" & vbCr & vbCr & Pnt2(0) & "," & Pnt2(1) & vbCr & vbCr<BR> n = ThisDrawing.ModelSpace.Count<BR> If m <> 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>对于解决求如图的的面积周长可能有点问题。
应该如果来求它们的差集面积?如图鼠标处的面积和周长。
ThisDrawing.SendCommand "-Boundary" & vbCr & "a" & vbCr & "i" & vbCr & "y" & vbCr & "o" & vbCr & "r" & vbCr & vbCr & Pnt2(0) & "," & Pnt2(1) & vbCr & vbCr<BR>这样会生成多个面域,做一下布尔运算求解 问题是如何来使用这多个面域呢?
ThisDrawing.ModelSpace(0)和ThisDrawing.ModelSpace(1)吗? 它跟帮助例子中的这段代码:
<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 > 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: " & 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> 面域从
thisdrawing.modelspace(m)
到
thisdrawing.modelspace(n-1)
先取出面积最大的面域与其它面域做差集运算 那么像如果这种情况,程序上会不会变得很复杂呢?
简单的最快的办法应该是怎么的呢?
这样也只会生成两个面域,你测试过了么? 这种情况?
因为在实际使用中,可能性的情况好多,如果解决呢?
版主还有这种情况呢,能否给出一个比较详细的解决方法?
看来你对Boundary命令一点也不熟,先看看帮助,再动手测试一下,上面情况只会有一个面域,下面的有5个
调用SendCommand方法之前最好先熟悉该命令的具体用法!!!
页:
[1]
2