Polygon Sort
============

.. image:: https://user-images.githubusercontent.com/14288520/188287885-e2b96646-045e-41ee-888c-7c85eff0b3df.png
  :target: https://user-images.githubusercontent.com/14288520/188287885-e2b96646-045e-41ee-888c-7c85eff0b3df.png

Functionality
-------------

Polygon Sort node sorts the input polygons by various criteria: distance, area and normal angle.

Inputs
------

All parameters except **Mode** and **Descending** are vectorized and can take single of multiple input values.

Parameters
----------

All parameters except **Mode** and **Descending** can be given by the node or an external input.

+----------------+-----------+-----------+--------------------------------------------------------------+
| Param          | Type      | Default   | Description                                                  |
+================+===========+===========+==============================================================+
| **Mode**       | Enum      | "D"       | The sorting direction mode:                                  |
|                |           |           |  * **P**  : Sort by the the distance to a point P            |
|                |           |           |  * **D**  : Sort by the projection along a direction D       |
|                |           |           |  * **A**  : Sort by the area of the polygons                 |
|                |           |           |  * **ND** : Sort by the normal angle relative to direction D |
|                |           |           |  * **NP** : Sort by the normal angle relative to point P     |
+----------------+-----------+-----------+--------------------------------------------------------------+
| **Descending** | Bool      | False     | Sort the polygons in the descending order.                   |
+----------------+-----------+-----------+--------------------------------------------------------------+
| **Verts**      | Vector    | none      | The vertices of the input mesh to be sorted.                 |
+----------------+-----------+-----------+--------------------------------------------------------------+
| **Polys**      | Polygon   | none      | The polygons of the input mesh to be sorted.                 |
+----------------+-----------+-----------+--------------------------------------------------------------+
| **Point P**    | Vector    | (1,0,0)   | The reference vector: Point P. [1]                           |
+----------------+-----------+-----------+--------------------------------------------------------------+
| **Direction**  | Vector    | (1,0,0)   | The reference vector: Direction D. [1]                       |
+----------------+-----------+-----------+--------------------------------------------------------------+

Notes:
[1] : "Point P" is shown in P and NP mode and "Direction" is shown in D and ND mode. These are used for distance and normal angle calculation. The area mode (A) does not use the input sorting vector.

Outputs
-------

* **Indices** : The indices of the sorted polygons.
* **Vertices** : The input vertices.
* **Polygons** : The sorted polygons.
* **Quantities** : The quantity by which the polygons are sorted. Depending on the selected mode the output quantities are either Distances, Projections, Angles or Areas.

Note: The output will be generated when the output sockets are connected.

Modes
-----
The modes correspond to different sorting criteria and each one has a quanitity by which the polygons are sorted.

* **Point** (P) : In this mode the polygons are sorted by the distance from the center of each polygon to the given point P.
* **Direction** (D) : In this mode the polygons are sorted by the projection component of polygon center vector along the given direction D.
* **Area** (A) : In this mode the polygons are sorted by the area of the polygons.
* **Normal Angle Point** (NP) : In this mode the polygons are sorted by the angle between the polygon normal and the vector pointing form the center of the polygon to the given point P.
* **Normal Angle Direction** (ND) : In this mode the polygons are sorted by the angle between the polygon normal and the given direction vector D.

Presets
-------
The node provides a set of predefined sort directions: along X, Y and Z. These buttons will set the mode to "D" and the sorting vector (Direction) to one of the X, Y or Z directions: (1,0,0), (0,1,0) and (0,0,1) respectively. The preset buttons are only visible as long as the sorting vector socket is not connected.

References:
The algorithm to compute the area is based on descriptions found at this address: http://geomalgorithms.com/a01-_area.html#3D%20Polygons (not available)

https://web.archive.org/web/20210421151955/http://geomalgorithms.com/a01-_area.html (see Polygons)


