會傳回一個矩形,此矩形會緊密圍住選取範圍的圖形。
語法
expression。
BoundingBox( _Flags_ , _lpr8Left_ , _lpr8Bottom_ , _lpr8Right_ , _lpr8Top_ )
詞 一個代表 選擇 物件的變數。
參數
| 名稱 | 必要/選用 | 資料類型 | 描述 |
|---|---|---|---|
| Flags | 必要 | 整數 | 旗標,會影響針對每一個造成結果邊界之圖形所計算的邊界。 |
| 左轉 | 必要 | 雙精確度 | 會傳回邊界左邊緣的 x 座標。 |
| lpr8底部 | 必要 | 雙精確度 | 會傳回邊界下邊緣的 y 座標。 |
| lpr8 對 | 必要 | 雙精確度 | 會傳回邊界右邊緣的 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 | 會傳回一個矩形,這個矩形是與圖形父系的本機座標系統平行的最小矩形 (此父系會圍住此圖形的文字)。 |
| 可見BBox範圍 | &H4 | 會傳回一個矩形,這個矩形是與圖形父系的本機座標系統平行的最小矩形 (此父系會圍住此圖形的幾何所描繪的路徑)。 這可能會大於或小於圖形的直立寬度 - 高度方塊;針對類型為 visTypeForeignObject 的圖形所決定的範圍方塊會等於該圖形的直立寬度 - 高度方塊。 |
| visBBoxIncludeHidden | &H10 | 會包括隱藏的幾何。 |
| visBBox忽略可見 | &H20 | 會略過可見的幾何。 |
| visBBoxIncludeDataGraphics | &H10000 | 會包含套用到選取範圍中圖形的資料圖形註標圖形 (與其子圖形)。 預設為關閉。 |
| visBBoxIncludeGuides | &H1000 | 包含 visTypeGuide 型態的擴展範圍。 預設情況下, visTypeGuide 型態的形狀範圍會被忽略。如果你要求導軌範圍,只有垂直導軌的 x 位置和水平導軌的 y 位置會對回傳的矩形有貢獻。 若報告任何垂直導向,則返回無限大的 y 範圍。 若報告任何水平導向,則返回無限 x 範圍。 若報告任何旋轉的導向,則返回無限 x 和 y 範圍。 |
| visBBoxDrawingCoords | &H2000 | 回傳正在考慮形狀的頁面或母版圖紙座標系中的數字。 根據預設,傳回的數字為所考量圖形之父系所屬本機座標系統中的繪圖單位。 |
| 可見BBoxNoNonPrint(可見BBox無印刷) | &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 支援與意見反應。