Visio) (Selection.BoundingBox 方法
會傳回一個矩形,此矩形會緊密圍住選取範圍的圖形。
語法
expression。 BoundingBox
( _Flags_
, _lpr8Left_
, _lpr8Bottom_
, _lpr8Right_
, _lpr8Top_
)
表達 代表 Selection 物件的變數。
參數
名稱 | 必要/選用 | 資料類型 | 描述 |
---|---|---|---|
Flags | 必要項目 | 整數 | 旗標,會影響針對每一個造成結果邊界之圖形所計算的邊界。 |
lpr8Left | 必要項目 | 雙精確度 | 會傳回邊界左邊緣的 x 座標。 |
lpr8Bottom | 必要項目 | 雙精確度 | 會傳回邊界下邊緣的 y 座標。 |
lpr8Right | 必要項目 | 雙精確度 | 會傳回邊界右邊緣的 x 座標。 |
lpr8Top | 必要項目 | 雙精確度 | 會傳回邊界上邊緣的 y 座標。 |
傳回值
無
註解
如果是 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 支援與意見反應。