Méthode Selection.BoundingBox (Visio)
Renvoie un rectangle qui encadre étroitement les formes d’une sélection.
Syntaxe
expression. BoundingBox
( _Flags_
, _lpr8Left_
, _lpr8Bottom_
, _lpr8Right_
, _lpr8Top_
)
Expression Variable qui représente un objet Selection .
Paramètres
Nom | Requis/Facultatif | Type de données | Description |
---|---|---|---|
Flags | Obligatoire | Integer | Indicateurs qui influencent le rectangle de délimitation calculé pour chaque forme contribuant au rectangle de délimitation final. |
lpr8Left | Obligatoire | Double | Renvoie la coordonnée x du bord gauche du rectangle de délimitation. |
lpr8Bottom | Obligatoire | Double | Renvoie la coordonnée y du bord inférieur du rectangle de délimitation. |
lpr8Right | Obligatoire | Double | Renvoie la coordonnée x du bord droit du rectangle de délimitation. |
lpr8Top | Obligatoire | Double | Renvoie la coordonnée x du bord supérieur du rectangle de délimitation. |
Valeur renvoyée
Aucune
Remarques
Pour un objet Shape, la méthode BoundingBox renvoie un rectangle qui encadre étroitement la forme et ses formes secondaires.
Pour un objet Page, Master ou Selection, la méthode BoundingBox renvoie un rectangle qui encadre étroitement les formes de la page, de la forme de base ou de la sélection ainsi que leurs formes secondaires.
Si la méthode BoundingBox retourne une erreur, ou si elle est invitée à retourner le rectangle englobant zéro formes, le rectangle retourné est { left : 0, bottom : 0, right : -1, top : -1 } ; sinon, le rectangle retourné est inférieur ou égal à (<=) à droite et inférieur ou égal à (<=) supérieur. Les nombres renvoyés sont en unités internes (pouces).
Le rectangle de délimitation renvoyé pour une forme individuelle dépend de sa propriété Type.
Constante | Description |
---|---|
visTypePage | Équivaut à Page.BoundingBox ou Master.BoundingBox. |
visTypeGroup | Rectangle qui encadre étroitement le groupe et ses formes secondaires. |
visTypeShape | Le rectangle déterminé dépend des indicateurs. Reportez-vous au tableau suivant. |
visTypeForeignObject | Le rectangle déterminé dépend des indicateurs. Reportez-vous au tableau suivant. |
visTypeGuide | Le rectangle déterminé dépend des indicateurs. Reportez-vous au tableau suivant. |
La méthode génère une exception pour le type d'objet visTypeDocvisTypeDoc.
L'argument Indicateurs comporte plusieurs bits qui contrôlent le rectangle de délimitation récupéré pour chaque forme. Si plusieurs des bits décrits dans le tableau suivant sont définis, le rectangle déterminé pour la forme couvre tous les rectangles impliqués par les bits.
Indicateur | Valeur | Description |
---|---|---|
visBBoxUprightWH | &H1 | Renvoie un rectangle qui est le plus petit rectangle parallèle au système de coordonnées local du parent de la forme qui encadre le cadre largeur/hauteur de la forme.Si la forme n'a pas pivoté, son cadre largeur/hauteur vertical coïncide avec son cadre largeur/hauteur. Les chemins dans la géométrie de la forme n’ont pas besoin et souvent ne se trouvent pas entièrement dans la zone largeur-hauteur de la forme. |
visBBoxUprightText | &H2 | Renvoie un rectangle qui est le plus petit rectangle parallèle au système de coordonnées local du parent de la forme qui encadre le texte de la forme. |
visBBoxExtents | &H4 | Renvoie un rectangle qui est le plus petit rectangle parallèle au système de coordonnées local du parent de la forme qui encadre les chemins tracés par la géométrie de la forme.Ce rectangle peut être plus grand ou plus petit que le cadre largeur/hauteur vertical de la forme. Le cadre d'étendue déterminé pour une forme du type visTypeForeignObject équivaut au cadre largeur/hauteur vertical de cette forme. |
visBBoxIncludeHidden | &H10 | Inclut la géométrie masquée. |
visBBoxIgnoreVisible | &H20 | Ignore la géométrie visible. |
visBBoxIncludeDataGraphics | &H10000 | Inclut les formes de légende des graphiques de données (et leurs sous-formes) qui sont appliquées aux formes dans la sélection. Désactivée par défaut. |
visBBoxIncludeGuides | &H1000 | Inclut les étendues des formes de type visTypeguide. Par défaut, les étendues des formes de type visTypeGuide sont ignorées. Si vous demandez des étendues de repère, seules les positions x des repères verticaux et les positions y des repères horizontaux contribuent au rectangle retourné. Si un rapport est émis sur n'importe quel repère vertical, une étendue y infinie est renvoyée. Si un rapport est émis sur n'importe quel repère horizontal, une étendue x infinie est renvoyée. Si un rapport est émis sur n'importe quel repère pivoté, des étendues x et y sont renvoyées. |
visBBoxDrawingCoords | &H2000 | Renvoie des nombres dans le système de coordonnées du dessin de la page ou de la forme de base dont les formes sont considérées. Par défaut, les nombres renvoyés sont des unités de dessin dans le système de coordonnées local du parent des formes considérées. |
visBBoxNoNonPrint | &H4000 | Ignore les étendues des formes non imprimables. Une forme est non imprimable si la valeur de sa cellule NonPrinting est non nulle ou si elle appartient uniquement à des calques non imprimables. |
Le rectangle d’étendue est déterminé à l’aide du centre des tracés de la forme ; il ne prend pas en compte la largeur des tracés. Le rectangle n’inclut pas non plus les zones, quelles qu’elles soient, couvertes par les ombres ou les marqueurs d’extrémité de trait. Microsoft Visio ne met à disposition aucun moyen de déterminer le rectangle de « bits noirs » d’une forme, c’est-à-dire le rectangle d’étendue ajusté pour représenter les largeurs de tracé, les ombres et les extrémités de trait.
Une forme peut avoir des points de contrôle ou de connexion situés en dehors des rectangles de délimitation renvoyés par la forme. Vous pouvez déterminer la position des points de contrôle et de connexion en interrogeant les résultats des cellules de la forme.
Exemple
La procédure suivante imprime les dimensions du rectangle de délimitation de la forme sélectionnée dans la fenêtre Exécution. Si plusieurs formes sont sélectionnées dans la fenêtre active, une zone de message indiquant une erreur s'affiche. Dans tous les cas, les résultats sont exprimés dans les unités de dessin de la page ou de la forme de base à laquelle la forme appartient. Autrement dit, si la forme est une forme secondaire d'un groupe, visBBoxDrawingCoords est transmis comme un indicateur à la méthode BoundingBox.
Si la forme est un repère, la procédure transmet visBBoxIncludeGuides à la méthode BoundingBox pour que la forme soit considérée comme ayant une étendue. Trois rectangles sont rapportés pour la forme :
visBBoxUprightWH : boîte verticale qui entoure la zone largeur-hauteur de la forme
visBBoxUprightText : zone verticale qui entoure la zone de texte de la forme
visBBoxExtents : une boîte verticale qui entoure les chemins de la forme
Pour exécuter cette macro, veillez à ce qu'une seule forme soit sélectionnée sur la page de dessin.
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
La macro suivante utilise la méthode BoundingBox et la fonction ShapesOverlap() pour déterminer si une forme (vsoShape2) en chevauche une autre (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
Assistance et commentaires
Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.