Shape.BoundingBox-Methode (Visio)
Gibt ein Rechteck zurück, das ein Shape eng einschließt.
Syntax
Ausdruck. BoundingBox
( _Flags_
, _lpr8Left_
, _lpr8Bottom_
, _lpr8Right_
, _lpr8Top_
)
expression Eine Variable, die ein Shape-Objekt darstellt.
Parameter
Name | Erforderlich/Optional | Datentyp | Beschreibung |
---|---|---|---|
Flags | Erforderlich | Integer | Kennzeichen, die sich auf das umgebende Feld auswirken, das für jedes Shape berechnet wurde, das zum resultierenden umgebenden Feld gehört. |
lpr8Left | Erforderlich | Double | Gibt die X-Koordinate des linken Rands des umgebenden Felds zurück. |
lpr8Bottom | Erforderlich | Double | Gibt die Y-Koordinate des unteren Rands des umgebenden Felds zurück. |
lpr8Right | Erforderlich | Double | Gibt die X-Koordinate des rechten Rands des umgebenden Felds zurück. |
lpr8Top | Erforderlich | Double | Gibt die Y-Koordinate des oberen Rands des umgebenden Felds zurück. |
Rückgabewert
Nichts
Bemerkungen
Für ein Shape-Objekt gibt die BoundingBox-Methode ein Rechteck zurück, das das Shape und Teil-Shapes eng einschließt.
Für ein Page-, Master- oder Selection-Objekt gibt die BoundingBox-Methode ein Rechteck zurück, das die Shapes und die Teil-Shapes des Zeichenblatts, des Masters oder der Auswahl eng einschließt.
Wenn die BoundingBox-Methode einen Fehler zurückgibt oder aufgefordert wird, das Rechteck zurückzugeben, das 0 Formen umschließt, lautet das zurückgegebene Rechteck { left: 0, bottom: 0, right: -1, top: -1 }; Andernfalls ist das zurückgegebene Rechteck kleiner als oder gleich (<=) rechts und unten kleiner als oder gleich (<=) oben. Die zurückgegebenen Zahlen sind in internen Einheiten (Zoll) angegeben.
Das zurückgegebene, umgebende Rechteck für ein einzelnes Shape hängt von dessen Type-Eigenschaft ab.
Konstante | Beschreibung |
---|---|
visTypePage | Entsprechung zu Page.BoundingBox oder Master.BoundingBox. |
visTypeGroup | Rechteck, das die Gruppe und deren Teil-Shapes eng einschließt. |
visTypeShape | Festgelegtes Rechteck hängt von Kennzeichen ab. Informationen finden Sie in der folgenden Tabelle. |
visTypeForeignObject | Festgelegtes Rechteck hängt von Kennzeichen ab. Informationen finden Sie in der folgenden Tabelle. |
visTypeGuide | Festgelegtes Rechteck hängt von Kennzeichen ab. Informationen finden Sie in der folgenden Tabelle. |
Von der Methode wird eine Ausnahme für den Objekttyp visTypeDoc ausgelöst.
Das Flags-Argument weist mehrere Bits auf, die das für jedes Shape abgerufene, umgebende Feld steuern. Wenn mindestens eines der in der folgenden Tabelle beschriebenen Bits festgelegt ist, deckt das für das Shape festgelegte Rechteck alle von den Bits angegebenen Rechtecke ab.
Wert | Wert | Beschreibung |
---|---|---|
visBBoxUprightWH | &H1 | Gibt ein Rechteck zurück, bei dem es sich um das kleinste Rechteck handelt, das sich parallel zum lokalen Koordinatensystem des übergeordneten Shapes befindet, von dem das Feld für die Breite/Höhe des Shapes eingeschlossen ist.Wenn das Shape nicht gedreht wird, sind das hochkant stehende Feld für die Breite/Höhe und das Feld für die Breite/Höhe identisch. Pfade in der Geometrie des Shapes müssen und liegen häufig nicht vollständig im Feld breite/höhe des Shapes. |
visBBoxUprightText | &H2 | Gibt ein Rechteck zurück, bei dem es sich um das kleinste Rechteck handelt, das sich parallel zum lokalen Koordinatensystem des übergeordneten Shapes befindet, von dem der Text des Shapes eingeschlossen ist. |
visBBoxExtents | &H4 | Gibt ein Rechteck zurück, bei dem es sich um das kleinste Rechteck handelt, das sich parallel zum lokalen Koordinatensystem des übergeordneten Shapes befindet, von dem die Pfade eingeschlossen werden, die von der Geometrie des Shapes berührt werden.Dieses Rechteck kann größer oder kleiner sein als das hochkant stehende Feld für die Breite/Höhe. Das für ein Shape vom Typ visTypeForeignObject bestimmte Erweiterungsfeld entspricht dem hochkant stehenden Feld für die Breite/Höhe. |
visBBoxIncludeHidden | &H10 | Umfasst ausgeblendete Geometrie. |
visBBoxIgnoreVisible | &H20 | Ignoriert sichtbare Geometrie. |
visBBoxIncludeDataGraphics | &H10000 | Umfasst Beschriftungs-Shapes (einschließlich untergeordneter Shapes) für Datengrafiken, sofern diese Shapes auf das Shape angewendet werden. Standardmäßig deaktiviert. |
visBBoxIncludeGuides | &H1000 | Enthält Erweitungen für Shapes vom Typ visTypeguide. Standardmäßig werden die Blöcke von Shapes vom Typ visTypeGuide ignoriert. Wenn Sie Führungsausdehnungen anfordern, tragen nur die x-Positionen vertikaler Führungslinien und die y-Positionen horizontaler Führungslinien zum zurückgegebenen Rechteck bei. Wenn vertikale Führungslinien gemeldet werden, wird eine unendliche Y-Erweiterung zurückgegeben. Bei Berichten für horizontale Führungslinien wird eine unendliche X-Erweiterung zurückgegeben. Wenn Berichte für gedrehte Führungslinien erstellt werden, werden unendliche X- und Y-Erweiterungen zurückgegeben. |
visBBoxDrawingCoords | &H2000 | Gibt Zahlen im Zeichnungskoordinatensystem des Zeichenblatts oder des Masters zurück, dessen Shapes berücksichtigt werden. Standardmäßig sind die zurückgegebenen Zahlen Zeichnungseinheiten im lokalen Koordinatensystem des übergeordneten Shapes der berücksichtigten Shapes. |
visBBoxNoNonPrint | &H4000 | Ignoriert die Erweiterungen von Shapes, die nicht gedruckt werden. Ein Shape wird nicht gedruckt, wenn der Wert der Zelle NichtDrucken ungleich Null ist oder wenn das Shape nur zu nicht gedruckten Layern gehört. |
Das Blöckesrechteck wird mithilfe der Mitte der Striche des Shapes bestimmt. Die Breite der Striche wird nicht berücksichtigt. Das Rechteck enthält auch keinen Bereich, der von Schatten oder Linienendmarkierungen bedeckt ist. Microsoft Visio macht keine Möglichkeit verfügbar, um das Feld "schwarze Bits" eines Shapes zu bestimmen, d. h. das Blöckesfeld, das an Strichbreiten, Schatten und Linienenden angepasst wird.
Ein Shape kann Kontrollpunkte oder Verbindungspunkte aufweisen, die sich außerhalb der vom Shape gemeldeten umgebenden Rechtecke befinden. Sie können die Position von Kontrollpunkten und Verbindungspunkten bestimmen, indem Sie Ergebnisse der Zellen des Shapes abfragen.
Beispiel
Mit der folgenden Prozedur werden die Bemaßungen des umgebenden Felds des ausgewählten Shapes im Direktfenster gedruckt. Wenn im aktiven Fenster mehrere Shapes ausgewählt wurden, wird eine Fehlermeldung angezeigt. In jedem Fall werden die Ergebnisse in den Zeichnungseinheiten des Zeichenblatts oder des Masters gemeldet, zu dem das Shape gehört. Wenn das Shape also ein Teil-Shape einer Gruppe ist, wird visBBoxDrawingCoords als Kennzeichen an die BoundingBox-Methode übergeben.
Handelt es sich bei dem Shape um eine Führungslinie, übergibt die Prozedur visBBoxIncludeGuides an die BoundingBox-Methode, sodass von einer Erweiterung des Shapes ausgegangen wird. Drei Rechtecke werden für das Shape gemeldet:
visBBoxUprightWH : ein aufrecht stehendes Feld, das das Breite-Höhe-Feld des Shapes einschließt.
visBBoxUprightText : ein aufrecht stehendes Feld, das das Textfeld der Form einschließt
visBBoxExtents : ein aufrecht stehendes Feld, das die Pfade des Shapes einschließt
Stellen Sie zum Ausführen dieses Makros sicher, dass auf dem Visio-Zeichenblatt nur ein Shape ausgewählt ist.
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
Das folgende Makro verwendet die BoundingBox-Methode und die ShapesOverlap() -Funktion, um zu bestimmen, ob eine Form (vsoShape2) eine andere (vsoShape1) überlappt.
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
Support und Feedback
Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.