Método Selection.BoundingBox (Visio)
Devuelve un rectángulo que se ajusta perfectamente a las formas de una selección.
Sintaxis
expresión. BoundingBox
( _Flags_
, _lpr8Left_
, _lpr8Bottom_
, _lpr8Right_
, _lpr8Top_
)
Expresión Variable que representa un objeto Selection .
Parameters
Nombre | Obligatorio/opcional | Tipo de datos | Descripción |
---|---|---|---|
Flags | Obligatorio | Integer | Marcas que influyen en el cuadro de límite calculado para cada forma que contribuye al cuadro de límite resultante. |
lpr8Left | Obligatorio | Double | Devuelve la coordenada x del borde izquierdo del cuadro delimitador. |
lpr8Bottom | Obligatorio | Double | Devuelve la coordenada y del borde inferior del cuadro delimitador. |
lpr8Right | Obligatorio | Double | Devuelve la coordenada x del borde derecho del cuadro delimitador. |
lpr8Top | Obligatorio | Double | Devuelve la coordenada y del borde superior del cuadro delimitador. |
Valor devuelto
Nothing
Comentarios
Para un objeto Shape, el método BoundingBox devuelve un rectángulo que se ajusta perfectamente a la forma y a sus subformas.
Para un objeto Page, Master o Selection, el método BoundingBox devuelve un rectángulo que se ajusta perfectamente a las formas de la página, el patrón o la selección, así como a sus subformas.
Si el método BoundingBox devuelve un error o si se le pide que devuelva el rectángulo que incluye cero formas, el rectángulo devuelto es { left: 0, bottom: 0, right: -1, top: -1 }; De lo contrario, el rectángulo devuelto ha dejado menos o igual que (<=) a la derecha y la parte inferior menor o igual que (<=) superior. Los números devueltos se expresan en unidades internas (pulgadas).
El rectángulo delimitador devuelto para una forma individual depende de su propiedad Type.
Constante | Descripción |
---|---|
visTypePage | Equivalente a Page.BoundingBox o Master.BoundingBox. |
visTypeGroup | Rectángulo que se ajusta perfectamente al grupo y a sus subformas. |
visTypeShape | El rectángulo resultante depende de las marcas. Vea la siguiente tabla. |
visTypeForeignObject | El rectángulo resultante depende de las marcas. Vea la siguiente tabla. |
visTypeGuide | El rectángulo resultante depende de las marcas. Vea la siguiente tabla. |
El método generará una excepción para el tipo de objeto visTypeDoc.
El argumento Flags tiene varios bits que controlan el cuadro delimitador recuperado para cada forma. Si se establecen varios de los bits descritos en la tabla siguiente, el rectángulo resultante para la forma incluirá todos los rectángulos resultantes de dichos bits.
Flag | Valor | Descripción |
---|---|---|
visBBoxUprightWH | &H1 | Devuelve un rectángulo que es el rectángulo más pequeño paralelo al sistema de coordenadas local de la forma principal que contiene el cuadro que circunscribe a la forma.Si la forma no está girada, el cuadro vertical que la circunscribe y el cuadro que la circunscribe serán idénticos. Las rutas de acceso de la geometría de la forma no necesitan y, a menudo, no se encuentran completamente dentro del cuadro ancho-alto de la forma. |
visBBoxUprightText | &H2 | Devuelve un rectángulo que es el rectángulo más pequeño paralelo al sistema de coordenadas local de la forma principal que contiene el texto de la forma. |
visBBoxExtents | &H4 | Devuelve un rectángulo que es el rectángulo más pequeño paralelo al sistema de coordenadas local de la forma principal que contiene las rutas trazadas por la geometría de la forma.Dicho rectángulo puede ser mayor o menor que el cuadro vertical que circunscribe a la forma. El cuadro delimitador resultante para una forma de tipo visTypeForeignObject es igual al cuadro vertical que circunscribe a dicha forma. |
visBBoxIncludeHidden | &H10 | Incluye la geometría oculta. |
visBBoxIgnoreVisible | &H20 | Omite la geometría visible. |
visBBoxIncludeDataGraphics | &H10000 | Incluye las formas de llamada de gráficos de datos (y sus subformas) que se aplican a las formas de la selección. Deshabilitada de forma predeterminada. |
visBBoxIncludeGuides | &H1000 | Se incluyen extensiones para las formas de tipo visTypeguide. De forma predeterminada, se omiten las extensiones de las formas de tipo visTypeGuide . Si solicita extensiones de guía, solo las posiciones x de las guías verticales y las posiciones y de las guías horizontales contribuyen al rectángulo que se devuelve. Si se incluye cualquier guía vertical, se devolverá una extensión y infinita. Si se incluye cualquier guía horizontal, se devolverá una extensión x infinita. Si se incluye cualquier guía girada, se devolverán extensiones x e y infinitas. |
visBBoxDrawingCoords | &H2000 | Devuelve números en el sistema de coordenadas de dibujo de la página o del patrón cuyas formas se están teniendo en cuenta. De forma predeterminada, los números devueltos son unidades de dibujo en el sistema de coordenadas local de la forma principal de las formas que se están teniendo en cuenta. |
visBBoxNoNonPrint | &H4000 | Omite las extensiones de las formas no imprimibles. Una forma es no imprimible si el valor de su celda NonPrinting es distinto de cero o pertenece únicamente a capas no imprimibles. |
El rectángulo de extensiones se determina mediante el centro de los trazos de la forma; no se tiene en cuenta el grosor de los trazos. Además, el rectángulo tampoco incluye ningún área ocupada por sombras ni por marcadores de extremos de línea. Microsoft Visio no expone ningún medio de determinar el cuadro de "bits negros" de una forma (es decir, el cuadro de extensiones ajustado para tener en cuenta los grosores de los trazos, las sombras y los extremos de línea).
Una forma puede tener puntos de control o puntos de conexión situados fuera de los rectángulos delimitadores publicados por la misma. Puede determinar la posición de los puntos de control y de los puntos de conexión consultando los resultados de las celdas de la forma.
Ejemplo
El procedimiento siguiente imprime las dimensiones del cuadro de límite de la forma seleccionada en la ventana Inmediato. Si se seleccionan varias formas en la ventana activa, se muestra un cuadro con un mensaje de error. En todos los casos, los resultados se expresan en las unidades de dibujo de la página o del patrón al que pertenece la forma. Esto significa que si una forma es una subforma de un grupo, visBBoxDrawingCoords se pasa como marca al método BoundingBox.
Si la forma es una guía, el procedimiento pasa visBBoxIncludeGuides al método BoundingBox; de este modo, se dará por hecho que la forma dispone de extensión. Para la forma se devuelven tres rectángulos:
visBBoxUprightWH : un cuadro vertical que incluye el cuadro de alto de ancho de la forma.
visBBoxUprightText : un cuadro vertical que incluye el cuadro de texto de la forma
visBBoxExtents : un cuadro vertical que incluye las rutas de acceso de la forma
Para ejecutar esta macro, asegúrese de que sólo se ha seleccionado una forma en la página de dibujo de Visio.
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 siguiente utiliza el método BoundingBox y la función ShapesOverlap() para determinar si una forma (vsoShape2) se superpone sobre otra (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
Soporte técnico y comentarios
¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.