AddEdgeSrfで4つか3つの線をエッジとしてサーフェスを作る方法|Grasshopper Python × RhinoScriptSyntax入門

AddEdgeSrf

AddEdgeSrf関数で、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 = 0i = 1i = 2i = 3 のようになり、順番にリストの点を繰り返し取得します。

(i + 1) の場合、iに1を足すので、i + 1 = 1i + 1 = 2i + 1 = 3i + 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

Translate »