CopyObjectsCopyObjects関数で、複数のモデルをコピー移動することができます。
本記事の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 へ向かうベクトルを作成する
copy_boxes = rs.CopyObjects(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 に向かう方向のベクトルが生成されます。
copy_boxes = rs.CopyObjects(boxes, vector)CopyObjects 関数で、複数のボックスを、ベクトル方向にまとめてコピーします。
第1引数には、移動したい複数モデルのリスト(今回は boxes )、第2引数には、ベクトルを指定します。
「Python 3 Script」の右側の端子名を「boxes」に設定すると移動前のボックスデータ「point1」に設定すると始点、「point2」に設定すると始点、「vector」に設定するとベクトルデータ、「copy_boxes」に設定すると移動後のボックスデータがGH上に出力されます。
「Vector Display」コンポーネントを使うことで、ベクトルを可視化することができます。




Comment