strange items(楽天)


shade10.5〜15用スクリプト(WINDOWS&MAC用)一覧はこちらです。


bannerst.jpg
リンク用のバナーです。
リンクはご自由にどうぞ。

2009年11月16日

shade用スクリプトその23(ポリラインペンツール・近くの頂点へウェルド)

新)ポリラインペンツール101226.txt

旧)ポリラインペンツール.txt

旧)ポリラインペンツール.txt

旧)ポリラインペンツール.txt

shade12で使用すると、複数の頂点選択時に選択が解除されるまで妙な待ち時間が発生する不具合を修正しました。(2010.12.26)
接続辺のない頂点を選択状態で実行すると機能しなかったバグを修正しました(2010.01.20夜)
特定の頂点を選択状態で実行すると機能しなかったバグを修正しました(2010.01.20)
上位パートの変換マトリクスに変換がかかっていても使えるように修正しました。ただし、ローカル座標モードや、ろくろ機能をONにしてる場合は旧版同様おかしい場所に生成されます。グローバル座標モードでご利用ください。(2009.12.19)

*今回のスクリプトは、ショートカットキーへ登録してから使用する事を前提としています。
スクリプトウインドウにテキストをコピペした後、shadeのscriptフォルダに保存し、shadeを再起動してからショートカットキーに登録してください。

なお、上位パートに変換マトリクスがかかっていると、作成される頂点の位置がおかしい事になりますのでご注意ください。

ポリゴンメッシュにポリラインを追加する場合、shade標準の機能ではzキーを押しながら頂点にカーソルをあわせてそこからドラッグを開始するという、ちょっと使い勝手が悪い風になっています。
これをもっと効率化できないかと考え、当初はshade標準の「開いた線形状ツール」で線形状を描いてもらい、それをスクリプトでポリゴンメッシュに変換して、真上(兄階層)にあるポリゴンメッシュにマージする……という方法を考えてスクリプトを作成してみたのですが、途中でより作業効率の良い別のアイデアが浮かんだため、今回はこの「ポリライン ペンツール」の方を公開する事にしました。


この「ポリライン ペンツール」スクリプトは、「現在選択してる形状がポリゴンメッシュか、そうでないか」で動作が異なり、またポリゴンメッシュを選択してる場合でも、「頂点を一つ選択してるか・ひとつも選択してないか」で動作が異なります。
ちなみに、ポリゴンメッシュを選択してる場合は、「編集モードに入っていない」場合や「頂点編集モードではなく、辺編集モードや面編集モードになっている」場合は機能しないようにしています。


<1.選択形状がポリゴンメッシュでない場合>
選択形状がポリゴンメッシュではない場合にショートカットキーに登録したスクリプトを実行すると、ポリゴンメッシュの作成モードに入り、現在カーソルがある位置に頂点を一つ作成し、その頂点を選択状態にしてスクリプトの動作を終わります。

ポリラインペンツール001.png
windowsのprintscreenキーでは何故かカーソルがキャプチャーされないためカーソルが映ってませんが…、
ポリラインペンツール002.png
カーソルのある位置に頂点が作成されスクリプトの動作が終了します。頂点は選択状態となります。
(ブラウザでは「ポリゴンメッシュ」が新たに作られています。)


<2.選択形状がポリゴンメッシュで、頂点を一つも選択していない場合>
選択形状がポリゴンメッシュで、頂点を一つも選択していない状態でショートカットキーを押してスクリプトを実行すると、現在カーソルがある位置に頂点を追加し、その頂点を選択状態にしてスクリプトの動作を終了します。
(つまり選択しているポリゴンメッシュに、エッジを持たない頂点を一つ追加します。)

ポリラインペンツール003.png
ポリゴンメッシュを選択状態で頂点編集モードに入り、頂点を一つも選択してない状態でスクリプトを実行すると…
ポリラインペンツール004.png
ポリゴンメッシュに頂点が一つ追加されると。(カーソルの位置に)


<3.選択形状がポリゴンメッシュで、頂点を一つだけ選択している場合>
選択形状がポリゴンメッシュで、頂点を一つだけ選択している場合(その頂点を仮に頂点Aとします)、まずはカーソルがある位置に頂点を一つ追加(頂点Bとします)し、次に頂点AとBの間にエッジを張ります。最後に頂点B「だけ」を選択状態にしてスクリプトの動作を終了します。

