グラスホッパー内でpythonが使えるghPythonコンポーネントで、Tree構造のデータにアクセスをするためのtipsをご紹介します。ちなみにこのデータツリー、普通に使うgrasshopper理解の最初の障壁だと思うんですけどけどみなさんいかがでしょうか。
実はこの話、2011年にグラスホッパーの親サイトに僕が自分で質問したもので、いろいろあってghpythonのヘルプにリンクされるほどの高参照数を獲得している項目です。(ちょっと自慢です。)とはいえ、聞いて満足しちゃったのが真実で簡単なお礼の後は正直スレッドを追うことはしてませんでした。それが先日Mariaさんと仕事をしているときに、ツリー構造データの入力・出力のよく使うコードを逆に紹介されて、便利な関数を紹介していたので共有します。
普通にグラスホッパーを使っていると、コンポーネント間をつなげるのが一つのデータが通る単独アクセス(Item:実線)、複数のデータが束なっているリストアクセス(List:二重線)、とツリー構造になっているツリーアクセスがあります。組み方次第ではリストにとどめて作ることもできるのですが、DDLの複数の人が協働している場合にデータの構造をスクリプトをする人に合わせている時間はないので、スクリプト側で何とかしないといけません。また、python側でも二次元以上の配列を作ると、アウトプットがIronPythonListという風になってしまって、それ以後のコンポーネントがアクセスできなくなってしまいます。これを極力簡単にアクセスできるようにしたスクリプトがここにあります。
ついでなので、添付のファイルを元に使い方をみてましょう。
基本的には、二つの関数raggedListToDataTreeとdataTreeToListというを使っていきます。まず入力側のツリーデータをpythonのリスト形式に変換する場合はdataTreeToListを使って引数のそのツリーデータを入れます。そうすると、n次元の配列になるので、それ以降は添え字をつかってアクセスできます。例では単純にグラフトを挟んでいるだけなので、10個の要素が入っている配列の中にそれぞれ点が1つ入ってる配列が格納されています。これをシンプルに一次の配列に戻し、再構築してraggedListToDataTree()を使ってツリー構造に直しています。
コメントをするにはログインしてください。