Page.BoundingBox 方法 (Visio)
返回一个将页面的形状紧密封闭在内的矩形。
语法
expression。 BoundingBox
( _Flags_
, _lpr8Left_
, _lpr8Bottom_
, _lpr8Right_
, _lpr8Top_
)
表达 一个代表 Page 对象的变量。
参数
名称 | 必需/可选 | 数据类型 | 说明 |
---|---|---|---|
Flags | 必需 | Integer | 影响为各个形状计算的边框的标志,这些形状影响结果边框。 |
lpr8Left | 必需 | Double | 返回边框左边缘的 x 轴坐标值。 |
lpr8Bottom | 必需 | Double | 返回边框下边缘的 y 轴坐标值。 |
lpr8Right | 必需 | Double | 返回边框右边缘的 x 轴坐标值。 |
lpr8Top | 必需 | Double | 返回边框上边缘的 y 轴坐标值。 |
返回值
Nothing
注解
对于 Shape 对象,BoundingBox 方法返回一个将形状及其子形状紧密封闭在内的矩形。
对于 Page、Master 或 Selection 对象,BoundingBox 方法返回一个矩形,该矩形将页面、主控形状或选定内容的形状及其子形状紧密封闭在内。
如果 BoundingBox 方法返回错误,或者如果要求返回包含零个形状的矩形,则返回的矩形为 { left: 0,bottom: 0,right: -1,top: -1 };否则,返回的矩形左小于或等于 (<= 右侧) ,底部小于或等于 (<=) 顶部。 返回的数字采用内部单位(英寸)。
为各个形状返回的矩形边框取决于该形状的 Type 属性。
常量 | 说明 |
---|---|
visTypePage | 等效于 Page.BoundingBox 或 Master.BoundingBox。 |
visTypeGroup | 将组及其子形状紧密封闭在内的矩形。 |
visTypeShape | 确定的矩形取决于标志。 请参阅下表。 |
visTypeForeignObject | 确定的矩形取决于标志。 请参阅下表。 |
visTypeGuide | 确定的矩形取决于标志。 请参阅下表。 |
对于对象类型 visTypeDoc,该方法会引发异常。
Flags 参数有几个位,用来控制对各个形状检索的边框。 如果设置了下表中描述的多个位,则为该形状确定的矩形将覆盖这些位隐含的所有矩形。
Flag | 值 | 说明 |
---|---|---|
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 | 返回正在考虑其形状的页面或主控形状的绘图坐标系统中的数字。 默认情况下,返回的数字采用所考虑形状的父形状的本地坐标系统中的绘图单位。 |
visBBoxNoNonPrint | &H4000 | 忽略非打印形状的范围。 如果某一形状的 NonPrinting 单元格的值不为零或者该形状仅属于非打印图层,则它是非打印形状。 |
范围矩形是使用形状笔划的中心来确定的;它并不考虑笔划的宽度。 矩形也不包括任何由阴影或线端标记覆盖的区域。 Microsoft Visio 没有公布确定形状的“黑位”框(经调整以便将笔划宽度、阴影和线端包含在内的范围框)的方法。
形状可能有位于该形状报告的所有矩形边框之外的控制点或连接点。 通过查询形状单元格的结果,您可以确定控制点和连接点的位置。
示例
以下过程在“立即”窗口中打印所选形状的边框的大小。 如果在活动窗口中选择了多个形状,则会显示一个指示错误的消息框。 在所有情况下,报告的结果都以该形状所属的页面或主控形状的绘图单位表示。 这意味着如果该形状为某一组的子形状,则 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 支持和反馈,获取有关如何接收支持和提供反馈的指南。