MoveObjectsMoveObjects関数で、複数のモデルを移動することができます。
本記事のGrasshopperファイルのダウンロードはこちら

今回は、上の画像のように、複数のボックスを作成して移動します。

使用コンポーネント 1: Python 3 Script 2: Point 3: Vector 4: Brep 5: Vector Display
import rhinoscriptsyntax as rs
# RhinoをPythonから操作するためのライブラリを読み込む
corner_pts1 = [(0,0,0),(10,0,0),(10,10,0),(0,10,0),(0,0,10),(10,0,10),(10,10,10),(0,10,10)]
# 1つ目の直方体を構成する8つの頂点座標を定義
corner_pts2 = [(20,0,0),(30,0,0),(30,10,0),(20,10,0),(20,0,10),(30,0,10),(30,10,10),(20,10,10)]
# 2つ目の直方体を構成する8つの頂点座標を定義
box1 = rs.AddBox(corner_pts1)
# 1つ目の頂点情報を使って直方体を作成する
box2 = rs.AddBox(corner_pts2)
# 2つ目の頂点情報を使って直方体を作成する
boxes = [box1, box2]
# 作成した2つのボックスをリストにまとめる
pt1 = (0,0,0)
# ベクトルの始点となる座標を定義
pt2 = (20,20,0)
# ベクトルの終点となる座標を定義
point1 = rs.AddPoint(pt1)
# pt1 の位置に点を作成する
point2 = rs.AddPoint(pt2)
# pt2 の位置に点を作成する
vector = rs.VectorCreate(pt2, pt1)
# pt1 から pt2 へ向かうベクトルを作成する
rs.MoveObjects(boxes, vector)
# 複数のボックスを、ベクトル方向にまとめて移動する「Python 3 Script」には、上記のコードが記載されています。
順番に、コードの解説をしていきます。
corner_pts1 = [(0,0,0),(10,0,0),(10,10,0),(0,10,0),(0,0,10),(10,0,10),(10,10,10),(0,10,10)]
corner_pts2 = [(20,0,0),(30,0,0),(30,10,0),(20,10,0),(20,0,10),(30,0,10),(30,10,10),(20,10,10)]corner_pts1 = […] と corner_pts2 では、2つのボックスそれぞれを構成する8つの頂点座標を、リストで定義しています。
下側4点と上側4点を指定することで、ボックスの形状を決めています。
box1 = rs.AddBox(corner_pts1)
box2 = rs.AddBox(corner_pts2)AddBox 関数では、指定した8つの座標のリストから、ボックスを作成しています。
boxes = [box1, box2]boxes = [box1, box2] では、作成した2つのボックスを、1つのリストにまとめています。
これにより、関数はリスト複数のオブジェクトを同時に処理できるようになります。
pt1 = (0,0,0)
pt2 = (20,20,0)ベクトルを作成するために、pt1 = (0,0,0) では始点の座標、pt2 = (20,20,0) では終点の座標を定義しています。
point1 = rs.AddPoint(pt1)
point2 = rs.AddPoint(pt2)AddPoint 関数を使い、先程指定した座標から点を作成しています。
こちらで作成した始点と終点の2点を使い、次にベクトルを作成できます。
vector = rs.VectorCreate(pt2, pt1)VectorCreate 関数を使い、ベクトルを作成しています。
第1引数に終点、第2引数に始点を指定することで、pt1 から pt2 に向かう方向のベクトルが生成されます。
rs.MoveObjects(boxes, vector)MoveObjects 関数を使い、複数モデルを移動しています。
第1引数には、移動したい複数モデルのリスト(今回は boxes )、第2引数には、ベクトルを指定します。
「Python 3 Script」の右側の端子名を「boxes」に設定すると移動後のボックスデータ「point1」に設定すると始点、「point2」に設定すると始点、「vector」に設定するとベクトルデータがGH上に出力されます。
移動前のボックスの変数名は「boxes」ですが、MoveObjects 関数では、元々の変数名に移動後のデータが上書きされます。
そのため、「Python 3 Script」の右側の端子名「boxes」からは、移動後のモデルデータが出力されます。




Comment