BoundingBox メソッド (Visio)Shape.BoundingBox method (Visio)

指定した図形とその下位図形を隙間なく囲む四角形を返します。Returns a rectangle that tightly encloses a shape.

構文Syntax

expression.expression. BoundingBox( _Flags_ , _lpr8Left_ , _lpr8Bottom_ , _lpr8Right_ , _lpr8Top_ )

Shape オブジェクトを表す変数を取得します。expression A variable that represents a Shape object.

ParametersParameters

名前Name 必須 / オプションRequired/Optional データ型Data type 説明Description
FlagsFlags 必須Required 整数型 (Integer)Integer 最終的な境界ボックスを取得するために、図形ごとに取得される境界ボックスの状態を制御するフラグです。Flags that influence the bounding box calculated for each shape that contributes to the resulting bounding box.
lpr8Leftlpr8Left 必須Required DoubleDouble 境界ボックスの左辺の x 座標を返します。Returns the x-coordinate of the left edge of the bounding box.
lpr8Bottomlpr8Bottom 必須Required DoubleDouble 境界ボックスの下端の y 座標を返します。Returns the y-coordinate of the bottom edge of the bounding box.
lpr8Rightlpr8Right 必須Required DoubleDouble 境界ボックスの右辺の x 座標を返します。Returns the x-coordinate of the right edge of the bounding box.
lpr8Toplpr8Top 必須Required DoubleDouble 境界ボックスの上端の y 座標を返します。Returns the y-coordinate of the top edge of the bounding box.

戻り値Return value

なしNothing

解説Remarks

Shapeオブジェクトの場合、 BoundingBoxメソッドは、図形とそのサブ図形を隙間なく囲む四角形を返します。For a Shape object, the BoundingBox method returns a rectangle that tightly encloses the shape and its subshapes.

Pageオブジェクト、 masterオブジェクト、またはSelectionオブジェクトの場合、 BoundingBoxメソッドは、ページ、マスターシェイプ、または選択範囲の図形とそのサブ図形を隙間なく囲む四角形を返します。For a Page, Master, or Selection object, the BoundingBox method returns a rectangle that tightly encloses the page's, master's, or selection's shapes and their subshapes.

BoundingBoxメソッドがエラーを返す場合、または1つの図形を囲む四角形を返すように要求された場合、返される四角形は {left: 0, bottom: 0, right:-1, top:-1};それ以外の場合、返される四角形の値は、(< =) right、および下にある (< =) top になります。If the BoundingBox method returns an error, or if it is asked to return the rectangle enclosing zero shapes, the rectangle returned is { left: 0, bottom: 0, right: -1, top: -1 }; otherwise, the rectangle returned has left less than or equal to (<=) right, and bottom less than or equal to (<=) top. 返される数値は、内部単位 (インチ) で表されます。The numbers returned are in internal units (inches).

個々の図形に対して返される外接する四角形は、 Typeプロパティによって異なります。The bounding rectangle returned for an individual shape depends on its Type property.

定数Constant 説明Description
visTypePagevisTypePage BoundingBoxまたはBoundingBoxに相当します。Equivalent to Page.BoundingBox or Master.BoundingBox.
visTypeGroupvisTypeGroup グループとその下位図形を隙間なく囲む四角形です。Rectangle that tightly encloses the group and its subshapes.
visTypeShapevisTypeShape 四角形はフラグの値によって異なります。Determined rectangle depends on flags. 次の表を参照してください。See the following table.
visTypeForeignObjectvisTypeForeignObject 四角形はフラグの値によって異なります。Determined rectangle depends on flags. 次の表を参照してください。See the following table.
visTypeGuidevisTypeGuide 四角形はフラグの値によって異なります。Determined rectangle depends on flags. 次の表を参照してください。See the following table.

メソッドは、オブジェクト型visTypeDocに対して例外を発生させます。The method will raise an exception for object type visTypeDoc.

