Grasshopper :: Layerを読み込む
今回は、Rhino上のレイヤを読み込む方法です。Rhino上のオブジェクトは[Geometry Pipeline]コンポーネントでできますが、レイヤはデフォルトのコンポーネントで読み込めないので、Pythonで読み込んでみました。
※2020/07/26
掲載したコードをRhino6で試したところエラーが出たので、追記しています。
レシピ
コードは以下の通りです。
レイヤは、layer_name = sc.doc.Layers
で読み込むことができます。
注意していただきたいのが、ここで読み込まれるレイヤは、今まで作成された全てのレイヤになるため、削除されたレイヤも表示されてしまいます。
そこで、if not layer.IsDeleted
で削除されたレイヤ以外をリストに追加して完了です。
sc.doc = rh.RhinoDoc.ActiveDoc
については、今後別で投稿したいと思うので、今回はスルーします。
それでは試してみましょう。下図は、レイヤを削除する前です。
レイヤを削除して、GrasshopperでRecomputeするか、[Boolean Toggle]コンポーネントを切り替えると、
この様に[b]から削除されていないレイヤが表示されます。
レイヤが読み込めたので、今回はここまで。今後、レイヤ内のオブジェクトを読み込んでみたいと思います。
追記(2020/7/26)
Rhino6で上記コードを試したところエラーが出たので、別の方法を掲載します。
RhinoScriptSyntaxにレイヤ関連の関数がいくつか公開されているので、それを用いればより簡単にレイヤを取得することができます。
コードは以下の通りです。
LayerNames関数を呼び出すと、レイヤ名の文字列が格納されたリストが返ってきます。
また、オプションとして引数にbool値としてTrue
を入力すると、レイヤ名をソートすることができます。
Rhino側でレイヤが更新されてもリアルタイムに反映はされないので、
Buttonコンポーネントを繋ぐことで、Buttonをクリックするたびにコードが読み込まれ、レイヤ情報が更新されます。
使用した主なコンポーネント
- [Python Script] (Maths > Script > Python Script)
- [Boolean Toggle] (Params > Input > Boolean Toggle)