KoMaDo   VISIO SQUARE : 図形・操作  ■ Headline ■ HOME    

図形・操作トップへ ▼カッ飛び最後   全レスを表示

  閉じた図形自身が重なっている部分の塗りつぶし

01: 名前:damia投稿日:2007/11/16(金) 17:18
visio2003を使用しています。
CADから変換した図形の中に、閉じた図形自身が
重なっているものがあります。
これを塗りつぶしたいのですが、重なった部分がうまく
塗りつぶされません。

フレキシブルで幅のあるテープを使って、よじれないように、
英小文字筆記体「L」の形を作ったとします。
この「テープ」を塗りつぶすような操作をしたいのですが、
「テープ」が重なっている部分が塗りつぶされません。
「テープ」に囲まれた長円部を塗りつぶさず、重なった部分を
塗りつぶすようにする簡単な方法はないでしょうか。

今は、一度「図形」→「合成操作」→「切り出し」を行って、「テープ」に
囲まれた部分の塗りつぶしを解除するということをしていますが、
こういう箇所が大量にあって……。

02: 名前:yoda投稿日:2007/11/16(金) 19:43
合成捜査のメニューの下の方にある、結合(J)ではどうですか?

03: 名前:yoda投稿日:2007/11/16(金) 19:51
図形のシェイプシートを開くと、Fil Format というセクションがあります。
その中のFillForegndTransセルの値は、普通ゼロ%になっていますが、
これを、たとえば50%に変え、図形を重ねると、重なった部分の色が
濃くなります。

04: 名前:yoda投稿日:2007/11/16(金) 20:01
こんな感じになります。
http://www.mster.co.jp/visiosquare/cgi-bin/cbbs/file/1195210746.lzh [source] [check]

05: 名前:damia投稿日:2007/11/19(月) 10:15
ありがとうございます。でもちょっと違うのです。

 ┌──┐あるCADが出力した10個の座標値を元に
 │┌┐│左のような閉じた図形を描いて塗りつぶし
 └┘││ます。
┌──┘│左図の場合はvisio上でもまったく問題
└───┘ありません。

 ┌──┐ところが、同じ10個の座標値が左図のような
 │┌┐│図形を構成することがあります。座標値を
 ││││出力したCADでは、中央やや左下の
┌┼┼┘│┼┼
└┼┼─┘┼┼の内側も塗りつぶされているものとして
  └┘  扱うことになっていますが、visioでは、
この部分は塗りつぶされません。

  ┌──┐座標値を解析して、最初から左図のように
  │┌┐│描画させれば良い訳ではありますが、これは
  ││││VBAで作るにしてもなかなか大変そうです。
┌┘└┘│元の10個の座標値で描画したまま、
└┐┌─┘┼┼
 └┘  ┼┼の内側も塗りつぶすような方法はない
ものでしょうか。

06: 名前:yoda投稿日:2007/11/19(月) 11:37
これでは、どうですか?
手間はだいぶかかりますが、図形の数がおおいなら、マクロを
つくることも、考えた方がよいかもしれませんね。
http://www.mster.co.jp/visiosquare/cgi-bin/cbbs/file/1195439715.lzh [source] [check]

07: 名前:damia投稿日:2007/11/19(月) 12:14
ありがとうございます。
やはり、この、最初に書いたような方法しかないですか。

マクロを作るとなると、「中心の正方形を削除」するときに、
中心の正方形をどう選択するかで悩みそう……。

もう少し、悩んでみます。

08: 名前:yoda投稿日:2007/11/19(月) 13:56
どの方向を見ても、白いところがない図形を、
消せばよいのではないかと思います。

09: 名前:damia投稿日:2007/11/19(月) 17:29
目で見て判断して消す図形を選択するならそうなのですが、
CADからの読み込み時に自動で行いたいので……。
切り出しを行った後、削除すべき図形を自動的に判定することは
可能でしょうか。
05では、二重に重なっている例でしたが、三重、四重と
重なることもありえるので……。

閉じた図形自身が重なっている場合、xorではなくorで
塗りつぶすかどうかを決めてくれるようなオプションなどは、
ないものでしょうか。

10: 名前:yoda投稿日:2007/11/19(月) 19:51
こうすれば、中心の正方形を消さなくてもできるのでは、ないでしょうか。
http://www.mster.co.jp/visiosquare/cgi-bin/cbbs/file/1195469374.lzh [source] [check]

11: 名前:yoda投稿日:2007/11/19(月) 20:41
>閉じた図形自身が重なっている場合、xorではなくorで
>塗りつぶすかどうかを決めてくれるようなオプションなどは、
>ないものでしょうか。
私も、そういうのないかなと思って、探したのですが、
Visioには、なさそうでした。

12: 名前:visGeek投稿日:2007/11/20(火) 21:22
これでどうでしょうか。
http://www.mster.co.jp/visiosquare/cgi-bin/cbbs/file/1195561260.lzh [source] [check]

13: 名前:yoda投稿日:2007/11/22(木) 21:04
Visioの塗りつぶしのアルゴリズムは、最初に出会った境界から塗り始め
次に出会った境界で塗り終わる、というような方法のようですので、
自分自身の図形が重なり合ったところを、白抜きにしてしまうようです。
これは、VBAのSpatialNeighborsプロパティでも、同様のようです。
そこで、自分自身との交わりを、白ぬきにしてしまうことを、避けるには、
別のアルゴリズムを使って、塗りつぶす必要があります。
図形の外形線を、シェイプシートのGeometryセクションで見ると、
また、新しくアップロードBBSにアップした図
http://www.mster.co.jp/visiosquare/cgi-bin/cbbs/file/1195732259.png [source] [check]
のように、外形線に方向性がありますから、このことを利用した方法で、
ユーザー独自にラスターを引いて、塗りつぶしをする、そのような方法を
考える必要があるような気がいたします。

14: 名前:yoda投稿日:2007/11/23(金) 09:11
上の図がさらに複雑に絡み合うと、もう、一筋縄では、ゆかない
ようにみえます。

下のURLのサイトにも、ちょっと書いてありますが、
http://www.hyuki.com/yukiwiki/wiki.cgi?VectorDrawing [source] [check]
主題のように、自分自身に交わる図形のことを、自己交差する図形
というようです。そして、自己交差図形は、自己交差しない、
いくつかの図形に分割して、塗りつぶしを行うようです。

そういうアルゴリズムは、多分Visioでは、採用していないでしょうから、
そういうアルゴリズムを採用しているソフト(あるかどうか知りません)
に持っていって、塗りつぶしをする必要があるのかも、知れませんね。

質問者様のご質問にあった、集合論演算の機能があったとしても、
自己交差図形には、多分、適用できないでしょう。


図形・操作トップへ ▲カッ飛び先頭   全レスを表示