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

今回は、上の画像のように、複数のボックスのスケールを変更します。

使用コンポーネント 1: Python 3 Script 2: Brep
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つのボックスをリストにまとめる
center_pt = (0,0,0)
# 拡大・縮小の基準となる中心座標を定義
scaled_boxes = rs.ScaleObjects(boxes, center_pt, (2,2,2), 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 = […] では、それぞれボックスを構成する8つの頂点座標を、リストで定義しています。
box1 = rs.AddBox(corner_pts1)
box2 = rs.AddBox(corner_pts2)AddBox 関数で、それぞれ頂点情報を使って、ボックスを作成します。
boxes = [box1, box2]boxes = [box1, box2] では、作成した2つのボックスを、1つのリストにまとめています。
これにより、複数のオブジェクトを同時に処理できるようになります。
center_pt = (0,0,0)center_pt = (0,0,0) では、拡大・縮小の基準となる座標を定義しています。
この点を中心として、オブジェクトがスケールされます。
scaled_boxes = rs.ScaleObjects(boxes, center_pt, (2,2,2), copy=True)ScaleObjects 関数で、複数のボックスを拡大・縮小します。
第1引数には変形するオブジェクトのリスト、第2引数にはスケールの基準点を指定しています。
第3引数の (2,2,2) は、X・Y・Z方向をそれぞれ2倍に拡大する設定です。
copy=True にすることで、元のボックスを残したまま、スケール変更したコピーを作成できます。
copy=False にする場合、元々の変数にスケール変更したモデルが上書きされます。

上の画像は、スケール倍率を (2,2,2) から (1,2,1) に変更した様子です。
このように、1方向や2方向のみの縮尺を変えることもできます。




Comment