Rhino 8の登場で、Grasshopperのコンテンツフィルターに新たな「Path」属性が加わりました。しかし、この「Path」がデータツリーのパスと混同されやすいことが、コミュニティで話題になっています。今回は、この「Path」の正体と、Pythonでデータツリーパスを正しく扱うためのロジックについて深掘りしていきましょう。

新フィルター機能の誤解

Rhino 8で新しく追加されたコンテンツフィルターの「Path」属性。「これはデータツリーのパスを指すものだろう」と直感的に考える方も多いのではないでしょうか。しかし、Pythonコンポーネントでこの「Path」の値を問い合わせてみると、「null」が返ってくる、という現象が報告されています。一体どういうことなのでしょうか?

「Path」属性の本当の役割

実はこの「Path」は、GrasshopperのSDKに存在する`ModelContent`クラスの、あまり知られていない継承属性なんです。ドキュメントには記載されていませんが、実際には`ModelContent.Attributes`インスタンスをラップし、その`Path`プロパティを参照しています。このプロパティは、`ModelObjects`をネストする際に使用されるもの。普段Grasshopperを使っているだけでは、なかなかお目にかかることのない、やや特殊な機能なんですね。つまり、データツリーのパスとは全く別の概念なんです。

データツリーパスの正しい取得

もしあなたがデータツリーのパスを取得したいのであれば、この「Path」属性に惑わされてはいけません。Pythonスクリプトコンポーネントでデータツリーのパスを扱うには、インプットのType Hintを適切に設定し、ツリー構造へのアクセスを許可する必要があります。例えば、リストではなくツリー構造として入力データを受け取るように設定することで、`gh.Path`などのメソッドを用いて正確なパス情報を取得できるようになりますよ。

従来のデータツリーフィルタリング

データツリーの特定のパスを基準にフィルタリングしたい場合、これまでは`Tree Statistics`コンポーネントとテキストフィルターを組み合わせるのが一般的な手法でした。`Tree Statistics`でパス情報を抽出し、それをテキスト操作でフィルタリングするという流れですね。この方法も依然として有効であり、多くのユーザーにとって馴染み深いアプローチでしょう。新しい「Path」属性は、この目的には使えないことを覚えておきましょう。

カスタムコンポーネントへの展望

今回の件は、Grasshopperの奥深さ、特にSDKレベルでの詳細を垣間見せてくれました。もし、データツリーのフィルタリングをもっとエレガントに行いたいと考えるなら、自分だけのカスタムコンポーネントを作成する良い機会かもしれません。プラグイン開発の世界に足を踏み入れるきっかけになる可能性も秘めています。ぜひ、この知識を活かして、より高度なGrasshopperの活用に挑戦してみてくださいね。