概要 - 合成リージョンを作成する(VBA/ActiveX)

合成リージョンは、リージョンまたは 3D ソリッドの交点を取り去ったり、組み合わせたり、検出したりして作成できます。

次に、合成リージョンを押し出したり回転させたりして、複雑なソリッドを作成できます。合成リージョンを作成するには、Boolean メソッドを使用します。

あるリージョンを別のリージョンから取り去るときは、最初のリージョンから Boolean メソッドを呼出します。これが、リージョンを取り去る元のリージョンになります。たとえば、平面図でどれだけのカーペットが必要かを計算するには、床面積の外側境界線から Boolean メソッドを呼び出し、柱やカウンタなどのカーペットを敷かない領域を Boolean パラメータ リスト内のオブジェクトとして使用します。

リージョンで実行される操作は、Boolean メソッドの BooleanType パラメータによって決定されます。BooleanType パラメータは次のいずれかです。

合成リージョンを作成する

Sub Ch4_CreateCompositeRegions()
  ' Create two circles, one representing a room,
  ' the other a pillar in the center of the room
  Dim RoomObjects(0 To 1) As AcadCircle
  Dim center(0 To 2) As Double
  Dim radius As Double
  center(0) = 4
  center(1) = 4
  center(2) = 0
  radius = 2#
  Set RoomObjects(0) = ThisDrawing.ModelSpace.AddCircle(center, radius)
  radius = 1#
  Set RoomObjects(1) = ThisDrawing.ModelSpace.AddCircle(center, radius)

  ' Create a region from the two circles
  Dim regions As Variant
  regions = ThisDrawing.ModelSpace.AddRegion(RoomObjects)

  ' Copy the regions into the region variables for ease of use
  Dim RoundRoomObj As AcadRegion
  Dim PillarObj As AcadRegion

  If regions(0).Area > regions(1).Area Then
    ' The first region is the room
    Set RoundRoomObj = regions(0)
    Set PillarObj = regions(1)
  Else
    ' The first region is the pillar
    Set PillarObj = regions(0)
    Set RoundRoomObj = regions(1)
  End If

  ' Subtract the pillar space from the floor space to
  ' get a region that represents the total carpet area.
  RoundRoomObj.Boolean acSubtraction, PillarObj

  ' Use the Area property to determine the total carpet area
  MsgBox "The carpet area is: " & RoundRoomObj.Area
End Sub

Area プロパティを使って、結果のリージョンの面積を算出します。