1 // Created on: 1996-10-09
2 // Created by: Philippe MANGIN
3 // Copyright (c) 1996-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.
17 #include <GeometryTest.ixx>
20 #include <DrawTrSurf.hxx>
21 #include <DrawTrSurf_Point.hxx>
22 #include <gp_Pnt2d.hxx>
23 #include <FairCurve_AnalysisCode.hxx>
24 #include <FairCurve_Batten.hxx>
25 #include <FairCurve_MinimalVariation.hxx>
26 #include <DrawFairCurve_Batten.hxx>
27 #include <DrawFairCurve_MinimalVariation.hxx>
30 //=======================================================================
31 Standard_Boolean IsGoodNumber(Standard_Integer argc, Standard_Integer waiting, Draw_Interpretor& di)
32 //=======================================================================
34 // argc vaut 1 de plus, puisque argv[0] contient le nom de la commande
35 if (argc != (waiting+1))
37 di << "Waiting "<< waiting << " arguments" << "\n";
38 return Standard_False;
45 //=======================================================================
46 static Standard_Integer
47 BattenCurve(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
48 //=======================================================================
50 if (!IsGoodNumber(argc,6,di)) return 1;
52 const char *cp1 = argv[1];
53 const char *cp2 = argv[2];
54 const char *cangle1 = argv[3];
55 const char *cangle2 = argv[4];
56 const char *cheigth = argv[5];
57 const char *BattenName = argv[6];
59 FairCurve_AnalysisCode Iana;
60 Standard_Real a1 = Draw::Atof(cangle1),
61 a2 = Draw::Atof(cangle2),
62 h = Draw::Atof(cheigth);
66 if (! DrawTrSurf::GetPoint2d(cp1, P1) ) return 1;
67 if (! DrawTrSurf::GetPoint2d(cp2, P2) ) return 1;
69 FairCurve_Batten* Bat = new FairCurve_Batten (P1, P2, h);
70 Bat->SetAngle1(a1*M_PI/180);
71 Bat->SetAngle2(a2*M_PI/180);
75 Handle(DrawFairCurve_Batten) aBatten = new DrawFairCurve_Batten(Bat);
77 if (aBatten.IsNull()) {
78 di << " Batten null "<< "\n";
81 Draw::Set(BattenName,aBatten);
84 // !!! Delete of Bat have to be make in DrawFairCurve_Batten destructor !!!!!
88 //=======================================================================
89 static Standard_Integer
90 MVCurve(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
91 //=======================================================================
93 if (!IsGoodNumber(argc,6,di)) return 1;
95 const char *cp1 = argv[1];
96 const char *cp2 = argv[2];
97 const char *cangle1 = argv[3];
98 const char *cangle2 = argv[4];
99 const char *cheigth = argv[5];
100 const char *MVCName = argv[6];
102 FairCurve_AnalysisCode Iana;
103 Standard_Real a1 = Draw::Atof(cangle1),
104 a2 = Draw::Atof(cangle2),
105 h = Draw::Atof(cheigth);
109 if (! DrawTrSurf::GetPoint2d(cp1, P1) ) return 1;
110 if (! DrawTrSurf::GetPoint2d(cp2, P2) ) return 1;
112 FairCurve_MinimalVariation* MVC = new FairCurve_MinimalVariation (P1, P2, h);
113 MVC->SetAngle1(a1*M_PI/180);
114 MVC->SetAngle2(a2*M_PI/180);
118 Handle(DrawFairCurve_MinimalVariation) aMVC = new DrawFairCurve_MinimalVariation(MVC);
121 di << " MVC null "<< "\n";
124 Draw::Set(MVCName, aMVC);
127 // !!! Delete of Bat have to be make in DrawFairCurve_MinimalVariation destructor !!!!!
130 //=======================================================================
131 static Standard_Integer
132 SetPoint(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
133 //=======================================================================
135 if (!IsGoodNumber(argc,3,di)) return 1;
137 const char *side = argv[1];
138 const char *PointName = argv[2];
139 const char *BattenName = argv[3];
141 Standard_Integer cote = Draw::Atoi(side);
143 Handle(DrawTrSurf_Point)
144 Pnt = Handle(DrawTrSurf_Point)::DownCast(Draw::Get(PointName));
145 if (Pnt.IsNull()) return 1;
148 Handle(DrawFairCurve_Batten)
149 Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
150 if (Bat.IsNull()) return 1;
152 Bat->SetPoint(cote, Pnt->Point2d());
157 //=======================================================================
158 static Standard_Integer
159 SetAngle(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
160 //=======================================================================
162 if (!IsGoodNumber(argc,3,di)) return 1;
164 const char *side = argv[1];
165 const char *val = argv[2];
166 const char *BattenName = argv[3];
168 Standard_Real angle = Draw::Atof(val);
169 Standard_Integer cote = Draw::Atoi(side);
171 Handle(DrawFairCurve_Batten)
172 Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
173 if (Bat.IsNull()) return 1;
175 Bat->SetAngle(cote, angle);
181 //=======================================================================
182 static Standard_Integer
183 SetCurvature(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
184 //=======================================================================
186 if (!IsGoodNumber(argc,3,di)) return 1;
188 const char *side = argv[1];
189 const char *val = argv[2];
190 const char *MVCName = argv[3];
192 Standard_Real rho = Draw::Atof(val);
193 Standard_Integer cote = Draw::Atoi(side);
195 Handle(DrawFairCurve_MinimalVariation)
196 MVC = Handle(DrawFairCurve_MinimalVariation)::DownCast(Draw::Get(MVCName));
197 if (MVC.IsNull()) return 1;
199 MVC->SetCurvature(cote, rho);
206 //=======================================================================
207 static Standard_Integer
208 SetSlide(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
209 //=======================================================================
211 if (!IsGoodNumber(argc,2,di)) return 1;
213 const char *val = argv[1];
214 const char *BattenName = argv[2];
216 Standard_Real slide = Draw::Atof(val);
218 Handle(DrawFairCurve_Batten)
219 Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
220 if (Bat.IsNull()) return 1;
222 Bat->SetSliding(slide);
228 //=======================================================================
229 static Standard_Integer
230 FreeAngle(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
231 //=======================================================================
233 if (!IsGoodNumber(argc,2,di)) return 1;
235 const char *side = argv[1];
236 const char *BattenName = argv[2];
238 Standard_Integer cote = Draw::Atoi(side);
240 Handle(DrawFairCurve_Batten)
241 Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
242 if (Bat.IsNull()) return 1;
244 Bat->FreeAngle(cote);
249 //=======================================================================
250 static Standard_Integer
251 FreeCurvature(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
252 //=======================================================================
254 if (!IsGoodNumber(argc,2,di)) return 1;
256 const char *side = argv[1];
257 const char *MVCName = argv[2];
259 Standard_Integer cote = Draw::Atoi(side);
261 Handle(DrawFairCurve_MinimalVariation)
262 MVC = Handle(DrawFairCurve_MinimalVariation)::DownCast(Draw::Get(MVCName));
263 if (MVC.IsNull()) return 1;
265 MVC->FreeCurvature(cote);
270 //=======================================================================
271 static Standard_Integer
272 FreeSlide(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
273 //=======================================================================
275 if (!IsGoodNumber(argc,1,di)) return 1;
277 const char *BattenName = argv[1];
279 Handle(DrawFairCurve_Batten)
280 Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
281 if (Bat.IsNull()) return 1;
288 //=======================================================================
289 static Standard_Integer
290 SetHeight(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
291 //=======================================================================
293 if (!IsGoodNumber(argc,2,di)) return 1;
295 const char *val = argv[1];
296 const char *BattenName = argv[2];
298 Standard_Real Height = Draw::Atof(val);
300 Handle(DrawFairCurve_Batten)
301 Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
302 if (Bat.IsNull()) return 1;
304 Bat->SetHeight(Height);
309 //=======================================================================
310 static Standard_Integer
311 SetSlope(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
312 //=======================================================================
314 if (!IsGoodNumber(argc,2,di)) return 1;
316 const char *val = argv[1];
317 const char *BattenName = argv[2];
319 Standard_Real Slope = Draw::Atof(val);
321 Handle(DrawFairCurve_Batten)
322 Bat = Handle(DrawFairCurve_Batten)::DownCast(Draw::Get(BattenName));
323 if (Bat.IsNull()) return 1;
325 Bat->SetSlope(Slope);
329 //=======================================================================
330 static Standard_Integer
331 SetPhysicalRatio(Draw_Interpretor& di, Standard_Integer argc, const char** argv)
332 //=======================================================================
334 if (!IsGoodNumber(argc,2,di)) return 1;
336 const char *val = argv[1];
337 const char *MVCName = argv[2];
339 Standard_Real ratio = Draw::Atof(val);
341 Handle(DrawFairCurve_MinimalVariation)
342 MVC = Handle(DrawFairCurve_MinimalVariation)::DownCast(Draw::Get(MVCName));
343 if (MVC.IsNull()) return 1;
345 MVC->SetPhysicalRatio(ratio);
351 //=======================================================================
352 void GeometryTest::FairCurveCommands(Draw_Interpretor& TheCommande)
353 //=======================================================================
358 g = "FairCurve command";
360 TheCommande.Add("battencurve","battencurve P1 P2 Angle1 Angle2 Heigth BattenName",
361 __FILE__,BattenCurve, g);
362 TheCommande.Add("minvarcurve","MVCurve P1 P2 Angle1 Angle2 Heigth MVCName",
363 __FILE__,MVCurve, g);
364 TheCommande.Add("setpoint","setpoint side point BattenName ",__FILE__, SetPoint, g);
365 TheCommande.Add("setangle","setangle side angle BattenName ",__FILE__, SetAngle, g);
366 TheCommande.Add("setslide","setangle slidingfactor BattenName ",__FILE__, SetSlide, g);
367 TheCommande.Add("freeangle","freeangle side BattenName",__FILE__, FreeAngle, g);
368 TheCommande.Add("freeslide","freeslide BattenName",__FILE__, FreeSlide, g);
369 TheCommande.Add("setheight","setheight height BattenName ",__FILE__, SetHeight, g);
370 TheCommande.Add("setslope","setslope slope BattenName ",__FILE__, SetSlope, g);
371 TheCommande.Add("setcurvature","setcurvature side rho MVCName ",__FILE__, SetCurvature, g);
372 TheCommande.Add("freecurvature","freecurvature side MVCName ",__FILE__, FreeCurvature, g);
373 TheCommande.Add("setphysicalratio","physicalratio ratio MVCName ",__FILE__, SetPhysicalRatio, g);