ScaleObjectsで複数のモデルのスケール・縮尺を変更する方法|Grasshopper Python × RhinoScriptSyntax入門

RhinoScriptSyntax GHPython
ScaleObjects

ScaleObjects関数で、複数のモデルのスケールを変更することができます。

本記事の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,2) から (1,2,1) に変更した様子です。

このように、1方向や2方向のみの縮尺を変えることもできます。

Comment

Translate »