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)

コメントを残す