Grasshopper :: 任意のCoordinateでSort Points
点をX方向にソートするには、[Sort Point]コンポーネントを使いますが、YやZ方向をソートするコンポーネントはデフォルトではありません。
そこでPythonやC#で任意の方向にソートする方法を紹介します。
レシピ
PythonもC#も、以前紹介した[Value List]コンポーネントでソートの順番をドロップダウンで選べるようにしてみました。
中身はこんな感じです。
では、まずPythonのコードは以下の通りです。
[Value List]コンポーネントから数値を受け取り、if文でソートするKeyを条件分岐させています。
Keyの0がX、1がY、2がZとなります。
その後、sortedPoints = sorted(Points,key = itemgetter(first,second,third))
でKeyの順序で点をソートし、ついでにインデックスも出力しています。
次に、C#でやってみるとこんな感じです。
Pythonではif文でしたが、C#はSwitch文が使えるので、こちらで条件分岐させています。
また、ここではCaseの中で点のソートをOrderByメソッドで行いました。
LINQのことは正直よく分かっていませんが、このOrderByの後にThenByを使うとさらにソートをかけられるので、ソートには便利ですね。
あとは、インデックスを抽出して完了です。
ちなみにPythonでもC#でも、インデックスは点のGUIDから出しているわけでなないので、このコードでは点が重複しているとインデックスも重複してしまうのでご注意ください。
使用した主なコンポーネント
- [Sort Points] (Vector > Point > Sort Points)
- [Value List] (Params > Input > Value List)
- [Python Script] (Maths > Script > Python Script)
- [C# Script] (Maths > Script > C# Script)