AddLoftSrfで複数の線をつないでサーフェスを作る方法|Grasshopper Python × RhinoScriptSyntax入門

AddLoftSrf

AddLoftSrf関数で、複数の線をつないでサーフェス(面)を作成することができます。

本記事のGrasshopperファイルのダウンロードはこちら

サーフェス

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

コード

使用コンポーネント 1: Python 3 Script 2: Curve 3: Surface

import rhinoscriptsyntax as rs
# RhinoをPythonから操作するためのライブラリを読み込む

pts = [
    [(0,0,0), (0,20,0)],
    [(20,0,10), (20,20,10)],
    [(40,0,10), (40,20,10)],
    [(60,0,20), (60,20,20)]
]
# 各要素に「2点の座標」を持つリストを定義
# それぞれのペアは、1本の線の始点と終点になる

lines = []
# 作成した線を保存するための空のリストを用意

for i in pts:
    # ptsの中の各「2点のセット」を順番に取り出す

    lines.append(rs.AddLine(i[0], i[1]))
    # 取り出した2点(i[0], i[1])を結んで線を作成し、リストに追加する

surface = rs.AddLoftSrf(lines)
# 作成した複数の線を使ってロフトを行い、サーフェス(面)を作成する

Python 3 Script」には、上記のコードが記載されています。

順番に、コードの解説をしていきます。

pts = [
    [(0,0,0), (0,20,0)],
    [(20,0,10), (20,20,10)],
    [(40,0,10), (40,20,10)],
    [(60,0,20), (60,20,20)]
]

上記のコードでは、2点ずつの座標をセットをまとめたリストを定義しています。

リストに関してはこちら

今回のリストは、リストの中にさらにリストがある入れ子構造になっています。

入れ子構造に関してはこちら

それぞれのセットは「1本の線の始点と終点」を表しています。

つまり、後程このデータから4本の線を作成することができます。

lines = []

lines = [] では、作成する線を保存するためのリストを用意しています。

後ほど作る線を、このリストに入れます。

for i in pts:

for i in pts: では、pts の中にあるデータを、繰り返しループ処理で、1つずつ取り出して処理します。

繰り返し処理に関してはこちら

ここでは、各「2つの座標のセット」を順番に扱っています。

lines.append(rs.AddLine(i[0], i[1]))

AddLine 関数で、取り出した2点(始点と終点)を使って、1本の線を作成します。

i[0] ではセット内の1つ目の始点、i[1] ではセット内の2つ目の終点を取得します。

線を作成した後、appendlines のリストに追加していきます。

surface = rs.AddLoftSrf(lines)

AddLoftSrf 関数で、作成した複数の線の lines を引数に使い、ロフトサーフェスを作成します。

Python 3 Script」の右側の端子名を「lines」に設定すると線データ、「surface」に設定するとサーフェスデータがGH上に出力されます。

閉じる

上の画像のように、サーフェスを閉じることもできます。

import rhinoscriptsyntax as rs
# RhinoをPythonから操作するためのライブラリを読み込む

pts = [
    [(0,0,0),(0,20,0)],
    [(20,0,10),(20,20,10)],
    [(40,0,10),(40,20,10)]
]
# 各要素に「2点の座標」を持つリストを定義
# それぞれのペアは、1本の線の始点と終点になる

lines = []
# 作成した線を保存するための空のリストを用意

for i in pts:
    # ptsの中の各「2点のセット」を順番に取り出す

    lines.append(rs.AddLine(i[0], i[1]))
    # 取り出した2点(i[0], i[1])を結んで線を作成し、リストに追加する

surface = rs.AddLoftSrf(lines, loft_type=0, closed=True)
# 作成した複数の線を使ってロフトを行い、サーフェス(面)を作成する

上記のコードでは、pts の座標の個数と、最後の AddLoftSrf の引数を変えています。

rs.AddLoftSrf(lines, loft_type=0, closed=True) のように、closed=True にすることで、サーフェスが閉じます。

ロフトタイプ

loft_type=2 のように設定することで、ロフトの種類を変えることもできます。

上の画像は、loft_type=2 の「Straight」に設定した例です。

loft_type=0loft_type=1loft_type=2loft_type=3loft_type=4
NormalLooseStraightTightDevelopable

上記の表は、使えるロフトの種類一覧です。

ロフトの各機能に関しての説明はこちら

Comment

Translate »