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

第 20 章 VISIO ソリューションとデータの統合

セクション 4   データから Visio 図面を作成するためのコードの作成

Visio® 図面からデータを抽出して別のアプリケーションで使用できるように、他のソースからのデータを使用して図を作成することができます。たとえば、ネットワーク コンポーネントの発注書情報を使用して設置図を作成したり、従業員のデータベースからデータを抽出して組織図を作成できます。

どのような図面を作成するかにかかわらず、コードの記述を開始する際には、設計上重要な点をあらかじめ決定しておく必要があります。

このコード例では、データベースの内容から簡単な図を作成する方法を紹介します。

このセクションの内容...

データからの図面の作成 : 例

データから図面を作成するためのコードの検証

データからの図面の作成 : 例

発注書から抽出したデータを使用して、ネットワークの設置図を作成するアプリケーションを作成するものとします。セールスが完了して発注書がデータベースに入力されると、以下の例のようなオートメーション プログラムによってデータベースからレコードが抽出され、これを使用して設置を担当する作業員用の図面を作成します。この例では、まずコードによってデータベース レコードのフィールドと特定のステンシルのシェイプを関連付けます。次に図面ページにこれらのシェイプのインスタンスをドロップし、他のフィールドからの情報を図形のカスタム プロパティとして追加します。

 



データベース内のレコード

営業員が入力したデータに基づいて、顧客のネットワーク内の新しい機器を構成する図面が作成されます。

 



データベース レコードから作成した設置図

Microsoft Visual Basic for Applications (VBA) を使用して、以下の例のようなコードを作成できます。このコードでは、使用するステンシルを含むテンプレートから新しい図面を作成し、データベースから読み込まれたデータに基づいた図形をその図面に配置しています。この例では、ハブの図形がページの中央に配置され、ハブには円状にノードが接続されています。この例の各図形には、顧客の希望しているコンポーネントの構成についての営業員のメモのテキストが表示されます。

このコードの詳細については、「データから図面を作成するためのコードの検証」を参照してください。

Public Sub CreateDrawing()
     
     Dim shpObjHUB As Visio.Shape
     Dim shpObjNodes As Visio.Shape
     Dim shpObjConnector As Visio.Shape
     Dim mstObjConnector As Visio.Master
     Dim mstObj As Visio.Master
     Dim stnObj As Visio.Document
     Dim dX, dY As Double
     Dim dDegreeInc As Double
     Dim dRad As Double
     Dim dPageWidth, dPageHeight As Double
     Dim i As Integer
     
     Const PI = 3.1415
     Const CircleRadius = 2
     
     Dim arrNetData() As String
     
     'Read data
     InitData arrNetData
     
     'To place shapes in even increments around the circle, we divide 360 by the
     'total number of items in the array
     dDegreeInc = 360 / UBound(arrNetData)
     
     'Read the Page Width and Height properties
     dPageWidth = ActivePage.PageSheet.Cells("PageWidth").ResultIU
     dPageHeight = ActivePage.PageSheet.Cells("PageHeight").ResultIU
     
     'Open the Basic Network Shapes 3D 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, dPageWidth / 2, dPageHeight / 2)
     
     'Set the text of the hub shape
     shpObjHUB.Text = arrNetData(0, 1)
     
     'Get the Connector master
     Set mstObjConnector = stnObj.Masters("下→上コネクタ- 角度付き")
     
     '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)
          dRad = (dDegreeInc * i) * PI / 180
          dX = CircleRadius * Cos(dRad) + (dPageWidth / 2)
          dY = CircleRadius * Sin(dRad) + (dPageHeight / 2)
          'Add shape to drawing in proper location
          Set shpObj = ActivePage.Drop(mstObj, dX, dY)
          'Set shape text
          shpObj.Text = arrNetData(i, 1)
     
          'Connect the current node to the hub
          Set shpObjConnector = ActivePage.Drop(mstObjConnector, 0, 0)
          shpObjConnector.SendToBack
          'Glue Begin point to the hub shape
          shpObjConnector.Cells("BeginX").GlueTo shpObjHUB.Cells("Connections.X1")
          'Glue the end point to the node that was just added
          shpObjConnector.Cells("EndX").GlueTo shpObj.Cells("Connections.X1")
     Next
End Sub

TOPへ

データから図面を作成するためのコードの検証

上記のコード例は、プログラムの設定、ハブ シェイプのページへの追加、ノード シェイプのページへの追加とハブへの接続という 3 つの部分で構成されています。

プログラムの設定

コードの最初のセクションでは、プログラムが使用する定数と変数が定義されています。次に、作成される図面の元となるデータを含む配列が定義され、初期化されています。最後に、ページのサイズが指定され、この図面に使用されるステンシルが開かれます。指定されたページのサイズは、後でハブ シェイプを中央に配置する場合に使用されます。より高度なソリューションでは、ユーザーが開くステンシルを選択できるようにコードを設計することもできます。また、この例のようにステンシル情報をコードに記述するのではなく、データの一部としてインポートされるようにコードを作成することもできます。

ハブ シェイプのページへの追加

このプログラムでは、ノードは図面ページの中央にあるハブに接続されています。コードの次のセクションでは、インポートした配列を読み取ってハブ シェイプに使用するマスタシェイプを判断し、ページの中央にそのマスタシェイプのインスタンスをドロップしてシェイプ テキストを設定します。次に、コネクタのシェイプが指定されますが、ノードのシェイプが図面に追加されるまでこのインスタンスはページ上にドロップされません。

ノード シェイプのページへの追加とハブへの接続

このプログラムの最後の部分には、インポートした図形の各レコードのフィールドと開いているステンシルのマスタシェイプを対応させるループが含まれています。使用するマスタシェイプが確定すると、シェイプのインスタンスの位置が決定され、図形がハブの周囲を円状に囲むようにページに追加されます。シェイプが正しい位置にドロップされると、先に確定されていたコネクタのシェイプがページに追加されます。コネクタのシェイプの始点はハブのシェイプに接続され、終点は新しいノードのシェイプに接続されます。この処理が配列内の各レコードに対して繰り返され、完了すると図面が完成します。

Top