Grasshopperでのオブジェクトの属性

  • カスタム属性を使用してジオメトリをベイク処理できないことにイライラしたことはありませんか?
  • 表示マテリアルについてはどうですか?Grasshopperの表示パイプラインでネイティブのRhinoのマテリアルを使用できたらと思ったことはないですか?
  • Grasshopperにファイルをインポートすることに関してはどうでしょうか?CADのファイルをインポートしようとして、ジオメトリに含まれる基本的なメタデータがすべて失われた時にがっかりしたことはありませんか?

Rhino 8では、作業方法を拡張する新しいデータ型やコンポーネントが搭載されています。

Grasshopper 1には常に一般的なデータ型、例えば、頻繁に使用されるもの(点、曲線、brep、ブール演算、数値、テキストなど)、そして時々使用されるもの(日付/時刻、行列、その他指定子など)がありました。

しかし、Rhinoには今までGrasshopperではアクセスできなかった様々な異なるデータ型があります。これらにはRhinoのレイヤ、線種、ハッチング、マテリアル、フォント、注釈スタイルなどがありますが、Rhino 8搭載のGrasshopper 1では、これらのデータ型がネイティブのデータ型として含まれるようになりました。そして、更に多くのデータ型がこれから搭載予定です。

GH1 Object Attributes Toolbar

属性とは?

これらの新しいコンポーネントはすべて、指定のデータ型の属性の取得および/または設定ができます。さて、「属性」とは何でしょうか?属性とは、その型またはオブジェクトを構成する、プロパティまたは特徴です。

例として、Rhinoのレイヤを見てみましょう。レイヤは次のプロパティで定義できます:

  • 名前
  • アクティブかどうか (現在)
  • 表示/非表示
  • ロック/ロックされていない
  • 表示色
  • マテリアル
  • 線種
  • 印刷色
  • 印刷幅
  • クリッピング平面
  • 断面スタイル

これらの各属性は、Rhinoのレイヤダイアログで表示および/または編集できます。同じことがGrasshopper 1でもできるようになりました。

Layer Attributes

はじめに

Rhino 8の Grasshopper 1には、Rhinoという新しいツールバーがあります。このツールバーは、いくつかのサブカテゴリ(Layers、Linetypes、Materialsなど)に分類されています。通常、各サブカテゴリには2つの異なるタイプのコンポーネントが含まれています。

  • Query Component Query(クエリ)コンポーネント - アクティブなRhinoのドキュメントに対して様々なデータ型をクエリできます。この特定のコンポーネントを使用すると、すべてのRhinoのレイヤをGrasshopperのドキュメントに取り込むことができます。また、線種、ハッチング、注釈スタイルなどについてドキュメントをクエリすることもできます。Query(クエリ)コンポーネントは通常、虫眼鏡で示されます。

  • Datatype Component データ型・コンポーネント - これらのコンポーネントを使用すると、いろいろな属性値でデータ型を構築および/または分解できます。この特定のコンポーネントを使用すると、新しいRhinoのレイヤの属性(レイヤ名、表示色、表示設定など)を指定したり、Rhinoのモデルで既に定義されているレイヤの属性値を確認したりできます。

コンストラクタ(構築)/デコンストラクタ(分解)対パス・スルー・コンポーネント

Grasshopper 1には、コンストラクタ/デコンストラクタのパターンを使用する多くのデータ型(点、ベクトル、平面など)があります。つまり、それぞれのデータ型には2つの異なるコンポーネントがあるということです。そのうちの1つは3つの数値入力パラメータがある「点(Point)」などのデータ型の作成を扱うもの(コンストラクタ)、もう1つは、そのデータ型を作り上げるために組み合わせる値を返すもの(デコンストラクタ)です。

Rhinoツールバーにある新しいデータ型にこのパターンを使用することを検討しましたが、代わりに「パス・スルー」コンポーネント(pass-through component)と呼ぶパターンを選択することにしました。パス・スルー・コンポーネントは、属性の構築(Construct)分解(Deconstruct)の両方の機能を1つのコンポーネントに統合します。

