ほとんどのドローイングプログラムは、2 次元図形座標を基準にしています。オブジェクトを描画すると、プログラムは水平方向と垂直方向の位置の集合としてそのオブジェクトを記録します。Visio® では、これらの位置を頂点と呼びます。方眼紙にオブジェクトを描画する場合と同様に、頂点は、ぺージの原点から測定され、線分で接続されます。
シェイプの各頂点を結びつける連続した直線あるいは曲線を"パス"と呼びます。多くのシェイプで、パスはそれぞれ [図形座標] セクションに対応しており、シェイプシート (ShapeSheet ®) ウィンドウに表示したり、オートメーション経由でアクセスすることができます。パスを定義する各頂点は、[図形座標] セクションの 1 つの行に相当します。パスには閉じたパスも開いたパスもあり、シェイプには複数のパス (複数の [図形座標] セクション) を作成することができます。詳細については、「第 6 章 図形のグループ化と合成」を参照してください。
シェイプの頂点をつなぐ連続した線分あるいは曲線はパスと呼ばれます。
Visio と他のドローイングプログラムの違いは、数式を使用して頂点の位置を制御できることです。シェイプを移動したり、サイズを変更したときの新しい位置を単に記録するのではなく、他の頂点あるいは他のシェイプと頂点との相対的な関係から位置を計算したり、ぺージのある位置に固定したりすることができます。数式を用いてシェイプを記述できるので、シェイプにより複雑で高度な動作をさせることができます。
次の図は、簡単な例を示します。左の四角形では、幅と高さは、それぞれ独立しています。つまり、どちらかを変更してもそれは他方には影響しません。ただし、右の四角形では、高さは幅を参照する数式を用いて計算されています。シェイプの幅を変更すると、高さの数式が高さを再計算し、シェイプの高さが変更されます。
シェイプに数式を設定する場合、Visio は数式にもとづいてシェイプの頂点を再計算します。
このセクションの内容...
最も便利で強力な数式は、シェイプのサイズあるいは位置を制御する数式です。シェイプの頂点はそれぞれ、x 座標と y 座標の対で記録されます。シェイプを移動したり、サイズを変更する場合、Visio は、そのシェイプの頂点への変更を記録し、新しい位置あるいはサイズでシェイプを再描画します。数式を用いて Visio シェイプを移動、反転、回転、あるいはサイズを変更するには、座標系でシェイプを記述する必要があります。
Visio では、さまざまな座標系を使用してシェイプを記述します。シェイプをどのように操作するかによっては、次の 3 つの座標系で作業する必要のある場合があります。
ローカル座標 シェイプの幅と高さは 2 つの「ローカル座標」軸になります。原点は、シェイプの幅-高さボックスの左下隅です。右上隅には座標 (「Width」、「Height」) があります。[図形座標] セクションは数式を使用して、シェイプを構成するパスの頂点のローカル座標を記述します。図面ぺージのどこにシェイプが置かれても、これらの数式を修正することによって、シェイプの外観を制御することができます。
ぺージ座標 図面ぺージのシェイプあるいはグループの位置は、「ぺージ座標」に記述され、この座標の原点はぺージの左下隅になります。ぺージ座標は、[ぺージ設定] ダイアログ ボックスに指定した寸法の単位でルーラーに表示されます。
親座標 Visio では、オブジェクトの位置を親からの相対値で表すこともできます。図面ぺージのシェイプでは、親座標はぺージ座標に相当します。ただし、シェイプがグループの要素で、その親がぺージではなくグループの場合、親座標はグループのローカル座標となります。この場合、親座標系の原点は、グループの幅-高さボックスの左下隅になります。
Visio では、異なる座標系を使用して、シェイプの頂点と位置を特定します。
ヒント ぺージ座標系の原点は移動することはできません。ただし、Ctrl キーを押しながら、2 つのルーラーの交点の十字マークをドラッグすることによって、ルーラーの上に表示されている座標のゼロ点を変更することができます。ゼロ点を移動してもぺージ座標系には影響しませんが、シェイプとシェイプとの間の距離を測定する場合にはゼロ点を移動すると便利です。
Visio は、[図形情報] セクションで親座標系を使用する数式を用いてぺージでのシェイプの幅、高さ、位置を表します。Visio は、シェイプの頂点の値を、[図形座標] セクションのシェイプの幅または高さの分数として表します。シェイプを移動、サイズ変更、あるいは回転すると、[図形情報] セクションに新たな数式が書込まれ、[図形座標] セクションの頂点数式が再評価されます。
たとえば、[図形情報] と [図形座標] セクションとともに示されている、次の図の四角形を考えてください。
四角形と、四角形の [図形情報] セクションおよび [図形座標] セクション
この四角形は、[Width] セルが「= 40mm」で、[図形座標] セルの 2 つの数式が「= Width*1」になっていることに注意してください。図面ぺージでシェイプが拡大されると、[Width] セルの値が大きくなり、その結果 [図形座標] セクションに指定されているローカル座標の値が変更されます。[図形座標] 数式は、「= Width*1」のままです。シェイプの頂点を設定する[図形座標] 数式は、すべてローカル座標で、シェイプの幅と高さを用いて表されます。
曲線を記述する (特に、自在曲線ツールを用いて曲線を描画する) 図形要素の種類は、直線を記述するよりもはるかに複雑なので、特定の図形要素の種類は、1 つの図形要素に多数の頂点を設定します。このような図形座標の要素の種類の詳細については、Visio 製品付属のオンラインヘルプ 「シェイプシート リファレンス ( [ヘルプ] メニューから [開発者用リファレンス] をポイントし、[シェイプシート リファレンス] をクリック)」を参照してください。
ぺージ上のシェイプの位置は、シェイプの Pin、つまり回転の中心点によって記述します。Visio では、 [図形情報] セクションで 2 つの座標セットを使用してシェイプの Pin の位置を保存します。
Pin はローカル座標と親座標でのシェイプの位置を表します。
Pin の作用をイメージするには、5 x 10cm の名刺にピン (画鋲) を刺して 1 枚の台紙の上に名刺を留めた状態を想像してください。台紙の上の名刺の位置は、ピンで開けた穴で表せます。
これが Visio での Pin の効果です。Pin のローカル座標 (名刺の穴) は (LocPinX, LocPinY) です。その親座標 (台紙の穴) は (PinX, PinY) です。名刺を台紙の別の位置にピン留めすると (これはシェイプを台紙の上で移動するのと同じですが)、名刺上の穴は名刺との関係では移動しません。つまり、ピンのローカル座標は変わらないということです。しかし、ピンの親座標が変更されるので、台紙の上には新しいピン穴ができます。
マウスを用いてぺージ上のシェイプを移動する場合、Visio は、ぺージ上のシェイプの新しい位置を反映して [PinX] と [PinY] の値を更新します。数式を使用してシェイプを移動するには、[PinX] と [PinY] の値を設定します。たとえば、次の図の矢印をぺージの上方向に 1cm 移動するには,次の数式を使用します。
PinY = 1.5 cm.
あるいは、次のような数式を使用してぺージ上の矢印の位置をぺージの幅と連動させることもできます。
PinX = ThePage!PageWidth - 5 cm.
デフォルトでは、Pin はシェイプの中心です。ローカル座標を使った式でこの位置を表すと、「Width*0.5、Height*0.5」になります。シェイプの Pin は次のいずれかの方法で移動することができます。
図面ウィンドウの回転ツールを使用して Pin を移動すると、シェイプがそのぺージの同じ位置になるように [PinX] と [PinY] の値も変更されます。
[図形情報] セクションには、Pin のローカル座標と親座標があります。
[PinX] セルと [PinY] セルの値は [図形サイズ・位置・回転] ダイアログ ボックスの [X] と [Y] に示された値に相当します。このダイアログ ボックスの [X] と [Y] の値を変更することによって、[PinX] と [PinY] の値を変更できます。
ユーザーがシェイプを移動あるいは拡大すると、[図形情報] セクションに新たな値が書き込まれ、[PinX] と [PinY] のセルを含めて、影響を受けたセルの数式は上書きされます。
ユーザーがシェイプを移動させないようにしたい場合は、GUARD 関数を使用して [PinX] と [PinY] の数式を保護することができます。[PinX] 数式をガードすると、ユーザーはシェイプを左右に移動することはできません。[PinY] の数式をガードすると、ユーザーは上下にシェイプを移動することはできません(当然、[PinX] と [PinY] の両方をガードすると、ユーザーはシェイプを全く移動することができません)。
たとえば、前の図に示された数式をガードするには、次のようにします。
PinY = GUARD(1 cm.)
PinX = GUARD(ThePage!PageWidth - 5 cm.)
ヒント [LockRotate]、[LockMoveX]、[LockMoveY] の各セルを設定すると、ユーザーがシェイプを回転したり、移動したりすることを防止できます。また、これらの設定により、その他の数式をガードして、ユーザーから操作できないようにすることもできます。保護ロックの詳細については、「セクション 6 ロックを使用したシェイプの動作の制限」を参照してください。