1 // Created on: 1992-04-06
2 // Created by: Jacques GOUSSARD
3 // Copyright (c) 1992-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
6 // This file is part of Open CASCADE Technology software library.
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
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.
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
18 #include <gp_Circ.hxx>
19 #include <gp_Elips.hxx>
20 #include <gp_Hypr.hxx>
22 #include <gp_Parab.hxx>
23 #include <IntPatch_GLine.hxx>
24 #include <IntPatch_Point.hxx>
25 #include <Standard_DomainError.hxx>
26 #include <Standard_OutOfRange.hxx>
27 #include <Standard_Type.hxx>
29 IMPLEMENT_STANDARD_RTTIEXT(IntPatch_GLine,IntPatch_Line)
33 // modified by Edward AGAPOV (eap) Wed Mar 6 2002 (bug occ212)
34 // -- case: points with equal params == PI/2
36 //-- Precision::PConfusion()*1000.0 -> 1e-6
37 //#define PrecisionPConfusion ( Precision::PConfusion()*1000.0 )
41 //=======================================================================
42 //function : IntPatch_GLine
43 //purpose : Creates a Line as intersection line
44 // when the transitions are In or Out.
45 //=======================================================================
47 IntPatch_GLine::IntPatch_GLine (const gp_Lin& L,
48 const Standard_Boolean Tang,
49 const IntSurf_TypeTrans Trans1,
50 const IntSurf_TypeTrans Trans2) :
51 IntPatch_Line(Tang,Trans1,Trans2),
53 fipt(Standard_False),lapt(Standard_False),
57 pos = gp_Pln(L.Location(),L.Direction()).Position().Ax2();
60 //=======================================================================
61 //function : IntPatch_GLine
62 //purpose : Creates a Line as intersection line
63 // when the transitions are Touch.
64 //=======================================================================
66 IntPatch_GLine::IntPatch_GLine (const gp_Lin& L,
67 const Standard_Boolean Tang,
68 const IntSurf_Situation Situ1,
69 const IntSurf_Situation Situ2) :
70 IntPatch_Line(Tang,Situ1,Situ2),
72 fipt(Standard_False),lapt(Standard_False),
76 pos = gp_Pln(L.Location(),L.Direction()).Position().Ax2();
79 //=======================================================================
80 //function : IntPatch_GLine
81 //purpose : Creates a Line as intersection line
82 // when the transitions are Undecided.
83 //=======================================================================
85 IntPatch_GLine::IntPatch_GLine (const gp_Lin& L,
86 const Standard_Boolean Tang) :
89 fipt(Standard_False),lapt(Standard_False),
93 pos = gp_Pln(L.Location(),L.Direction()).Position().Ax2();
96 //=======================================================================
97 //function : IntPatch_GLine
98 //purpose : Creates a circle as intersection line
99 // when the transitions are In or Out.
100 //=======================================================================
102 IntPatch_GLine::IntPatch_GLine (const gp_Circ& C,
103 const Standard_Boolean Tang,
104 const IntSurf_TypeTrans Trans1,
105 const IntSurf_TypeTrans Trans2) :
106 IntPatch_Line(Tang,Trans1,Trans2),
108 par1(C.Radius()), par2(0.0),
109 fipt(Standard_False),lapt(Standard_False),
112 typ = IntPatch_Circle;
115 //=======================================================================
116 //function : IntPatch_GLine
117 //purpose : Creates a circle as intersection line
118 // when the transitions are Touch.
119 //=======================================================================
121 IntPatch_GLine::IntPatch_GLine (const gp_Circ& C,
122 const Standard_Boolean Tang,
123 const IntSurf_Situation Situ1,
124 const IntSurf_Situation Situ2) :
125 IntPatch_Line(Tang,Situ1,Situ2),
127 par1(C.Radius()), par2(0.0),
128 fipt(Standard_False),lapt(Standard_False),
131 typ = IntPatch_Circle;
134 //=======================================================================
135 //function : IntPatch_GLine
136 //purpose : Creates a circle as intersection line
137 // when the transitions are Undecided.
138 //=======================================================================
140 IntPatch_GLine::IntPatch_GLine (const gp_Circ& C,
141 const Standard_Boolean Tang) :
144 par1(C.Radius()), par2(0.0),
145 fipt(Standard_False),lapt(Standard_False),
148 typ = IntPatch_Circle;
151 //=======================================================================
152 //function : IntPatch_GLine
153 //purpose : Creates an ellipse as intersection line
154 // when the transitions are In or Out.
155 //=======================================================================
157 IntPatch_GLine::IntPatch_GLine (const gp_Elips& E,
158 const Standard_Boolean Tang,
159 const IntSurf_TypeTrans Trans1,
160 const IntSurf_TypeTrans Trans2) :
161 IntPatch_Line(Tang,Trans1,Trans2),
163 par1(E.MajorRadius()),
164 par2(E.MinorRadius()),
165 fipt(Standard_False),lapt(Standard_False),
168 typ = IntPatch_Ellipse;
171 //=======================================================================
172 //function : IntPatch_GLine
173 //purpose : Creates an ellispe as intersection line
174 // when the transitions are Touch.
175 //=======================================================================
177 IntPatch_GLine::IntPatch_GLine (const gp_Elips& E,
178 const Standard_Boolean Tang,
179 const IntSurf_Situation Situ1,
180 const IntSurf_Situation Situ2) :
181 IntPatch_Line(Tang,Situ1,Situ2),
183 par1(E.MajorRadius()),
184 par2(E.MinorRadius()),
185 fipt(Standard_False),lapt(Standard_False),
188 typ = IntPatch_Ellipse;
191 //=======================================================================
192 //function : IntPatch_GLine
193 //purpose : Creates an ellipse as intersection line
194 // when the transitions are Undecided.
195 //=======================================================================
197 IntPatch_GLine::IntPatch_GLine (const gp_Elips& E,
198 const Standard_Boolean Tang) :
201 par1(E.MajorRadius()),
202 par2(E.MinorRadius()),
203 fipt(Standard_False),lapt(Standard_False),
206 typ = IntPatch_Ellipse;
209 //=======================================================================
210 //function : IntPatch_GLine
211 //purpose : Creates a parabola as intersection line
212 // when the transitions are In or Out.
213 //=======================================================================
215 IntPatch_GLine::IntPatch_GLine (const gp_Parab& P,
216 const Standard_Boolean Tang,
217 const IntSurf_TypeTrans Trans1,
218 const IntSurf_TypeTrans Trans2) :
219 IntPatch_Line(Tang,Trans1,Trans2),
221 par1(P.Focal()), par2(0.0),
222 fipt(Standard_False),lapt(Standard_False),
225 typ = IntPatch_Parabola;
228 //=======================================================================
229 //function : IntPatch_GLine
230 //purpose : Creates a parabola as intersection line
231 // when the transitions are Touch.
232 //=======================================================================
234 IntPatch_GLine::IntPatch_GLine (const gp_Parab& P,
235 const Standard_Boolean Tang,
236 const IntSurf_Situation Situ1,
237 const IntSurf_Situation Situ2) :
238 IntPatch_Line(Tang,Situ1,Situ2),
240 par1(P.Focal()), par2(0.0),
241 fipt(Standard_False),lapt(Standard_False),
244 typ = IntPatch_Parabola;
247 //=======================================================================
248 //function : IntPatch_GLine
249 //purpose : Creates a parabola as intersection line
250 // when the transitions are Undecided.
251 //=======================================================================
253 IntPatch_GLine::IntPatch_GLine (const gp_Parab& P,
254 const Standard_Boolean Tang) :
257 par1(P.Focal()), par2(0.0),
258 fipt(Standard_False),lapt(Standard_False),
261 typ = IntPatch_Parabola;
264 //=======================================================================
265 //function : IntPatch_GLine
266 //purpose : Creates an hyperbola as intersection line
267 // when the transitions are In or Out.
268 //=======================================================================
270 IntPatch_GLine::IntPatch_GLine (const gp_Hypr& H,
271 const Standard_Boolean Tang,
272 const IntSurf_TypeTrans Trans1,
273 const IntSurf_TypeTrans Trans2) :
274 IntPatch_Line(Tang,Trans1,Trans2),
276 par1(H.MajorRadius()),
277 par2(H.MinorRadius()),
278 fipt(Standard_False),lapt(Standard_False),
281 typ = IntPatch_Hyperbola;
284 //=======================================================================
285 //function : IntPatch_GLine
286 //purpose : Creates an hyperbola as intersection line
287 // when the transitions are Touch.
288 //=======================================================================
290 IntPatch_GLine::IntPatch_GLine (const gp_Hypr& H,
291 const Standard_Boolean Tang,
292 const IntSurf_Situation Situ1,
293 const IntSurf_Situation Situ2) :
294 IntPatch_Line(Tang,Situ1,Situ2),
296 par1(H.MajorRadius()),
297 par2(H.MinorRadius()),
298 fipt(Standard_False),lapt(Standard_False),
301 typ = IntPatch_Hyperbola;
304 //=======================================================================
305 //function : IntPatch_GLine
306 //purpose : Creates an hyperbola as intersection line
307 // when the transitions are Undecided.
308 //=======================================================================
310 IntPatch_GLine::IntPatch_GLine (const gp_Hypr& H,
311 const Standard_Boolean Tang) :
314 par1(H.MajorRadius()),
315 par2(H.MinorRadius()),
316 fipt(Standard_False),lapt(Standard_False),
319 typ = IntPatch_Hyperbola;
322 //=======================================================================
324 //purpose : To replace the element of range Index in the list
326 //=======================================================================
328 void IntPatch_GLine::Replace (const Standard_Integer /*Index*/,
329 const IntPatch_Point& Pnt)
332 //-- svtx(Index) = Pnt;
335 //=======================================================================
336 //function : AddVertex
337 //purpose : To add a vertex in the list.
338 //=======================================================================
340 void IntPatch_GLine::AddVertex (const IntPatch_Point& Pnt)
342 //-- On detecte le cas de 2 points 3d identiques
343 //-- pour les ramener au meme parametre sur la
347 const Standard_Real pf = (fipt? svtx.Value(indf).ParameterOnLine() : 0.0);
348 const Standard_Real pl = (lapt? svtx.Value(indl).ParameterOnLine() : 0.0);
349 Standard_Real par = Pnt.ParameterOnLine();
350 if(ArcType()==IntPatch_Circle || ArcType()==IntPatch_Ellipse)
353 while(par<pf) par+=M_PI+M_PI;
354 while(par>pl) par-=M_PI+M_PI;
356 const Standard_Real PrecisionPConfusion ( Precision::PConfusion()*1000.0 );
357 if((pf-par)>PrecisionPConfusion) {
361 IntPatch_Point ParModif = Pnt;
362 ParModif.SetParameter(par);
363 svtx.Append(ParModif);
378 //=======================================================================
379 //function : ComputeVertexParameters
380 //purpose : Set the parameters of all the vertex on the line.
381 // if a vertex is already in the line,
382 // its parameter is modified
383 // else a new point in the line is inserted.
384 //=======================================================================
386 void IntPatch_GLine::ComputeVertexParameters(const Standard_Real /*Tol*/)
388 Standard_Boolean SortIsOK,APointDeleted;
389 Standard_Boolean SortAgain = Standard_True;
390 Standard_Integer i,j;
391 const Standard_Real ParamMinOnLine = (fipt? Vertex(indf).ParameterOnLine() : -100000.0);
392 const Standard_Real ParamMaxOnLine = (lapt? Vertex(indl).ParameterOnLine() : 100000.0);
394 //----------------------------------------------------------
395 //-- F i l t r e s u r r e s t r i c t i o n s --
396 //----------------------------------------------------------
397 //-- deux vertex sur la meme restriction et seulement
398 //-- sur celle ci ne doivent pas avoir le meme parametre
399 //==========================================================
400 //-- 2 vertices on the same restriction and only
401 //-- on that one must not have the same parametres
403 Standard_Integer nbvtx = NbVertex();
405 const Standard_Real PrecisionPConfusion ( Precision::PConfusion()*1000.0 );
408 APointDeleted = Standard_False;
409 for(i=1; (i<=nbvtx) && (!APointDeleted); i++)
411 const IntPatch_Point& VTXi = svtx.Value(i);
412 if(VTXi.IsOnDomS1() || VTXi.IsOnDomS2())
414 for(j=1; (j<=nbvtx) && (!APointDeleted); j++)
418 const IntPatch_Point& VTXj = svtx.Value(j);
419 if((!VTXj.IsOnDomS1()) && (!VTXj.IsOnDomS2()))
421 if(Abs(VTXi.ParameterOnLine()-VTXj.ParameterOnLine())<=PrecisionPConfusion)
425 if(lapt) { if(indl>j) indl--; }
426 if(fipt) { if(indf>j) indf--; }
427 APointDeleted = Standard_True;
435 while(APointDeleted && nbvtx > 2);
438 APointDeleted = Standard_False;
439 for(i=1; (i<=nbvtx) && (!APointDeleted); i++)
441 const IntPatch_Point& VTXi = svtx.Value(i);
442 if(VTXi.IsOnDomS1() && (!VTXi.IsOnDomS2()))
444 for(j=1; (j<=nbvtx) && (!APointDeleted); j++)
448 const IntPatch_Point& VTXj = svtx.Value(j);
449 if(VTXj.IsOnDomS1() && (!VTXj.IsOnDomS2()))
451 if(Abs(VTXi.ParameterOnArc1()-VTXj.ParameterOnArc1())<=PrecisionPConfusion)
453 if(VTXi.ArcOnS1() == VTXj.ArcOnS1())
455 if(VTXi.IsVertexOnS1())
459 if(lapt) { if(indl>j) indl--; }
460 if(fipt) { if(indf>j) indf--; }
466 if(lapt) { if(indl>i) indl--; }
467 if(fipt) { if(indf>i) indf--; }
469 APointDeleted = Standard_True;
478 while(APointDeleted);
481 APointDeleted = Standard_False;
482 for(i=1; (i<=nbvtx) && (!APointDeleted); i++)
484 const IntPatch_Point& VTXi = svtx.Value(i);
485 if(VTXi.IsOnDomS2() && (!VTXi.IsOnDomS1()))
487 for(j=1; (j<=nbvtx) && (!APointDeleted); j++)
491 const IntPatch_Point& VTXj = svtx.Value(j);
492 if(VTXj.IsOnDomS2() && (!VTXj.IsOnDomS1()))
494 if(Abs(VTXi.ParameterOnArc2()-VTXj.ParameterOnArc2())<=PrecisionPConfusion)
496 if(VTXi.ArcOnS2() == VTXj.ArcOnS2())
498 if(VTXi.IsVertexOnS1())
502 if(lapt) { if(indl>j) indl--; }
503 if(fipt) { if(indf>j) indf--; }
509 if(lapt) { if(indl>i) indl--; }
510 if(fipt) { if(indf>i) indf--; }
512 APointDeleted = Standard_True;
521 while(APointDeleted);
524 //----------------------------------------------------------
525 //-- Tri des vertex et suppression des Vtx superflus
527 //// modified by jgv, 2.11.01 for BUC61033 ////
528 Standard_Real u1min = RealLast(), u1max = RealFirst();
529 Standard_Real u2min = RealLast(), u2max = RealFirst();
530 Standard_Boolean ToBreak = Standard_False;
531 ///////////////////////////////////////////////
538 SortIsOK = Standard_True;
539 for(i=2; i<=nbvtx; i++)
541 if(svtx.Value(i-1).ParameterOnLine() > svtx.Value(i).ParameterOnLine())
543 SortIsOK = Standard_False;
544 svtx.Exchange(i-1,i);
545 if(fipt) { if(indf==i) indf=i-1; else if(indf==i-1) indf=i; }
546 if(lapt) { if(indl==i) indl=i-1; else if(indl==i-1) indl=i; }
553 //// modified by jgv, 2.11.01 for BUC61033 ////
556 ///////////////////////////////////////////////
558 SortAgain = Standard_False;
559 SortIsOK = Standard_True;
560 for(i=2; i<=nbvtx && SortIsOK; i++)
562 IntPatch_Point& VTX = svtx.ChangeValue(i);
563 for(j=1; j<=nbvtx && SortIsOK; j++)
567 IntPatch_Point& VTXM1 = svtx.ChangeValue(j);
568 Standard_Boolean kill = Standard_False;
569 Standard_Boolean killm1 = Standard_False;
570 if(Abs(VTXM1.ParameterOnLine()-VTX.ParameterOnLine())<PrecisionPConfusion)
572 if(VTXM1.IsOnDomS1() && VTX.IsOnDomS1()) //-- OnS1 OnS1
574 if(VTXM1.ArcOnS1() == VTX.ArcOnS1())//-- OnS1 == OnS1
576 if(VTXM1.IsOnDomS2()) //-- OnS1 == OnS1 OnS2
578 if(VTX.IsOnDomS2()==Standard_False)//-- OnS1 == OnS1 OnS2 PasOnS2
584 if(VTXM1.ArcOnS2() == VTX.ArcOnS2()) //-- OnS1 == OnS1 OnS2 == OnS2
586 if(VTXM1.IsVertexOnS2())
592 killm1=Standard_True;
597 else //-- OnS1 == OnS1 PasOnS2
599 if(VTX.IsOnDomS2()) //-- OnS1 == OnS1 PasOnS2 OnS2
601 killm1=Standard_True;
606 else //-- Pas OnS1 et OnS1
608 if(VTXM1.IsOnDomS2()==Standard_False && VTX.IsOnDomS2()==Standard_False)
610 if(VTXM1.IsOnDomS1() && VTX.IsOnDomS1()==Standard_False)
614 else if(VTX.IsOnDomS1() && VTXM1.IsOnDomS1()==Standard_False)
616 killm1=Standard_True;
621 if(!(kill || killm1))
623 if(VTXM1.IsOnDomS2() && VTX.IsOnDomS2()) //-- OnS2 OnS2
625 if(VTXM1.ArcOnS2() == VTX.ArcOnS2()) //-- OnS2 == OnS2
627 if(VTXM1.IsOnDomS1()) //-- OnS2 == OnS2 OnS1
629 if(VTX.IsOnDomS1()==Standard_False) //-- OnS2 == OnS2 OnS1 PasOnS1
635 if(VTXM1.ArcOnS1() == VTX.ArcOnS1()) //-- OnS2 == OnS2 OnS1 == OnS1
637 if(VTXM1.IsVertexOnS1())
639 kill=Standard_True; //-- OnS2 == OnS2 OnS1 == OnS1 Vtx PasVtx
643 killm1=Standard_True; //-- OnS2 == OnS2 OnS1 == OnS1 PasVtx Vtx
649 { //-- OnS2 == OnS2 PasOnS1
650 if(VTX.IsOnDomS1()) //-- OnS2 == OnS2 PasOnS1 OnS1
652 killm1=Standard_True;
657 else //-- Pas OnS2 et OnS2
659 if(VTXM1.IsOnDomS1()==Standard_False && VTX.IsOnDomS1()==Standard_False)
661 if(VTXM1.IsOnDomS2() && VTX.IsOnDomS2()==Standard_False)
665 else if(VTX.IsOnDomS2() && VTXM1.IsOnDomS2()==Standard_False)
667 killm1=Standard_True;
676 SortIsOK = Standard_False;
698 SortIsOK = Standard_False;
718 else if(ArcType()==IntPatch_Circle || ArcType()==IntPatch_Ellipse) // eap
720 //-- deux points de meme parametre qui ne peuvent etre confondus
721 //-- On change les parametres d un des points si les points UV sont
722 //-- differents. Ceci distingue le cas des aretes de couture.
723 // ==========================================================
724 //-- 2 points with the same parameters
725 //-- Change parametres of one point if points UV are
726 //-- different. This is the case of seam edge
728 Standard_Real ponline = VTX.ParameterOnLine();
730 Standard_Real newParam = ponline;
731 const Standard_Real PiPi = M_PI+M_PI;
732 Standard_Boolean is2PI = ( Abs(ponline-PiPi) <= PrecisionPConfusion );
734 if (nbvtx > 2 && // do this check if seam edge only gives vertices
735 !is2PI) // but always change 2PI -> 0
740 else if (Abs(ponline) <= PrecisionPConfusion)
745 // if( (Abs(ponline)<=PrecisionPConfusion)
746 // ||(Abs(ponline-M_PI-M_PI) <=PrecisionPConfusion))
749 Standard_Real u1a,v1a,u2a,v2a,u1b,v1b,u2b,v2b;
750 VTXM1.Parameters(u1a,v1a,u2a,v2a);
751 VTX.Parameters(u1b,v1b,u2b,v2b);
752 Standard_Integer flag = 0;
754 if( (Abs(u1a-u1b)<=PrecisionPConfusion) )
757 if( (Abs(v1a-v1b)<=PrecisionPConfusion) )
759 if( (Abs(u2a-u2b)<=PrecisionPConfusion) )
762 if( (Abs(v2a-v2b)<=PrecisionPConfusion) )
765 Standard_Boolean TestOn1 = Standard_False;
766 Standard_Boolean TestOn2 = Standard_False;
770 case 3: //-- meme point U1 V1
771 case 7: //-- meme point U1 V1 meme U2
772 case 12: //-- meme U2 V2
773 case 13: //-- meme point U1 meme U2 V2
774 case 10: //-- meme point V1 meme V2 Test si U1a=U1b Mod 2PI et Test si U2a=U2b Mod 2PI
776 case 11: //-- meme point U1 V1 meme V2 Test si U2a=U2b Mod 2PI
778 TestOn2 = Standard_True;
782 case 14: //-- meme point V1 meme U2 V2 Test si U1a=U1b Mod 2PI
784 TestOn1 = Standard_True;
792 //if(ArcType()==IntPatch_Circle || ArcType()==IntPatch_Ellipse) {}
795 //// modified by jgv, 2.11.01 for BUC61033 ////
796 Standard_Real U1A = (u1a < u1b)? u1a : u1b;
797 Standard_Real U1B = (u1a < u1b)? u1b : u1a;
799 if (u1min == RealLast())
806 if (Abs(U1A-u1min) > PrecisionPConfusion)
807 ToBreak = Standard_True;
808 if (Abs(U1B-u1max) > PrecisionPConfusion)
809 ToBreak = Standard_True;
811 ///////////////////////////////////////////////
813 // if (Abs(ponline) <= PrecisionPConfusion) {
814 // const Standard_Real PiPi = M_PI+M_PI;
815 if(newParam >= ParamMinOnLine && newParam <= ParamMaxOnLine
816 /*PiPi >= ParamMinOnLine && PiPi<=ParamMaxOnLine*/)
818 SortAgain = Standard_True;
819 SortIsOK = Standard_False;
820 if (newParam > ponline)
824 VTX.SetParameter(newParam);
828 VTXM1.SetParameter(newParam);
835 VTX.SetParameter(newParam);
839 VTXM1.SetParameter(newParam);
845 // if(0.0 >= ParamMinOnLine && 0.0<=ParamMaxOnLine) {
846 // SortAgain = Standard_True;
847 // SortIsOK = Standard_False;
848 // if(u1a > u1b) { VTX.SetParameter(0.0); }
849 // else { VTXM1.SetParameter(0.0); }
857 //// modified by jgv, 2.11.01 for BUC61033 ////
858 Standard_Real U2A = (u2a < u2b)? u2a : u2b;
859 Standard_Real U2B = (u2a < u2b)? u2b : u2a;
860 if (u2min == RealLast())
867 if (Abs(U2A-u2min) > PrecisionPConfusion)
868 ToBreak = Standard_True;
870 if (Abs(U2B-u2max) > PrecisionPConfusion)
871 ToBreak = Standard_True;
874 ///////////////////////////////////////////////
876 // if (Abs(ponline) <= PrecisionPConfusion) {
877 // const Standard_Real PiPi = M_PI+M_PI;
878 if(newParam >= ParamMinOnLine && newParam <= ParamMaxOnLine
879 /*PiPi >= ParamMinOnLine && PiPi<=ParamMaxOnLine*/)
881 SortAgain = Standard_True;
882 SortIsOK = Standard_False;
883 if (newParam > ponline)
887 VTX.SetParameter(newParam);
891 VTXM1.SetParameter(newParam);
898 VTX.SetParameter(newParam);
902 VTXM1.SetParameter(newParam);
908 // if(0.0 >= ParamMinOnLine && 0.0<=ParamMaxOnLine) {
909 // SortAgain = Standard_True;
910 // SortIsOK = Standard_False;
911 // if(u2a > u2b) { VTX.SetParameter(0.0); }
912 // else { VTXM1.SetParameter(0.0); }
927 //-- Recalcul de fipt et lapt
933 SortIsOK = Standard_True;
934 for(i=2; i<=nbvtx; i++)
936 if(svtx.Value(i-1).ParameterOnLine() > svtx.Value(i).ParameterOnLine())
938 SortIsOK = Standard_False;
939 svtx.Exchange(i-1,i);