0031035: Coding - uninitialized class fields reported by Visual Studio Code Analysis
[occt.git] / src / IntPatch / IntPatch_ALine.cxx
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
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
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.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17
18 #include <gp_Pnt.hxx>
19 #include <gp_Vec.hxx>
20 #include <IntAna_Curve.hxx>
21 #include <IntPatch_ALine.hxx>
22 #include <IntPatch_Point.hxx>
23 #include <Standard_DomainError.hxx>
24 #include <Standard_OutOfRange.hxx>
25 #include <Standard_Type.hxx>
26
27 IMPLEMENT_STANDARD_RTTIEXT(IntPatch_ALine,IntPatch_Line)
28
29 #define DEBUG 0
30
31 IntPatch_ALine::IntPatch_ALine (const IntAna_Curve& C,
32                                 const Standard_Boolean Tang,
33                                 const IntSurf_TypeTrans Trans1,
34                                 const IntSurf_TypeTrans Trans2) :
35   IntPatch_Line(Tang,Trans1,Trans2),
36   fipt(Standard_False),
37   lapt(Standard_False),
38   indf(0),
39   indl(0)
40 {
41   typ = IntPatch_Analytic;
42   curv = C;
43 }
44
45
46 IntPatch_ALine::IntPatch_ALine (const IntAna_Curve& C,
47                                 const Standard_Boolean Tang,
48                                 const IntSurf_Situation Situ1,
49                                 const IntSurf_Situation Situ2) :
50   IntPatch_Line(Tang,Situ1,Situ2),
51   fipt(Standard_False),
52   lapt(Standard_False),
53   indf(0),
54   indl(0)
55 {
56   typ = IntPatch_Analytic;
57   curv = C;
58 }
59
60
61 IntPatch_ALine::IntPatch_ALine (const IntAna_Curve& C,
62                                 const Standard_Boolean Tang) :
63   IntPatch_Line(Tang),
64   fipt(Standard_False),
65   lapt(Standard_False),
66   indf(0),
67   indl(0)
68 {
69   typ = IntPatch_Analytic;
70   curv = C;
71 }
72
73 const IntAna_Curve&  IntPatch_ALine::Curve() const { 
74   return(curv);
75 }
76
77
78 #define PCONFUSION 0.00001
79
80
81 void IntPatch_ALine::AddVertex (const IntPatch_Point& VTXj) {
82 #if 0
83   Standard_Integer n = NbVertex();
84   if(n>=1) { 
85     Standard_Real par = VTXj.ParameterOnLine();
86
87     for(int i=1;  i<=n  ;i++) { 
88       const IntPatch_Point& VTXi   = svtx.Value(i);
89       if((VTXj.IsOnDomS1()==Standard_False) && (VTXj.IsOnDomS2()==Standard_False)) {
90         if((VTXi.IsOnDomS1()==Standard_False) && (VTXi.IsOnDomS2()==Standard_False)) {
91           if(Abs(par-VTXi.ParameterOnLine())<=PCONFUSION) { 
92 #if DEBUG
93             std::cout<<" Rejet  IntPatch_ALine::AddVertex   (0) "<<std::endl;
94 #endif
95             return;
96           }
97         }
98       }
99     }
100     for(i=1;  i<=n  ;i++) { 
101       const IntPatch_Point& VTXi   = svtx.Value(i);
102       if((VTXj.IsOnDomS1()==Standard_True) && (VTXj.IsOnDomS2()==Standard_False)) {
103         if((VTXi.IsOnDomS1()==Standard_True) && (VTXi.IsOnDomS2()==Standard_False)) {
104           if(Abs(VTXi.ParameterOnArc1()-VTXj.ParameterOnArc1())<=PCONFUSION) { 
105             if(VTXi.ArcOnS1() == VTXj.ArcOnS1()) {
106 #if DEBUG
107               std::cout<<" Rejet  IntPatch_ALine::AddVertex   (1) "<<std::endl;
108 #endif
109               return;
110             }
111           }
112         }
113       }
114     }
115     for(i=1;  i<=n  ;i++) { 
116       const IntPatch_Point& VTXi   = svtx.Value(i);
117       if((VTXj.IsOnDomS2()==Standard_True) && (VTXj.IsOnDomS1()==Standard_False)) {
118         if((VTXi.IsOnDomS2()==Standard_True) && (VTXi.IsOnDomS1()==Standard_False)) {
119           if(Abs(VTXi.ParameterOnArc2()-VTXj.ParameterOnArc2())<=PCONFUSION) { 
120             if(VTXi.ArcOnS2() == VTXj.ArcOnS2()) {
121 #if DEBUG
122               std::cout<<" Rejet  IntPatch_ALine::AddVertex   (2) "<<std::endl;
123 #endif
124               return;
125             }
126           }
127         }
128       }
129     }
130     for(i=1;  i<=n  ;i++) { 
131       const IntPatch_Point& VTXi   = svtx.Value(i);
132       if((VTXj.IsOnDomS2()==Standard_True) && (VTXj.IsOnDomS1()==Standard_True)) {
133         if((VTXi.IsOnDomS2()==Standard_True) && (VTXi.IsOnDomS1()==Standard_True)) {
134           if(Abs(VTXi.ParameterOnArc2()-VTXj.ParameterOnArc2())<=PCONFUSION) { 
135             if(Abs(VTXi.ParameterOnArc1()-VTXj.ParameterOnArc1())<=PCONFUSION) { 
136               if(VTXi.ArcOnS2() == VTXj.ArcOnS2()) {
137                 if(VTXi.ArcOnS1() == VTXj.ArcOnS1()) {
138 #if DEBUG
139                   std::cout<<" Rejet  IntPatch_ALine::AddVertex   (3) "<<std::endl;
140 #endif
141                   return;
142                 }
143               }
144             }
145           }
146         }
147       }
148     }
149
150     //-- Est ce que VTXj present sur 1 et 2  remplace un point VTXi present sur 1 
151     for(i=1;  i<=n  ;i++) { 
152       const IntPatch_Point& VTXi   = svtx.Value(i);
153       if((VTXj.IsOnDomS2()==Standard_True) && (VTXj.IsOnDomS1()==Standard_True)) {
154         if((VTXi.IsOnDomS2()==Standard_False) && (VTXi.IsOnDomS1()==Standard_True)) {
155           Standard_Real p = Abs(VTXi.ParameterOnArc1()-VTXj.ParameterOnArc1());
156 #if DEBUG
157           std::cout<<" Est ce que VTXj present sur 1 et 2  remplace un point VTXi present sur 1 : "<<p<<std::endl;
158 #endif
159           if(p<=PCONFUSION) { 
160             if(VTXi.ArcOnS1() == VTXj.ArcOnS1()) {
161 #if DEBUG
162               std::cout<<" Replace  IntPatch_ALine::AddVertex   (1) "<<std::endl;
163 #endif
164               Replace(i,VTXj);
165               return;
166             }
167           }
168         }
169       }
170     }
171     //-- Est ce que VTXj present sur 1 et 2  remplace un point VTXi present sur 2 
172     for(i=1;  i<=n  ;i++) { 
173       const IntPatch_Point& VTXi   = svtx.Value(i);
174       if((VTXj.IsOnDomS2()==Standard_True) && (VTXj.IsOnDomS1()==Standard_True)) {
175         if((VTXi.IsOnDomS2()==Standard_True) && (VTXi.IsOnDomS1()==Standard_False)) {
176           Standard_Real p = Abs(VTXi.ParameterOnArc2()-VTXj.ParameterOnArc2());
177 #if DEBUG
178           std::cout<<" Est ce que VTXj present sur 1 et 2  remplace un point VTXi present sur 2 : "<<p<<std::endl;
179 #endif
180           if(p<=PCONFUSION) { 
181             if(VTXi.ArcOnS2() == VTXj.ArcOnS2()) {
182 #if DEBUG
183               std::cout<<" Replace  IntPatch_ALine::AddVertex   (2) "<<std::endl;
184 #endif
185               Replace(i,VTXj);
186               return;
187             }
188           }
189         }
190       }
191     }
192
193
194     //-- Est ce que VTXi deja present sur 1 et 2  et un point  VTXj present sur 1 
195     for(i=1;  i<=n  ;i++) { 
196       const IntPatch_Point& VTXi   = svtx.Value(i);
197       if((VTXi.IsOnDomS2()==Standard_True) && (VTXi.IsOnDomS1()==Standard_True)) {
198         if((VTXj.IsOnDomS2()==Standard_False) && (VTXj.IsOnDomS1()==Standard_True)) {
199           Standard_Real p = Abs(VTXi.ParameterOnArc1()-VTXj.ParameterOnArc1());
200           if(p<=PCONFUSION) { 
201             if(VTXi.ArcOnS1() == VTXj.ArcOnS1()) {
202 #if DEBUG
203               std::cout<<" Replace  IntPatch_ALine::AddVertex   (1)  -> RIEN "<<std::endl;
204 #endif
205               return;
206             }
207           }
208         }
209       }
210     }
211     //-- Est ce que VTXj present sur 1 et 2  remplace un point VTXi present sur 2 
212     for(i=1;  i<=n  ;i++) { 
213       const IntPatch_Point& VTXi   = svtx.Value(i);
214       if((VTXi.IsOnDomS2()==Standard_True) && (VTXi.IsOnDomS1()==Standard_True)) {
215         if((VTXj.IsOnDomS2()==Standard_True) && (VTXj.IsOnDomS1()==Standard_False)) {
216           Standard_Real p = Abs(VTXi.ParameterOnArc2()-VTXj.ParameterOnArc2());
217           if(p<=PCONFUSION) { 
218             if(VTXi.ArcOnS2() == VTXj.ArcOnS2()) {
219               return;
220             }
221           }
222         }
223       }
224     }
225     svtx.Append(VTXj);
226     
227   }
228   else { 
229     svtx.Append(VTXj);
230   }
231 #else
232     svtx.Append(VTXj);
233 #endif
234 }
235
236
237
238
239
240 void IntPatch_ALine::ComputeVertexParameters(const Standard_Real Tol) { 
241   Standard_Boolean   SortIsOK,APointDeleted;
242   Standard_Boolean   SortAgain = Standard_True;
243   Standard_Integer   nbvtx,i,j;
244   Standard_Real ParamMinOnLine,ParamMaxOnLine;
245   Standard_Boolean OpenFirst,OpenLast;
246   
247   ParamMinOnLine = FirstParameter(OpenFirst);
248   ParamMaxOnLine = LastParameter(OpenLast);
249   
250
251   //----------------------------------------------------------
252   //--     F i l t r e   s u r   r e s t r i c t i o n s   --
253   //----------------------------------------------------------
254   //-- deux vertex sur la meme restriction et seulement 
255   //-- sur celle ci ne doivent pas avoir le meme parametre
256   //--
257   //-- 
258
259   //-- Le tri est necessaire si suppression du first ou du last point 
260   nbvtx = NbVertex();
261
262
263   //-- On verifie qu un vertex a bien toute ses representations : 
264   //-- Cas tres rare : point de tangence sur un debut de ligne 
265   //-- et la ligne fait 2 * 2 PI de parametrage. 
266
267   for(i=1; i<=nbvtx; i++) { 
268     IntPatch_Point& VTX   = svtx.ChangeValue(i); 
269     Standard_Real p=VTX.ParameterOnLine();
270     Standard_Real pmpimpi=p-M_PI-M_PI;
271     if(pmpimpi >= ParamMinOnLine) { 
272       gp_Pnt P1 = Value(pmpimpi);
273       Standard_Real d1 = P1.Distance(VTX.Value());
274       if(d1<Tol) { 
275         IntPatch_Point OVTX(VTX);
276         OVTX.SetParameter(pmpimpi);
277         svtx.Append(OVTX);
278       }
279     }
280     pmpimpi=p+M_PI+M_PI;
281     if(pmpimpi <= ParamMaxOnLine) { 
282       gp_Pnt P1 = Value(pmpimpi);
283       Standard_Real d1 = P1.Distance(VTX.Value());
284       if(d1<Tol) { 
285         IntPatch_Point OVTX(VTX);
286         OVTX.SetParameter(pmpimpi);
287         svtx.Append(OVTX);
288       }
289     }
290   }
291
292   
293   nbvtx=NbVertex();
294   
295
296
297   if(nbvtx<=0) return;
298   do { 
299     SortIsOK = Standard_True;
300     for(i=2; i<=nbvtx; i++) { 
301       if(svtx.Value(i-1).ParameterOnLine()  > svtx.Value(i).ParameterOnLine()) { 
302         SortIsOK = Standard_False;
303         svtx.Exchange(i-1,i);
304         if(fipt) { if(indf==i) indf=i-1; else if(indf==i-1) indf=i; }
305         if(lapt) { if(indl==i) indl=i-1; else if(indl==i-1) indl=i; }
306       }
307     }
308   }
309   while(!SortIsOK);
310
311   do { 
312     APointDeleted = Standard_False;
313     for(i=1; (i<=nbvtx) && (APointDeleted==Standard_False) ;i++) { 
314       const IntPatch_Point& VTXi   = svtx.Value(i);
315       if((VTXi.IsOnDomS1()==Standard_True) && (VTXi.IsOnDomS2()==Standard_False)) { 
316         for(j=1; (j<=nbvtx) && (APointDeleted==Standard_False) ;j++) {
317           if(i!=j) { 
318             const IntPatch_Point& VTXj   = svtx.Value(j);
319             if((VTXj.IsOnDomS1()==Standard_True) && (VTXj.IsOnDomS2()==Standard_False)) {
320               if(Abs(VTXi.ParameterOnArc1()-VTXj.ParameterOnArc1())<=PCONFUSION) { 
321                 if(Abs(VTXi.ParameterOnLine()-VTXj.ParameterOnLine())<=PCONFUSION) {
322                   if(VTXi.ArcOnS1() == VTXj.ArcOnS1()) { 
323                     svtx.Remove(j);
324                     nbvtx--;
325                     if(lapt) { if(indl>=j) indl--; } 
326                     if(fipt) { if(indf>=j) indf--; } 
327                     APointDeleted = Standard_True;
328                   }
329                 }
330               }
331             }
332           }
333         }
334       }
335     }
336   }
337   while(APointDeleted == Standard_True);
338
339   do { 
340     APointDeleted = Standard_False;
341     for(i=1; (i<=nbvtx) && (APointDeleted==Standard_False) ;i++) { 
342       const IntPatch_Point& VTXi   = svtx.Value(i);
343       if((VTXi.IsOnDomS2()==Standard_True) && (VTXi.IsOnDomS1()==Standard_False)) { 
344         for(j=1; (j<=nbvtx) && (APointDeleted==Standard_False) ;j++) {
345           if(i!=j) { 
346             const IntPatch_Point& VTXj   = svtx.Value(j);
347             if((VTXj.IsOnDomS2()==Standard_True) && (VTXj.IsOnDomS1()==Standard_False)) {
348               if(Abs(VTXi.ParameterOnArc2()-VTXj.ParameterOnArc2())<=PCONFUSION) { 
349                 if(Abs(VTXi.ParameterOnLine()-VTXj.ParameterOnLine())<=PCONFUSION) {
350                   if(VTXi.ArcOnS2() == VTXj.ArcOnS2()) { 
351                     svtx.Remove(j);
352                     nbvtx--;
353                     if(lapt) { if(indl>=j) indl--; } 
354                     if(fipt) { if(indf>=j) indf--; } 
355                     APointDeleted = Standard_True;
356                   }
357                 }
358               }
359             }
360           }
361         }
362       }
363     }
364   }
365   while(APointDeleted == Standard_True);
366         
367
368   //----------------------------------------------------------
369   //-- Tri des vertex et suppression des Vtx superflus
370   //-- 
371   do { 
372     nbvtx     = NbVertex();
373     if(SortAgain) { 
374       do { 
375         SortIsOK = Standard_True;
376         for(i=2; i<=nbvtx; i++) { 
377           if(svtx.Value(i-1).ParameterOnLine()  > svtx.Value(i).ParameterOnLine()) { 
378             SortIsOK = Standard_False;
379             svtx.Exchange(i-1,i);
380             if(fipt) { if(indf==i) indf=i-1; else if(indf==i-1) indf=i; }
381             if(lapt) { if(indl==i) indl=i-1; else if(indl==i-1) indl=i; }
382           }
383         }
384       }
385       while(!SortIsOK);
386     }
387     SortAgain = Standard_False;
388     SortIsOK = Standard_True; 
389     for(i=2; i<=nbvtx && SortIsOK; i++) { 
390       IntPatch_Point& VTX   = svtx.ChangeValue(i);      
391       for(j=1; j<i && SortIsOK; j++) {
392         IntPatch_Point& VTXM1 = svtx.ChangeValue(j);
393         Standard_Boolean kill   = Standard_False;
394         Standard_Boolean killm1 = Standard_False;
395         if(Abs(VTXM1.ParameterOnLine()-VTX.ParameterOnLine())<PCONFUSION) { 
396           if(VTXM1.IsOnDomS1() && VTX.IsOnDomS1()) {  //-- OnS1    OnS1
397             if(VTXM1.ArcOnS1() == VTX.ArcOnS1()) {    //-- OnS1 == OnS1
398               if(VTXM1.IsOnDomS2()) {                 //-- OnS1 == OnS1  OnS2  
399                 if(VTX.IsOnDomS2()==Standard_False) {   //-- OnS1 == OnS1  OnS2 PasOnS2
400                   kill=Standard_True;   
401                 }
402                 else {
403                   if(VTXM1.ArcOnS2() == VTX.ArcOnS2()) { //-- OnS1 == OnS1  OnS2 == OnS2
404                     kill=Standard_True;
405                   }
406                 }
407               }
408               else {                                  //-- OnS1 == OnS1  PasOnS2  
409                 if(VTX.IsOnDomS2()) {                 //-- OnS1 == OnS1  PasOnS2  OnS2
410                   killm1=Standard_True;
411                 }
412               }
413             }
414           }
415           else { //-- Pas OnS1  et  OnS1
416             if(VTXM1.IsOnDomS2()==Standard_False && VTX.IsOnDomS2()==Standard_False) { 
417               if(VTXM1.IsOnDomS1() && VTX.IsOnDomS1()==Standard_False) { 
418                 kill=Standard_True;
419               }
420               else  if(VTX.IsOnDomS1() && VTXM1.IsOnDomS1()==Standard_False) { 
421                 killm1=Standard_True;
422               }
423             }
424           }
425           
426           if(!(kill || killm1)) {
427             if(VTXM1.IsOnDomS2() && VTX.IsOnDomS2()) {  //-- OnS2    OnS2
428               if(VTXM1.ArcOnS2() == VTX.ArcOnS2()) {    //-- OnS2 == OnS2
429                 if(VTXM1.IsOnDomS1()) {                 //-- OnS2 == OnS2  OnS1  
430                   if(VTX.IsOnDomS1()==Standard_False) {   //-- OnS2 == OnS2  OnS1 PasOnS1
431                     kill=Standard_True;   
432                   }
433                   else {
434                     if(VTXM1.ArcOnS1() == VTX.ArcOnS1()) { //-- OnS2 == OnS2  OnS1 == OnS1
435                       kill=Standard_True;
436                     }
437                   }
438                 }
439                 else {                                  //-- OnS2 == OnS2  PasOnS1  
440                   if(VTX.IsOnDomS1()) {                 //-- OnS2 == OnS2  PasOnS1  OnS1
441                     killm1=Standard_True;
442                   }
443                 }
444               }
445             }
446             else { //-- Pas OnS2  et  OnS2
447               if(VTXM1.IsOnDomS1()==Standard_False && VTX.IsOnDomS1()==Standard_False) { 
448                 if(VTXM1.IsOnDomS2() && VTX.IsOnDomS2()==Standard_False) { 
449                   kill=Standard_True;
450                 }
451                 else  if(VTX.IsOnDomS2() && VTXM1.IsOnDomS2()==Standard_False) { 
452                   killm1=Standard_True;
453                 }
454               }
455             }
456           }
457           //-- On a j < i 
458           if(kill) { 
459             SortIsOK = Standard_False;
460             if(lapt) { if(indl>i) indl--; else if(indl==i) indl=j; } 
461             if(fipt) { if(indf>i) indf--; else if(indf==i) indf=j; } 
462             svtx.Remove(i);
463             nbvtx--;
464           }
465           else if(killm1) { 
466             SortIsOK = Standard_False;
467             if(lapt) { if(indl>j) indl--;  else if(indl==j) indl=i-1;} 
468             if(fipt) { if(indf>j) indf--;  else if(indf==j) indf=i-1;} 
469             svtx.Remove(j);
470             nbvtx--; 
471           }
472         }
473       }
474     }
475   }
476   while(!SortIsOK);
477
478
479   //----------------------------------------------------------
480   //--   Traitement des lignes periodiques                  --
481   //----------------------------------------------------------
482   if(OpenFirst == Standard_False && OpenLast == Standard_False) { 
483     nbvtx     = NbVertex();
484     
485     IntPatch_Point& VTX0   = svtx.ChangeValue(1);
486     IntPatch_Point& VTXN   = svtx.ChangeValue(nbvtx);
487     if(VTX0.ParameterOnLine() == ParamMinOnLine) { 
488       if(VTXN.ParameterOnLine() !=ParamMaxOnLine) { 
489         gp_Pnt PN=Value(ParamMaxOnLine);
490         Standard_Real d = PN.Distance(VTX0.Value());
491         if(d<=Tol) { 
492           IntPatch_Point OVTX(VTX0);
493           OVTX.SetParameter(ParamMaxOnLine);
494           svtx.Append(OVTX);
495         }
496       }
497       else { 
498         if(VTXN.ParameterOnLine() == ParamMaxOnLine) { 
499           if(VTX0.ParameterOnLine() !=ParamMinOnLine) { 
500             gp_Pnt P0=Value(ParamMinOnLine);
501             Standard_Real d = P0.Distance(VTX0.Value());
502             if(d<=Tol) { 
503               IntPatch_Point OVTX(VTXN);
504               OVTX.SetParameter(ParamMinOnLine);
505               svtx.Prepend(OVTX);
506             }  
507           }
508         }
509       }
510     }
511   }
512   //---------------------------------------------------------
513   //-- Faut il supprimer le premier et le dernier point 
514   //--
515   nbvtx     = NbVertex();
516   if(nbvtx>1) { 
517     IntPatch_Point& VTX0   = svtx.ChangeValue(1);
518     if(   (VTX0.IsOnDomS1() == Standard_False)
519        && (VTX0.IsOnDomS2() == Standard_False)) { 
520       svtx.Remove(1);
521       nbvtx--;
522       if(lapt) { 
523         indl--;
524       }
525     }
526   }
527   if(nbvtx>1) { 
528     IntPatch_Point& VTX0   = svtx.ChangeValue(nbvtx);
529     if(   (VTX0.IsOnDomS1() == Standard_False)
530        && (VTX0.IsOnDomS2() == Standard_False)) { 
531       svtx.Remove(nbvtx);
532       if(lapt) { 
533         indl--;
534       }
535     }
536   }
537
538   //-- Si 2 vertex ont le meme parametre   on identifie le p3d
539   nbvtx     = NbVertex();
540   do { 
541     SortIsOK = Standard_True;
542     for(i=2; i<=nbvtx; i++) { 
543       IntPatch_Point& VTX   = svtx.ChangeValue(i);
544       IntPatch_Point& VTXm1 = svtx.ChangeValue(i-1);
545       if(Abs(VTX.ParameterOnLine()-VTXm1.ParameterOnLine())<PCONFUSION) { 
546         if(VTX.IsOnDomS1() && VTXm1.IsOnDomS1()==Standard_False) { 
547           VTXm1.SetArc(Standard_True,
548                        VTX.ArcOnS1(),
549                        VTX.ParameterOnArc1(),
550                        VTX.TransitionLineArc1(),
551                        VTX.TransitionOnS1());
552         }
553         else if(VTXm1.IsOnDomS1() && VTX.IsOnDomS1()==Standard_False) { 
554           VTX.SetArc(Standard_True,
555                      VTXm1.ArcOnS1(),
556                      VTXm1.ParameterOnArc1(),
557                      VTXm1.TransitionLineArc1(),
558                      VTXm1.TransitionOnS1());
559         }
560         if(VTX.IsVertexOnS1() && VTXm1.IsVertexOnS1()==Standard_False) { 
561           VTXm1.SetVertex(Standard_True, VTX.VertexOnS1());
562           VTXm1.SetArc(Standard_True,
563                        VTX.ArcOnS1(),
564                        VTX.ParameterOnArc1(),
565                        VTX.TransitionLineArc1(),
566                        VTX.TransitionOnS1());
567         }
568         else if(VTXm1.IsVertexOnS1() && VTX.IsVertexOnS1()==Standard_False) { 
569           VTX.SetVertex(Standard_True,  VTXm1.VertexOnS1());
570           VTX.SetArc(Standard_True,
571                      VTXm1.ArcOnS1(),
572                      VTXm1.ParameterOnArc1(),
573                      VTXm1.TransitionLineArc1(),
574                      VTXm1.TransitionOnS1());
575         }
576
577         if(VTX.IsOnDomS2() && VTXm1.IsOnDomS2()==Standard_False) { 
578           VTXm1.SetArc(Standard_False,
579                        VTX.ArcOnS2(),
580                        VTX.ParameterOnArc2(),
581                        VTX.TransitionLineArc2(),
582                        VTX.TransitionOnS2());
583         }
584         else if(VTXm1.IsOnDomS2() && VTX.IsOnDomS2()==Standard_False) { 
585           VTX.SetArc(Standard_False,
586                      VTXm1.ArcOnS2(),
587                      VTXm1.ParameterOnArc2(),
588                      VTXm1.TransitionLineArc2(),
589                      VTXm1.TransitionOnS2());
590         }
591         if(VTX.IsVertexOnS2() && VTXm1.IsVertexOnS2()==Standard_False) { 
592           VTXm1.SetVertex(Standard_False, VTX.VertexOnS2());
593           VTXm1.SetArc(Standard_False,
594                        VTX.ArcOnS2(),
595                        VTX.ParameterOnArc2(),
596                        VTX.TransitionLineArc2(),
597                        VTX.TransitionOnS2());
598         }
599         else if(VTXm1.IsVertexOnS2() && VTX.IsVertexOnS2()==Standard_False) { 
600           VTX.SetVertex(Standard_False, VTXm1.VertexOnS2());
601           VTX.SetArc(Standard_False,
602                      VTXm1.ArcOnS2(),
603                      VTXm1.ParameterOnArc2(),
604                      VTXm1.TransitionLineArc2(),
605                      VTXm1.TransitionOnS2());
606         }
607         
608         if(VTX.Value().SquareDistance(VTXm1.Value()) > 1e-12) { 
609           IntPatch_Point CopyVtx = VTXm1;
610           VTXm1.SetParameter(VTX.ParameterOnLine());
611           VTXm1.SetValue(VTX.Value(),VTX.Tolerance(),VTX.IsTangencyPoint());
612           Standard_Real u1,v1,u2,v2;
613           VTX.Parameters(u1,v1,u2,v2);
614           VTXm1.SetParameters(u1,v1,u2,v2);
615           if(CopyVtx.IsOnDomS1()) { 
616             VTXm1.SetArc(Standard_True,
617                          CopyVtx.ArcOnS1(),
618                          CopyVtx.ParameterOnArc1(),
619                          CopyVtx.TransitionLineArc1(),
620                          CopyVtx.TransitionOnS1());
621           }
622           if(CopyVtx.IsOnDomS2()) { 
623             VTXm1.SetArc(Standard_False,
624                          CopyVtx.ArcOnS2(),
625                          CopyVtx.ParameterOnArc2(),
626                          CopyVtx.TransitionLineArc2(),
627                          CopyVtx.TransitionOnS2());
628           }
629           if(CopyVtx.IsVertexOnS1()) { 
630             VTXm1.SetVertex(Standard_True,CopyVtx.VertexOnS1());
631             VTXm1.SetArc(Standard_True,
632                          CopyVtx.ArcOnS1(),
633                          CopyVtx.ParameterOnArc1(),
634                          CopyVtx.TransitionLineArc1(),
635                          CopyVtx.TransitionOnS1());
636           }
637           if(CopyVtx.IsVertexOnS2()) { 
638             VTXm1.SetVertex(Standard_False,CopyVtx.VertexOnS2());
639             VTXm1.SetArc(Standard_False,
640                          CopyVtx.ArcOnS2(),
641                          CopyVtx.ParameterOnArc2(),
642                          CopyVtx.TransitionLineArc2(),
643                          CopyVtx.TransitionOnS2());
644           }
645           
646
647           SortIsOK=Standard_False;
648           //-- std::cout<<" IntPatch_ALine : ComputeVertexParameters : Ajust "<<std::endl;
649         }
650       }
651     }
652   }
653   while(!SortIsOK);
654       
655   /*nbvtx     = NbVertex(); 
656   for(Standard_Integer opopo = 1; opopo<=nbvtx; opopo++) { 
657     svtx.Value(opopo).Dump();
658   }*/
659 }