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

第 9 章 テキストの動作の設計

セクション 3   テキストの回転の制御

図形を回転してもテキストが逆さまになるのを防ぐために、テキストの回転を制御することができます。デフォルトの設定では、図形を回転すると テキストブロック も一緒に回転しますが、90°から 270°の間で回転するとテキストが読みにくくなることがあります。読みやすさが大切な図面を設計する場合、次のいずれかの方法でテキストの回転動作をユーザー設定できます。

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

テキストを回転制御する [スマートシェイプ ウィザード] の使用

Gravity 式

水平を保つためのテキストブロックを逆方向へ回転する式

テキストブロックのサイズの制限 : 例

テキストを回転制御する [スマートシェイプ ウィザード] の使用

[スマートシェイプ ウィザード] で GRAVITY 関数を使用すると、テキストが逆さまにならないようにしたり、テキストブロックとは逆方向へ回転する式でテキストブロックがページの底辺といつも水平になるようにしたりできます。さらに、回転を制御したテキストブロックを、図形の中心に配置するか、図形からオフセットして配置するかを選択できます。たとえば、次の図に示すテキスト ポインタは、背景色が塗りつぶしで図形の中央にくるように制御されています。一方、たとえば道路のシェイプを設計するような場合、道路を示す線から少し離れた場所に通りの名前を入れたい場合もあります。

 



テキストを図形と一緒に回転させることも、回転しないようにすることもできます。デフォルトの設定では、テキストが逆さまになります (A)。Gravity 式を使用すると、テキストブロックの向きを調節できます (B)。水平式はテキストブロックを逆方向へ回転させ、テキストブロックをページの底辺と水平に維持します (C)。

回転は累積的です。テキストブロックを回転してから図形を回転すると、テキストブロックは図形の回転量とテキストブロックの回転量をあわせた分だけ回転します。

スマートシェイプ ウィザードを使って、いつも水平な、または角度によって向きを変えるテキストを作成するには

  1. 図形を選択し、[ツール] メニューから [マクロ] をポイントします。次に、[Visio エキストラ] をポイントして [スマートシェイプ ウィザード] を選択します。
  2. [スマートシェイプ オプション] で、[図形のテキストの動作を決める] を選択し、[オプション変更] をクリックします。
  3. [テキストの回転] 画面が表示されるまで [次へ] をクリックし、[いつも水平] または [角度によって向きを変える] を選択します。
  4. 画面の指示に従って、ウィザードを終了します。

TOP へ

Gravity 式

角度によって向きが変わるようにすると、 [テキスト情報] セクションに次のような数式が追加されます。

TxtAngle = GRAVITY(Angle, -60deg., 120deg.)

GRAVITY 数式では、図形の回転に対するテキストブロックの回転量が計算されます。Angle 変数は、図形の現在の回転量を示しています。Angle の値が 2 つの角度で定義された範囲 (上記の例では - 60°と 120°) に収まる場合、数式によって値 180°が返されます。テキストブロックは 180°回転して読みやすい向きになります。Angle がこの範囲外になると、数式は値 0°を返し、テキストブロックは回転されません。この数式を使用すると、ほとんどの回転角でテキストはまっすぐ保たれます。GRAVITY 式の構文の詳細については、VISIO 製品付属のオンラインヘルプ「開発者用リファレンス」 ([ヘルプ] メニューから [開発者用リファレンス] を選択) を参照してください。

 



GRAVITY を設定しないと、120°から 300° (つまり - 60°) (A) 回転したテキストは逆さまに表示されます。

テキストブロックを図形からオフセットすると、[TxtPinX] セルと [TxtPinY] セルが追加され、図形のサイズとテキストの量に応じてテキストブロックの Pinの位置が調節されます。

TOPへ

テキストを水平に保つためにテキストブロックの逆方向へ回転する式

スマートシェイプ ウィザードを使用して水平に保たれるテキストを作成すると、[テキスト情報] セクションに次の数式が追加され、テキストブロックが図形の回転とは逆方向に回転します。

TxtAngle = IF(BITXOR(FlipX, FlipY), Angle, -Angle)

この数式は、図形が反転されたかどうかをチェックし、その情報に基づいて角度を決定します。図形を両方向に反転したか、全く反転していない場合 ([FlipX] と [FlipY] が両方とも TRUE か両方とも FALSE)、BITXOR 式が FALSE になり、IF 式が - Angle を返します。図形を一方向にしか反転していない場合 ([FlipX] か [FlipY] が TRUE)、元の角度が保たれます。[FlipX] セルと [FlipY] セルには FALSE (0) か TRUE (1) 以外の値が入ることはありません。

図形を全く反転していない場合は、もっと簡単な数式でテキストブロックを逆方向に回転できます。

TxtAngle = -Angle

テキストブロックを回転 ([TxtAngle] が 0 °) してから図形を回転すると、テキストの表示角度は [TxtAngle] と [Angle] の合計になります。

TOP へ

テキストブロックのサイズの制限 : 例

[スマートシェイプ ウィザード] を使用すれば、大半の場合はいつも水平に保たれるテキストを作成できますが、それだけでは不十分なこともあります。小さな図形でテキストをいつも水平を保つようにすると、長いテキストを入力した場合や特定の角度まで回転したときに、テキストが覆い被さって図形が見えにくくなることがあります。このようなときに、テキストブロックの幅を制限して図形を見やすくする数式があります。

 



