1- import { vtkObject } from "../../../interfaces" ;
2- import { Bounds , TypedArray , Vector3 } from "../../../types" ;
1+ import { vtkObject } from '../../../interfaces' ;
2+ import { Bounds , Vector3 } from '../../../types' ;
3+ import vtkPoints from '../../Core/Points' ;
34
45export interface IPolygonInitialValues {
5- firstPoint ?: Vector3 ,
6- pointCount ?: number ,
7- tris ?: Vector3 [ ] ,
6+ pointCount ?: number ;
7+ tris ?: Vector3 [ ] ;
88}
99
1010/**
1111 * Different states which pointInPolygon could return.
1212 */
13- export enum PolygonIntersectionState {
14- FAILURE ,
15- OUTSIDE ,
16- INSIDE ,
17- INTERSECTION ,
18- ON_LINE ,
13+ export enum PolygonWithPointIntersectionState {
14+ FAILURE ,
15+ OUTSIDE ,
16+ INSIDE ,
17+ }
18+
19+ /**
20+ * Different states which intersectWith2DConvexCell could return.
21+ */
22+ export enum PolygonWithPolygonIntersectionState {
23+ NO_INTERSECTION ,
24+ LINE_INTERSECTION ,
25+ POINT_INTERSECTION ,
26+ }
27+
28+ interface IIntersectWithLine {
29+ intersection : boolean ;
30+ betweenPoints : boolean ;
31+ t : number ;
32+ x : Vector3 ;
1933}
2034
2135export interface vtkPolygon extends vtkObject {
36+ /**
37+ * Get the array of triangles that triangulate the polygon.
38+ */
39+ getPointArray ( ) : Vector3 [ ] ;
40+
41+ /**
42+ * Set the polygon's points
43+ * Points must be ordered in counterclockwise order
44+ * @param {Vector3[] } points The polygon's points.
45+ */
46+ setPoints ( points : Vector3 [ ] ) : void ;
47+
48+ /**
49+ * Computes the polygon normal
50+ * @return {number } squared norm before normalization
51+ */
52+ computeNormal ( ) : number ;
53+
54+ /**
55+ * Triangulate this polygon.
56+ * The output data must be accessed through `getPointArray`.
57+ * The output data contains points by group of three: each three-group
58+ * defines one triangle.
59+ */
60+ triangulate ( ) : void ;
61+
62+ /**
63+ * Determine whether a point is inside a polygon. The function uses a winding
64+ * number calculation generalized to the 3D plane one which the polygon
65+ * resides. Returns OUTSIDE if point is not in the polygon; INSIDE if it is inside. Can
66+ * also return FAILURE to indicate a degenerate polygon. This implementation is
67+ * inspired by Dan Sunday's algorithm found in the book Practical Geometry
68+ * Algorithms.
69+ * @param {Vector3 } point Point to check
70+ * @return {PolygonWithPointIntersectionState } type of intersection
71+ */
72+ pointInPolygon ( point : Vector3 ) : PolygonWithPointIntersectionState ;
73+
74+ /**
75+ * Compute ear triangulation of current polygon
76+ * The polygon must be convex and have at least 3 points
77+ * @return {boolean } whether triangulation failed or not
78+ */
79+ triangulate ( ) : boolean ;
2280
23- /**
24- * Get the array of triangles that triangulate the polygon.
25- */
26- getPointArray ( ) : Vector3 [ ] ;
27-
28- /**
29- * Set the polygon's points.
30- * @param {Vector3[] } points The polygon's points.
31- */
32- setPoints ( points : Vector3 [ ] ) : void ;
33-
34- /**
35- * Triangulate this polygon.
36- * The output data must be accessed through `getPointArray`.
37- * The output data contains points by group of three: each three-group
38- * defines one triangle.
39- */
40- triangulate ( ) : void ;
81+ /**
82+ * Returns the centroid of this polygon
83+ * @return {Vector3 } centroid
84+ */
85+ computeCentroid ( ) : Vector3 ;
4186
87+ /**
88+ * Returns the area of the polygon
89+ * @return {number } area
90+ */
91+ computeArea ( ) : number ;
92+
93+ /**
94+ * Returns whether the polygon is convex or not
95+ * Returns false for degenerate polygon
96+ * @return {boolean } is convex or not
97+ */
98+ isConvex ( ) : boolean ;
99+
100+ /**
101+ * Interpolates functions with polygon points
102+ * @param point point to compute the interpolation on
103+ * @param useMVCInterpolation
104+ * @return weights corresponding to each point of polygon parametrizing the given point
105+ */
106+ interpolateFunctions ( point : Vector3 , useMVCInterpolation : boolean ) : Number [ ] ;
107+
108+ /**
109+ * Computes intersection of polygon with a line defined by two points
110+ * @param x1 first point of line
111+ * @param x2 second point of line
112+ * @return intersection point coordinates
113+ */
114+ intersectWithLine ( x1 : Vector3 , x2 : Vector3 ) : IIntersectWithLine ;
115+
116+ /**
117+ * Computes intersection of polygon with another polygon.
118+ * It can be a line, a point or no intersection.
119+ * Note: Expects both polygons to be convex
120+ * @param polygon vtkPolygon with which to compute intersection
121+ * @return {PolygonWithPolygonIntersectionState } type of intersection
122+ */
123+ intersectConvex2DCells (
124+ polygon : vtkPolygon
125+ ) : PolygonWithPolygonIntersectionState ;
42126}
43127
128+ // ---------------------------------------------------
129+ /**
130+ * Compute the normal of a polygon and return its squared norm.
131+ * @param {Array<number>|TypedArray<number> } poly
132+ * @param {vtkPoints } points
133+ * @param {Vector3 } normal
134+ * @returns {number }
135+ */
136+ export function getNormal (
137+ poly : Vector3 [ ] ,
138+ points : vtkPoints ,
139+ normal : Vector3
140+ ) : number ;
141+
142+ /**
143+ * Determines whether a polygon is convex
144+ * @param points vtkPoints defining the polygon
145+ * @return {boolean } whether the polygon is convex or not
146+ */
147+ export function isConvex ( points : vtkPoints ) : boolean ;
148+
149+ /**
150+ * Given a set of points, computes the centroid of the corresponding polygon
151+ * @param points vtkPoints defining the polygon
152+ * @param normal normal to the polygon of which the centroid is computed
153+ * @return {Vector3 } centroid. Returns null for degenerate polygon
154+ */
155+ export function computeCentroid ( points : vtkPoints , normal : Vector3 ) : Vector3 ;
156+
157+ /**
158+ * Given a set of points, computes the area of the corresponding polygon
159+ * @param points vtkPoints defining the polygon
160+ * @param normal normal to the polygon of which the centroid is computed
161+ * @return {number } area of polygon
162+ */
163+ export function computeArea ( points : vtkPoints , normal : Vector3 ) : number ;
164+
44165/**
45166 * Determine whether a point is inside a polygon. The function uses a winding
46167 * number calculation generalized to the 3D plane one which the polygon
47- * resides. Returns 0 if point is not in the polygon; 1 if it is inside. Can
48- * also return -1 to indicate a degenerate polygon. This implementation is
168+ * resides. Returns OUTSIDE if point is not in the polygon; INSIDE if it is inside. Can
169+ * also return FAILURE to indicate a degenerate polygon. This implementation is
49170 * inspired by Dan Sunday's algorithm found in the book Practical Geometry
50171 * Algorithms.
51172 *
@@ -57,19 +178,69 @@ export interface vtkPolygon extends vtkObject {
57178 */
58179export function pointInPolygon (
59180 point : Vector3 ,
60- vertices : Array < number > | TypedArray ,
181+ vertices : Array < number > | TypedArray ,
61182 bounds : Bounds ,
62183 normal : Vector3
63184) : PolygonIntersectionState ;
64185
186+ /**
187+ * Given a set of points that define a polygon, determines whether a line defined
188+ * by two points intersect with the polygon. There can be no intersection, a point
189+ * intersection or a line intersection.
190+ * @param p1 first point of the line
191+ * @param p2 second point of the line
192+ * @param points points defining the polygon
193+ * @param normal normal to the polygon
194+ * @return {IIntersectWithLine } type of intersection
195+ */
196+ export function intersectWithLine (
197+ p1 : Vector3 ,
198+ p2 : Vector3 ,
199+ points : vtkPoints ,
200+ normal : Vector3
201+ ) : IIntersectWithLine ;
202+
203+ /**
204+ * Given a set of points that define a polygon and another polygon, computes their
205+ * intersection. It can be a line, a point or no intersection.
206+ * Note: Expects both polygons to be convex
207+ * @param polygon vtkPolygon with which to compute intersection
208+ * @param points points defining the polygon
209+ * @param normal normal to the polygon
210+ * @return {PolygonWithPolygonIntersectionState } type of intersection
211+ */
212+ export function intersectConvex2DCells (
213+ polygon : vtkPolygon ,
214+ points : vtkPoints ,
215+ normal : Vector3
216+ ) : PolygonWithPolygonIntersectionState ;
217+
218+ /**
219+ * Given a set of points, computes the weights corresponding to the interpolation of the
220+ * given point with regard to the points of the polygon. The returned array corresponds to
221+ * the weights and therefore its size is the number of points in the polygon
222+ * @param point point we want the interpolation of
223+ * @param points points defining the polygon
224+ * @param useMVCInterpolation whether to use MVC interpolation
225+ */
226+ export function interpolateFunctions (
227+ point : Vector3 ,
228+ points : vtkPoints ,
229+ useMVCInterpolation : boolean
230+ ) : Array < number > ;
231+
65232/**
66233 * Method used to decorate a given object (publicAPI+model) with vtkPolygon characteristics.
67234 *
68235 * @param publicAPI object on which methods will be bounds (public)
69236 * @param model object on which data structure will be bounds (protected)
70237 * @param {IPolygonInitialValues } [initialValues] (default: {})
71238 */
72- export function extend ( publicAPI : object , model : object , initialValues ?: IPolygonInitialValues ) : void ;
239+ export function extend (
240+ publicAPI : object ,
241+ model : object ,
242+ initialValues ?: IPolygonInitialValues
243+ ) : void ;
73244
74245/**
75246 * Method used to create a new instance of vtkPolygon.
@@ -79,15 +250,14 @@ export function newInstance(initialValues?: IPolygonInitialValues): vtkPolygon;
79250
80251/**
81252 * vtkPolygon represents a 2D n-sided polygon.
82- *
253+ *
83254 * The polygons cannot have any internal holes, and cannot self-intersect.
84255 * Define the polygon with n-points ordered in the counter-clockwise direction.
85256 * Do not repeat the last point.
86257 */
87258export declare const vtkPolygon : {
88- newInstance : typeof newInstance ,
89- extend : typeof extend ;
90- // static
91-
259+ newInstance : typeof newInstance ;
260+ extend : typeof extend ;
261+ // static
92262} ;
93263export default vtkPolygon ;
0 commit comments