1 // File: GeometryTest_FairCurveCommands.cxx
2 // Created: Wed Oct 9 11:09:12 1996
3 // Author: Philippe MANGIN
7 #include <GeometryTest.ixx>
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>
20 //=======================================================================
21 Standard_Boolean IsGoodNumber(Standard_Integer argc, Standard_Integer waiting, Draw_Interpretor& di)
22 //=======================================================================
24 // argc vaut 1 de plus, puisque argv[0] contient le nom de la commande
25 if (argc != (waiting+1))
27 di << "Waiting "<< waiting << " arguments" << "\n";
28 return Standard_False;
35 //=======================================================================
36 static Standard_Integer
37 BattenCurve(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
38 //=======================================================================
40 if (!IsGoodNumber(argc,6,di)) return 1;
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];
50 FairCurve_AnalysisCode Iana;
51 Standard_Real a1 = atof(cangle1),
57 if (! DrawTrSurf::GetPoint2d(cp1, P1) ) return 1;
58 if (! DrawTrSurf::GetPoint2d(cp2, P2) ) return 1;
60 FairCurve_Batten* Bat = new FairCurve_Batten (P1, P2, h);
61 Bat->SetAngle1(a1*M_PI/180);
62 Bat->SetAngle2(a2*M_PI/180);
64 Ok = Bat->Compute(Iana);
66 Handle(DrawFairCurve_Batten) aBatten = new DrawFairCurve_Batten(Bat);
68 if (aBatten.IsNull()) {
69 di << " Batten null "<< "\n";
72 Draw::Set(BattenName,aBatten);
75 // !!! Delete of Bat have to be make in DrawFairCurve_Batten destructor !!!!!
79 //=======================================================================
80 static Standard_Integer
81 MVCurve(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
82 //=======================================================================
84 if (!IsGoodNumber(argc,6,di)) return 1;
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];
94 FairCurve_AnalysisCode Iana;
95 Standard_Real a1 = atof(cangle1),
101 if (! DrawTrSurf::GetPoint2d(cp1, P1) ) return 1;
102 if (! DrawTrSurf::GetPoint2d(cp2, P2) ) return 1;
104 FairCurve_MinimalVariation* MVC = new FairCurve_MinimalVariation (P1, P2, h);
105 MVC->SetAngle1(a1*M_PI/180);
106 MVC->SetAngle2(a2*M_PI/180);
108 Ok = MVC->Compute(Iana);
110 Handle(DrawFairCurve_MinimalVariation) aMVC = new DrawFairCurve_MinimalVariation(MVC);
113 di << " MVC null "<< "\n";
116 Draw::Set(MVCName, aMVC);
119 // !!! Delete of Bat have to be make in DrawFairCurve_MinimalVariation destructor !!!!!
122 //=======================================================================
123 static Standard_Integer
124 SetPoint(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
125 //=======================================================================
127 if (!IsGoodNumber(argc,3,di)) return 1;
129 const char *side = argv[1];
130 const char *PointName = argv[2];
131 const char *BattenName = argv[3];
133 Standard_Integer cote = atoi(side);
135 Handle(DrawTrSurf_Point)
136 Pnt = Handle(DrawTrSurf_Point)::DownCast(Draw::Get(PointName));
137 if (Pnt.IsNull()) return 1;
140 Handle(DrawFairCurve_Batten)
141 Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
142 if (Bat.IsNull()) return 1;
144 Bat->SetPoint(cote, Pnt->Point2d());
149 //=======================================================================
150 static Standard_Integer
151 SetAngle(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
152 //=======================================================================
154 if (!IsGoodNumber(argc,3,di)) return 1;
156 const char *side = argv[1];
157 const char *val = argv[2];
158 const char *BattenName = argv[3];
160 Standard_Real angle = atof(val);
161 Standard_Integer cote = atoi(side);
163 Handle(DrawFairCurve_Batten)
164 Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
165 if (Bat.IsNull()) return 1;
167 Bat->SetAngle(cote, angle);
173 //=======================================================================
174 static Standard_Integer
175 SetCurvature(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
176 //=======================================================================
178 if (!IsGoodNumber(argc,3,di)) return 1;
180 const char *side = argv[1];
181 const char *val = argv[2];
182 const char *MVCName = argv[3];
184 Standard_Real rho = atof(val);
185 Standard_Integer cote = atoi(side);
187 Handle(DrawFairCurve_MinimalVariation)
188 MVC = Handle(DrawFairCurve_MinimalVariation)::DownCast(Draw::Get(MVCName));
189 if (MVC.IsNull()) return 1;
191 MVC->SetCurvature(cote, rho);
198 //=======================================================================
199 static Standard_Integer
200 SetSlide(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
201 //=======================================================================
203 if (!IsGoodNumber(argc,2,di)) return 1;
205 const char *val = argv[1];
206 const char *BattenName = argv[2];
208 Standard_Real slide = atof(val);
210 Handle(DrawFairCurve_Batten)
211 Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
212 if (Bat.IsNull()) return 1;
214 Bat->SetSliding(slide);
220 //=======================================================================
221 static Standard_Integer
222 FreeAngle(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
223 //=======================================================================
225 if (!IsGoodNumber(argc,2,di)) return 1;
227 const char *side = argv[1];
228 const char *BattenName = argv[2];
230 Standard_Integer cote = atoi(side);
232 Handle(DrawFairCurve_Batten)
233 Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
234 if (Bat.IsNull()) return 1;
236 Bat->FreeAngle(cote);
241 //=======================================================================
242 static Standard_Integer
243 FreeCurvature(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
244 //=======================================================================
246 if (!IsGoodNumber(argc,2,di)) return 1;
248 const char *side = argv[1];
249 const char *MVCName = argv[2];
251 Standard_Integer cote = atoi(side);
253 Handle(DrawFairCurve_MinimalVariation)
254 MVC = Handle(DrawFairCurve_MinimalVariation)::DownCast(Draw::Get(MVCName));
255 if (MVC.IsNull()) return 1;
257 MVC->FreeCurvature(cote);
262 //=======================================================================
263 static Standard_Integer
264 FreeSlide(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
265 //=======================================================================
267 if (!IsGoodNumber(argc,1,di)) return 1;
269 const char *BattenName = argv[1];
271 Handle(DrawFairCurve_Batten)
272 Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
273 if (Bat.IsNull()) return 1;
280 //=======================================================================
281 static Standard_Integer
282 SetHeight(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
283 //=======================================================================
285 if (!IsGoodNumber(argc,2,di)) return 1;
287 const char *val = argv[1];
288 const char *BattenName = argv[2];
290 Standard_Real Height = atof(val);
292 Handle(DrawFairCurve_Batten)
293 Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
294 if (Bat.IsNull()) return 1;
296 Bat->SetHeight(Height);
301 //=======================================================================
302 static Standard_Integer
303 SetSlope(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
304 //=======================================================================
306 if (!IsGoodNumber(argc,2,di)) return 1;
308 const char *val = argv[1];
309 const char *BattenName = argv[2];
311 Standard_Real Slope = atof(val);
313 Handle(DrawFairCurve_Batten)
314 Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
315 if (Bat.IsNull()) return 1;
317 Bat->SetSlope(Slope);
321 //=======================================================================
322 static Standard_Integer
323 SetPhysicalRatio(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
324 //=======================================================================
326 if (!IsGoodNumber(argc,2,di)) return 1;
328 const char *val = argv[1];
329 const char *MVCName = argv[2];
331 Standard_Real ratio = atof(val);
333 Handle(DrawFairCurve_MinimalVariation)
334 MVC = Handle(DrawFairCurve_MinimalVariation)::DownCast(Draw::Get(MVCName));
335 if (MVC.IsNull()) return 1;
337 MVC->SetPhysicalRatio(ratio);
343 //=======================================================================
344 void GeometryTest::FairCurveCommands(Draw_Interpretor& TheCommande)
345 //=======================================================================
350 g = "FairCurve command";
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);