Метод 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 и обратная связь.