Point Passthrough

これがどのように機能するかを見てみましょう。(構築(Construct)/分解(Deconstruct)のパターンでは3つではなく)4つの入力と出力があることに注目してください。メインのデータ型(Point3d)は、入力側と出力側の両方の最初のパラメータです。

Point Passthrough

パス・スルー・コンポーネントを使用して新しい点を作成(構築)する場合は、3つの座標の入力に数値を渡すだけで、新しい点が作成され、Pointの出力から返されます。同様に、既存の点をそのコンポーネント値(座標)に分解する場合は、最初の入力パラメータに点(Point)を渡すだけで、その値が対応する出力で返されます。

これが、パス・スルー・コンポーネントを使用する際の基本の設定です。次に、より具体的な例を見てみましょう。新しいRhinoのレイヤを作成し、それにいくつかの属性を割り当てたいとします。いくつかの値を入力パラメータに渡すだけで、Layerの出力(主データ型は常に最初の入出力パラメータになります)は、すべての設定を含むRhinoのレイヤを返します。

Rhino モデルに存在する線種の1つへの参照を取得するために、Query Linetypesコンポーネントを使用していることに注目してください。フィルタを空白のままにしていた場合(または「*」ワイルドカードを使用した場合)、使用可能なすべての線種が返されたでしょう。ですが、「破線」(Dashed)フィルタを使用したので、この名前に一致する線種のみが返されます。

Constructor

既存のRhinoのレイヤを取得してその属性を検証したい場合は同様に、同じパス・スルー・コンポーネントを使用できます。ただし、今回は既存のRhinoのレイヤをLayerの入力に渡します。主データ型は常にコンポーネントの両側の最初のパラメータであることを覚えておいてください。

ここでは、Query Layersコンポーネントを使用して既存のレイヤ(「デフォルト」(Default)と呼ばれるものが1つだけあります)を取得し、それをLayerの入力に渡します。レイヤの属性が、対応する出力パラメータを通じて出力されます。

Deconstruct

ここで、既存のレイヤをテンプレートとして使用し、そのコピーを作成してその属性の一部を変更するとします。ここで、パス・スルー・コンポーネントが非常に役立ちます。コンストラクタ/デコンストラクタのパターンを使用した場合、コンストラクタのコンポーネントからの各出力をデコンストラクタのコンポーネントの対応する入力パラメータに手動で接続する必要が出てきます。

Copy / Modify

ご想像のとおり、属性の数が多いデータ型では、これは非常に面倒になります。代わりに、この操作にパス・スルー・コンポーネントが使用できます。

以前と同様に、既存のRhinoのレイヤをLayerの入力に渡すことができ、そのすべての属性が対応する出力に渡されます。ただし、下のように別の値が他の入力の1つに接続されている場合、この値は既存のRhinoのレイヤの属性よりも優先されます。

ここでは、テキスト「MyLayer」をFull Pathの入力に渡します。これにより、既存のRhinoのレイヤから取得されるレイヤ名がオーバーライドされます。ただし、他の値はすべて同じままになります。

パス・スルー・コンポーネントを1つだけ使用することで、定義内の画面領域が節約され、すべての出力パラメータを対応する入力に接続する必要がなくなります。

Copy / Modify

属性の構築

上の例では、Model Layerパス・スルー・コンポーネントを使用してRhinoのレイヤを構築する方法を紹介しました。しかし、作成されたレイヤは、ベイクするまでは技術的にはRhinoのドキュメントの一部ではありません。カスタム・ベイク・コンポーネントは今作成中ですが、現時点では、Model Layerコンポーネントを右クリックしてBakeを選択することができます。ポップアップダイアログでOKをクリックすると、レイヤがRhinoのドキュメントに追加されます。

Construct Layer Panel

ここで、Rhinoのドキュメントにジオメトリを追加し、作成したばかりのレイヤに割り当てたいとします。この操作も簡単です。Model Objectコンポーネントを使用するだけで、様々な属性を幾何学オブジェクトに割り当てることができます。

