b311480e |
1 | -- Created on: 1998-06-03 |
2 | -- Created by: data exchange team |
3 | -- Copyright (c) 1998-1999 Matra Datavision |
973c2be1 |
4 | -- Copyright (c) 1999-2014 OPEN CASCADE SAS |
b311480e |
5 | -- |
973c2be1 |
6 | -- This file is part of Open CASCADE Technology software library. |
b311480e |
7 | -- |
d5f74e42 |
8 | -- This library is free software; you can redistribute it and/or modify it under |
9 | -- the terms of the GNU Lesser General Public License version 2.1 as published |
973c2be1 |
10 | -- by the Free Software Foundation, with special exception defined in the file |
11 | -- OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT |
12 | -- distribution for complete text of the license and disclaimer of any warranty. |
b311480e |
13 | -- |
973c2be1 |
14 | -- Alternatively, this file may be used under the terms of Open CASCADE |
15 | -- commercial license or contractual agreement. |
7fd59977 |
16 | |
17 | class Wire from ShapeAnalysis inherits TShared from MMgt |
18 | |
19 | ---Purpose: This class provides analysis of a wire to be compliant to |
20 | -- CAS.CADE requirements. |
21 | -- |
22 | -- The functionalities provided are the following: |
23 | -- 1. consistency of 2d and 3d edge curve senses |
24 | -- 2. connection of adjacent edges regarding to: |
25 | -- a. their vertices |
26 | -- b. their pcurves |
27 | -- c. their 3d curves |
28 | -- 3. adjacency of the edge vertices to its pcurve and 3d curve |
29 | -- 4. if a wire is closed or not (considering its 3d and 2d |
30 | -- contour) |
31 | -- 5. if a wire is outer on its face (considering pcurves) |
32 | -- |
33 | -- |
34 | -- This class can be used in conjunction with class |
35 | -- ShapeFix_Wire, which will fix the problems detected by this class. |
36 | -- |
37 | -- The methods of the given class match to ones of the class |
38 | -- ShapeFix_Wire, e.g., CheckSmall and FixSmall. |
39 | -- This class also includes some auxilary methods |
40 | -- (e.g., CheckOuterBound, etc.), |
41 | -- which have no pair in ShapeFix_Wire. |
42 | -- |
43 | -- Like methods of ShapeFix_Wire the ones of this class are |
44 | -- grouped into two levels: |
45 | -- - Public which are recommended for use (the most global |
46 | -- method is Perform), |
47 | -- - Advanced, for optional use only |
48 | -- |
49 | -- For analyzing result of Public API checking methods use |
50 | -- corresponding Status... method. |
51 | -- The 'advanced' functions share the single status field which |
52 | -- contains the result of the last performed 'advanced' method. |
53 | -- It is quried by the method LastCheckStatus(). |
54 | -- |
55 | -- In order to prepare an analyzer, it is necessary to load a wire, |
56 | -- set face and precision. |
57 | |
58 | uses |
59 | |
60 | Pnt2d from gp, |
61 | Curve from Geom2d, |
62 | Surface from Geom, |
63 | Location from TopLoc, |
64 | Shape from TopoDS, |
65 | Wire from TopoDS, |
66 | Face from TopoDS, |
67 | SequenceOfIntersectionPoint from IntRes2d, |
68 | SequenceOfPnt from TColgp, |
69 | SequenceOfReal from TColStd, |
70 | Status from ShapeExtend, |
71 | WireData from ShapeExtend, |
72 | WireOrder from ShapeAnalysis, |
73 | Surface from ShapeAnalysis, |
74 | IndexedMapOfShape from TopTools, |
75 | DataMapOfShapeListOfShape from TopTools, |
76 | MapOfShape from TopTools |
77 | is |
78 | |
79 | Create returns Wire from ShapeAnalysis; |
80 | ---Purpose: Empty constructor |
81 | |
82 | Create (wire : Wire from TopoDS; |
83 | face : Face from TopoDS; |
84 | precision: Real) |
85 | returns Wire from ShapeAnalysis; |
86 | ---Purpose: Creates object with standard TopoDS_Wire, face |
87 | -- and precision |
88 | |
89 | Create (sbwd : WireData from ShapeExtend; |
90 | face : Face from TopoDS; |
91 | precision: Real) |
92 | returns Wire from ShapeAnalysis; |
93 | ---Purpose: Creates the object with WireData object, face |
94 | -- and precision |
95 | |
96 | Init (me: mutable; wire : Wire from TopoDS; |
97 | face : Face from TopoDS; |
98 | precision: Real); |
99 | ---Purpose: Initializes the object with standard TopoDS_Wire, face |
100 | -- and precision |
101 | |
102 | Init (me: mutable; sbwd : WireData from ShapeExtend; |
103 | face : Face from TopoDS; |
104 | precision: Real); |
105 | ---Purpose: Initializes the object with WireData object, face |
106 | -- and precision |
107 | |
108 | Load (me: mutable; wire: Wire from TopoDS); |
109 | ---Purpose: Loads the object with standard TopoDS_Wire |
110 | |
111 | Load (me: mutable; sbwd: WireData from ShapeExtend); |
112 | ---Purpose: Loads the object with WireData object |
113 | ---Remark : Single WireData object will be shared |
114 | |
115 | SetFace (me: mutable; face : Face from TopoDS); |
116 | ---Purpose: Loads the face the wire lies on |
117 | |
118 | SetSurface (me: mutable; surface : Surface from Geom); |
119 | ---Purpose: Loads the surface the wire lies on |
120 | |
121 | SetSurface (me: mutable; surface : Surface from Geom; |
122 | location: Location from TopLoc); |
123 | ---Purpose: Loads the surface the wire lies on |
124 | |
125 | SetPrecision (me: mutable; precision: Real); |
126 | ---Precision: Set the precision value |
127 | |
128 | ClearStatuses (me: mutable); |
129 | ---Purpose: Unsets all the status and distance fields |
130 | -- wire, face and precision are not cleared |
131 | |
132 | IsLoaded (me) returns Boolean; |
133 | ---C++: inline |
134 | ---Purpose: Returns True if wire is loaded and has number of edges >0 |
135 | |
136 | IsReady (me) returns Boolean; |
137 | ---C++: inline |
138 | ---Purpose: Returns True if IsLoaded and underlying face is not null |
139 | |
140 | Precision (me) returns Real; |
141 | ---C++: inline |
142 | ---Purpose: Returns the value of precision |
143 | |
144 | WireData (me) returns WireData from ShapeExtend; |
145 | ---C++: return const & |
146 | ---C++: inline |
147 | ---Purpose: Returns wire object being analyzed |
148 | |
149 | NbEdges (me) returns Integer; |
150 | ---C++: inline |
151 | ---Purpose: Returns the number of edges in the wire, or 0 if it is not loaded |
152 | |
153 | Face (me) returns Face from TopoDS; |
154 | ---C++: return const & |
155 | ---C++: inline |
156 | ---Purpose: Returns the working face |
157 | |
158 | Surface (me) returns Surface from ShapeAnalysis; |
159 | ---C++: return const & |
160 | ---C++: inline |
161 | ---Purpose: Returns the working surface |
162 | |
163 | |
164 | ---Checking methods: |
165 | |
166 | ---Level: Public |
167 | |
168 | ---Return: Check..() methods return True when and only when the situation was |
169 | -- analyzed and the specific case detected. |
170 | -- This corresponds to the flag DONE (or one of DONE#i) set in Status. |
171 | |
172 | Perform (me : mutable) returns Boolean; |
173 | ---Purpose: Performs all the checks in the following order : |
174 | -- CheckOrder, CheckSmall, CheckConected, CheckEdgeCurves, |
175 | -- CheckDegenerated, CheckSelfIntersection, CheckLacking, |
176 | -- CheckClosed |
177 | -- Returns: True if at least one method returned True; |
178 | -- For deeper analysis use Status...(status) methods |
179 | |
180 | CheckOrder (me: mutable; isClosed: Boolean = Standard_True; |
181 | mode3d: Boolean = Standard_True) returns Boolean; |
182 | ---Purpose: Calls CheckOrder and returns False if wire is already |
183 | -- ordered (tail-to-head), True otherwise |
184 | -- Flag <isClosed> defines if the wire is closed or not |
185 | -- Flag <mode3d> defines which mode is used (3d or 2d) |
186 | |
187 | CheckConnected (me : mutable; prec : Real = 0.0) returns Boolean; |
188 | ---Purpose: Calls to CheckConnected for each edge |
189 | -- Returns: True if at least one pair of disconnected edges (not sharing the |
190 | -- same vertex) was detected |
191 | |
192 | CheckSmall (me : mutable; precsmall : Real = 0.0) returns Boolean; |
193 | ---Purpose: Calls to CheckSmall for each edge |
194 | -- Returns: True if at least one small edge was detected |
195 | |
196 | CheckEdgeCurves (me : mutable) returns Boolean; |
197 | ---Purpose: Checks edges geometry (consitency of 2d and 3d senses, adjasment |
198 | -- of curves to the vertices, etc.). |
199 | -- The order of the checks : |
200 | -- Call ShapeAnalysis_Wire to check: |
201 | -- ShapeAnalysis_Edge::CheckCurve3dWithPCurve (1), |
202 | -- ShapeAnalysis_Edge::CheckVertcesWithPCurve (2), |
203 | -- ShapeAnalysis_Edge::CheckVertcesWithCurve3d (3), |
204 | -- CheckSeam (4) |
205 | -- Additional: |
206 | -- CheckGap3d (5), |
207 | -- CheckGap2d (6), |
208 | -- ShapeAnalysis_Edge::CheckSameParameter (7) |
209 | -- Returns: True if at least one check returned True |
210 | -- Remark: The numbers in brackets show with what DONEi or FAILi |
211 | -- the status can be queried |
212 | |
213 | CheckDegenerated (me : mutable) returns Boolean; |
214 | ---Purpose: Calls to CheckDegenerated for each edge |
215 | -- Returns: True if at least one incorrect degenerated edge was detected |
216 | |
217 | CheckClosed (me : mutable; prec : Real = 0.0) returns Boolean; |
218 | ---Purpose: Checks if wire is closed, performs CheckConnected, |
219 | -- CheckDegenerated and CheckLacking for the first and the last edges |
220 | -- Returns: True if at least one check returned True |
221 | -- Status: |
222 | -- FAIL1 or DONE1: see CheckConnected |
223 | -- FAIL2 or DONE2: see CheckDegenerated |
224 | |
225 | CheckSelfIntersection (me : mutable) returns Boolean; |
226 | ---Purpose: Checks self-intersection of the wire (considering pcurves) |
227 | -- Looks for self-intersecting edges and each pair of intersecting |
228 | -- edges. |
229 | -- Warning: It does not check each edge with any other one (only each two |
230 | -- adjacent edges) |
231 | -- The order of the checks : |
232 | -- CheckSelfIntersectingEdge, CheckIntersectingEdges |
233 | -- Returns: True if at least one check returned True |
234 | -- Status: FAIL1 or DONE1 - see CheckSelfIntersectingEdge |
235 | -- FAIL2 or DONE2 - see CheckIntersectingEdges |
236 | |
237 | CheckLacking (me : mutable) returns Boolean; |
238 | ---Purpose: Calls to CheckLacking for each edge |
239 | -- Returns: True if at least one lacking edge was detected |
240 | |
241 | CheckGaps3d (me : mutable) returns Boolean; |
242 | ---Purpose: |
243 | ---Returns: |
244 | |
245 | CheckGaps2d (me : mutable) returns Boolean; |
246 | ---Purpose: |
247 | ---Returns: |
248 | |
249 | CheckCurveGaps (me : mutable) returns Boolean; |
250 | ---Purpose: |
251 | ---Returns: |
252 | |
253 | |
254 | ---Level: Advanced |
255 | |
256 | ---Status: For analyzing the status of the last performed method use method |
257 | -- Status(status) |
258 | -- |
259 | -- All the Check...() methods below return False if the problem was |
260 | -- not detected. If so, Status(ShapeExtend_OK) returns True. |
261 | |
262 | CheckOrder (me: mutable; sawo: out WireOrder from ShapeAnalysis; |
263 | isClosed: Boolean = Standard_True; |
264 | mode3d: Boolean = Standard_True) |
265 | returns Boolean; |
266 | ---Purpose: Analyzes the order of the edges in the wire, |
267 | -- uses class WireOrder for that purpose. |
268 | -- Flag <isClosed> defines if the wire is closed or not |
269 | -- Flag <mode3d> defines which mode is used (3d or 2d) |
270 | -- Returns False if wire is already ordered (tail-to-head), |
271 | -- True otherwise. |
272 | -- Use returned WireOrder object for deeper analysis. |
273 | -- Status: |
274 | -- OK : the same edges orientation, the same edges sequence |
275 | -- DONE1: the same edges orientation, not the same edges sequence |
276 | -- DONE2: as DONE1 and gaps more than myPrecision |
277 | -- DONE3: not the same edges orientation (some need to be reversed) |
278 | -- DONE4: as DONE3 and gaps more than myPrecision |
279 | -- FAIL : algorithm failed (could not detect order) |
280 | |
281 | CheckConnected (me : mutable; num: Integer; prec: Real = 0.0) returns Boolean; |
282 | ---Purpose: Checks connected edges (num-th and preceeding). |
283 | -- Tests with starting preci from <SBWD> or with <prec> if |
284 | -- it is greater. |
285 | -- Considers Vertices. |
286 | -- Returns: False if edges are connected by the common vertex, else True |
287 | -- Status : |
288 | -- OK : Vertices (end of num-1 th edge and start on num-th one) |
289 | -- are already the same |
290 | -- DONE1 : Absolutely confused (gp::Resolution) |
291 | -- DONE2 : Confused at starting <preci> from <SBWD> |
292 | -- DONE3 : Confused at <prec> but not <preci> |
293 | -- FAIL1 : Not confused |
294 | -- FAIL2 : Not confused but confused with <preci> if reverse num-th edge |
295 | |
296 | CheckSmall (me : mutable; num : Integer; |
297 | precsmall: Real = 0.0) |
298 | returns Boolean; |
299 | ---Purpose: Checks if an edge has a length not greater than myPreci or |
300 | -- precsmall (if it is smaller) |
301 | -- Returns: False if its length is greater than precision |
302 | -- Status: |
303 | -- OK : edge is not small or degenerated |
304 | -- DONE1: edge is small, vertices are the same |
305 | -- DONE2: edge is small, vertices are not the same |
306 | -- FAIL : no 3d curve and pcurve |
307 | |
308 | CheckSeam (me : mutable; num : Integer; |
309 | C1, C2: out Curve from Geom2d; |
310 | cf, cl: out Real) |
311 | returns Boolean; |
312 | ---Purpose: Checks if a seam pcurves are correct oriented |
313 | -- Returns: False (status OK) if given edge is not a seam or if it is OK |
314 | -- C1 - current pcurve for FORWARD edge, |
315 | -- C2 - current pcurve for REVERSED edge (if returns True they |
316 | -- should be swapped for the seam), |
317 | -- cf, cl - first and last parameters on curves |
318 | -- Status: |
319 | -- OK : Pcurves are correct or edge is not seam |
320 | -- DONE : Seam pcurves should be swapped |
321 | |
322 | CheckSeam (me : mutable; num: Integer) returns Boolean; |
323 | ---Purpose: Checks if a seam pcurves are correct oriented |
324 | -- See previous functions for details |
325 | |
326 | CheckDegenerated (me: mutable; num: Integer; dgnr1, dgnr2: out Pnt2d from gp) |
327 | returns Boolean; |
328 | ---Purpose: Checks for degenerated edge between two adjacent ones. |
329 | -- Fills parameters dgnr1 and dgnr2 with points in paramterical |
330 | -- space that correspond to the singularity (either gap that |
331 | -- needs to be filled by degenerated edge or that already filled) |
332 | -- Returns: False if no singularity or edge is already degenerated, |
333 | -- otherwise True |
334 | -- Status: |
335 | -- OK : No surface singularity, or edge is already degenerated |
336 | -- DONE1: Degenerated edge should be inserted (gap in 2D) |
337 | -- DONE2: Edge <num> should be made degenerated (recompute pcurve |
338 | -- and set the flag) |
339 | -- FAIL1: One of edges neighbouring to degenerated one has |
340 | -- no pcurve |
341 | -- FAIL2: Edge marked as degenerated and has no pcurve |
342 | -- but singularity is not detected |
343 | |
344 | CheckDegenerated (me: mutable; num: Integer) |
345 | returns Boolean; |
346 | ---Purpose: Checks for degenerated edge between two adjacent ones. |
347 | -- Remark : Calls previous function |
348 | -- Status : See the function above for details |
349 | |
350 | CheckGap3d (me : mutable; num : Integer = 0) returns Boolean; |
351 | ---Purpose: Checks gap between edges in 3D (3d curves). |
352 | -- Checks the distance between ends of 3d curves of the num-th |
353 | -- and preceeding edge. |
354 | -- The distance can be queried by MinDistance3d. |
355 | -- |
356 | -- Returns: True if status is DONE |
357 | -- Status: |
358 | -- OK : Gap is less than myPrecision |
359 | -- DONE : Gap is greater than myPrecision |
360 | -- FAIL : No 3d curve(s) on the edge(s) |
361 | |
362 | CheckGap2d (me : mutable; num : Integer = 0) returns Boolean; |
363 | ---Purpose: Checks gap between edges in 2D (pcurves). |
364 | -- Checks the distance between ends of pcurves of the num-th |
365 | -- and preceeding edge. |
366 | -- The distance can be queried by MinDistance2d. |
367 | -- |
368 | -- Returns: True if status is DONE |
369 | -- Status: |
370 | -- OK : Gap is less than parametric precision out of myPrecision |
371 | -- DONE : Gap is greater than parametric precision out of myPrecision |
372 | -- FAIL : No pcurve(s) on the edge(s) |
373 | |
374 | CheckCurveGap (me : mutable; num : Integer = 0) returns Boolean; |
375 | ---Purpose: Checks gap between points on 3D curve and points on surface |
376 | -- generated by pcurve of the num-th edge. |
377 | -- The distance can be queried by MinDistance3d. |
378 | -- |
379 | -- Returns: True if status is DONE |
380 | -- Status: |
381 | -- OK : Gap is less than myPrecision |
382 | -- DONE : Gap is greater than myPrecision |
383 | -- FAIL : No 3d curve(s) on the edge(s) |
384 | |
385 | CheckSelfIntersectingEdge (me: mutable; num: Integer; |
386 | points2d: out SequenceOfIntersectionPoint from IntRes2d; |
387 | points3d: out SequenceOfPnt from TColgp) |
388 | returns Boolean; |
389 | ---Purpose: Checks if num-th edge is self-intersecting. |
390 | -- Self-intersection is reported only if intersection point lies outside |
391 | -- of both end vertices of the edge. |
392 | -- Returns: True if edge is self-intersecting. |
393 | -- If returns True it also fills the sequences of intersection points |
394 | -- and corresponding 3d points (only that are not enclosed by a vertices) |
395 | -- Status: |
396 | -- FAIL1 : No pcurve |
397 | -- FAIL2 : No vertices |
398 | -- DONE1 : Self-intersection found |
399 | |
400 | CheckSelfIntersectingEdge (me: mutable; num: Integer) |
401 | returns Boolean; |
402 | -- Purpose: Checks num-th edge to be self-intersecting. |
403 | -- Remark : Calls the previous method |
404 | -- Status : See the function above for details |
405 | |
406 | CheckIntersectingEdges (me : mutable; num: Integer; |
407 | points2d: out SequenceOfIntersectionPoint from IntRes2d; |
408 | points3d: out SequenceOfPnt from TColgp; |
409 | errors: out SequenceOfReal from TColStd) |
410 | returns Boolean; |
411 | ---Purpose: Checks two adjacent edges for intersecting. |
412 | -- Intersection is reported only if intersection point is not enclosed |
413 | -- by the common end vertex of the edges. |
414 | -- Returns: True if intersection is found. |
415 | -- If returns True it also fills the sequences of intersection points, |
416 | -- corresponding 3d points, and errors for them (half-distances between |
417 | -- intersection points in 3d calculated from one and from another edge) |
418 | -- Status: |
419 | -- FAIL1 : No pcurve |
420 | -- FAIL2 : No vertices |
421 | -- DONE1 : Self-intersection found |
422 | |
423 | CheckIntersectingEdges (me: mutable; num: Integer) |
424 | returns Boolean; |
425 | ---Purpose: Checks two adjacent edges for intersecting. |
426 | -- Remark : Calls the previous method |
427 | -- Status : See the function above for details |
428 | |
429 | CheckIntersectingEdges(me: mutable; num1: Integer; num2: Integer; |
430 | points2d: out SequenceOfIntersectionPoint from IntRes2d; |
431 | points3d: out SequenceOfPnt from TColgp; |
432 | errors: out SequenceOfReal from TColStd) |
433 | returns Boolean; |
434 | ---Purpose: Checks i-th and j-th edges for intersecting. |
435 | -- Remark : See the previous method for details |
436 | |
437 | CheckIntersectingEdges(me: mutable; num1: Integer; num2: Integer) |
438 | returns Boolean; |
439 | ---Purpose: Checks i-th and j-th edges for intersecting. |
440 | -- Remark : Calls previous method. |
441 | -- Status : See the function above for details |
442 | |
443 | CheckLacking (me: mutable; num: Integer; Tolerance: Real; |
444 | p2d1, p2d2: out Pnt2d from gp) returns Boolean; |
445 | ---Purpose: Checks if there is a gap in 2d between edges, not comprised by |
446 | -- the tolerance of their common vertex. |
447 | -- If <Tolerance> is greater than 0. and less than tolerance of |
448 | -- the vertex, then this value is used for check. |
449 | -- Returns: True if not closed gap was detected |
450 | -- p2d1 and p2d2 are the endpoint of <num-1>th edge and start of |
451 | -- the <num>th edge in 2d. |
452 | -- Status: |
453 | -- OK: No edge is lacking (3d and 2d connection) |
454 | -- FAIL1: edges have no vertices (at least one of them) |
455 | -- FAIL2: edges are neither connected by common vertex, nor have |
456 | -- coincided vertices |
457 | -- FAIL1: edges have no pcurves |
458 | -- DONE1: the gap is detected which cannot be closed by the tolerance |
459 | -- of the common vertex (or with value of <Tolerance>) |
460 | -- DONE2: is set (together with DONE1) if gap is detected and the |
461 | -- vector (p2d2 - p2d1) goes in direction opposite to the pcurves |
462 | -- of the edges (if angle is more than 0.9*PI). |
463 | |
464 | CheckLacking (me : mutable; num: Integer; Tolerance: Real = 0.0) returns Boolean; |
465 | ---Purpose: Checks if there is a gap in 2D between edges and not comprised by vertex tolerance |
466 | -- The value of SBWD.thepreci is used. |
467 | -- Returns: False if no edge should be inserted |
468 | -- Status: |
469 | -- OK : No edge is lacking (3d and 2d connection) |
470 | -- DONE1 : The vertex tolerance should be increased only (2d gap is |
471 | -- small) |
472 | -- DONE2 : Edge can be inserted (3d and 2d gaps are large enough) |
473 | |
474 | CheckOuterBound (me: mutable; APIMake: Boolean = Standard_True) |
475 | returns Boolean; |
476 | ---Purpose: Checks if wire defines an outer bound on the face |
477 | -- Uses ShapeAnalysis::IsOuterBound for analysis |
478 | -- If <APIMake> is True uses BRepAPI_MakeWire to build the |
479 | -- wire, if False (to be used only when edges share common |
480 | -- vertices) uses BRep_Builder to build the wire |
481 | -- |
482 | ---Returns: False if wire is an outer bound, else returns True |
483 | -- Status: |
484 | -- OK : If it is an outer wire |
485 | -- DONE : If not |
486 | |
487 | CheckNotchedEdges(me : mutable; num : Integer; |
488 | shortNum : out Integer; |
489 | param : out Real; |
490 | Tolerance: Real = 0.0) returns Boolean; |
491 | ---Purpose: Detects a notch |
492 | |
56a9db93 |
493 | CheckSmallArea (me: mutable; theWire : Wire from TopoDS; theIsOuterWire : Boolean) |
7fd59977 |
494 | returns Boolean; |
56a9db93 |
495 | ---Purpose: Checks if wire has parametric area less than precision. |
7fd59977 |
496 | |
497 | CheckShapeConnect (me : mutable; shape : Shape from TopoDS; prec: Real = 0.0) |
498 | returns Boolean; |
499 | ---Purpose: Checks with what orientation <shape> (wire or edge) can be |
500 | -- connected to the wire. |
501 | -- Tests distances with starting <preci> from <SBWD> (close confusion), |
502 | -- but if given <prec> is greater, tests with <prec> (coarse confusion). |
503 | -- The smallest found distance can be returned by MinDistance3d |
504 | -- |
505 | -- Returns: False if status is FAIL (see below) |
506 | -- Status: |
507 | -- DONE1 : If <shape> follows <SBWD>, direct sense (normal) |
508 | -- DONE2 : If <shape> follows <SBWD>, but if reversed |
509 | -- DONE3 : If <shape> preceeds <SBWD>, direct sense |
510 | -- DONE4 : If <shape> preceeds <SBWD>, but if reversed |
511 | -- FAIL1 : If <shape> is neither an edge nor a wire |
512 | -- FAIL2 : If <shape> cannot be connected to <SBWD> |
513 | -- |
514 | -- DONE5 : To the tail of <SBWD> the <shape> is closer with |
515 | -- direct sense |
516 | -- DONE6 : To the head of <SBWD> the <shape> is closer with |
517 | -- direct sense |
518 | -- |
519 | -- Remark: Statuses DONE1 - DONE4, FAIL1 - FAIL2 are basic and |
520 | -- describe the nearest connection of the <shape> to <SBWD>. |
521 | -- Statuses DONE5 and DONE6 are advanced and are to be used when |
522 | -- analyzing with what sense (direct or reversed) the <shape> |
523 | -- should be connected to <SBWD>: |
524 | -- For tail of <SBWD> if DONE4 is True <shape> should be direct, |
525 | -- otherwise reversed. |
526 | -- For head of <SBWD> if DONE5 is True <shape> should be direct, |
527 | -- otherwise reversed. |
528 | |
529 | CheckShapeConnect (me : mutable; tailhead: out Real; |
530 | tailtail: out Real; |
531 | headtail: out Real; |
532 | headhead: out Real; |
533 | shape : Shape from TopoDS; |
534 | prec : Real = 0.0) |
535 | returns Boolean; |
536 | ---Purpose: The same as previous CheckShapeConnect but is more advanced. |
537 | -- It returns the distances between each end of <sbwd> and each |
538 | -- end of <shape>. For example, <tailhead> stores distance |
539 | -- between tail of <sbwd> and head of <shape> |
540 | -- Remark: First method CheckShapeConnect calls this one |
541 | |
542 | CheckLoop (me : mutable; aMapLoopVertices : out IndexedMapOfShape from TopTools; |
543 | aMapVertexEdges :out DataMapOfShapeListOfShape from TopTools; |
544 | aMapSmallEdges : out MapOfShape from TopTools; |
545 | aMapSeemEdges : out MapOfShape from TopTools) returns Boolean; |
546 | ---Purpose: Checks existance of loop on wire and return vertices wich are loop vertices |
547 | -- (vertices belonging to a few pairs of edges) |
548 | |
549 | |
550 | ---Status after checking : |
551 | |
552 | ---Level : Public |
553 | |
554 | -- Querying the status of perfomed API checking procedures |
555 | StatusOrder (me; Status: Status from ShapeExtend) returns Boolean; |
556 | ---C++: inline |
557 | StatusConnected (me; Status: Status from ShapeExtend) returns Boolean; |
558 | ---C++: inline |
559 | StatusEdgeCurves (me; Status: Status from ShapeExtend) returns Boolean; |
560 | ---C++: inline |
561 | StatusDegenerated (me; Status: Status from ShapeExtend) returns Boolean; |
562 | ---C++: inline |
563 | StatusClosed (me; Status: Status from ShapeExtend) returns Boolean; |
564 | ---C++: inline |
565 | StatusSmall (me; Status: Status from ShapeExtend) returns Boolean; |
566 | ---C++: inline |
567 | StatusSelfIntersection (me; Status: Status from ShapeExtend) returns Boolean; |
568 | ---C++: inline |
569 | StatusLacking (me; Status: Status from ShapeExtend) returns Boolean; |
570 | ---C++: inline |
571 | StatusGaps3d (me; Status: Status from ShapeExtend) returns Boolean; |
572 | ---C++: inline |
573 | StatusGaps2d (me; Status: Status from ShapeExtend) returns Boolean; |
574 | ---C++: inline |
575 | StatusCurveGaps (me; Status: Status from ShapeExtend) returns Boolean; |
576 | ---C++: inline |
577 | |
578 | StatusLoop (me; Status: Status from ShapeExtend) returns Boolean; |
579 | ---C++: inline |
580 | ---Level : Advanced |
581 | |
582 | LastCheckStatus (me; Status: Status from ShapeExtend) returns Boolean; |
583 | ---C++: inline |
584 | ---Purpose: Querying the status of the LAST perfomed 'Advanced' checking procedure |
585 | |
586 | ---Querying fields |
587 | |
588 | MinDistance3d (me) returns Real; |
589 | ---C++: inline |
590 | ---Purpose: Returns the last lowest distance in 3D computed by |
591 | -- CheckOrientation, CheckConnected, CheckContinuity3d, |
592 | -- CheckVertex, CheckNewVertex |
593 | |
594 | MinDistance2d (me) returns Real; |
595 | ---C++: inline |
596 | ---Purpose: Returns the last lowest distance in 2D-UV computed by |
597 | -- CheckContinuity2d |
598 | |
599 | MaxDistance3d (me) returns Real; |
600 | ---C++: inline |
601 | ---Purpose: Returns the last maximal distance in 3D computed by |
602 | -- CheckOrientation, CheckConnected, CheckContinuity3d, |
603 | -- CheckVertex, CheckNewVertex, CheckSameParameter |
604 | |
605 | MaxDistance2d (me) returns Real; |
606 | ---C++: inline |
607 | ---Purpose: Returns the last maximal distance in 2D-UV computed by |
608 | -- CheckContinuity2d |
609 | |
610 | fields |
611 | |
612 | myWire: WireData from ShapeExtend is protected; |
613 | myFace: Face from TopoDS is protected; |
614 | mySurf: Surface from ShapeAnalysis is protected; |
615 | myPrecision : Real is protected; |
616 | |
617 | myMin3d: Real is protected; -- lower computed distance 3d |
618 | myMin2d: Real is protected; -- lower computed distance 2d |
619 | myMax3d: Real is protected; -- upper computed distance 3d |
620 | myMax2d: Real is protected; -- upper computed distance 2d |
621 | |
622 | -- statuses corresponding to API methods, queried by Status..(status) methods |
623 | myStatusOrder: Integer is protected; |
624 | myStatusConnected: Integer is protected; |
625 | myStatusEdgeCurves: Integer is protected; |
626 | myStatusDegenerated: Integer is protected; |
627 | myStatusClosed: Integer is protected; |
628 | myStatusSmall: Integer is protected; |
629 | myStatusSelfIntersection: Integer is protected; |
630 | myStatusLacking: Integer is protected; |
631 | myStatusGaps3d: Integer is protected; -- szvsh |
632 | myStatusGaps2d: Integer is protected; -- szvsh |
633 | myStatusCurveGaps: Integer is protected; -- szvsh |
634 | myStatusLoop : Integer is protected; |
635 | |
636 | myStatus: Integer is protected; -- for internal use, queried by LastCheckStatus(status) method |
637 | |
638 | end Wire; |