CullDuplicatePointsCullDuplicatePoints関数で、重複する点を削除することができます。
本記事の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本ずつ順番に取り出しています。
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