Visioの作図テクニック

# はじめに

## 本投稿の概要

Microsoft Visioでより思い通りに作図するためのテクニックを紹介します。

## ねらい
* Visioでシステムインフラ（特にネットワーク）の作図をする方を対象として記載しています
* [昨年の投稿](https://qiita.com/nw_admin/items/b23785e147fc613aa911)に載せたような図を思い通りに作図することを目的とします

# 用語定義

曖昧さを含む用語のみあらかじめ補足しておきます。

<dl>
  <dt>シェイプ</dt>
  <dd>図形オブジェクトのことをVisioではシェイプと表現します。<br>このうち、線のように始点・終点で位置と大きさ（長さ）を指定するものを1次元シェイプ、長方形のように座標・幅・高さで位置と大きさを指定するものを2次元シェイプと呼びます。
</dd>
</dl>

![キャプチャ1 - コピー.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/b0e61f0e-7240-acfb-3337-6f9f42bec464.png)

<dl>
  <dt>コネクタ</dt>
  <dd>1次元シェイプで、以下の特徴的な機能を持ちます。<br>①始点～終点までの経路の途中の折り曲げを自在に変更できる<br>②コネクタ同士の交点に飛び越し点を描写できる</dd>
</dl>

![キャプチャ3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/1765ec7b-f211-160e-792a-5c2afbfac8d4.png)

# テクニック1：接着ポイントを自作しよう
下図のように箱（2次元シェイプ）の間を線（1次元シェイプ）で接続するような作図をする際、箱に線を接着すると、箱の位置に応じて線が自動で伸びるので便利です。
しかし箱の幅・高さを変更すると線の間隔が変わってしてしまうデメリットもあります。

![キャプチャ4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/e0f868bc-0ee0-8ad9-1579-2dfedb68dabc.png)

そこで下図のように、接着に特化した透明な2次元シェイプ（接着オブジェクト）を自作し、線を接着オブジェクトに接着させます。
箱の位置を動かす場合、接着オブジェクトも一緒に範囲選択して動かせば従来のメリットと同じ動作を実現できます。
一方で箱の幅・高さを変更しても接着オブジェクトの位置は変わらず、デメリットを回避できます。

![キャプチャ5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/82bfbc99-5f87-b9ff-7a3d-1317faa41f16.png)

接着オブジェクトを用意する手間が増えるように見えますが、実際には線と接着オブジェクトをセットでコピペするだけなので手間は変わりません。

接着オブジェクトを利用するための準備は以下の通りです。

1. 接着オブジェクトとして適当な四角形を作成する
1. 接着オブジェクトの中心に接着点を設定する
1. 接着オブジェクトを適当な色で塗りつぶしつつ透明度を100%にする（色なしだとオブジェクトをクリックできない）
1. 接着オブジェクトの幅・高さ・塗りつぶし・線が変わらないよう保護にする（他の図形の書式変更に巻き込まれないようにする）
![キャプチャ6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/99531466-0dc5-65f3-81dc-28b3de7877bf.png)

1. 接続ポイントに対する接着、グリッドに対するスナップを有効化する
![キャプチャ20.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/dd496189-714d-da98-c6cd-9b66aa1c0a0c.png)

1. 接着オブジェクトの幅・高さにあわせてグリッドを設定する（箱や接着オブジェクトをスナップでグリッドに配置しやすいようにする）
![キャプチャ21.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/5bee5a6b-9642-3b6d-2fa4-eafd7eccc1f4.png)

1. 接着オブジェクトに対する動的コネクトを無効化する

  * 設定の仕方①（正しい設定の仕方）
    1. 接着オブジェクトを右クリックし「シェイプシートの表示」を選択する
    1. 「Glue Info」セクション＞「Glue Type」で「8」を設定する
![キャプチャ27.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/26e4a6f8-8b9c-ba12-214d-e37335624d6b.png)

  * ~~設定の仕方②（簡単）~~
    1. ~~接着オブジェクトの配置と迂回を無効化する~~
       →2022/10/7追記：接着オブジェクトの配置と迂回を無効にすると、接続オブジェクトの削除時にコネクタが自動削除されなくなりました。コネクタの自動削除は個人的には便利だと思っているので非推奨といたします。
        （どうやら本記事の公開時点からVisioの挙動が変わった模様？一時的な不具合かも？）
![キャプチャ28.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/bf05672a-ca9e-0e61-b1b4-aa33b824aa8b.png)


# テクニック2：飛び越し点の有無を使い分けよう

下図のように、①ケーブルを表すコネクタ と ②説明を表すコネクタ（色付き） がある場合、①同士の交点には飛び越し点を表示させたいですが、②同士の交点や①と②の交点では飛び越し点を表示させたくありません。

![キャプチャ22.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/d1faa9f5-50c0-07cc-484c-5c6570b0636e.png)

そこで②のコネクタに飛び越し点の非表示を設定します。

![キャプチャ8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/9e326884-300a-631d-86d7-dfe0bcd91fea.png)

なお、その他のコネクタには飛び越し点が表示されるようにページ設定をしてください。（デフォルトで表示されるので変更不要だと思いますが、念のため）

![キャプチャ9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/1af2e414-3bcb-55ec-ab38-b545ca0d34a2.png)

これで期待した表現になります。

![キャプチャ7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/5eca3a60-ba02-20a4-7b31-0158a3ae9651.png)

# テクニック3：シェイプを自作しよう

ネットワーク図においてVPNをトンネルで表現することが多いと思います。
Visioの基本図形の缶シェイプを利用してトンネルを表現できますが、下図（左側）の通り缶シェイプの方は円柱と穴の色を分けることができず、また2次元シェイプであるため向きの変更（回転）が少し手間です。
これらのデメリットを回避できるよう、下図（右側）のトンネルを自作してみましょう。

![キャプチャ10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/5b610e4a-4eb4-f3f1-0748-96039ec09452.png)

自作トンネルは二つのシェイプ（円柱部と穴部）から構成されており、それらの端点を同じ接着オブジェクトに接着することで重ね合わせています。

![キャプチャ11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/1e92dc52-b3ba-4f4e-dfb4-7d39c4528f70.png)

* 円柱部
  1. 「ホーム」タブ→「ツール」→線　を選択し、右から左向きに直線を引く
  1. 直線を右クリックし「シェイプシートの表示」を選択
  1. 「シェイプシートのデザイン」タブ＞「セクション」＞「挿入」で「User-defined Cells」をオン
  1. 「User-defined Cells」、「Geometory1」を下図の通りに変更

![キャプチャ12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/0c61c1ad-ef1e-1f24-2be1-2a2f4361f7cd.png)

* 穴部
  1. 「ホーム」タブ→「ツール」→線　を選択し、右から左向きに直線を引く
  1. 直線を右クリックし「シェイプシートの表示」を選択
  1. 「シェイプシートのデザイン」タブ＞「セクション」＞「挿入」で「User-defined Cells」「Geometory」をオン
  1. 「User-defined Cells」、「Geometory1」、「Geometory2」を下図の通りに変更

![キャプチャ13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/421ec889-0d8e-80e8-d576-a664f3487bc3.png)

もしトンネルの太さを変更したい場合は両方のシェイプの「User.A」の値を変更してください。

# クニック4：箱を1次元シェイプにしよう

箱の幅を定数長だけ長くする場合、箱が複数あると一々大きさを変えなければならず手間が掛かります。
箱を複数選択して引き延ばしてしまうと箱の大きさが倍率で変わってしまい、理想の挙動と異なります。

![キャプチャ14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/f2560f4c-67b5-1c32-4214-af9ccc82aa8d.png)

そこで下図のように箱を1次元シェイプとして自作し、両端の接着オブジェクトで大きさを変えられるようにします。（一見普通の2次元シェイプの箱と同じように見えますが、各種パラメータと比較すれば違いが分かるかと思います）

![キャプチャ16 - コピー.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/54b8eb88-ef06-8112-c936-12757ab68b32.png)

1次元シェイプの箱の端（今回は左下と右上）を接着オブジェクトに接着し、接着オブジェクトを操作すれば箱の幅を定数長だけ長くできます。

![キャプチャ17.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/c176a6b3-666c-a375-9590-147ce553e29e.png)

1次元シェイプの箱の作成要領は前述のトンネルと同様に直線をベースにして「Geometory1」のパラメータを変更します。
変更すべきセクションとパラメータを貼っておきます。

![キャプチャ18.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/941296/8423852b-230e-c0b5-d578-454ff5ba9db4.png)

なお普通は箱を2次元シェイプとして扱ったほうが直感的に操作しやすいです。使いどころは見極めてください。