Метод Selection.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 возвращает прямоугольник, плотно заключающий фигуры страницы, образца или выделенного фрагмента и их подфигуры.

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

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

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