共用方式為


Visio) (Selection.BoundingBox 方法

會傳回一個矩形,此矩形會緊密圍住選取範圍的圖形。

語法

expressionBoundingBox( _Flags_ , _lpr8Left_ , _lpr8Bottom_ , _lpr8Right_ , _lpr8Top_ )

表達 代表 Selection 物件的變數。

參數

名稱 必要/選用 資料類型 描述
Flags 必要項目 整數 旗標,會影響針對每一個造成結果邊界之圖形所計算的邊界。
lpr8Left 必要項目 雙精確度 會傳回邊界左邊緣的 x 座標。
lpr8Bottom 必要項目 雙精確度 會傳回邊界下邊緣的 y 座標。
lpr8Right 必要項目 雙精確度 會傳回邊界右邊緣的 x 座標。
lpr8Top 必要項目 雙精確度 會傳回邊界上邊緣的 y 座標。

傳回值

註解

如果是 Shape 物件,BoundingBox 方法會傳回一個矩形,這個矩形會緊密圍住此圖形及其子圖形。

如果是 PageMasterSelection 物件,BoundingBox 方法會傳回一個矩形,這個矩形會緊密圍住此頁面、主圖形或是選取範圍的圖形及其子圖形。

如果 BoundingBox 方法傳回錯誤,或如果要求它傳回以零圖形括住的矩形,則傳回的矩形為 { left: 0, bottom: 0, right: -1, top: -1 };否則,傳回的矩形會保留小於或等於 (=) <右,而下方小於或等於 (<=) 上。 傳回的數位是內部單位 (英吋) 。

針對個別圖形所傳回的邊界矩形是根據其 Type 屬性而定。

常數 描述
visTypePage 相當於 Page.BoundingBoxMaster.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 範圍。 如果報告任何旋轉的參考線,則會傳回無限 xy 範圍。
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 支援與意見反應