2 // Created: Wed Jul 31 10:35:38 1996
3 // Author: Herve LOUESSARD
8 #include <LocalAnalysis.hxx>
9 #include <LocalAnalysis_SurfaceContinuity.hxx>
10 #include <LocalAnalysis_CurveContinuity.hxx>
11 #include <Geom_Surface.hxx>
12 #include <Geom_Curve.hxx>
13 #include <Geom2d_TrimmedCurve.hxx>
14 #include <Geom2d_Curve.hxx>
15 #include <DrawTrSurf.hxx>
16 #include <GeometryTest.hxx>
17 #include <GeomAbs_Shape.hxx>
18 #include <Draw_Appli.hxx>
20 #include <Draw_Interpretor.hxx>
22 /*********************************************************************************/
23 void InitEpsSurf(Standard_Real& epsnl,Standard_Real& epsdis, Standard_Real& epsangk1,
24 Standard_Real& epsangk2, Standard_Real& epsangn1,
25 Standard_Real& perce,Standard_Real& maxlen )
36 /*********************************************************************************/
37 void InitEpsCurv(Standard_Real& epsnl ,Standard_Real& epsdis, Standard_Real& epsangk1,
38 Standard_Real& epsangk2, Standard_Real& epsangg1,
39 Standard_Real& epsangg2,Standard_Real& percent,
40 Standard_Real& maxlen)
51 /*********************************************************************************/
53 static Standard_Integer surfaceCcontinuity (Draw_Interpretor& di, Standard_Integer n, const char** a)
54 { Standard_Real U1, U2, V1, V2, u1, u2, v1, v2;
55 GeomAbs_Shape TypeCont;
57 Standard_Boolean b1, b2, b3, b4;
58 Standard_Real epsnl,epsC0,epsC1,epsC2,epsG1,maxlen,perce;
61 InitEpsSurf(epsnl,epsC0,epsC1,epsC2,epsG1,perce,maxlen);
63 Handle(Geom_Surface) surf1 = DrawTrSurf::GetSurface(a[2]);
64 if (surf1.IsNull()) return 1 ;
66 Handle(Geom_Surface) surf2 = DrawTrSurf::GetSurface(a[5]);
67 if (surf2.IsNull()) return 1;
76 surf1->Bounds(u1, u2, v1, v2);
77 b1 = ((((U1>=u1)&&(U1<=u2))||((U1<=u1)&&(U1>=u2))));
78 b3 = ((((V1>=v1)&&(V1<=v2))||((V1<=v1)&&(V1>=v2))));
80 surf2->Bounds(u1, u2, v1, v2);
81 b2 = ((((U2>=u1)&&(U2<=u2))||((U2<=u1)&&(U2>=u2))));
82 b4 = ((((V2>=v1)&&(V2<=v2))||((V2<=v1)&&(V2>=v2))));
84 if (!((b1 && b2)&&(b3 && b4))) return 1;
88 { case 0 : { TypeCont=GeomAbs_C0;
90 { case 10 : epsC0= atof(a[9]);
91 case 9 : epsnl = atof(a[8]);
95 LocalAnalysis_SurfaceContinuity RES (surf1, U1, V1, surf2, U2, V2,
96 TypeCont,epsnl,epsC0,epsC1,epsC2,epsG1,perce,maxlen);
97 //LocalAnalysis::Dump(RES,cout);
98 Standard_SStream aSStream;
99 LocalAnalysis::Dump(RES,aSStream);
103 case 1 : { TypeCont=GeomAbs_C1;
105 { case 11 : epsC1=atof(a[10]);
106 case 10 : epsC0= atof(a[9]);
107 case 9 : epsnl = atof(a[8]);
111 LocalAnalysis_SurfaceContinuity RES (surf1, U1, V1, surf2, U2, V2,
112 TypeCont,epsnl,epsC0,epsC1,epsC2,epsG1,perce,maxlen );
113 //LocalAnalysis::Dump(RES,cout);
114 Standard_SStream aSStream;
115 LocalAnalysis::Dump(RES,aSStream);
120 case 2 : { TypeCont=GeomAbs_C2;
123 case 12 : epsC2= atof(a[11]);
124 case 11 : epsC1=atof(a[10]);
125 case 10 : epsC0= atof(a[9]);
126 case 9 : epsnl = atof(a[8]);
130 LocalAnalysis_SurfaceContinuity RES (surf1, U1, V1, surf2, U2, V2,
131 TypeCont, epsnl,epsC0,epsC1,epsC2,epsG1,perce,maxlen );
132 //LocalAnalysis::Dump(RES,cout);
133 Standard_SStream aSStream;
134 LocalAnalysis::Dump(RES,aSStream);
145 /*********************************************************************************/
147 static Standard_Integer surfaceGcontinuity (Draw_Interpretor& di, Standard_Integer n, const char** a)
148 { Standard_Real U1, U2, V1, V2,u1, u2, v1, v2;
149 GeomAbs_Shape TypeCont;
150 Standard_Integer ord;
151 Standard_Boolean b1, b2, b3, b4;
152 Standard_Real epsnl,epsC0,epsC1,epsC2,epsG1,maxlen,perce;
155 InitEpsSurf(epsnl,epsC0,epsC1,epsC2,epsG1,perce,maxlen);
157 Handle(Geom_Surface) surf1 = DrawTrSurf::GetSurface(a[2]);
158 if (surf1.IsNull()) return 1 ;
160 Handle(Geom_Surface) surf2 = DrawTrSurf::GetSurface(a[5]);
161 if (surf2.IsNull()) return 1;
170 surf1->Bounds(u1, u2, v1, v2);
171 b1 = ((((U1>=u1)&&(U1<=u2))||((U1<=u1)&&(U1>=u2))));
172 b3 = ((((V1>=v1)&&(V1<=v2))||((V1<=v1)&&(V1>=v2))));
174 surf2->Bounds(u1, u2, v1, v2);
175 b2 = ((((U2>=u1)&&(U2<=u2))||((U2<=u1)&&(U2>=u2))));
176 b4 = ((((V2>=v1)&&(V2<=v2))||((V2<=v1)&&(V2>=v2))));
178 if (!((b1 && b2)&&(b3 && b4))) return 1;
183 case 1 : { TypeCont=GeomAbs_G1;
185 { case 11 : epsG1=atof(a[10]);
186 case 10 : epsC0= atof(a[9]);
187 case 9 : epsnl = atof(a[8]);
191 LocalAnalysis_SurfaceContinuity RES (surf1, U1, V1, surf2, U2, V2,
192 TypeCont,epsnl,epsC0,epsC1,epsC2,epsG1,perce,maxlen );
193 //LocalAnalysis::Dump(RES,cout);
194 Standard_SStream aSStream;
195 LocalAnalysis::Dump(RES,aSStream);
200 case 2 : { TypeCont=GeomAbs_G2;
202 { case 13 : maxlen =atof (a[12]);
203 case 12 : perce=atof(a[11]);
204 case 11 : epsG1=atof(a[10]);
205 case 10 : epsC0= atof(a[9]);
206 case 9 : epsnl = atof(a[8]);
210 LocalAnalysis_SurfaceContinuity RES (surf1, U1, V1, surf2, U2, V2,
211 TypeCont, epsnl,epsC0,epsC1,epsC2,epsG1,perce,maxlen );
212 //LocalAnalysis::Dump(RES,cout);
213 Standard_SStream aSStream;
214 LocalAnalysis::Dump(RES,aSStream);
225 /*********************************************************************************/
227 static Standard_Integer curveGcontinuity(Draw_Interpretor& di, Standard_Integer n, const char** a)
228 { Standard_Real U1, U2, u1, u2;
229 GeomAbs_Shape TypeCont;
230 Standard_Integer ord;
231 Standard_Boolean b1, b2;
232 Standard_Real epsnl,epsC0, epsC1, epsC2, epsG1, epsG2, maxlen,percent;
235 Handle(Geom_Curve) curv1 = DrawTrSurf::GetCurve(a[2]);
236 if (curv1.IsNull()) return 1;
237 Handle(Geom_Curve) curv2 = DrawTrSurf::GetCurve(a[4]);
238 if (curv2.IsNull()) return 1;
245 u1=curv1->FirstParameter();
246 u2=curv1->LastParameter();
247 b1 = ((((U1>=u1)&&(U1<=u2))||((U1<=u1)&&(U1>=u2))));
249 u1=curv2->FirstParameter();
250 u2=curv2->LastParameter();
251 b2 = ((((U2>=u1)&&(U2<=u2))||((U2<=u1)&&(U2>=u2))));
253 if (!(b1 && b2)) return 1;
255 InitEpsCurv( epsnl,epsC0, epsC1, epsC2, epsG1, epsG2, percent,maxlen);
260 { case 9 : epsG1=atof(a[8]);
261 case 8 : epsC0= atof(a[7]);
262 case 7 : epsnl = atof(a[6]);
267 LocalAnalysis_CurveContinuity RES (curv1, U1, curv2, U2, TypeCont,
268 epsnl,epsC0, epsC1, epsC2, epsG1,epsG2,percent,maxlen );
269 //LocalAnalysis::Dump(RES,cout);
270 Standard_SStream aSStream;
271 LocalAnalysis::Dump(RES,aSStream);
278 {case 12 :maxlen =atof(a[11]);
279 case 11 :percent=atof(a[10]);
280 case 10 : epsG2= atof(a[9]);
281 case 9 : epsG1=atof(a[8]);
282 case 8 : epsC0= atof(a[7]);
283 case 7 : epsnl = atof(a[6]);
287 LocalAnalysis_CurveContinuity RES (curv1, U1, curv2, U2, TypeCont,
288 epsnl,epsC0, epsC1, epsC2, epsG1, epsG2,percent,maxlen );
289 //LocalAnalysis::Dump(RES,cout);
290 Standard_SStream aSStream;
291 LocalAnalysis::Dump(RES,aSStream);
300 /*********************************************************************************/
302 static Standard_Integer curveCcontinuity(Draw_Interpretor& di, Standard_Integer n, const char** a)
303 { Standard_Real U1, U2, u1, u2;
304 GeomAbs_Shape TypeCont;
305 Standard_Integer ord;
306 Standard_Boolean b1, b2;
307 Standard_Real epsnl,epsC0, epsC1, epsC2, epsG1, epsG2, maxlen,percent;
310 Handle(Geom_Curve) curv1 = DrawTrSurf::GetCurve(a[2]);
311 if (curv1.IsNull()) return 1;
312 Handle(Geom_Curve) curv2 = DrawTrSurf::GetCurve(a[4]);
313 if (curv2.IsNull()) return 1;
320 u1=curv1->FirstParameter();
321 u2=curv1->LastParameter();
322 b1 = ((((U1>=u1)&&(U1<=u2))||((U1<=u1)&&(U1>=u2))));
324 u1=curv2->FirstParameter();
325 u2=curv2->LastParameter();
326 b2 = ((((U2>=u1)&&(U2<=u2))||((U2<=u1)&&(U2>=u2))));
328 if (!(b1 && b2)) return 1;
331 InitEpsCurv( epsnl,epsC0, epsC1, epsC2, epsG1, epsG2, percent,maxlen);
333 { case 0 : { switch(n)
334 { case 8 : epsC0= atof(a[7]);
335 case 7 : epsnl = atof(a[6]);
340 LocalAnalysis_CurveContinuity RES (curv1, U1, curv2, U2, TypeCont,
341 epsnl,epsC0, epsC1, epsC2, epsG1,epsG2,percent,maxlen );
342 //LocalAnalysis::Dump(RES,cout);
343 Standard_SStream aSStream;
344 LocalAnalysis::Dump(RES,aSStream);
349 { case 9 : epsC1 =atof(a[8]);
350 case 8 : epsC0= atof(a[7]);
351 case 7 : epsnl = atof(a[6]);
356 LocalAnalysis_CurveContinuity RES (curv1, U1, curv2, U2, TypeCont,
357 epsnl,epsC0, epsC1, epsC2, epsG1,epsG2,percent,maxlen );
358 //LocalAnalysis::Dump(RES,cout);
359 Standard_SStream aSStream;
360 LocalAnalysis::Dump(RES,aSStream);
364 case 2 : { TypeCont=GeomAbs_C2;
367 case 10 : epsC2= atof(a[9]);
368 case 9 : epsC1=atof(a[8]);
369 case 8 : epsC0= atof(a[7]);
370 case 7 : epsnl = atof(a[6]);
374 LocalAnalysis_CurveContinuity RES (curv1, U1, curv2, U2, TypeCont,
375 epsnl,epsC0, epsC1, epsC2, epsG1, epsG2,percent,maxlen );
376 //LocalAnalysis::Dump(RES,cout);
377 Standard_SStream aSStream;
378 LocalAnalysis::Dump(RES,aSStream);
386 /***************************************************************************/
387 void GeometryTest::ContinuityCommands( Draw_Interpretor& theCommands)
389 static Standard_Boolean loaded = Standard_False;
391 loaded = Standard_True;
393 DrawTrSurf::BasicCommands(theCommands);
396 g = "GEOMETRY curves and surfaces continuity analysis ";
400 theCommands.Add("surfaceCcontinuity",
401 " surfaceCcontinuity order surf1 parU1 parV1 surf2 parU2 parV2 [eps_nul[ epsC0 [epsC1 [epsC2]]]]",
403 surfaceCcontinuity ,g);
405 theCommands.Add("surfaceGcontinuity",
406 " surfaceGcontinuity order surf1 parU1 parV1 surf2 parU2 parV2 [eps_nul[ epsG0 [epsG1[percent [maxlen]]]]",
408 surfaceGcontinuity ,g);
410 theCommands.Add("curveCcontinuity",
411 "curveCcontinuity order curv1 u1 curv2 u2 [epsnul [epsC0 [epsC1 [epsC2 ]]]] ",
416 theCommands.Add("curveGcontinuity",
417 "curveGcontinuity order curv1 u1 curv2 u2 [epsnul [epsG0 [epsG1 [epsG2 [percent [maxlen ]]]]]] ",