_Flags_引数には、各図形で取得した境界ボックスを制御する複数のビットがあります。The Flags argument has several bits that control the bounding box retrieved for each shape. 次の表に示すビットを複数設定すると、図形に適用される四角形は、ビットで指定した条件をすべて満たす四角形になります。If more than one of the bits described in the following table is set, the rectangle determined for the shape covers all rectangles implied by the bits.

FlagFlag Value 説明Description
visBBoxUprightWHvisBBoxUprightWH &H1&H1 図形の幅/高さボックスを囲む親図形のローカル座標系に対して平行な、最小の四角形を返します。図形が回転していない場合は、その図形の垂直の幅と高さのボックスが同じになります。Returns a rectangle that is the smallest rectangle parallel to the local coordinate system of the shape's parent that encloses the shape's width-height box.If the shape is not rotated, its upright width-height box and its width-height box are the same. 図形の座標のパスは、図形の幅/高さボックスの内側に配置する必要はありません。Paths in the shape's geometry need not and often do not lie entirely within the shape's width-height box.
visBBoxUprightTextvisBBoxUprightText &H2&H2 目的の図形のテキストを囲む親図形のローカル座標系に対して平行な、最小の四角形が返されます。Returns a rectangle that is the smallest rectangle parallel to the local coordinate system of the shape's parent that encloses the shape's text.
visBBoxExtentsvisBBoxExtents &H4&H4 図形の座標によってストロークがストロークされたパスを囲む親図形のローカル座標系に対して平行な、最小の四角形を返します。図形の垂直幅/高さボックスよりも大きくしたり小さくしたりすることができます。Returns a rectangle that is the smallest rectangle parallel to the local coordinate system of the shape's parent that encloses the paths stroked by the shape's geometry.This may be larger or smaller than the shape's upright width-height box. VisTypeForeignObject型の図形に対して決定される [エクステント] ボックスは、図形のまっすぐな幅/高さボックスと等しくなります。The extents box determined for a shape of type visTypeForeignObject equals that shape's upright width-height box.
visBBoxIncludeHiddenvisBBoxIncludeHidden &H10&H10 非表示の座標が含まれます。Includes hidden geometry.
visBBoxIgnoreVisiblevisBBoxIgnoreVisible &H20&H20 表示されている座標は無視されます。Ignores visible geometry.
visBBoxIncludeDataGraphicsvisBBoxIncludeDataGraphics &H10000&H10000 図形に適用された、データ グラフィックの引き出し図形 (およびそのサブ図形) が含まれます。Includes data-graphic callout shapes (and their sub-shapes) that are applied to the shape. 既定ではオフです。Off by default.
visBBoxIncludeGuidesvisBBoxIncludeGuides &H1000&H1000 VisTypeguide型の図形の範囲が含まれています。Includes extents for shapes of type visTypeguide. 既定では、 visTypeGuide型の図形の範囲は無視されます。ガイドの範囲を要求した場合は、垂直ガイドの_x_位置と水平ガイドの_y_位置のみが返される四角形に貢献します。By default, the extents of shapes of type visTypeGuide are ignored.If you request guide extents, then only the x positions of vertical guides and the y positions of horizontal guides contribute to the rectangle that is returned. 垂直ガイドがレポートされている場合は、無限の_y_範囲が返されます。If any vertical guides are reported on, an infinite y extent is returned. 水平ガイドがレポートされている場合は、無限の_x_範囲が返されます。If any horizontal guides are reported on, an infinite x extent is returned. 回転したガイドがレポートされている場合は、無制限の_x_範囲と_y_範囲が返されます。If any rotated guides are reported on, infinite x and y extents are returned.
visBBoxDrawingCoordsvisBBoxDrawingCoords &H2000&H2000 対象となる図形を含むページまたはマスター シェイプの図面座標系で表された数値が返されます。Returns numbers in the drawing coordinate system of the page or master whose shapes are being considered. 既定では、対象となる図形の親のローカル座標系における図面単位で戻り値が表されます。By default, the returned numbers are drawing units in the local coordinate system of the parent of the considered shapes.
visBBoxNoNonPrintvisBBoxNoNonPrint &H4000&H4000 印刷されない図形の範囲を無視します。Ignores the extents of shapes that are nonprinting. 図形の [NonPrinting] セルの値が 0 以外の場合、または印刷されないレイヤーにのみ図形が属している場合は、その図形は印刷されません。A shape is nonprinting if the value of its NonPrinting cell is non-zero or it belongs only to nonprinting layers.

