CullDuplicatePointsで重複する点を削除する方法|Grasshopper Python × RhinoScriptSyntax入門

RhinoScriptSyntax GHPython
CullDuplicatePoints

CullDuplicatePoints関数で、重複する点を削除することができます。

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

今回は、ボックスを作成後、各辺を取得し、各辺の両端の点を取得します。

その後、重複する点を削除していきます。

コード

使用コンポーネント 1: Python 3 Script 2: Brep 3: Point

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

corner_pts = [(0,0,0),(10,0,0),(10,10,0),(0,10,0),(0,0,10),(10,0,10),(10,10,10),(0,10,10)]
# 直方体を構成する8つの頂点座標を定義

box = rs.AddBox(corner_pts)
# 8つの頂点を使って直方体を作成する

edge_curves = rs.DuplicateEdgeCurves(box)
# 直方体のエッジ(辺)を曲線として複製する

duplicate_pts = []
# 重複を含む点を保存するための空のリストを用意

for edge_curve in edge_curves:
    # 複製した各エッジ曲線を順番に取り出す

    duplicate_pts.extend(rs.CurvePoints(edge_curve))
    # 各エッジ曲線の制御点を取得し、リストへ追加する

points = rs.CullDuplicatePoints(duplicate_pts)
# 重複している点を削除する

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

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

corner_pts = [(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_pts = […] では、ボックスを構成する8つの頂点座標を、リストで定義しています。

リストに関してはこちら

下側4点と上側4点を指定することで、ボックスの形状を決めています。

box = rs.AddBox(corner_pts)

AddBox 関数で、定義した8つの頂点を使って、ボックスを作成します。

edge_curves = rs.DuplicateEdgeCurves(box)

DuplicateEdgeCurves 関数で、ボックスのエッジ(辺)を、線として複製しています。

これにより、ボックスの各辺を個別の線として取得できます。

duplicate_pts = []

duplicate_pts = [] では、重複を含む点を保存するための、空のリストを作成しています。

後で各エッジ(辺)の両端の点情報をまとめて保存するために使用します。

for edge_curve in edge_curves:

for edge_curve in edge_curves: では、for 文の繰り返し処理で、複製したエッジ(辺)の線を、1本ずつ順番に取り出しています。

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

duplicate_pts.extend(rs.CurvePoints(edge_curve))

各エッジ(辺)線の制御点を取得し、リストへ追加しています。

CurvePoints 関数は、制御点を取得しますが、直線の場合、線の両端の点を取得できます。

extend() を使うことで、取得した複数の点をまとめてリストへ追加できます。

今回は、空のリストの duplicate_pts に、取得した点データを追加しています。

ただし、複数の線で同じ頂点を共有しているため、点が重複した状態になります。

points = rs.CullDuplicatePoints(duplicate_pts)

CullDuplicatePoints 関数で、重複している点を削除し、一つの点だけを取得しています。

これにより、同じ位置にある点を整理し、重複のない点リストを作成できます。

Python 3 Script」の右側の端子名を「box」に設定するとボックスデータ、「duplicate_pts」に設定すると重複している複数の点データ、「points」に設定すると重複していない複数の点データがGH上に出力されます。

データを確認してみると、重複している際の点の個数は24、重複している点を整理すると、点の個数は8つになっていることが分かります。

Comment

Translate »