Rhino+Grasshopper

プロシージャルモデリング|GrasshopperでPython3を使ってBoxを作成する

Grasshopperでは、Pythonスクリプトを使って高度なジオメトリ操作やカスタマイズが可能です。
本記事では、Python3を使用して、X、Y、Zのサイズを入力し、それに基づいてボックスを生成する方法を説明します。
初心者でも理解しやすいように、スクリプトの各部分を章立てして詳しく解説します。

コード全文

import Rhino.Geometry as rg

# 入力値を使ってボックスのサイズを決定
x_size = float(X)
y_size = float(Y)
z_size = float(Z)

# 原点からのボックスを作成
corner1 = rg.Point3d(0, 0, 0)
corner2 = rg.Point3d(x_size, y_size, z_size)

box = rg.Box(rg.BoundingBox(corner1, corner2))

# 出力
Box = box

コードの解説

このGrasshopper Pythonスクリプトは、X、Y、Zの入力値を使ってボックスを生成するものです。以下の章に分けて説明します。

Step1:インポート

目的: 必要なライブラリを読み込みます。

import Rhino.Geometry as rg
  • 解説:
    Rhinoのジオメトリ作成に必要なRhino.Geometryモジュールをインポートしています。これにより、ボックスや点などの3Dジオメトリを扱えるようになります。

Step2:入力値の取得と変換

目的: Grasshopperからの入力値(X、Y、Z)をPythonで使用できる形式に変換します。

x_size = float(X)
y_size = float(Y)
z_size = float(Z)
  • 解説:
    Grasshopperで受け取るX、Y、Zの値は、文字列やその他の型で渡されることがあるため、それを浮動小数点数(float)に変換します。これにより、ジオメトリ作成時に数値として扱えるようになります。

Step3:ジオメトリの作成

目的: 2点を使ってボックスを定義します。

corner1 = rg.Point3d(0, 0, 0)
corner2 = rg.Point3d(x_size, y_size, z_size)
  • 解説:
    • corner1: ボックスの原点(0, 0, 0)を指定しています。
    • corner2: ボックスの対角点を、入力されたX、Y、Zのサイズに基づいて設定しています。
      この2点間を結ぶことで、ボックスの対角が決まり、そのサイズが定義されます。

Step4:ボックスの生成

目的: 定義した2点に基づいてボックスを生成します。

box = rg.Box(rg.BoundingBox(corner1, corner2))
  • 解説:
    BoundingBoxを使って、2点(corner1corner2)を含むボックスを作成します。これにより、指定したサイズのボックスが完成します。

Step5:出力

目的: 生成したボックスをGrasshopperに渡します。

Box = box
  • 解説:
    作成したboxオブジェクトを、Grasshopperの出力端子Boxに渡します。これにより、Grasshopper上でボックスが表示・利用可能になります。

Rhino.Geometryについて

Rhino.Geometryは、RhinoとGrasshopper内で3Dジオメトリを作成、操作、分析するための主要なモジュールです。

Pythonスクリプト内でrg.と短縮して使用することで、コードが簡潔になります。

使用方法の例

以下のように、import文でモジュールをインポートし、エイリアスを設定します

import Rhino.Geometry as rg
  • import Rhino.Geometry:
    Rhinoのジオメトリ関連のクラスや関数をPythonスクリプトで使用するためにロードします。
  • as rg:
    Rhino.Geometryrgという短縮形(エイリアス)で参照できるようにします。これにより、コードの記述が簡単になり、可読性が向上します。

主なrg.で使用するクラスとメソッド

Rhino.Geometryには、さまざまなジオメトリクラスが含まれています。主なものを以下に示します:

クラス説明使用例
Point3d3D空間の点を定義するrg.Point3d(x, y, z)
Vector3d3Dベクトルを表現するrg.Vector3d(x, y, z)
Line2点間の線を作成するrg.Line(start, end)
Boxボックスを生成するrg.Box(bbox)
Curve曲線を操作するrg.Curve.Create()
Surfaceサーフェス(曲面)を定義rg.Surface()
Sphere球体を作成するrg.Sphere(center, r)
BoundingBox最小の直方体領域を定義するrg.BoundingBox(p1, p2)

まとめ

rg.Rhino.Geometryのエイリアスで、ジオメトリの作成や操作に使用します。

エイリアスを使用することで、コードが簡潔になり、効率的にジオメトリを扱えます。

rg.に含まれるクラスやメソッドを使えば、複雑な3DモデルもPythonで柔軟に操作可能です。

Rhino.Geometryについて詳しく知りたい方は以下の記事も参考にしてください。

まとめ

このスクリプトでは、以下の流れでボックスを作成しました:

  1. 必要なモジュールをインポート。
  2. 入力値を適切な形式に変換。
  3. ジオメトリの角を定義。
  4. 角に基づきボックスを生成。
  5. 出力としてGrasshopperに返す。

この構造を理解すれば、他のジオメトリの生成や変形にも応用できます!

-Rhino+Grasshopper
-, ,