このページでは通常のフィレットがかけづらい箇所に、通常のコマンドの代わりにフィレットをかけるPythonスクリプトを使用する方法について記述しています。
まずフィレットとは
通常Rhinoで3次元形状にフィレット(角R)を作成するには、[Filletedge]コマンドを実行します。ポリサーフェスなどのエッジを丸める上で非常に使い勝手の良いコマンドです。詳細は下記ヘルプを参照ください。
https://docs.mcneel.com/rhino/7/help/ja-jp/index.htm#commands/filletedge.htm#(null)
下左図、フィレットを掛ける前。右図、フィレットを掛けた後。


〇フィレットを掛ける上での問題
ただし下図のように複数のサーフェスのエッジが密集する箇所では、[FilletEdge]コマンドではフィレットが正しく作成できないことがあります。正しく作成できない場合、ソリッドではなくトリムできないサーフェスが空間上に作成されます。

こういったことを避けるために、下図のように[FilletSrf]コマンドの[延長]をいいえ、[トリム]をいいえ、を複数回実行していくことで、必要なフィレットを一枚一枚手動で貼っていくこともできます。
FilletSrfコマンドの詳細は下記リンクを参照ください。
https://docs.mcneel.com/rhino/7/help/ja-jp/index.htm#commands/filletsrf.htm?Highlight=FilletSrf

この方法でも作成はできるのですが、サーフェスの組み合わせの数だけ複数回実行しなくてはいけません。
また作成途中に非常に細かいフィレットが出てくることもあります(おそらく[FilletEdge]コマンドではその箇所が正しくトリムできなかったものと思われます)。またこういった個所では、どこが必要なフィレットか判別も難しくなります。
Pythonスクリプトでのダウンロード
開発元のMcNeel社が運営しているMcNeelForumにRhinoのユーザーのJim様が上げられたPythonスクリプトがあります。このスクリプトは正接する連続した面に順番にFilleltSrfを実行していくというものです。
確認した限りではRhino6SR35、Rhino7SR29でWindows版、Mac版共に動作が確認できました。スクリプトは下記リンクからダウンロードできます。
複数Pythonスクリプト(拡張子はpy)が上げられていますが、ここではMay8(5月8日)に上げられたFilleltSrf_crvs2.pyファイルをクリックしてダウンロードして試してみます。

ダウンロードしたPythonスクリプトファイルは、ファイルの場所を指定しやすいようにCドライブ内にScriptというフォルダを作成してその中に入れました。下図のようなフォルダ構成です。

Pythonスクリプトでの実行方法
Pythonスクリプトの実行方法は下記となります。
- [RunPythonScript]コマンドを実行する。
- [Run python script]ダイアログから、開きたいスクリプトファイルを選択して[開く]をクリックする。

です。以下は、スクリプトの内容です。
半径値をキーボードで入力して、1つ目のサーフェス、2つ目のサーフェスを順にクリックします。

出来上がった結果は下図。Forum上にJim様があげたPythonスクリプトには幾つかバリエーションがありますがFilleltSrf_crvs2.pyでは、
- フィレット同士を結合
- フィレットと本体が交わる曲線同士も結合
した状態で出力されるようです。

もう少し便利に使うために
このままでも良いのですが、この使い方だとコマンドを実行するたびにPythonスクリプトの場所をフォルダから指定する必要があります。毎回Pythonファイルを指定しなくて済むようにマクロを作成してみます。
マクロの詳細は下記リンクを参照ください。
https://docs.mcneel.com/rhino/7/help/ja-jp/index.htm#information/rhinoscripting.htm?Highlight
作成するマクロは
- マクロの始めに ! を付ける(! は他のコマンドを実行している場合はキャンセルするという意味)。
- コマンド名の前に _ アンダーバーをつける(コマンド名の前の _ は英語のコマンド名を使用するという意味。厳密には日本語環境では付けなくても動作しますが、言語を英語と日本語以外に変更しても問題ないように付けておきます)。
- 半角スペースがRhinoのEnterキーの代わり。
- コマンド名の前に – ハイフンを付けることで、ファイルを指定するダイアログを表示せず、直接Pythonスクリプトのパスを指定する(パスは” ” で挟むことで指定)。
と言ったことに気を付けて作成します。
作成したマクロは下記です。意味としては、既にコマンドを実行している場合はコマンドをキャンセルして、CドライブのScriptフォルダ内のFilSrf_Crvs2.pyファイルを実行するというものです。
! _-RunPythonScript “C:\Script\Filsrf_crvs2.py”
Macの場合は、ファイルのパスの指定の仕方は異なりますが、基本的な記述は同じです。Testというユーザーの書類フォルダにスクリプトをおいた場合は下記のような記述。
! _-RunPythonScript “/Users/Test/Documents/Filsrf_crvs2.py”
Macの場合はFinderメニューの 表示>パスバーを表示 からFinder下部にファイルパスを表示することができます。そこからファイルのパス名をコピーすることなども可能です。

また作成したマクロは、キーボードのショートカット(ツール>オプション キーボードから設定可能)や、既存のボタンにコピー&ペーストなどでも登録できます。

既存のボタンに登録する際は、Windowsはボタンの上でShift + 右クリックで表示されるボタンエディタから登録できます。Macは下記リンクの[ツールボタンを新たに作成する]の箇所を参照ください。

スクリプトを実行してみた図
スクリプトを実行して、フィレットを作成。[Hide]でフィレットを一時的に非表示。[Trim]でフィレット部分を削除後に[Show]でフィレットを表示して[Join]で結合してみた例です。[ShowEdges]コマンドでオープンエッジを確認しても、隙間がないのが分かります。

[FilletEdge]コマンドで上手くフィレットが作成できないとお思いの方は、ぜひ試して頂けたらと思います。
補足
現在(2023/05/25)開発中のRhino8WIPでは[ScriptEditor]コマンドからPythonスクリプト(py形式)だけでなく、C#のクラス(cs形式)も同様に実行できます。
下記のようなマクロ(Cドライブ内のScriptフォルダのtest.csを指定した場合)で実行できるので、興味がある方はぜひ試して頂けたらと思います。
! _-ScriptEditor “C:\Script\test.cs”