Construct Layer Panel 2

Construct Layer Panel 3

ここでは球を作成し、それに「MySphere」という名前を付けました。また、作成したばかりのレイヤをオブジェクトの属性に割り当てました。ここで、Model Objectコンポーネントを右クリックして、Bake - を選択すると、これらの属性を持つ球がRhinoのドキュメントに追加されます。

シーンへベイクした球体を選択し、オブジェクトのプロパティ・インスペクタに移動します。球に正しい名前とレイヤが割り当てられているかどうかを確認してください。

幾何学オブジェクトには、好きなだけの数の属性を割り当てることができます。これは非常に単純な例にすぎませんが、他のコンポーネントも見て、どのような設定が利用できるかを確認することをお勧めします。

属性の分解

ご想像のとおり、データ型をその構成属性に分解することもできます。クエリ・コンポーネントは、さまざまなRhinoのデータ型(ジオメトリ、レイヤ、線種など)をGrasshopperの定義に取り込むため、これらのコンポーネントから始めると良いでしょう。しかし、これらの操作は簡単で、あまり説明を必要としません。

そこで代わりに、ParamsタブのInputサブカテゴリにある新しいImport Modelコンポーネントを見ていきたいと思います。この新しいコンポーネントを使用すると、どのような3Dモデル(Rhinoのモデルである必要はありません)をインポートし、その内容を様々な属性に分割できます。

この新しいコンポーネントの便利な機能の1つは、インポートしたモデルを一貫した方法でアクティブなドキュメントの単位に変換できることです。これがどのように機能するかを説明するために例を見てみましょう。

プロジェクトで使用するいくつかの締結部品(ねじ)の3D CADモデルをダウンロードしたとしましょう。ファイルの1つ(フランジ付き六角ボルト (flanged hex bolt)は、単位 (units)をインチ (inches)に設定して保存されています。また、蝶ナットとワッシャー (wing nut and a washer)を含むもう1つのファイルは、単位 (units)がミリメートル (millimeter)に設定されています。そして厄介なことに、作業中のアクティブなドキュメント (active document)がセンチメートル (centimeters)に設定されていたとします。

Bolts & Nuts

このモデルを従来どおりインポートしていたら、モデルを適切に調整するために独自の変換係数を考える必要がありました。しかし、インポートしたモデルの属性の1つである変換 (transform)を使用すると、インポートしたジオメトリをアクティブなドキュメントのスケールに簡単に一致させることができます。

Scaled Model

Transform Geometry

更に、インポートしたモデルの他の属性を検証することも可能です。このファイルに、複数のマテリアルが保存されていたとしましょう。このような時に、GrasshopperのCustom Preview表示でRhinoのマテリアルを使用できるようになりました。

これはかなり重要なことなので、文を太字にしました。Grasshopperが今まで頼ってきた簡素化された表示グラフィックスに制約される必要はもうありません。インポート(またはQuery Materialsを使用)してネイティブのRhinoのマテリアルを取り込み、標準のCustom Previewコンポーネントを使用してGrasshopperのジオメトリに使用できるのです。

以下の例は、インポートしたRhinoのマテリアルを使用した様々な表示モードのスクリーンショットです。

Bolt-Nut Render

Material Display

まだ開発途中です。

これは、これらの新しいツールの最初のリリースにすぎません。現在はツールセットはまだ完全ではないため、あちこちでバグが見つかる可能性があります。正しく動作しない点やご質問がある場合は、どうぞお知らせください。

次にどのようなデータ型を含めるべきかについてのフィードバックもお待ちしています。あなたのワークフローにはどの型が最も役立ちますか?ブロック、光源、寸法、クリッピング平面、名前付きシートビューが必要ですか?私達には今後数か月の間にどのようなコンポーネントを搭載するかのアイデアがありますが、どの機能を優先すべきかについてはユーザーからのフィードバックを参考にしています。

試すには

ConstructObjectAttributes.gh (Grasshopperの定義)をダウンロードして開きます。