1
1
import { vtkObject } from "../../../interfaces" ;
2
2
import { Bounds , TypedArray , Vector3 } from "../../../types" ;
3
+ import vtkPoints from "../../Core/Points" ;
3
4
4
5
export interface IPolygonInitialValues {
5
- firstPoint ?: Vector3 ,
6
- pointCount ?: number ,
7
- tris ?: Vector3 [ ] ,
6
+ pointCount ?: number ;
7
+ tris ?: Vector3 [ ] ;
8
8
}
9
9
10
10
/**
11
11
* Different states which pointInPolygon could return.
12
12
*/
13
- export enum PolygonIntersectionState {
13
+ export enum PolygonWithPointIntersectionState {
14
14
FAILURE ,
15
15
OUTSIDE ,
16
16
INSIDE ,
17
- INTERSECTION ,
18
- ON_LINE ,
19
17
}
20
18
21
- export interface vtkPolygon extends vtkObject {
19
+ /**
20
+ * Different states which intersectWith2DConvexCell could return.
21
+ */
22
+ export enum PolygonWithPolygonIntersectionState {
23
+ NO_INTERSECTION ,
24
+ LINE_INTERSECTION ,
25
+ POINT_INTERSECTION ,
26
+ }
22
27
28
+ interface IIntersectWithLine {
29
+ intersection : boolean ;
30
+ betweenPoints : boolean ;
31
+ t : number ;
32
+ x : Vector3 ;
33
+ }
34
+
35
+ export interface vtkPolygon extends vtkObject {
23
36
/**
24
37
* Get the array of triangles that triangulate the polygon.
25
38
*/
26
39
getPointArray ( ) : Vector3 [ ] ;
27
40
28
41
/**
29
- * Set the polygon's points.
42
+ * Set the polygon's points
43
+ * Points must be ordered in counterclockwise order
30
44
* @param {Vector3[] } points The polygon's points.
31
45
*/
32
46
setPoints ( points : Vector3 [ ] ) : void ;
33
47
34
48
/**
35
- * Triangulate this polygon.
49
+ * Computes the polygon normal
50
+ * @return {number } squared norm before normalization
51
+ */
52
+ computeNormal ( ) : number ;
53
+
54
+ /**
55
+ * Triangulate this polygon.
36
56
* The output data must be accessed through `getPointArray`.
37
57
* The output data contains points by group of three: each three-group
38
58
* defines one triangle.
39
59
*/
40
60
triangulate ( ) : void ;
41
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 ;
80
+
81
+ /**
82
+ * Returns the centroid of this polygon
83
+ * @return {Vector3 } centroid
84
+ */
85
+ computeCentroid ( ) : Vector3 ;
86
+
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 (
107
+ point : Vector3 ,
108
+ useMVCInterpolation : boolean
109
+ ) : Number [ ] ;
110
+
111
+ /**
112
+ * Computes intersection of polygon with a line defined by two points
113
+ * @param x1 first point of line
114
+ * @param x2 second point of line
115
+ * @return intersection point coordinates
116
+ */
117
+ intersectWithLine ( x1 : Vector3 , x2 : Vector3 ) : IIntersectWithLine ;
118
+
119
+ /**
120
+ * Computes intersection of polygon with another polygon.
121
+ * It can be a line, a point or no intersection.
122
+ * Note: Expects both polygons to be convex
123
+ * @param polygon vtkPolygon with which to compute intersection
124
+ * @return {PolygonWithPolygonIntersectionState } type of intersection
125
+ */
126
+ intersectConvex2DCells (
127
+ polygon : vtkPolygon
128
+ ) : PolygonWithPolygonIntersectionState ;
42
129
}
43
130
131
+ // ---------------------------------------------------
132
+ /**
133
+ * Compute the normal of a polygon and return its squared norm.
134
+ * @param {Array<number>|TypedArray<number> } poly
135
+ * @param {vtkPoints } points
136
+ * @param {Vector3 } normal
137
+ * @returns {number }
138
+ */
139
+ export function getNormal (
140
+ poly : Vector3 [ ] ,
141
+ points : vtkPoints ,
142
+ normal : Vector3
143
+ ) : number ;
144
+
145
+ /**
146
+ * Determines whether a polygon is convex
147
+ * @param points vtkPoints defining the polygon
148
+ * @return {boolean } whether the polygon is convex or not
149
+ */
150
+ export function isConvex ( points : vtkPoints ) : boolean ;
151
+
152
+ /**
153
+ * Given a set of points, computes the centroid of the corresponding polygon
154
+ * @param points vtkPoints defining the polygon
155
+ * @param normal normal to the polygon of which the centroid is computed
156
+ * @return {Vector3 } centroid. Returns null for degenerate polygon
157
+ */
158
+ export function computeCentroid ( points : vtkPoints , normal : Vector3 ) : Vector3 ;
159
+
160
+ /**
161
+ * Given a set of points, computes the area of the corresponding polygon
162
+ * @param points vtkPoints defining the polygon
163
+ * @param normal normal to the polygon of which the centroid is computed
164
+ * @return {number } area of polygon
165
+ */
166
+ export function computeArea ( points : vtkPoints , normal : Vector3 ) : number ;
167
+
44
168
/**
45
169
* Determine whether a point is inside a polygon. The function uses a winding
46
170
* 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
171
+ * resides. Returns OUTSIDE if point is not in the polygon; INSIDE if it is inside. Can
172
+ * also return FAILURE to indicate a degenerate polygon. This implementation is
49
173
* inspired by Dan Sunday's algorithm found in the book Practical Geometry
50
174
* Algorithms.
51
175
*
52
176
* @param {Vector3 } point Point to check
53
177
* @param {Array<Number>|TypedArray } vertices Vertices of the polygon
54
178
* @param {Bounds } bounds Bounds of the vertices
55
179
* @param {Vector3 } normal Normal vector of the polygon
56
- * @returns {PolygonIntersectionState } Integer indicating the type of intersection
180
+ * @returns {PolygonWithPointIntersectionState } Integer indicating the type of intersection
57
181
*/
58
182
export function pointInPolygon (
59
- point : Vector3 ,
60
- vertices : Array < number > | TypedArray ,
61
- bounds : Bounds ,
62
- normal : Vector3
63
- ) : PolygonIntersectionState ;
183
+ point : Vector3 ,
184
+ vertices : Array < number > | TypedArray ,
185
+ bounds : Bounds ,
186
+ normal : Vector3
187
+ ) : PolygonWithPointIntersectionState ;
188
+
189
+ /**
190
+ * Given a set of points that define a polygon, determines whether a line defined
191
+ * by two points intersect with the polygon. There can be no intersection, a point
192
+ * intersection or a line intersection.
193
+ * @param p1 first point of the line
194
+ * @param p2 second point of the line
195
+ * @param points points defining the polygon
196
+ * @param normal normal to the polygon
197
+ * @return {IIntersectWithLine } type of intersection
198
+ */
199
+ export function intersectWithLine (
200
+ p1 : Vector3 ,
201
+ p2 : Vector3 ,
202
+ points : vtkPoints ,
203
+ normal : Vector3
204
+ ) : IIntersectWithLine ;
205
+
206
+ /**
207
+ * Given a set of points that define a polygon and another polygon, computes their
208
+ * intersection. It can be a line, a point or no intersection.
209
+ * Note: Expects both polygons to be convex
210
+ * @param polygon vtkPolygon with which to compute intersection
211
+ * @param points points defining the polygon
212
+ * @param normal normal to the polygon
213
+ * @return {PolygonWithPolygonIntersectionState } type of intersection
214
+ */
215
+ export function intersectConvex2DCells (
216
+ polygon : vtkPolygon ,
217
+ points : vtkPoints ,
218
+ normal : Vector3
219
+ ) : PolygonWithPolygonIntersectionState ;
220
+
221
+ /**
222
+ * Given a set of points, computes the weights corresponding to the interpolation of the
223
+ * given point with regard to the points of the polygon. The returned array corresponds to
224
+ * the weights and therefore its size is the number of points in the polygon
225
+ * @param point point we want the interpolation of
226
+ * @param points points defining the polygon
227
+ * @param useMVCInterpolation whether to use MVC interpolation
228
+ */
229
+ export function interpolateFunctions (
230
+ point : Vector3 ,
231
+ points : vtkPoints ,
232
+ useMVCInterpolation : boolean
233
+ ) : Array < number > ;
64
234
65
235
/**
66
236
* Method used to decorate a given object (publicAPI+model) with vtkPolygon characteristics.
@@ -69,7 +239,11 @@ export function pointInPolygon(
69
239
* @param model object on which data structure will be bounds (protected)
70
240
* @param {IPolygonInitialValues } [initialValues] (default: {})
71
241
*/
72
- export function extend ( publicAPI : object , model : object , initialValues ?: IPolygonInitialValues ) : void ;
242
+ export function extend (
243
+ publicAPI : object ,
244
+ model : object ,
245
+ initialValues ?: IPolygonInitialValues
246
+ ) : void ;
73
247
74
248
/**
75
249
* Method used to create a new instance of vtkPolygon.
@@ -79,15 +253,14 @@ export function newInstance(initialValues?: IPolygonInitialValues): vtkPolygon;
79
253
80
254
/**
81
255
* vtkPolygon represents a 2D n-sided polygon.
82
- *
256
+ *
83
257
* The polygons cannot have any internal holes, and cannot self-intersect.
84
258
* Define the polygon with n-points ordered in the counter-clockwise direction.
85
259
* Do not repeat the last point.
86
260
*/
87
261
export declare const vtkPolygon : {
88
- newInstance : typeof newInstance ,
262
+ newInstance : typeof newInstance ;
89
263
extend : typeof extend ;
90
264
// static
91
-
92
265
} ;
93
266
export default vtkPolygon ;
0 commit comments