Compartilhar via


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.