2009年5月25日月曜日

Visioでオブジェクトのテキストを常に水平に表示(に見せかける)

Microsoft のVisioで図を描くとして、オブジェクトにテキストを載せたとします。
通常、オブジェクトを回転させたらテキスト部分も一緒に回転するけど、それを自動で水平に保つやり方。
 

だいぶ前にそういう動作をする図を見て、少々ヘルプなど見てもどうやるかわからなかったのでほっといたんだけど、VISIOの解説書(MSのサイトを分かり易く再編) 見ながらシェイプシートのいじり方を見ていたら分かった。
 

ちなみに試したVisioは2003、資料は2000用だった、多分2007でも似たようなもんだろう。
 
 

デフォルトの動作を確認


 

[caption id="attachment_1323" align="alignnone" width="377" caption="画像:オブジェクト+テキスト"]画像:オブジェクト+テキスト[/caption]
 

矢印を作ってテキストを乗っける、これに角度をつけていくと、
 

[caption id="attachment_1325" align="alignnone" width="313" caption="画像:角度をつける"]画像:角度をつける[/caption]
 

このくらいなら見れる、が、もう少し角度をつけると...
 

[caption id="attachment_1326" align="alignnone" width="285" caption="画像:90度を超えて回転"]画像:90度を超えて回転[/caption]
 

読みづらっ。
 

こういうのは 「テキスト ブロック ツール」を使ってテキスト部分だけ回転してあげればいいんだけど、
 


[caption id="attachment_1324" align="alignnone" width="347" caption="画像:テキストを水平に表示"]画像:テキストを水平に表示[/caption]
 

読みやすくすることはできたが、毎回調整するのも面倒。
これをシェイプシートを調整することで、矢印を少々回転させても、テキストが水平方向に保たれるようにできる。
 
 


シェイプシートを開く


たまたま見つけたVISIOの解説書を読んで、Visioはドロー系で、オブジェクトはベクタで管理しているというのを認識した。そういえばそうなんだよなー。
テンプレ使って、適当に線引いてりゃそれなりの図が描ける、GUIが楽なので普段全然意識しなかったな。
 

で、オブジェクト情報は シェイプシート というのに保管されていると。
調整したいオブジェクトを選択して、ファイルメニューからシェイプシートを開く。
 

[caption id="attachment_1327" align="alignnone" width="310" caption="画像:シェイプシートの開き方"]画像:シェイプシートの開き方[/caption]
 

[caption id="attachment_1328" align="alignnone" width="738" caption="画像:シェイプシートを開いた"]画像:シェイプシートを開いた[/caption]
 

結構いじり甲斐のありそうなものが出てきたな。
 
 

シェイプシートで、テキスト領域の動作を変更する


で、シェイプシート内の「Text Transform」セクションの 「TxtAngle」という行がテキストブロックの向きを決定している。
しかし初期状態では「Text Transform」セクションが表示されていなかったり(※)するので、セクションを手動で追加する。
※ 「テキスト ブロック ツール」で一度でも角度を調節していれば表示されている。
 

シェイプシートの適当なところで右クリック、操作したいセクションを挿入する。
[caption id="attachment_1329" align="alignnone" width="663" caption="画像:セクション追加01"]画像:セクション追加01[/caption] 
 

[caption id="attachment_1330" align="alignnone" width="327" caption="画像:セクション追加02"]画像:セクション追加02[/caption] 
 

ここでは「Text Transform」やね。
 

[caption id="attachment_1332" align="alignnone" width="670" caption="画像:TxtAngle 行"]画像:TxtAngle 行[/caption]
 

「TxtAngle」があることが確認できる。
ここを変更することでテキストブロックの角度を調節することができるんだが...
 
 

テキストブロックは、相対座標で管理されている


"TxtAngle=0" なら、これを保護して常に "0" になるようにすればいいんじゃないかと思いきやそうではない。
実際に矢印を回転させるとわかるけど、ここは0から動かない。オブジェクトのベースからの相対的な角度という扱いなので、ベースが斜めなら斜めに表示される。
 
GUIからテキストブロックの回転を保護しても、ベースにつられてくるくる回るのはこういう仕組みだからとここでやっと気付いた。。もしかして常識なのかもしれないが、数字で見るまでは気付かないもんだ。
 

ではどうすりゃいいかってのが、『ベースが x度 傾いたらテキストは反対向きにx度( -x度 )傾ける。』というやりかた。
 

このベースの角度に対応するのが、「Shape Transform」の「Angle」、これを利用て常に角度を自動調整させないと、テキスト水平の野望は達成できない。
なるほどねー、"=GUARD(0 deg)" とかではできないわけだ。
 
 


テキストブロックの角度を、シェイプの角度に対応させて反対に傾ける


「Shape Transform」の「Angle」、これはそのまま変数として利用できるので「TxtAngle」に突っ込む。
 


[caption id="attachment_1333" align="alignnone" width="254" caption="画像:TxtAngle調整01"]画像:TxtAngle調整01[/caption]
 

[caption id="attachment_1324" align="alignnone" width="347" caption="画像:テキストを水平に表示"]画像:テキストを水平に表示[/caption]
 

これまでを踏まえて、「TxtAngle」 に"-Angle" と入力。これでテキストブロックはオブジェクトと逆向きに回転してくれ、結果的に水平に表示される。
 
 

他の要素を評価して、左右反転にも対応


折角なのでちょっと応用する、"TxtAngle = -Angle" のまま、左右反転してみよう。
[caption id="attachment_1334" align="alignnone" width="288" caption="画像:対策なし左右反転"]画像:対策なし左右反転[/caption]
 

(ノ∀`)アチャー
左右反転したということで、"-Angle"では反対の反対で2倍なのだ。
 

シェイプシートでみると、『オブジェクトを左右反転させる=「Shape Transform」の「FlipY」フラグTrue』 ということになっている。
[caption id="attachment_1335" align="alignnone" width="655" caption="画像:左右反転のフラグ"]画像:左右反転のフラグ[/caption]
 

ならこれをチェックさせて、TxtAngleを調整させればOKだというわけで。
[caption id="attachment_1336" align="alignnone" width="656" caption="画像:分岐ありのTxtAngle"]画像:分岐ありのTxtAngle[/caption]
 

適当に入れたIF文だったが...
 

[caption id="attachment_1337" align="alignnone" width="258" caption="画像:左右反転してもテキスト水平"]画像:左右反転してもテキスト水平[/caption]
 

全く普通に動作してくれた、もっと考慮すべき条件はいろいろあると思うけど、大体これの応用でいけそうだ。
 
 
 


Visioの情報は探しにくい?


VISIOの解説書 の序文にもあるが、ここらは全部MSの公開しているドキュメントに載っているはずなんだけど、えらい探しにくい。
昔調べた時は、全然わかんなかったもんなぁ。
 

ということで、この記事も間接的にVisioの情報にたどり着くヒントになったら良いなということも込めて作成。
よりよいやり方は公式参照。