Integration of OCCT 6.5.0 from SVN
[occt.git] / src / GeometryTest / GeometryTest_FairCurveCommands.cxx
1 // File:        GeometryTest_FairCurveCommands.cxx
2 // Created:     Wed Oct  9 11:09:12 1996
3 // Author:      Philippe MANGIN
4 //              <pmn@sgi29>
5
6
7 #include <GeometryTest.ixx>
8
9 #include <Draw.hxx>
10 #include <DrawTrSurf.hxx>
11 #include <DrawTrSurf_Point.hxx>
12 #include <gp_Pnt2d.hxx>
13 #include <FairCurve_AnalysisCode.hxx>
14 #include <FairCurve_Batten.hxx>
15 #include <FairCurve_MinimalVariation.hxx>
16 #include <DrawFairCurve_Batten.hxx>
17 #include <DrawFairCurve_MinimalVariation.hxx>
18 #include <string.h>
19
20 //=======================================================================
21 Standard_Boolean IsGoodNumber(Standard_Integer argc, Standard_Integer waiting, Draw_Interpretor& di)
22 //=======================================================================
23 {
24   // argc vaut 1 de plus, puisque argv[0] contient le nom de la commande
25   if (argc != (waiting+1))
26     {
27       di << "Waiting "<< waiting << " arguments" << "\n";
28       return Standard_False;
29     }
30   else
31     return Standard_True;
32 }
33
34
35 //=======================================================================
36 static Standard_Integer 
37 BattenCurve(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
38 //=======================================================================
39 {
40    if (!IsGoodNumber(argc,6,di)) return 1;
41
42   const char *cp1 = argv[1];
43   const char *cp2 = argv[2];
44   const char *cangle1 = argv[3];
45   const char *cangle2 = argv[4];
46   const char *cheigth = argv[5];
47   const char *BattenName = argv[6];
48
49   Standard_Boolean Ok;
50   FairCurve_AnalysisCode Iana;
51   Standard_Real a1 = atof(cangle1),
52                 a2 = atof(cangle2),
53                 h  = atof(cheigth);
54   gp_Pnt2d P1, P2;
55
56
57   if (! DrawTrSurf::GetPoint2d(cp1, P1) ) return 1;
58   if (! DrawTrSurf::GetPoint2d(cp2, P2) ) return 1;
59
60   FairCurve_Batten* Bat = new FairCurve_Batten (P1, P2, h);
61   Bat->SetAngle1(a1*PI/180);
62   Bat->SetAngle2(a2*PI/180);
63   
64   Ok = Bat->Compute(Iana);
65   
66   Handle(DrawFairCurve_Batten) aBatten = new DrawFairCurve_Batten(Bat);
67
68   if (aBatten.IsNull()) {
69         di << " Batten null "<< "\n";
70         return 1;
71       }
72   Draw::Set(BattenName,aBatten);
73
74   return 0;
75  // !!! Delete of Bat have to be make in DrawFairCurve_Batten destructor !!!!! 
76 }  
77
78
79 //=======================================================================
80 static Standard_Integer 
81 MVCurve(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
82 //=======================================================================
83 {
84    if (!IsGoodNumber(argc,6,di)) return 1;
85
86   const char *cp1 = argv[1];
87   const char *cp2 = argv[2];
88   const char *cangle1 = argv[3];
89   const char *cangle2 = argv[4];
90   const char *cheigth = argv[5];
91   const char *MVCName = argv[6];
92
93   Standard_Boolean Ok;
94   FairCurve_AnalysisCode Iana;
95   Standard_Real a1 = atof(cangle1),
96                 a2 = atof(cangle2),
97                 h  = atof(cheigth);
98   gp_Pnt2d P1, P2;
99
100
101   if (! DrawTrSurf::GetPoint2d(cp1, P1) ) return 1;
102   if (! DrawTrSurf::GetPoint2d(cp2, P2) ) return 1;
103
104   FairCurve_MinimalVariation* MVC = new  FairCurve_MinimalVariation (P1, P2, h);
105   MVC->SetAngle1(a1*PI/180);
106   MVC->SetAngle2(a2*PI/180);
107   
108   Ok = MVC->Compute(Iana);
109   
110   Handle(DrawFairCurve_MinimalVariation) aMVC = new DrawFairCurve_MinimalVariation(MVC);
111
112   if (aMVC.IsNull()) {
113         di << " MVC null "<< "\n";
114         return 1;
115       }
116   Draw::Set(MVCName, aMVC);
117
118   return 0;  
119  // !!! Delete of Bat have to be make in DrawFairCurve_MinimalVariation destructor !!!!! 
120 }  
121
122 //=======================================================================
123 static Standard_Integer 
124 SetPoint(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
125 //=======================================================================
126 {
127    if (!IsGoodNumber(argc,3,di)) return 1;
128
129   const char *side = argv[1];
130   const char *PointName = argv[2];
131   const char *BattenName = argv[3];
132
133   Standard_Integer cote = atoi(side);
134
135   Handle(DrawTrSurf_Point)
136      Pnt =  Handle(DrawTrSurf_Point)::DownCast(Draw::Get(PointName));
137   if (Pnt.IsNull()) return 1;  
138  
139  
140   Handle(DrawFairCurve_Batten) 
141     Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
142   if (Bat.IsNull()) return 1;  
143  
144   Bat->SetPoint(cote, Pnt->Point2d());
145   Draw::Repaint();
146   return 0;
147 }
148
149 //=======================================================================
150 static Standard_Integer 
151 SetAngle(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
152 //=======================================================================
153 {
154    if (!IsGoodNumber(argc,3,di)) return 1;
155
156   const char *side = argv[1];
157   const char *val = argv[2];
158   const char *BattenName = argv[3];
159
160   Standard_Real angle = atof(val); 
161   Standard_Integer cote = atoi(side);
162  
163   Handle(DrawFairCurve_Batten) 
164     Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
165   if (Bat.IsNull()) return 1;  
166  
167   Bat->SetAngle(cote, angle);
168   Draw::Repaint();
169   return 0;
170 }
171
172
173 //=======================================================================
174 static Standard_Integer 
175 SetCurvature(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
176 //=======================================================================
177 {
178    if (!IsGoodNumber(argc,3,di)) return 1;
179
180   const char *side = argv[1];
181   const char *val = argv[2];
182   const char *MVCName = argv[3];
183
184   Standard_Real rho = atof(val); 
185   Standard_Integer cote = atoi(side);
186  
187   Handle(DrawFairCurve_MinimalVariation) 
188     MVC = Handle(DrawFairCurve_MinimalVariation)::DownCast(Draw::Get(MVCName));
189   if (MVC.IsNull()) return 1;  
190  
191   MVC->SetCurvature(cote, rho);
192   Draw::Repaint(); 
193   return 0;
194 }
195
196
197
198 //=======================================================================
199 static Standard_Integer 
200 SetSlide(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
201 //=======================================================================
202 {
203    if (!IsGoodNumber(argc,2,di)) return 1;
204
205   const char *val = argv[1];
206   const char *BattenName = argv[2];
207
208   Standard_Real slide = atof(val); 
209  
210   Handle(DrawFairCurve_Batten) 
211     Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
212   if (Bat.IsNull()) return 1;  
213
214   Bat->SetSliding(slide);
215   Draw::Repaint();
216   return 0;
217 }
218
219
220 //=======================================================================
221 static Standard_Integer 
222 FreeAngle(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
223 //=======================================================================
224 {
225    if (!IsGoodNumber(argc,2,di)) return 1;
226
227   const char *side = argv[1];
228   const char *BattenName = argv[2];
229  
230   Standard_Integer cote = atoi(side);
231  
232   Handle(DrawFairCurve_Batten) 
233     Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
234   if (Bat.IsNull()) return 1;  
235  
236   Bat->FreeAngle(cote);
237   Draw::Repaint();
238   return 0;
239 }
240
241 //=======================================================================
242 static Standard_Integer 
243 FreeCurvature(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
244 //=======================================================================
245 {
246    if (!IsGoodNumber(argc,2,di)) return 1;
247
248   const char *side = argv[1];
249   const char *MVCName = argv[2];
250  
251   Standard_Integer cote = atoi(side);
252  
253   Handle(DrawFairCurve_MinimalVariation) 
254     MVC = Handle(DrawFairCurve_MinimalVariation)::DownCast(Draw::Get(MVCName));
255   if (MVC.IsNull()) return 1;  
256  
257   MVC->FreeCurvature(cote);
258   Draw::Repaint();
259   return 0;
260 }
261
262 //=======================================================================
263 static Standard_Integer 
264 FreeSlide(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
265 //=======================================================================
266 {
267    if (!IsGoodNumber(argc,1,di)) return 1;
268
269   const char *BattenName = argv[1];
270  
271   Handle(DrawFairCurve_Batten) 
272     Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
273   if (Bat.IsNull()) return 1;  
274  
275   Bat->FreeSliding();
276   Draw::Repaint();
277   return 0;
278 }
279
280 //=======================================================================
281 static Standard_Integer 
282 SetHeight(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
283 //=======================================================================
284 {
285    if (!IsGoodNumber(argc,2,di)) return 1;
286
287   const char *val = argv[1];
288   const char *BattenName = argv[2];
289
290   Standard_Real Height = atof(val); 
291  
292   Handle(DrawFairCurve_Batten) 
293     Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
294   if (Bat.IsNull()) return 1;  
295  
296   Bat->SetHeight(Height);
297   Draw::Repaint();
298   return 0;
299 }
300
301 //=======================================================================
302 static Standard_Integer 
303 SetSlope(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
304 //=======================================================================
305 {
306    if (!IsGoodNumber(argc,2,di)) return 1;
307
308   const char *val = argv[1];
309   const char *BattenName = argv[2];
310
311   Standard_Real Slope = atof(val); 
312  
313   Handle(DrawFairCurve_Batten) 
314     Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
315   if (Bat.IsNull()) return 1;  
316  
317   Bat->SetSlope(Slope);
318   Draw::Repaint();
319   return 0;
320 }
321 //=======================================================================
322 static Standard_Integer 
323 SetPhysicalRatio(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
324 //=======================================================================
325 {
326    if (!IsGoodNumber(argc,2,di)) return 1;
327
328   const char *val = argv[1];
329   const char *MVCName = argv[2];
330
331   Standard_Real ratio = atof(val); 
332  
333   Handle(DrawFairCurve_MinimalVariation) 
334       MVC = Handle(DrawFairCurve_MinimalVariation)::DownCast(Draw::Get(MVCName));
335   if (MVC.IsNull()) return 1;  
336  
337   MVC->SetPhysicalRatio(ratio);
338   Draw::Repaint();
339   return 0;
340 }
341
342
343 //=======================================================================
344 void GeometryTest::FairCurveCommands(Draw_Interpretor& TheCommande) 
345 //=======================================================================
346
347
348   const char* g;
349
350   g = "FairCurve command";
351   
352   TheCommande.Add("battencurve","battencurve P1 P2 Angle1 Angle2 Heigth BattenName", 
353                    __FILE__,BattenCurve, g);
354   TheCommande.Add("minvarcurve","MVCurve P1 P2 Angle1 Angle2 Heigth MVCName", 
355                    __FILE__,MVCurve, g);
356   TheCommande.Add("setpoint","setpoint side point BattenName ",__FILE__, SetPoint, g);
357   TheCommande.Add("setangle","setangle side angle BattenName ",__FILE__, SetAngle, g);
358   TheCommande.Add("setslide","setangle slidingfactor BattenName ",__FILE__, SetSlide, g);
359   TheCommande.Add("freeangle","freeangle side BattenName",__FILE__, FreeAngle, g);
360   TheCommande.Add("freeslide","freeslide BattenName",__FILE__, FreeSlide, g);
361   TheCommande.Add("setheight","setheight height BattenName ",__FILE__, SetHeight, g);
362   TheCommande.Add("setslope","setslope slope BattenName ",__FILE__, SetSlope, g);
363   TheCommande.Add("setcurvature","setcurvature side rho MVCName ",__FILE__, SetCurvature, g);
364   TheCommande.Add("freecurvature","freecurvature side  MVCName ",__FILE__, FreeCurvature, g);
365   TheCommande.Add("setphysicalratio","physicalratio ratio MVCName ",__FILE__, SetPhysicalRatio, g);   
366 }