前のトピック     次のトピック

第 18 章 オートメーションによる作図

セクション 2   図面への図形の配置

図形の配置を決定する作業、特に接続した図や図形間で複雑な関係を持つ図面を扱う場合は、Visio® 図面を作成するプログラムでの難しい作業の 1 つです。根本的な目標は、どんな図面の場合でも同じです。図面ページに配置する各図形に対してページ座標を計算します。使用する方法は、作成する図面の種類および図面の基準となるデータによって異なります。

また、Visio には自動レイアウト機能があり、図形および図形間のコネクタの図面内での相互作用を制御します。デフォルトのレイアウト設定は、シェイプシート (ShapeSheet®) ウィンドウの [ページ レイアウト] セクションおよび [図形のレイアウト] セクションで参照できます。これらのセクションの数式を使用して、レイアウト設定をカスタマイズすることができます。図形および自動レイアウトの詳細については、「第 11 章 図面内での図形の配置」の「セクション 5   自動レイアウト用の図形の設計」を参照してください。[ページ レイアウト] セクションおよび [図形のレイアウト] セクションの詳細については、Visio 製品付属のオンラインヘルプ「開発者用リファレンス」 ([ヘルプ] メニューから [開発者用リファレンス] を選択) を参照してください。

以下の CreateDrawing プロシージャは、簡単なネットワーク図に図形を配置する例を示しています。この例では、2 次元配列からデータを読み取っています。配列の先頭の要素は、Basic Network Shapes 3D ステンシル内のマスタシェイプの名前で、配列の 2 番目の要素は図形ラベルです。この CreateDrawing プロシージャでは、ページの中央にハブを配置し、ハブを中心として円形にコンポーネントを配置しています。

この例では、次の手順を含め、図形を配置するためのいくつかの方法を示しています。

Public Sub CreateDrawing(arrNetData As String)
     Dim shpObjHUB As Visio.Shape
     Dim shpObjNodes As Visio.Shape
     Dim mstObj As Visio.Master
     Dim stnObj As Visio.Document
     Dim dblX, dblY As Double
     Dim dblDegreeInc As Double
     Dim dblRad As Double
     Dim dblPageWidth, dblPageHeight As Double
     Dim i As Integer
     Const PI = 3.1415
     Const CircleRadius = 2

     'Divide the circle by the number of objects in the array so they are spaced equally
     dblDegreeInc = 360 / UBound(arrNetData)
     'Read the PageWidth and PageHeight properties
     dblPageWidth = ActivePage.PageSheet.Cells("PageWidth").ResultIU
     dblPageHeight = ActivePage.PageSheet.Cells("PageHeight").ResultIU
     'Open the 3D Network Stencil
     Set stnObj = Application.Documents.OpenEx("基本ネットワーク 3-D.vss", visOpenDocked)
     'Process the hub shape
     Set mstObj = stnObj.Masters(arrNetData(0, 0))
     Set shpObjHUB = ActivePage.Drop(mstObj, dblPageWidth / 2, dblPageHeight / 2)
     'Set the text of the hub shape
     shpObjHUB.Text = arrNetData(0, 1)
     'Process the nodes
     For i = 1 To UBound(arrNetData)
          Set mstObj = stnObj.Masters(arrNetData(i, 0))
          'Determine X, Y location for placement (in circle around hub)
          dblRad = (dblDegreeInc * i) * PI / 180
          dblX = CircleRadius * Cos(dblRad) + (dblPageWidth / 2)
          dblY = CircleRadius * Sin(dblRad) + (dblPageHeight / 2)
          'Add shape to drawing in proper location
          Set shpobj = ActivePage.Drop(mstObj, dblX, dblY)
          'Set shape text
          shpobj.Text = arrNetData(i, 1)
     Next
End Sub

ページ上の位置決めに関する情報を取得するために、ページ シート プロパティを使用していることに注意してください。配列内の要素の数に基づいて X 座標および Y 座標を計算するために dblDegreeInc 変数を使用しています。この変数値を使用して、図形はハブを中心に均等間隔で配置されています。


図面ウィンドウに表示されるページ座標を計算するには、Window オブジェクトの GetViewRect メソッドを使用します。これらの座標を使用して、図形をウィンドウの中央に配置することができます。詳細については、Visio 製品付属のオンラインヘルプ「GetViewRect メソッド」([ヘルプ] メニューから [開発者用リファレンス] を選択) を参照してください。


Top