ポリラインペンツール005.png
頂点を一つのみ選択状態でショートカットキーを押してスクリプトを実行すると…
ポリラインペンツール006.png
カーソルのある位置に頂点を追加した後、選択していた頂点と新たに追加された頂点の間にエッジを張ります。
そして、追加された頂点だけが選択状態になってますので、この状態でカーソルを移動してまたショートカットキーを押してスクリプトを実行すると…
ポリラインペンツール007.png
また頂点とエッジが追加されます。
またカーソルキーを動かしてショトカットキーでこの「ポリライン ペンツール」スクリプトを実行を繰り替えすと…
ポリラインペンツール008.png
ポリラインペンツール009.png
……と、shade標準のzキーを押しながらポイントとエッジを引き出すのに比べて、かなり高速にエッジを追加していけます。

ちなみに、選択頂点数が2個以上の場合、このスクリプトを実行すると頂点を全て非選択状態にします。(それ以外の動作はしません)
ctrlキーを押しながら何もないところをクリックする事でも頂点の全選択解除は可能ですが、いちいちctrlキーに指を移動しなくても、ドラッグ選択(矩形選択)で頂点を二つ以上選択してスクリプトをショートカットキーで実行すると全選択解除できるようにしました。
既存の頂点からエッジを引き出すのではなく、離れたところに頂点を作ってそこからポリラインを描いていきたい場合は、この方法で全ての頂点を一度非選択状態にしてから、スクリプトを再実行してカーソル位置に頂点を追加し、そこからポリラインを描いていくとより作業効率が良いと思います。
ポリラインペンツール010.png
わざと2個以上選択して「ポリラインペンツール」を実行すると
ポリラインペンツール011.png
全選択解除されます
ポリラインペンツール012.png
あとはカーソル位置に頂点を追加し、
ポリラインペンツール013.png

ポリラインペンツール014.png
カーソルを動かしてスクリプト実行を繰り返し、ポリラインを描いていきます。


<補足、頂点の選択の仕方と三次元カーソルの座標について>
頂点を一つ選択する場合、「ドラッグ選択(矩形選択)」と、「クリック選択」では三次元カーソルの座標が変わらない・変わるという違いがあります。

例えば現在のカーソルのクリック位置(最後にクリックしたカーソル位置)のY座標が0だとします。
この状態で、上面図でY座標が100である頂点を「ドラッグ選択」で選択状態にしても、カーソルのY座標は変化しません。
しかし、上面図で同じ頂点を「クリック選択」すると、カーソルのY座標は100に変化します。


ポリラインペンツール015.png
正面図から見て、このようにY座標が異なる頂点A(左)と頂点B(右)があったとします。
現在のクリック位置のY座標は画像に映ってる横線のように頂点Aにかなり近い高さとなっています。

ポリラインペンツール016.png
上面図でBをドラッグ選択した後、
ポリラインペンツール017.png
上面図上でカーソルを動かして「ポリライン ペンツール」で頂点とエッジを追加すると…
ポリラインペンツール018.png
正面図から見ると追加された頂点のY座標は元のままとなっています。

ポリラインペンツール019.png
上面図でBをクリック選択した場合は、クリックした瞬間にY座標がBにあわせられますので…
ポリラインペンツール020.png
上面図でカーソルを動かして「ポリライン ペンツール」で頂点とエッジを追加すると…
ポリラインペンツール021.png
正面図から見ると追加された頂点のY座標は頂点BのY座標と同じになっています。


頂点の選択の仕方によって、「クリック位置が変わらない・変わる」が異なってきますので、この点に留意すると、三面図や透視図で作業する際に、追加される頂点の位置が制御できるようになるでしょう。



「ポリライン ペンツール」では、既存の頂点の近くに頂点を作成しても、shade標準のzキードラッグでエッジを引き出す場合と異なり、頂点のマージは行われません。
そのため、以下の「近くの頂点へウェルド」というスクリプトも用意しました。

新)近くの頂点へウェルド2010.02.08.txt

旧)近くの頂点へウェルド.txt

「作業平面の設定」スクリプトと併用する事で上面図や正面図、側面図で見て一番近くの頂点へウェルドできるようになりました。(2010.02.08) 


これもショートカットキーに登録して使用する事を前提としており、また「ポリライン ペンツール」スクリプトと併用することによって真価を発揮しますので、「ポリラインペンツール」を登録したキーのすぐ近くのキーにショートカットキー登録する事をお勧めします。

これはどういうスクリプトかというと、「頂点を一つ選択状態で実行すると、一番近い頂点の場所へウェルドされる」という風になっています。
(頂点を選択してない場合は動作しません)
昔公開した「ターゲットウェルド」スクリプトとは異なり、エッジを張りなおししますので、ウェルド後に頂点数が4個以上で構成される面ができた場合は、自動で面にポリゴンが張られます。

