strange items(楽天)


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


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

2009年11月09日

shade用スクリプトその17(選択辺を分割)

新)選択辺を分割20130123.txt

旧)選択辺を分割120330.txt

旧)選択辺を分割20110412.txt

旧)選択辺を分割101121a.txt

旧)選択辺を分割101121.txt

旧)選択辺を分割20100303.txt

旧)選択辺を分割20100205.txt

旧)選択辺を分割.txt


<重要>上位パートに変換がかかっている状態で、かつ一時ローカル座標モードかろくろモードONの状態でスクリプトを実行すると、「スクリプトの処理結果をキャンセルした際」に形状が破壊されてしまう不具合を修正しました。(2010.03.03)
修正前の旧版をお使いの方は不具合を修正した新版をダウンロードしなおしてください。
(メッシュツールプラスウィジェットでスクリプトを利用していた方はメッシュツールプラスの最新版をダウンロードしなおしてください。)
shade13.22にあわせて修正(2013.01.23)
shade13.01に対応(2012.03.30)
shade12.02に対応(2011.04.12)
さらに「選択辺の長さで押し出し量を変化」オプションを追加しました。(2010.11.21 午後10時)
「法線方向に押し出す」オプションを追加。アルゴリズムの見直しで若干高速化。選択辺の隣の面の頂点数が三点の箇所に穴があかないように修正。(球体の南極や北極箇所など)(2010.11.21)
内方面検出機能を追加しました。(2010.02.05)


選択している辺に中点を追加するスクリプトです。
複数の辺が選択状態で、その辺同士が同じ隣接面を持ってる場合は、中点同士にエッジを張ります。

「ベルト抜き(面を残して辺を一括消去)」スクリプトの逆みたいなやつです。

*処理確定後に内方面が検知された場合は、「内包面を選択状態にする」「内包面を削除する」「何もしない」の三種類から内包面の処理を選択するようになっています。
(「内包面」についてはこちらの説明をご覧ください。)


選択辺を分割001.png
例えばこのような選択状態でこの「選択辺を分割」を実行すると……
選択辺を分割002.png
選択されていた辺それぞれに中点が作成されて二分割され、同じ面を共有していた辺同士の中点間にもエッジが張られます。

選択辺を分割003.png
「エッジパラレル選択」で球の辺をこのようにループ状に選択して、この「選択辺を分割」を実行すると、
選択辺を分割004.png
こんな感じで分割されます。

選択辺を分割015.png
目のまわりにラインを追加したくなった場合も
選択辺を分割016.png
簡単に追加できます。


選択辺を分割005.png
このように複数のループパラレルエッジを選択状態で実行すると、
選択辺を分割006.png
各ループパラレルエッジをそれぞれ分割してくれます。
選択しているループパラレルエッジが平行ならいいのですが、縦横にクロスしてる状態でスクリプトを実行すると結果がおかしくなってしまいます。
その場合は縦や横どちらかを先に分割してからもう片方の分割を行ってください。


最初の例のグリッドや、次の球の例のように、「端から端まで」あるいは「ループしてる」感じで辺を選択してる場合はスクリプトを実行しても特に問題は無いのですが…
選択辺を分割007.png
のように選択している状態で「選択辺を分割」を実行すると……
選択辺を分割008.png
と、選択していた辺のうち、端にあった辺の隣の面には穴があいてしまいますので、この点には注意してください。

選択辺を分割009.png
球状のポリゴンメッシュでこのように辺をパラレル選択し「選択辺を分割」を実行すると……
選択辺を分割010.png
やはりこういう風に選択していた辺のうち、端っこの方の辺と隣接していた面には穴があいてしまいます。(南極の方にも穴があいてます)

*最新版ではこういう場合は穴があかないように修正。

穴があいてしまった箇所は、適当な頂点同士にエッジを張って埋めるか、穴の縁の辺を一つ選択してから、「エッジバウンダリー選択」スクリプトで穴の縁の辺を全て選択状態にし、モードを「辺編集モード」から「頂点編集モード」に変えた後、shade標準の「メッシュツール>face」ですぐに穴をふさぐ事ができます。


