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

今回は、上の画像のように、2つのボックスを作成して回転させます。

使用コンポーネント 1: Python 3 Script 2: Point 3: Brep 4: Vector Display 5: Vector
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つのボックスをリストにまとめる
startpt_axis = (0,0,0)
# 回転軸の始点となる座標を定義
endpt_axis = (0,0,20)
# 回転軸の終点となる座標を定義
point1 = rs.AddPoint(startpt_axis)
# 回転軸の始点位置に点を作成する
point2 = rs.AddPoint(endpt_axis)
# 回転軸の終点位置に点を作成する
axis = rs.VectorCreate(point2, point1)
# 回転方向を表すベクトル(回転軸)を作成する
rotated_boxes = rs.RotateObjects(boxes, point1, 45, axis, copy=True)
# 複数のボックスを回転させる「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つのリストにまとめています。
これにより、複数のオブジェクトを同時に処理できるようになります。
startpt_axis = (0,0,0)
endpt_axis = (0,0,20)回転軸となるベクトルの始点と終点の座標を定義します。
startpt_axis = (0,0,0) では始点の座標、endpt_axis = (0,0,20) では終点の座標を定義しています。
終点のZ座標は20としていますが、後程ベクトルを見やすいように20にしているだけなので、1でも問題ありません。
point1 = rs.AddPoint(startpt_axis)
point2 = rs.AddPoint(endpt_axis)AddPoint 関数で、指定した座標から、それぞれ点を作成しています。
これにより、回転軸となるベクトルの始点と終点を作成できました。
axis = rs.VectorCreate(point2, point1)VectorCreate 関数で、回転軸となるベクトルを作成します。
このベクトルを使うことで、どの方向を軸に回転するかを指定できます。
rotated_boxes = rs.RotateObjects(boxes, point1, 45, axis, copy=True)RotateObjects 関数で、複数のボックスを回転させます。
第1引数には回転する複数オブジェクト、第2引数には回転の中心点を指定しています。
第3引数では回転角度(45度)、第4引数では回転軸を指定しています。
copy=True にすることで、元のボックスを残したまま、回転したコピーを作成できます。
copy=False にする場合、元々の変数に回転したモデルが上書きされます。
「Python 3 Script」の右側の端子名を「boxes」に設定すると移動前のボックスデータ、「point1」に設定すると始点、「point2」に設定すると終点、「axis」に設定すると回転軸のベクトルデータ、「axis」に設定するとベクトルデータ、「rotated_boxes」に設定すると回転後のボックスデータがGH上に出力されます。

上の画像は、終点の座標を endpt_axis = (0,0,20) から endpt_axis = (20,0,0) に変更し、回転軸のベクトルを変更した様子です。
回転軸を変えることで、様々な回転に対応することができます。




Comment