AddEdgeSrfAddEdgeSrf関数で、4つか3つの線をエッジとしてサーフェス(面)を作成することができます。
本記事のGrasshopperファイルのダウンロードはこちら

今回は、上の画像のように、4つの点からサーフェスを作成します。

使用コンポーネント 1: Python 3 Script 2: Curve 3: Surface
import rhinoscriptsyntax as rs
# RhinoをPythonから操作するためのライブラリを読み込む
pts = [(0,0,0),(10,0,5),(10,10,0),(0,10,5)]
# 4つの点の座標(X, Y, Z)をリストでまとめて定義
lines = []
# 作成した線を入れるための空のリストを用意
for i in range(len(pts)):
# 点の数だけ繰り返す
line = rs.AddLine(pts[i], pts[(i + 1) % len(pts)])
lines.append(line)
# 現在の点と次の点を結んで線を作成する
# 最後の点では、最初の点とつなげて閉じた形にする
surface = rs.AddEdgeSrf(lines)
# 作成した4本の線を使ってサーフェス(面)を作成する「Python 3 Script」には、上記のコードが記載されています。
順番に、コードの解説をしていきます。
pts = [(0,0,0),(10,0,5),(10,10,0),(0,10,5)]pts = [(0,0,0),(10,0,5),(10,10,0),(0,10,5)] は、4つの点の座標(X, Y, Z)をリストでまとめて定義しています。
lines = []作成する線を保存するための、空のリストを用意しています。
for i in range(len(pts)):for i in range(len(pts)): で、点の数だけ繰り返しのループ処理を行います。
len(pts) は点の数(0,1,2,3)を取得しており、今回は4回繰り返されます。
line = rs.AddLine(pts[i], pts[(i + 1) % len(pts)])現在の点と、次の点を結んで線を作成します。
AddLine 関数では、始点と終点を指定して、直線を作成できます。
pts = [点0, 点1, 点2, 点3]現在、上記のような点のリストがあります。
pts[i] では、シンプルにi = 0 、i = 1 、i = 2 、i = 3 のようになり、順番にリストの点を繰り返し取得します。
(i + 1) の場合、iに1を足すので、i + 1 = 1 、i + 1 = 2 、i + 1 = 3 、i + 1 = 4 のようになり、1つずれて点を取得できます。
ここで問題になるのは、最後の i = 3 のときです。
i = 3 のとき、i + 1 = 4 になりますが、点4は存在しないため、そのままではエラーになります。
そこで %(余り)を使います。
(i + 1) % len(pts)上記のように、len(pts) で取得した、点の数の4で、余りを使います。
(0 + 1) % 4 = 1、(1 + 1) % 4 = 2、(2 + 1) % 4 = 3、(3 + 1) % 4 = 0
最後だけ 0 に戻るため、点3 → 点0 とリストの最後の座標を始点、最初の座標を終点にすることができます。
これにより、4つの座標から、4本の直線を作成することができます。
これらの直線から、サーフェスを作成します。
lines.append(line)lines.append(line) で、作成した線を、lines のリストに追加しています。
surface = rs.AddEdgeSrf(lines)AddEdgeSrf 関数を使って、作成した4本の線からサーフェス(面)を作成します。
線で囲まれた形をもとに、1枚の面を作ることができます。
「Python 3 Script」の右側の端子名を「lines」に設定すると線データ、「surface」に設定するとサーフェスデータがGH上に出力されます。




Comment