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

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

使用コンポーネント 1: Python 3 Script 2: Point 3: Brep 4: Vector Display
import rhinoscriptsyntax as rs
# RhinoをPythonから操作するためのライブラリを読み込む
corner_pts = [(0,0,0),(10,0,0),(10,10,0),(0,10,0),(0,0,10),(10,0,10),(10,10,10),(0,10,10)]
# 直方体を構成する8つの頂点座標を定義
box = rs.AddBox(corner_pts)
# 8つの頂点を使って直方体を作成する
startpt_axis = (0,0,0)
# 回転軸の始点となる座標を定義
endpt_axis = (0,0,20)
# 回転軸の終点となる座標を定義
point1 = rs.AddPoint(startpt_axis)
# 回転軸の始点位置に点を作成する
point2 = rs.AddPoint(endpt_axis)
# 回転軸の終点位置に点を作成する
axis = rs.VectorCreate(endpt_axis, startpt_axis)
# 回転方向を表すベクトル(回転軸)を作成する
rotated_box = rs.RotateObject(box, point1, 45, axis, copy=True)
# ボックスを回転させる「Python 3 Script」には、上記のコードが記載されています。
順番に、コードの解説をしていきます。
corner_pts = [(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_pts = [...] では、直方体を構成する8つの頂点座標を、リストで定義しています。
下側4点と上側4点を指定することで、ボックスの形状を決めています。
box = rs.AddBox(corner_pts)AddBox 関数で、定義した8つの頂点を使って、直方体(ボックス)を作成します。
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(endpt_axis, startpt_axis)VectorCreate 関数では、2つの点を使って、回転方向を表すベクトル(回転軸)を作成します。
このベクトルを使うことで、どの方向を軸に回転するかを指定できます。
rotated_box = rs.RotateObject(box, point1, 45, axis, copy=True)RotateObject 関数で、ボックスを回転させます。
第1引数には回転するオブジェクト、第2引数には回転の中心点を指定しています。
第3引数では回転角度(45度)、第4引数では回転軸を指定しています。
copy=True にすることで、元のボックスを残したまま、回転したコピーを作成できます。
copy=False にする場合、元々の変数に回転したモデルが上書きされます。
「Python 3 Script」の右側の端子名を「box」に設定すると移動前のボックスデータ、「axis」に設定すると回転軸のベクトルデータ、「point1」に設定すると始点、「point2」に設定すると始点、「vector」に設定するとベクトルデータ、「rotated_box」に設定すると回転後のボックスデータがGH上に出力されます。

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




Comment