Метод Shape.BoundingBox (Visio)

Возвращает прямоугольник, плотно заключенный в фигуру.

Синтаксис

выражение. BoundingBox( _Flags_ , _lpr8Left_ , _lpr8Bottom_ , _lpr8Right_ , _lpr8Top_ )

выражение Переменная, представляющая объект Фигура.

Параметры

Имя Обязательный или необязательный Тип данных Описание
Flags Обязательный Integer Флаги, влияющие на ограничивающий прямоугольник, вычисляемые для каждой фигуры, которая вносит свой вклад в результирующий ограничивающий прямоугольник.
lpr8Left Обязательный Double Возвращает координату X левого края ограничивающего прямоугольника.
lpr8Bottom Обязательный Double Возвращает координату Y нижнего края ограничивающего прямоугольника.
lpr8Right Обязательный Double Возвращает координату x правого края ограничивающего прямоугольника.
lpr8Top Обязательный Double Возвращает координату Y верхнего края ограничивающего прямоугольника.

Возвращаемое значение

Отсутствует

Примечания

Для объекта Shape метод BoundingBox возвращает прямоугольник, который плотно заключает фигуру и ее вложенные формы.

Для объекта Page, Master или Selection метод BoundingBox возвращает прямоугольник, который плотно заключает фигуры страницы, master или выделенного фрагмента и их вложенные формы.

Если метод BoundingBox возвращает ошибку или ему предлагается вернуть прямоугольник, содержащий нулевые фигуры, возвращается прямоугольник { left: 0, bottom: 0, right: -1, top: -1 }; В противном случае возвращаемый прямоугольник имеет значение меньше или равно (<=) вправо, а внизу меньше или равно (<=) вверху. Возвращаемые числа находятся во внутренних единицах (дюймах).

Ограничивающий прямоугольник, возвращаемый для отдельной фигуры, зависит от ее свойства Type .

Константа Описание
visTypePage Эквивалент Page.BoundingBox или Master.BoundingBox.
visTypeGroup Прямоугольник, который плотно объединяет группу и ее дочерние формы.
visTypeShape Определенный прямоугольник зависит от флагов. См. следующую таблицу.
visTypeForeignObject Определенный прямоугольник зависит от флагов. См. следующую таблицу.
visTypeGuide Определенный прямоугольник зависит от флагов. См. следующую таблицу.

Метод вызовет исключение для типа объекта visTypeDoc.

Аргумент Flags содержит несколько битов, управляющих ограничивающим прямоугольниками, получаемыми для каждой фигуры. Если задано несколько бит, описанных в следующей таблице, прямоугольник, определенный для фигуры, охватывает все прямоугольники, подразумеваемые битами.

Флаг Значение Описание
visBBoxUprightWH &H1 Возвращает прямоугольник, который является наименьшим прямоугольником, параллельным локальной системе координат родительского элемента фигуры, который содержит прямоугольник ширины и высоты фигуры. Если фигура не повернута, ее вертикальное поле ширины и высоты и ширина-высота будут одинаковыми. Пути в геометрии фигуры не обязательно и часто не лежат полностью в поле ширины и высоты фигуры.
visBBoxUprightText &H2 Возвращает прямоугольник, который является наименьшим прямоугольником, параллельным локальной системе координат родительского элемента фигуры, включающей текст фигуры.
visBBoxExtents &H4 Возвращает прямоугольник, который является наименьшим прямоугольником, параллельным локальной системе координат родительского элемента фигуры, которая охватывает пути, обводяемые геометрией фигуры. Это может быть больше или меньше прямоугольник вертикальной ширины и высоты фигуры. Поле экстентов, определенное для фигуры типа visTypeForeignObject , равно прямоугольнику вертикальной ширины и высоты этой фигуры.
visBBoxIncludeHidden &H10 Включает скрытую геометрию.
visBBoxIgnoreVisible &H20 Игнорирует видимую геометрию.
visBBoxIncludeDataGraphics &H10000 Включает фигуры выноски (и их вложенные фигуры), применяемые к фигуре. Выкл. по умолчанию.
visBBoxIncludeGuides &H1000 Включает экстенты для фигур типа visTypeguide. По умолчанию экстенты фигур типа visTypeGuide игнорируются. При запросе экстентов направляющих в возвращаемый прямоугольник будут способствовать только позиции x вертикальных направляющих и позиции y горизонтальных направляющих. Если отображаются какие-либо вертикальные направляющие, возвращается бесконечный экстент y. Если отображаются какие-либо горизонтальные направляющие, возвращается бесконечный экстент x . Если отображаются какие-либо повернутые направляющие, возвращаются бесконечные экстенты x и y .
visBBoxDrawingCoords &H2000 Возвращает числа в системе координат рисования страницы или master, фигуры которых учитываются. По умолчанию возвращаемые числа являются единицами рисования в локальной системе координат родительского элемента рассматриваемых фигур.
visBBoxNoNonPrint &H4000 Игнорирует экстенты фигур, которые не отображаются. Фигура не отображается, если значение ее ячейки NonPrinting не равно нулю или относится только к непечатным слоям.

Прямоугольник экстентов определяется по центру штрихов фигуры; не учитывает ширину штрихов. Кроме того, прямоугольник не содержит никаких областей, покрытых тенями или концевой линией. Microsoft Visio не предоставляет средства для определения поля "черных бит" фигуры, то есть рамки экстентов, скорректированные с учетом ширины штрихов, теней и концы линий.

Фигура может иметь контрольные точки или точки соединения, расположенные за пределами любого ограничивающего прямоугольника, сообщаемого фигурой. Вы можете определить положение контрольных точек и точек подключения, запросив результаты ячеек фигуры.

Пример

Следующая процедура выводит размеры ограничивающего прямоугольника выбранной фигуры в окне Интерпретация. Если в активном окне выбрано несколько фигур, отображается окно сообщения, указывающее на ошибку. Во всех случаях результаты отображаются в единицах рисования страницы или master, к которым принадлежит фигура. Это означает, что если фигура является вложенным элементом группы, visBBoxDrawingCoords передается в качестве флага в метод BoundingBox .

Если фигура является направляющей, процедура передает visBBoxIncludeGuides в метод BoundingBox , чтобы фигура считалась экстентом. Для фигуры отображаются три прямоугольника:

  • visBBoxUprightWH : вертикальное поле, включающее прямоугольник по ширине и высоте фигуры

  • visBBoxUprightText : вертикальное поле, включающее текстовое поле фигуры.

  • visBBoxExtents : вертикальное поле, включающее контуры фигуры.

Чтобы запустить этот макрос, убедитесь, что на странице документа 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

Следующий макрос использует метод BoundingBox и функцию ShapesOverlap(), чтобы определить, перекрывает ли одна фигура (vsoShape2) другую (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

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.