Compartir a través de


Método Page.BoundingBox (Visio)

Devuelve un rectángulo que se ajusta perfectamente a las formas de una página.

Sintaxis

expresión. BoundingBox( _Flags_ , _lpr8Left_ , _lpr8Bottom_ , _lpr8Right_ , _lpr8Top_ )

Expresión Variable que representa un objeto Page .

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 página. 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.