範囲の四角形は、図形のストロークの中心に基づいて決定され、ストロークの幅は考慮されません。The extents rectangle is determined using the center of the shape's strokes; it does not take into account the width of the strokes. またその四角形には、影や線の端点マーカーによって表される領域も含まれません。Nor does the rectangle include any area covered by shadows or line end markers. Microsoft Office Visio には、図形の "黒い点" のボックス、つまりストロークの幅、影、線の端点などを考慮して調整された範囲ボックスを作成する機能がありません。Microsoft Visio does not expose a means to determine a shape's "black bits" box, that is, the extents box adjusted to account for stroke widths, shadows, and line ends.

図形には、図形によって報告される境界長方形の外側にあるコントロールポイントまたは接続ポイントが含まれている場合があります。A shape may have control points or connection points that lie outside any of the bounding rectangles reported by the shape. 図形のセルの結果に対してクエリを実行することで、コントロールポイントと接続ポイントの位置を決定できます。You can determine the position of control points and connection points by querying results of the shape's cells.

Example

次のプロシージャは、選択した図形の境界ボックスの寸法をイミディエイト ウィンドウに出力します。The following procedure prints the dimensions of the bounding box of the selected shape in the Immediate window. アクティブなウィンドウで複数の図形が選択された場合は、エラーを示すメッセージ ボックスが表示されます。If more than one shape is selected in the active window, a message box indicating an error is displayed. いずれの場合も、結果は図形が属するページまたはマスター シェイプの図面単位で返されます。In all cases, results are reported in the drawing units of the page or master to which the shape belongs. つまり、図形がグループのサブ図形である場合、 visBBoxDrawingCoordsはフラグとしてBoundingBoxメソッドに渡されます。This means that if the shape is a subshape of a group, visBBoxDrawingCoords is passed as a flag to the BoundingBox method.

図形がガイドの場合、このプロシージャはvisBBoxIncludeGuidesBoundingBoxメソッドに渡して、図形がエクステントを持つものと見なされるようにします。If the shape is a guide, the procedure passes visBBoxIncludeGuides to the BoundingBox method so that the shape will be considered to have extent. 図形に対して次の 3 つの長方形が返されます。Three rectangles are reported for the shape:

  • visBBoxUprightWH : 図形の幅/高さボックスを囲む縦のボックスvisBBoxUprightWH : an upright box that encloses the shape's width-height box

  • visBBoxUprightText : 図形のテキストボックスを囲む縦のボックスvisBBoxUprightText : an upright box that encloses the shape's text box

  • visBBoxExtents : 図形のパスを囲む縦のボックスvisBBoxExtents : an upright box that encloses the shape's paths

このマクロを実行するには、Visio 図面ページで必ず 1 つの図形を選択するようにします。To run this macro, make sure exactly one shape is selected on the Visio drawing page.

 
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メソッドおよび図形の重なり () 関数を使用して、1つの図形 (vsoShape2) が別の図形 (vsoShape1) に重なるかどうかを判断します。The following macro uses the BoundingBox method and the ShapesOverlap() function to determine if one shape (vsoShape2) overlaps another (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 do not 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

サポートとフィードバックSupport and feedback

Office VBA またはこの説明書に関するご質問やフィードバックがありますか?Have questions or feedback about Office VBA or this documentation? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.