Master.BoundingBox メソッド (Visio)
マスター シェイプの図形を隙間なく囲む四角形を返します。
構文
expression. BoundingBox
( _Flags_
, _lpr8Left_
, _lpr8Bottom_
, _lpr8Right_
, _lpr8Top_
)
式Master オブジェクトを表す変数。
パラメーター
名前 | 必須 / オプション | データ型 | 説明 |
---|---|---|---|
Flags | 必須 | Integer | 最終的な境界ボックスを取得するために、図形ごとに取得される境界ボックスの状態を制御するフラグです。 |
lpr8Left | 必須 | 倍精度浮動小数点型 (Double) | 境界ボックスの左辺の x 座標を返します。 |
lpr8Bottom | 必須 | 倍精度浮動小数点型 (Double) | 境界ボックスの下端の y 座標を返します。 |
lpr8Right | 必須 | 倍精度浮動小数点型 (Double) | 境界ボックスの右辺の x 座標を返します。 |
lpr8Top | 必須 | 倍精度浮動小数点型 (Double) | 境界ボックスの上端の y 座標を返します。 |
戻り値
なし
解説
Shape オブジェクトの場合、BoundingBox メソッドによって、指定した図形とその下位図形を隙間なく囲む四角形が返されます。
Page オブジェクト、Master オブジェクト、または Selection オブジェクトの場合は、BoundingBox メソッドによって、指定したページ、マスター シェイプ、または選択範囲内の複数の図形とその下位図形を隙間なく囲む四角形が返されます。
BoundingBox メソッドがエラーを返す場合、または 0 個の図形を囲む四角形を返すように求められた場合、返される四角形は {left: 0、bottom: 0、right: -1、top: -1 } です。それ以外の場合、返される四角形の左が (<=) 右以下で、下が (<=) top 以下になります。 返される数値は、内部単位 (インチ) 単位です。
このメソッドによって返される各図形の境界を表す四角形は、その図形の Type プロパティによって異なります。
定数 | 説明 |
---|---|
visTypePage | Page.BoundingBox または Master.BoundingBox と同じです。 |
visTypeGroup | グループとその下位図形を隙間なく囲む四角形です。 |
visTypeShape | 四角形はフラグの値によって異なります。 次の表を参照してください。 |
visTypeForeignObject | 四角形はフラグの値によって異なります。 次の表を参照してください。 |
visTypeGuide | 四角形はフラグの値によって異なります。 次の表を参照してください。 |
オブジェクト タイプが visTypeDoc の場合はメソッドにより例外が発生します。
引数 Flags には、図形ごとに取得する境界ボックスを制御するビットが含まれます。 次の表に示すビットを複数設定すると、図形に適用される四角形は、ビットで指定した条件をすべて満たす四角形になります。
Flag | 値 | 説明 |
---|---|---|
visBBoxUprightWH | &H1 | 図形の幅と高さのボックスを囲む図形の親のローカル座標系に平行な最小の四角形を返します。図形が回転しない場合、直立した幅と高さのボックスと幅と高さのボックスは同じです。 図形のジオメトリ内のパスは不要であり、多くの場合、図形の幅と高さのボックス内に完全に配置されているわけではありません。 |
visBBoxUprightText | &H2 | 目的の図形のテキストを囲む親図形のローカル座標系に対して平行な、最小の四角形が返されます。 |
visBBoxExtents | &H4 | 図形のジオメトリによってストロークされたパスを囲む図形の親のローカル座標系に平行な最小の四角形である四角形を返します。これは、図形の直立した幅と高さのボックスよりも大きいか小さい場合があります。 visTypeForeignObject 型の図形に対して決定されたエクステント ボックスは、その図形の直立した幅と高さのボックスと等しくなります。 |
visBBoxIncludeHidden | &H10 | 非表示の座標が含まれます。 |
visBBoxIgnoreVisible | &H20 | 表示されている座標は無視されます。 |
visBBoxIncludeDataGraphics | &H10000 | マスター シェイプに割り当てるデータ グラフィックの引き出し図形 (およびそのサブ図形) が含まれます。 既定ではオフです。 |
visBBoxIncludeGuides | &H1000 | visTypeguide 型の図形のエクステントが含まれます。 既定では、 visTypeGuide 型の図形の範囲は無視されます。ガイド範囲を要求する場合は、垂直ガイドの x 位置と水平ガイドの y 位置のみが、返される四角形に影響します。 垂直ガイドが報告された場合は、無限 の y エクステントが返されます。 水平ガイドが報告された場合は、無限 x エクステントが返されます。 回転したガイドが報告された場合は、無限 の x および y エクステントが返されます。 |
visBBoxDrawingCoords | &H2000 | 対象となる図形を含むページまたはマスター シェイプの図面座標系で表された数値が返されます。 既定では、対象となる図形の親のローカル座標系における図面単位で戻り値が表されます。 |
visBBoxNoNonPrint | &H4000 | 印刷されない図形の範囲を無視します。 図形の [NonPrinting] セルの値が 0 以外の場合、または印刷されないレイヤーにのみ図形が属している場合は、その図形は印刷されません。 |
範囲の四角形は、図形のストロークの中心に基づいて決定され、ストロークの幅は考慮されません。 またその四角形には、影や線の端点マーカーによって表される領域も含まれません。 Microsoft Office Visio には、図形の "黒い点" のボックス、つまりストロークの幅、影、線の端点などを考慮して調整された範囲ボックスを作成する機能がありません。
図形には、図形によって報告される境界の四角形の外側にあるコントロール ポイントまたは接続ポイントを含めることができます。 図形のセルの結果を照会することで、コントロール ポイントと接続ポイントの位置を決定できます。
例
次のプロシージャは、選択した図形の境界ボックスの寸法をイミディエイト ウィンドウに出力します。 アクティブなウィンドウで複数の図形が選択された場合は、エラーを示すメッセージ ボックスが表示されます。 いずれの場合も、結果は図形が属するページまたはマスター シェイプの図面単位で返されます。 つまり、図形がグループに属する場合は、visBBoxDrawingCoords がフラグとして BoundingBox メソッドに渡されます。
図形がガイドである場合は、プロシージャから visBBoxIncludeGuides メソッドに BoundingBox が渡され、図形に範囲があると解釈されます。 図形に対して次の 3 つの長方形が返されます。
visBBoxUprightWH : 図形の幅と高さのボックスを囲む直立したボックス
visBBoxUprightText : 図形のテキスト ボックスを囲む直立ボックス
visBBoxExtents : 図形のパスを囲む直立ボックス
このマクロを実行するには、Visio 図面ページで必ず 1 つの図形を選択するようにします。
Public Sub BoundingBox_Example()
Dim vsoSelection As Visio.Selection
Set vsoSelection = ActiveWindow.Selection
vsoSelection.IterationMode = visSelModeSkipSub
If vsoSelection.Count <> 1 Then
MsgBox "BoundingBox_Example() expects exactly one selected shape."
Else
Dim vsoShape As Visio.Shape
Set vsoShape = vsoSelection(1)
Dim intFlags As Integer
intFlags = 0
If vsoShape.ContainingShape.Type = visTypeGroup Then
intFlags = visBBoxDrawingCoords
End If
If vsoShape.Type = visTypeGuide Then
intFlags = intFlags + visBBoxIncludeGuides
End If
Dim dblTop As Double
Dim dblBottom As Double
Dim dblLeft As Double
Dim dblRight As Double
vsoShape.BoundingBox intFlags + visBBoxUprightWH, dblLeft, dblBottom, dblRight, dblTop
Debug.Print "Upright WH "; _
"dblLeft:" & Application.FormatResult(dblLeft, "in", "", "#0.00 u"); _
"dblBottom:" & Application.FormatResult(dblBottom, "in", "", "#0.00 u"); _
"dblRight:" & Application.FormatResult(dblRight, "in", "", "#0.00 u"); _
"dblTop:" & Application.FormatResult(dblTop, "in", "", "#0.00 u")
vsoShape.BoundingBox intFlags + visBBoxUprightText, dblLeft, dblBottom, dblRight, dblTop
Debug.Print "Upright text "; _
"dblLeft:" & Application.FormatResult(dblLeft, "in", "", "#0.00 u"); _
"dblBottom:" & Application.FormatResult(dblBottom, "in", "", "#0.00 u"); _
"dblRight:" & Application.FormatResult(dblRight, "in", "", "#0.00 u"); _
"dblTop:" & Application.FormatResult(dblTop, "in", "", "#0.00 u")
vsoShape.BoundingBox intFlags + visBBoxExtents, dblLeft, dblBottom, dblRight, dblTop
Debug.Print "Bounding Box "; _
"dblLeft:" & Application.FormatResult(dblLeft, "in", "", "#0.00 u"); _
"dblBottom:" & Application.FormatResult(dblBottom, "in", "", "#0.00 u"); _
"dblRight:" & Application.FormatResult(dblRight, "in", "", "#0.00 u"); _
"dblTop:" & Application.FormatResult(dblTop, "in", "", "#0.00 u")
End If
End Sub
次のマクロは、BoundingBox メソッドと ShapesOverlap() 関数を使用して、ある図形 (vsoShape2) がもう 1 つの図形 (vsoShape1) の上に重なって表示されているかどうかを判別します。
Public Sub OverlappingShapes_Example()
Dim vsoShape1 As Visio.Shape
Dim vsoShape2 As Visio.Shape
Dim blsIsOverlapping As Boolean
Set vsoShape1 = Application.ActiveWindow.Page.Drop(Application.Documents.Item("BASIC_U.VSS").Masters.ItemU("Square"), 3, 9)
Set vsoShape2 = Application.ActiveWindow.Page.Drop(Application.Documents.Item("BASIC_U.VSS").Masters.ItemU("Pentagon"), 3, 8)
blsIsOverlapping = ShapesOverlap(vsoShape2, vsoShape1)
If blsIsOverlapping Then
Debug.Print "Shapes overlap."
Else
Debug.Print "Shapes don't overlap."
End If
End Sub
Private Function ShapesOverlap(vsoShape1 As IVShape, vsoShape2 As IVShape) As Boolean
Dim dblLeft1 As Double
Dim dblLeft2 As Double
Dim dblBottom1 As Double
Dim dblBottom2 As Double
Dim dblRight1 As Double
Dim dblRight2 As Double
Dim dblTop1 As Double
Dim dblTop2 As Double
vsoShape1.BoundingBox Flags + visBBoxExtents, dblLeft1, dblBottom1, dblRight1, dblTop1
vsoShape2.BoundingBox Flags + visBBoxExtents, dblLeft2, dblBottom2, dblRight2, dblTop2
If ((dblLeft2 >= dblLeft1 And dblLeft2 <= dblRight1) Or _
(dblRight2 >= dblLeft1 And dblRight2 <= dblRight1)) And _
((dblTop2 >= dblBottom1 And dblTop2 <= dblTop1) Or _
(dblBottom2 >= dblBottom1 And dblBottom2 <= dblTop1)) Then
ShapesOverlap = True
Else
ShapesOverlap = False
End If
End Function
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。