RotateObjectsで複数モデルを回転する方法|Grasshopper Python × RhinoScriptSyntax入門

RhinoScriptSyntax GHPython
RotateObjects

RotateObjectsで、複数モデルを回転することができます。

本記事の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

Translate »