Freigeben über


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.