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.