0025418: Debug output to be limited to OCC development environment
[occt.git] / src / Blend / Blend_CSWalking_1.gxx
CommitLineData
b311480e 1// Copyright (c) 1995-1999 Matra Datavision
973c2be1 2// Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 3//
973c2be1 4// This file is part of Open CASCADE Technology software library.
b311480e 5//
d5f74e42 6// This library is free software; you can redistribute it and/or modify it under
7// the terms of the GNU Lesser General Public License version 2.1 as published
973c2be1 8// by the Free Software Foundation, with special exception defined in the file
9// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
10// distribution for complete text of the license and disclaimer of any warranty.
b311480e 11//
973c2be1 12// Alternatively, this file may be used under the terms of Open CASCADE
13// commercial license or contractual agreement.
b311480e 14
7fd59977 15Blend_CSWalking::Blend_CSWalking(const TheCurve& Curv,
16 const TheSurface& Surf,
17 const Handle(TheTopolTool)& Domain):
18 done(Standard_False),surf(Surf),
19 curv(Curv)
20{
21 domain = Domain;
22}
23
24
25
26void Blend_CSWalking::Perform(Blend_CSFunction& Func,
27// Blend_CSFuncInv& FuncInv,
28 const Standard_Real Pdep,
29 const Standard_Real Pmax,
30 const Standard_Real MaxStep,
31 const Standard_Real TolGuide,
32 const math_Vector& ParDep,
33 const Standard_Real Tolesp,
34 const Standard_Real Fleche,
35 const Standard_Boolean Appro)
36{
37
38 done = Standard_False;
39 iscomplete = Standard_False;
40 comptra = Standard_False;
41 line = new TheLine ();
42 Standard_Integer Nbvar = Func.NbVariables();
43 tolesp = Abs(Tolesp);
44 tolgui = Abs(TolGuide);
45 fleche = Abs(Fleche);
46 rebrou = Standard_False;
47 pasmax = Abs(MaxStep);
48 math_Vector sol(1,Nbvar);
49
50 firstsol = new TColStd_HArray1OfReal(1,Nbvar);
51
52 if (Pmax-Pdep >= 0.) {
53 sens = 1.;
54 }
55 else {
56 sens = -1.;
57 }
58
59 Blend_Status State;
60 TheExtremity ptf1,ptf2;
61
62 param = Pdep;
63 firstparam = Pdep;
64 Func.Set(param);
65
66 if (Appro) {
67
68 TopAbs_State situ;
69// math_Vector tolerance(1,3),infbound(1,3),supbound(1,3);
70 math_Vector tolerance(1,Nbvar),infbound(1,Nbvar),supbound(1,Nbvar);
71 Func.GetTolerance(tolerance,tolesp);
72 Func.GetBounds(infbound,supbound);
73 math_FunctionSetRoot rsnld(Func,tolerance,30);
74
75 rsnld.Perform(Func,ParDep,infbound,supbound);
76
77 if (!rsnld.IsDone()) {
78 return;
79 }
80 rsnld.Root(sol);
81
82// situ1 = TheTopolTool::Classify(surf1,gp_Pnt2d(sol(1),sol(2)),
83// Max(tolerance(1),tolerance(2)));
84// situ2 = TheTopolTool::Classify(surf2,gp_Pnt2d(sol(3),sol(4)),
85// Max(tolerance(3),tolerance(4)));
86/*
87 situ = domain->Classify(gp_Pnt2d(sol(1),sol(2)),
88 Min(tolerance(1),tolerance(2)));
89*/
90 situ = domain->Classify(Func.Pnt2d(),
91 Min(tolerance(1),tolerance(2)));
92
93 if (situ != TopAbs_IN ) {
94 return;
95 }
96 }
97 else {
98 sol = ParDep;
99 }
100
101 for (Standard_Integer i=1; i<= Nbvar; i++) {
102 firstsol->ChangeValue(i) = sol(i);
103 }
104 State = TestArret(Func,sol,Standard_False,Blend_OK);
105 if (State!=Blend_OK) {
106 return;
107 }
0797d9d3 108#ifdef OCCT_DEBUG
7fd59977 109 if (Blend_GettraceDRAWSECT()){
110 Drawsect(surf,curv,param,Func);
111 }
112#endif
113 // Mettre a jour la ligne.
114 line->Append(previousP);
115 Standard_Real U,V,W;
116 previousP.ParametersOnS(U,V);
117 W = previousP.ParameterOnC();
118 TheExtremity P1(previousP.PointOnS(),U,V,previousP.Parameter(),tolesp);
119 TheExtremity P2(previousP.PointOnC(),W,previousP.Parameter(),tolesp);
120 if (sens>0.) {
121 line->SetStartPoints(P1,P2);
122 }
123 else {
124 line->SetEndPoints(P1,P2);
125 }
126
127// InternalPerform(Func,FuncInv,Pmax);
128 InternalPerform(Func,sol,Pmax);
129
130 done = Standard_True;
131}
132
133
134
135Standard_Boolean Blend_CSWalking::Complete(Blend_CSFunction& Func,
136// Blend_CSFuncInv& FuncInv,
137 const Standard_Real Pmin)
138{
139 if (!done) {StdFail_NotDone::Raise();}
140 if (iscomplete) {return Standard_True;}
141
142/*
143 if (sens >0.) {
144 previousP = line->Point(1);
145 }
146 else {
147 previousP = line->Point(line->NbPoints());
148 }
149*/
150
151 sens = -sens;
152/*
153 param = previousP.Parameter();
154 previousP.ParametersOnS(sol(1),sol(2));
155 sol(3) = previousP.ParameterOnC();
156*/
157 Standard_Integer Nbvar = Func.NbVariables();
158 math_Vector sol(1,Nbvar);
159 for (Standard_Integer i =1; i<= Nbvar; i++) {
160 sol(i) = firstsol->Value(i);
161 }
162
163 param = firstparam;
164
165// InternalPerform(Func,FuncInv,Pmin);
166 InternalPerform(Func,sol,Pmin);
167
168 sens = -sens;
169 iscomplete = Standard_True;
170 return Standard_True;
171}
172