會傳回一個矩形,此矩形會緊密圍住選取範圍的圖形。
語法
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 };否則,傳回的矩形 LEFT 小於或等於 (<=) RIGHT,且 BOTTOM 小於或等於 (<=) TOP。 傳回的數字是以 (英吋) 的內部單位表示。
針對個別圖形所傳回的邊界矩形是根據其 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 支援與意見反應。