図形のテキスト動作を設計する際に、テキストで図形が隠れてしまわないようにしたい場合。

  1. 中央揃えをした水平のテキストは、回転の仕方によっては図形を覆い隠すので、デフォルトの設定ではテキストブロックの幅が制限されています。
  2. スマートな式を使えば、図形の回転に応じてテキストブロックの幅が拡がります。

いつも水平を保つテキストブロックの幅の制限

1 次元の矢印などの短い図形では、テキストを逆方向に回転させて水平にするだけでは不十分です。図形を回転させると、上の図のように、テキストが図形の一部を隠してしまうことがあります。これは、テキストブロックが図形の中心に配置されていて、背景が不透明のときに起こります。図形を回転したりテキストの量を増やしたときに、必要に応じてテキストブロックを水平に保ったり、幅を調整する数式を記述します。

水平を保つためにテキストブロックを逆方向へ回転する式」で説明した逆方向へ回転する式を使用する場合、図形が回転してもテキストブロックは水平のままです。デフォルトの [テキスト情報] セクションの式では、テキストブロックの幅が図形の幅に制限されますが、図形が回転して引き伸ばされてしまうと実用性を欠くことがあります。このため、たとえば次のような式を使って、図形の回転が 15°以内のときにだけテキストブロックの幅が図形の幅に制限されるようにします。

  Scratch.A1
  Scratch.B1
  TxtWidth
  TxtHeight
  TxtAngle

= DEG(MODULUS(Angle, 180 deg.))
= AND(Scratch.A1 >= 15 deg., Scratch.A1 <= 165 deg.)
= MAX(0.5 cm., IF(Scratch.B1, 2.5 cm., Width - 0.25 cm.))
= 0.25 cm.
= IF(BITXOR(FlipX, FlipY), Angle, -Angle)

上記の [TxtWidth] セル中の数式は、テキストブロックの幅を少なくとも 0.5 cm に保って読みやすさを維持します。図形が [スクラッチ] セクションの [B1] セルに定義された制限値よりも大きく回転すると、テキストブロック幅は 2.5 cm に設定されます。この制限値以内であれば、図形から 0.25 cm を引いた値が設定されるため、テキストによって図形が隠されることはありません。[Scratch.B1] セルの数式は回転テストを行うためのものです。このテストでは、テキストブロックの幅が図形の幅によって制限されている時は FALSE、テキスト幅に制限がないときは TRUE が返されます。[A1] セルの数式は、図形の角度を 0°から 180°の範囲に正規化し、水平方向を基準とした角度を求めます。

これらの数式は、通常は問題なく機能しますが、ほぼ水平でテキスト幅の広い短い図形では、思ったように機能しないいこともあります。図形の幅と入力されたテキストの量を考慮したさらに高度なソリューションもあります。ただし、高度な動作の利点とソリューションのパフォーマンスに対する影響の間のバランスを考える必要があります。

図形からオフセットされる水平なテキストブロックの制御

[スマートシェイプ ウィザード] を使用して、図形のテキストブロックを水平に保ちながら、同時に図形からのオフセットを設定することができます。たとえば、空間設計では、家具の位置や向きを変えても文字の向きは変えずにおく方がよいことがありますが、テキストブロックの配置や図形の回転方向、テキストの量などによっては、テキストブロックによって図形が隠れてしまうことがあります。このような場合は、テキストブロックが一定距離 (オフセット) 以上図形に近づかないように数式を記述することができます。

 



図形からオフセットされた水平なテキスト

  1. テキストブロックの最も近い角が図形の横からオフセットされます。
  2. テキストを追加すると、テキストブロックが図形に重ならないようにオフセットが調節されます。

このように動作させるには、次のような数式を使います。

  TxtWidth
  TxtHeight
  TxtAngle
  TxtPinX
  TxtPinY

= MAX(8 * Char.Size, TEXTWIDTH(theText))
= TEXTHEIGHT(theText, TxtWidth)
= IF(BITXOR(FlipX, FlipY), Angle, -Angle)
= Width + (TxtWidth/2 * ABS(COS(Angle)) + TxtHeight/2 * ABS(SIN(Angle)))
= Height/2

[TxtWidth] セルと [TxtHeight] セルを使えば、テキストの量に応じてテキストブロックのサイズを変更することができます。[TxtAngle] セルの、テキストブロックを逆方向へ回転する式によってテキストが水平になります。テキストブロックの Pin (TxtPinX) のオフセットは、図形のローカル座標系で、テキストブロックの横の部分が図形の端よりも外側にくるように調節されます。次の図は、オフセットが線 1 と線 2 の合計になることを示しています。

 



テキストブロックのオフセットの算出

  1. 図形の端
  2. TxtWidth/2
  3. TxtHeight/2
  4. TxtPinX オフセット = 1 + 2

線 1 は、斜辺が TxtHeight/2 に等しい直角三角形の短辺です。この辺の長さは、[図形情報] セクションの [Angle] セルで計算されます。

Line 1 = ( [TxtHeight] /2) * ABS(SIN(Angle))

線 2 は、斜辺が TxtWidth/2 に等しい直角三角形の短辺です。この辺の長さは次のように計算されます。

Line 2 = (TxtWidth/2) * ABS(COS(Angle))

図形を負の方向に回転してもオフセットは常に正の値になります。これは、線 1 と線 2 に絶対値を返す ABS 関数が使われているためです。このようにしてオフセットを計算すると、どのように回転しても図形とテキストブロックとが重なることはありません。

Top