はじめに: 閉曲線作成の課題
Grasshopperで複数のセグメントから閉じた曲線を作成しようとした際、セグメントが重複していたり、不要な端部が残っていたりすると、目的の閉曲線が得られないことがあります。特に、Region Unionなどのコンポーネントを使っても「Object reference not set to an instance of an object」といったエラーが出てしまうケースは少なくありません。これは、入力ジオメトリが適切に整理されていない場合に起こりがちです。今回は、このような課題をクリアし、きれいに閉じた曲線を作成するための具体的なロジックを解説します。
不要な端部の特定と処理
問題の核心は「赤色の端部」のような、他のセグメントとの接続を妨げる開いた終端や、重複する線分をどう処理するか、という点にあります。これらを適切に除去しなければ、曲線は閉じません。まず、全てのセグメントの交差点を正確に特定し、その点で各セグメントを分割することが重要です。
具体的には、Curve | Curve Intersectionコンポーネントを使って全てのセグメント間の交差イベントを検出します。次に、その交差点情報を利用して、Split Curveコンポーネントで元のセグメントを細かく分割します。これにより、不要な「端部」が独立したセグメントとして認識できるようになります。
セグメントの整理と結合
Split Curveで分割された後、大量の小さなセグメントが生成される場合があります。ここから必要なセグメントだけを選び出し、不要なものを排除します。まず、Cull Duplicate Linesコンポーネントを使って完全に重複する線分を削除します。これにより、ジオメトリの冗長性を減らすことができます。
次に、非常に短いセグメントや、閉曲線の一部として不要な「突き出た」セグメントをフィルタリングします。これは、Lengthコンポーネントでセグメントの長さを取得し、特定のしきい値以下のものをCull Listなどで除去することで実現できます。この段階で、残ったセグメントはほぼ結合可能な状態になっているはずです。最後に、これらの整理されたセグメントをJoin Curvesコンポーネントで結合します。
最終的な閉曲線の確認
Join Curvesで結合した後、結果として得られた曲線が本当に閉曲線になっているかを確認することが重要です。Curve PropertiesグループにあるClosedコンポーネントに結合後の曲線を接続し、その出力が`True`になっていることを確認しましょう。もし`False`が返された場合、まだどこかに小さなギャップや、結合を妨げる要素が残っている可能性があります。
その場合は、Join Curvesの許容誤差(tolerance)を調整してみたり、結合前のセグメントをさらに詳細にチェックし、Null値が含まれていないか、あるいは非常に微小な開口がないか確認する必要があります。場合によっては、Clean Treeなどでデータ構造を整理することも有効です。
まとめ: クリーンなジオメトリが成功の鍵
複雑なセグメント群から閉じた曲線を作成するプロセスは、単にJoin Curvesを使うだけではうまくいかないことが多いです。重要なのは、Curve | Curve Intersectionで交差点を検出し、Split Curveで適切に分割し、Cull Duplicate Linesなどで不要なセグメントを整理するという、一連の「ジオメトリのクリーンアップ」作業です。この手順を踏むことで、ファブリケーションなど正確なジオメトリが求められる場面でも、期待通りの閉曲線を得ることができるでしょう。