ポリラインペンツール022.png
上記のように「ポリラインペンツール」スクリプトでポリラインを描いたあと(最後の頂点はわざと既存の頂点の近くに作成)、「近くの頂点へウェルド」スクリプトを実行すると…
ポリラインペンツール023.png
選択状態になっていた頂点が一番近い頂点へウェルドされた後、面にポリゴンが張られます。


「ポリライン ペンツール」と「近くの頂点へウェルド」をショートカットキーに登録して併用すると…
Anim001.gif
と、スイスイとポリラインを描いたり、面を張れるようになると。


ただ、「近くの頂点へウェルド」には注意点があり、実際は想定した場所とは別の頂点へウェルドされてしまうという場合があります。
例えば上面図で作業しており、ウェルド先として想定している頂点が一見近い場所にあるように見えても、実際は選択している頂点とウェルド先の頂点のY座標がかなり違っていて、別の頂点の方が選択している頂点と距離が近いため、そちらの方へウェルドされてしまうと。

平面的にポリラインを描いて面を張るのなら、「近くの頂点へウェルド」は思い通りに機能すると思いますが、ポリラインが平面的ではなく立体的な場合は、想定していた頂点とは別の点へウェルドされやすくなります。
そういう場合は、ウェルド前に別のアングルでも選択している頂点の位置をウェルド先へ近づけたりするか、「二頂点間にエッジを張る」スクリプトや「マルチリンク」スクリプトなどを使用してエッジを張ってください。

(「近くの頂点へウェルド」では元のポリゴンメッシュ形状をクリップボードにコピーしておりますので、想定外の場所へウェルドされてしまった場合は、慌てずに、”図形ウインドウをどこもクリックせず” 、ctrl+vキーでクリップボード内の形状をペーストする事によってアンドゥできます。)


<ウェルド先をある程度制御できるように以下のスクリプトも追加しました。>

作業平面の設定(近くの頂点へウェルド用).txt

「近くの頂点へウェルド」スクリプトのウェルド先をある程度制御できるスクリプトを作ってみました。
「ポリラインペンツール」「近くの頂点へウェルド」を登録したキーの近くのキーへこのスクリプトを設定してご使用ください。
このスクリプトの効果を得るには、このページの中頃に掲載している「近くの頂点へウェルド」スクリプトを最新のに差し替えてください。

ポリゴンメッシュ選択状態で、この「作業平面の設定」スクリプトを実行すると…
作業平面001.png
というダイアログウインドウが表示されます。

「XY平面」を選択した場合はポリゴンメッシュの真下に「XY平面」という名前のパートを作成します。
「YZ平面」を選択した場合は「YZ平面」というパートを、「XZ平面」の場合は「XZ平面」というパートを作成します。
「作業平面無し」の場合は何もしません。

すでにポリゴンメッシュの真下に「XY平面」「YZ平面」「XZ平面」という名前のパートが存在する場合は、名前を変更します。
(「作業平面無し」の場合は、「XY平面」「YZ平面」「XZ平面」のパートを削除します。これら以外の名前のパートや他の形状は削除しません。)

「近くの頂点へウェルド」の最新版では、ポリゴンメッシュの真下(弟階層)に「XY平面」「YZ平面」「XZ平面」という名前のパートが存在する場合はウェルド先を通常とはちょっと変えています。

作業平面002.png
例えば後ろ半分を削った半球があったとして、ポリラインペンツールでポリラインを追加し、頂点が図のように一点だけ選択されていたとします。
正面図(XY平面)で見ている状態です。

この状態で「近くの頂点へウェルド」をやると、三次元的な距離でウェルド先が判定されるため、正面図で見て近くにある頂点とは別の頂点へウェルドされてしまったりします。
作業平面003.png

作業平面を設定してないと上記の通りですが、「作業平面の設定」スクリプトでポリゴンメッシュの真下に作業平面を指定するためのパートを作成しておくと、意図した頂点へウェルドさせる事ができるようになります。
今回は正面図で作業してますので、「作業平面の設定」では「XY平面(正面図・背面図用)」を選択し、ポリゴンメッシュの真下に「XY平面」という名前のパートを作成。

作業平面002.png
この状態で「近くの頂点へウェルド」を実行すると、
作業平面004.png
「正面図で見て一番近くの頂点」へウェルドされるようになります。

側面図や上面図で作業する時も、「作業平面の設定」を再実行して作業平面を切り替えれば、見た目通りの位置へウェルドできるようになります。
(ただし同じ位置に重なって頂点が存在する場合をのぞく)

なお、作業平面を設定してウェルドさせる場合は、上位パートに変換がかかっていたり、ローカル座標モードに入ってる場合はウェルド先がおかしくなる場合がありますのでご注意ください。


posted by stxsi at 20:33| shadeスクリプト | このブログの読者になる | 更新情報をチェックする