スクリプト実行後は追加された辺が選択状態となっていますので、モードを「辺編集モード」から「頂点編集モード」に変えた後、「選択頂点を法線方向に移動」スクリプトを実行するとふくらましたりへこましたりできます。
法線の方向に押し出す機能をこのスクリプト自体に内包しました。

選択辺を分割011.png
これは球をポリゴンメッシュ化したあと、中央の横のラインをベルト抜きスクリプトで抜いたやつですが、エッジパラレル選択で辺をこのように選択状態で「選択辺を分割」を実行し、
選択辺を分割012.png
「辺編集モード」から「頂点編集モード」に切り替えた後
選択辺を分割013.png
「選択頂点を法線方向へ移動」を起動して移動量を調整してふくらますと……
選択辺を分割014.png
球に戻せると。


当初は「選択辺を分割」スクリプト自体の方に、作成した中点を法線方向へと押し出す機能も仕込もうとしたのですが(プログラム内にはその時の名残があります)、スクリプトで追加された頂点は、作成直後はたとえ他の頂点ときちんとエッジが張られて面が構成されていたとしても法線の値がおかしい事になってるようで、そのため「選択辺を分割」の方には追加された頂点(中点)の押し出し機能搭載は断念し、「選択頂点を法線方向へ移動」スクリプトと併用してもらう事にしました。
どうやらappend_point()などで追加された頂点については、スクリプトが終了してから法線の正常な値がセットされるようになっているみたいです。


*形状を編集した後には「xshade.scene().active_shape().setup_normal()」を実行して法線の情報を更新すればいいだけでした。


<「法線の方向へ押し出す」オプションについて>

最新バージョンでは選択辺を分割した後に、生成された中点を法線の方向へ押し出すかどうかも選択できるように変更しました。

bunkatu001.png

「法線方向に押し出す」にチェックを入れると、選択辺を分割後に、「移動量」の分、選択辺の分割によって生成された中点が法線方向へ移動します。
「法線方向に押し出す」にチェックを入れない場合は、通常の選択辺分割モードとなります。

押し出しの際は、方向(「押し出す、へこます」)を切り替える事によって、外側へふくらむのか、内側へへこむのかを切り替えできます。
法線の向きが形状の内側を向いてる場合は、「押し出す」を選択するとへこむ事になり、「へこます」を選択すると押しだす事になりますのでご注意ください。

押し出しの際に、特定の軸方向には移動させたくない場合は、「x座標固定」「y座標固定」「z座標固定」にチェックを入れてください。

下記は「エッジ一括選択」スクリプトを併用して辺の選択作業をしながら、「押し出す」オプションを使って荒い形状を滑らかにしていった例です。

bunkatu002.png
辺を選択して…
bunkatu003.png
分割

bunkatu004.png
辺を選択して…
bunkatu005.png
分割

bunkatu006.png
辺を選択して…
bunkatu007.png
分割

bunkatu008.png
辺を選択して…
bunkatu009.png
分割

と、こういう風に最初に粗くモデリングしてからじょじょに滑らかにしていくという事ができます。


<「選択辺の長さで移動量を変化」オプションについて>

bunkatu010.png

bunkatu011.png

上記のような形状を分割して押し出しする場合、選択辺の長さで押し出し量を変化させた方がいいという事で、このオプションをつけてみました。

bunkatu012.png
「選択辺の長さで押し出し量を変化」がOFFの場合は、上記の通りとなり、上側の辺はもうちょっと押し出しした方が良かった、下側の辺は押し出ししすぎたという事になります。

bunkatu013.png
「選択辺の長さで押し出し量を変化」をONにして選択辺を分割・押し出しすると、上記のようになり、上側の辺も下側の辺もいい具合に押し出しされます。
posted by stxsi at 18:11| shadeスクリプト | このブログの読者になる | 更新情報をチェックする