Método Shape.BoundingBox (Visio)
Retorna um retângulo que fecha hermeticamente uma forma.
Sintaxe
expressão. BoundingBox
( _Flags_
, _lpr8Left_
, _lpr8Bottom_
, _lpr8Right_
, _lpr8Top_
)
expressão Uma variável que representa um objeto Shape.
Parâmetros
Nome | Obrigatório/Opcional | Tipo de dados | Descrição |
---|---|---|---|
Flags | Obrigatório | Integer | Sinalizadores que influenciam a caixa de limite calculada para cada forma que contribui para a caixa de limite resultante. |
lpr8Left | Obrigatório | Double | Retorna a coordenada x da borda esquerda da caixa de limite. |
lpr8Bottom | Obrigatório | Double | Retorna a coordenada y da borda inferior da caixa de limite. |
lpr8Right | Obrigatório | Double | Retorna a coordenada x da borda direita da caixa de limite. |
lpr8Top | Obrigatório | Double | Retorna a coordenada y da borda superior da caixa de limite. |
Valor de retorno
Nada
Comentários
Para um objeto Shape, o método BoundingBox retorna um retângulo que fecha hermeticamente a forma e suas subformas.
Para um objeto Page, Master ou Selection, o método BoundingBox retorna um retângulo que inclui as formas da página, do mestre ou da seleção, e suas subpastas.
Se o método BoundingBox retornar um erro ou se for solicitado que ele retorne o retângulo que contém formas zero, o retângulo retornado será { esquerda: 0, inferior: 0, direita: -1, superior: -1 }; caso contrário, o retângulo retornado deixou menos ou igual a (<=) à direita e inferior menor ou igual a (<=) superior. Os números retornados estão em unidades internas (polegadas).
O retângulo de limite retornado para uma forma individual depende de sua propriedade Type.
Constante | Descrição |
---|---|
visTypePage | Equivalente a Page.BoundingBox ou Master.BoundingBox. |
visTypeGroup | Retângulo que fecha hermeticamente o grupo e suas subpastas. |
visTypeShape | O retângulo determinado depende dos sinalizadores. Consulte a tabela a seguir. |
visTypeForeignObject | O retângulo determinado depende dos sinalizadores. Consulte a tabela a seguir. |
visTypeGuide | O retângulo determinado depende dos sinalizadores. Consulte a tabela a seguir. |
O método levantará uma exceção para o tipo de objeto visTypeDoc.
O argumento Flags tem vários bits que controlam a caixa de limite recuperada para cada forma. Se mais de um dos bits descritos na tabela a seguir forem definidos, o retângulo determinado para a forma cobrirá todos os retângulos implicados pelos bits.
Flag | Valor | Descrição |
---|---|---|
visBBoxUprightWH | &H1 | Retorna um retângulo que é o menor retângulo paralelo ao sistema de coordenadas local do pai da forma que inclui a caixa largura-altura da forma.Se a forma não for girada, sua caixa largura-altura vertical e sua caixa largura altura serão iguais. Os caminhos na geometria da forma não precisam e muitas vezes não estão inteiramente dentro da caixa de altura de largura da forma. |
visBBoxUprightText | &H2 | Retorna um retângulo que é o menor retângulo paralelo ao sistema de coordenadas local do pai da forma que inclui o texto da forma. |
visBBoxExtents | &H4 | Retorna um retângulo que é o menor retângulo paralelo ao sistema de coordenadas local do pai da forma que inclui os caminhos traçados pela geometria da forma.Isso pode ser maior ou menor que a caixa largura-altura vertical da forma. A caixa de extensões determinada para uma forma do tipo visTypeForeignObject é igual à caixa largura-altura vertical dessa forma. |
visBBoxIncludeHidden | &H10 | Inclui geometria oculta. |
visBBoxIgnoreVisible | &H20 | Ignora geometria visível. |
visBBoxIncludeDataGraphics | &H10000 | Inclui as formas de texto explicativo do gráfico de dados (e suas subformas) aplicadas à forma. Desativado por padrão. |
visBBoxIncludeGuides | &H1000 | Inclui extensões para formas do tipo visTypeguide. Por padrão, as extensões de formas do tipo visTypeGuide são ignoradas. Se você solicitar extensões de guia, somente as posições x de guias verticais e as posições y de guias horizontais contribuem para o retângulo retornado. Se alguma guia vertical for relatada, uma extensão y infinita será retornada. Se alguma guia horizontal for relatada, uma extensão x infinita será retornada. Se alguma guia girada for relatada, extensões x e y infinitas serão retornadas. |
visBBoxDrawingCoords | &H2000 | Retorna números no sistema de coordenadas de desenho da página ou mestre cujas formas são consideradas. Por padrão, os números retornados são unidades de desenho no sistema de coordenadas local do pai das formas consideradas. |
visBBoxNoNonPrint | &H4000 | Ignora as extensões das formas não-imprimíveis. Uma forma será não-imprimível se o valor de sua célula NonPrinting for diferente de zero ou se ela pertencer apenas a camadas não-imprimíveis. |
O retângulo das extensões é determinado usando o centro dos traços da forma; ele não leva em conta a largura dos traços. O retângulo também não inclui nenhuma área coberta por sombras ou marcadores de extremidades de linhas. O Microsoft Visio não expõe um meio para determinar a caixa "bits pretos" de uma forma, ou seja, a caixa de extensões ajustada para levar em conta as larguras dos traços, sombras e extremidades de linhas.
Uma forma pode ter pontos de controle ou pontos de conexão que ficam fora de qualquer dos retângulos de limite relatados pela forma. Você pode determinar a posição de pontos de controle e pontos de conexão consultando os resultados das células da forma.
Exemplo
O procedimento a seguir imprime as dimensões da caixa de limite da forma selecionada na janela Immediate. Se mais de uma forma estiver selecionada na janela ativa, será exibida uma caixa de mensagem indicando um erro. Em todos os casos, os resultados serão relatados nas unidades de desenho da página ou do mestre ao qual a forma pertence. Isso significa que se a forma for uma subforma de um grupo, visBBoxDrawingCoords será passado como um sinalizador para o método BoundingBox.
Se a forma for uma guia, o procedimento passará visBBoxIncludeGuides para o método BoundingBox para que a forma seja considerada como tendo extensão. Três retângulos são relatados para a forma:
visBBoxUprightWH : uma caixa vertical que inclui a caixa de altura de largura da forma
visBBoxUprightText : uma caixa vertical que inclui a caixa de texto da forma
visBBoxExtents : uma caixa vertical que inclui os caminhos da forma
Para executar esta macro, certifique-se de que exatamente uma forma esteja selecionada na página de desenho do 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
A macro a seguir usa o método BoundingBox e a função ShapesOverlap() para determinar se uma forma (vsoShape2) sobrepõe outra (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
Suporte e comentários
Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.