Rhinoで面を移動すると、画面上では変更されていても元のサーフェースはそのまま残されています。(これはもともとの形状を保存しておく方が、UV構造を扱うのに好都合という事らしいのですが、見た目の形状を基準に処理する際は要注意です)
通常の操作で問題になることはないと思いますが、grasshopper(以下、GH)やAPIで処理するとそのままでは元のサーフェースが取得されます。(UV構造を扱うコンポーネントを利用する場合は注意がいります)
下の図の例では、立方体の高さを変更した後、鉛直面を1つ抽出して加工し用としたのですが、ご覧のように元のサーフェース形状が取得されています。(赤丸の部分の出っ張り)
ShrinkTrimmedSrfでシュリンクする
このままでは結果的に誤った処理になってしまいます。サーフェースを画面上の表現に合せて元のサーフェースを加工します。使用するコマンドはShrinkTrimmedSrfです。
- コマンドShrinkTrimmedSrfを入力
- CtrlキーとShiftキーを押しながら、面を左クリック
これで元のサーフェース形状が画面上の表示に合わせて更新されます。
スクリプトでシュリンクする
Surface.Shrink()メソッドでShrinkTrimmedSrfと同じ動作をスクリプトで実現できます。
private void RunScript(Brep brep, ref object ShrinkedFace)
{
if (brep != null)
{
// Shrink the trimmed surface.
brep.Faces.ShrinkFaces();
ShrinkedFace = brep;
}
}
この例であれば、List Itemでサーフェースを取り出した後に、このスクリプトでShrinkTrimmedSrfと同じ処理が可能です。
動作環境
以下の環境で動作を確認しています。
- Windows11 Pro(64bit, 23H2)
- Rhinoceros 8 SR10