0029367: Visualization - simplify interface of V3d_View and V3d_Viewer
[occt.git] / samples / mfc / standard / 01_Geometry / src / GeomSources.cpp
CommitLineData
7fd59977 1// GeomSources.cpp: implementation of the GeomSources class.
2//
3//////////////////////////////////////////////////////////////////////
4
5#include "stdafx.h"
6#include "GeomSources.h"
7#include "GeometryApp.h"
8#include "MainFrm.h"
9e3ca93a 9#include <Geom_Curve.hxx>
10#include <Geom2d_Curve.hxx>
0e5ef926 11
7fd59977 12GeomSources::GeomSources()
13{
14}
15
16GeomSources::~GeomSources()
17{
18}
7fd59977 19void GeomSources::PreProcess(CGeometryDoc* aDoc,DisplayType aDisplayType)
20{
5c1f974e 21 if (aDisplayType == No2D3D )
22 {
0577ae8c 23 aDoc->GetAISContext()->EraseAll (Standard_True);
5c1f974e 24 aDoc->Put3DOnTop();
25 }
26
27 if (aDisplayType == a2DNo3D)
28 {
0577ae8c 29 aDoc->GetISessionContext()->EraseAll (Standard_True);
5c1f974e 30 aDoc->Put2DOnTop();
31 }
32
33 if (aDisplayType != No2D3D && aDisplayType != a2D3D)
34 {
35 aDoc->Minimize3D();
36 }
37
38 if (aDisplayType != a2DNo3D && aDisplayType != a2D3D)
39 {
40 aDoc->Minimize2D();
41 }
42
43 if (aDisplayType == a2D3D)
44 {
0577ae8c 45 aDoc->GetAISContext()->EraseAll (Standard_True);
46 aDoc->GetISessionContext()->EraseAll (Standard_True);
5c1f974e 47 aDoc->Put3DOnTop(false);
48 aDoc->Put2DOnTop(false);
49
50 // both on top
51 // send the message Title Horizontaly to the child of doc main frame
52 CGeometryApp* TheAppli = (CGeometryApp*)AfxGetApp();
53 CMainFrame* TheMainFrame= (CMainFrame*)TheAppli->m_pMainWnd;
54 ::SendMessage(TheMainFrame->m_hWndMDIClient, WM_MDITILE, 0, 0);
55 }
7fd59977 56}
57
576f8b11 58void GeomSources::PostProcess (CGeometryDoc* aDoc, UINT anID, DisplayType aDisplayType,
ee2be2a8 59 const TCollection_AsciiString& theString, Standard_Boolean UpdateViewer, Standard_Real Coef)
7fd59977 60{
576f8b11 61 Standard_CString aString = theString.ToCString();
2f697f2f 62 if (UpdateViewer)
63 {
64 if (aDisplayType == No2D3D || aDisplayType == a2D3D)
65 {
66 aDoc->Fit3DViews(Coef);
67 }
68
69 if (aDisplayType == a2DNo3D || aDisplayType == a2D3D)
70 {
71 aDoc->Fit2DViews();
72 }
5c1f974e 73 }
7fd59977 74
5c1f974e 75 TCollection_AsciiString Message("Results are ");
7fd59977 76
77 switch (aDisplayType)
78 {
5c1f974e 79 case No2DNo3D: Message = "All results are in this box \n";
7fd59977 80 break;
5c1f974e 81 case No2D3D: Message += "only in 3D \n";
7fd59977 82 break;
5c1f974e 83 case a2DNo3D: Message += "only in 2d \n";
7fd59977 84 break;
5c1f974e 85 case a2D3D: Message += "in both 2D and 3D \n";
7fd59977 86 break;
5c1f974e 87 }
88 Message += "====================================\n";
89 Message += aString;
7fd59977 90
5c1f974e 91 CString text(Message.ToCString());
92 aDoc->myCResultDialog.SetText(text);
7fd59977 93
5c1f974e 94 CString s;
95 if (! s.LoadString( anID ))
576f8b11 96 AfxMessageBox (L"Error Loading String: ");
7fd59977 97
5c1f974e 98 CString Title = s.Left( s.Find( '\n' ));
7fd59977 99
5c1f974e 100 aDoc->myCResultDialog.SetTitle(Title);
101 aDoc->SetTitle(Title);
7fd59977 102}
103
5c573e69 104void GeomSources::AddSeparator(CGeometryDoc* /*aDoc*/,TCollection_AsciiString& aMessage)
7fd59977 105{
5c1f974e 106 aMessage+= "------------------------------------------------------------------------\n";
7fd59977 107}
0e5ef926 108void GeomSources::DisplayPoint (CGeometryDoc* theDoc,
109 const gp_Pnt2d& thePoint,
110 const char* theText,
111 Standard_Boolean theToUpdateViewer,
112 Standard_Real theXoffset,
113 Standard_Real theYoffset,
114 Standard_Real theTextScale)
7fd59977 115{
0e5ef926 116 Handle(ISession_Point) aGraphicPoint = new ISession_Point (thePoint);
117 theDoc->GetISessionContext()->Display (aGraphicPoint, Standard_False);
118
119 Handle(AIS_TextLabel) aLabel = new AIS_TextLabel();
120 aLabel->SetText (theText);
121 aLabel->SetPosition (gp_Pnt (thePoint.X() + theXoffset, thePoint.Y() + theYoffset, 0.0));
122 //aLabel->SetHeight (theTextScale);
123 (void )theTextScale;
124 theDoc->GetISessionContext()->Display (aLabel, theToUpdateViewer);
7fd59977 125}
126
0e5ef926 127void GeomSources::DisplayPoint (CGeometryDoc* theDoc,
128 const gp_Pnt& thePoint,
129 const char* theText,
130 Standard_Boolean theToUpdateViewer,
131 Standard_Real theXoffset,
132 Standard_Real theYoffset,
133 Standard_Real theZoffset,
134 Standard_Real theTextScale)
7fd59977 135{
0e5ef926 136 Handle(ISession_Point) aGraphicPoint = new ISession_Point (thePoint);
137 theDoc->GetAISContext()->Display (aGraphicPoint, Standard_False);
138
139 Handle(AIS_TextLabel) aLabel = new AIS_TextLabel();
140 aLabel->SetText (theText);
141 aLabel->SetPosition (gp_Pnt (thePoint.X() + theXoffset, thePoint.Y() + theYoffset, thePoint.Z() + theZoffset));
142 //aLabel->SetHeight (theTextScale);
143 (void )theTextScale;
144 theDoc->GetAISContext()->Display (aLabel, theToUpdateViewer);
7fd59977 145}
146
147void GeomSources::DisplayCurve(CGeometryDoc* aDoc,
148 Handle(Geom2d_Curve) aCurve,
149 Standard_Integer aColorIndex,
150 Standard_Boolean UpdateViewer)
151{
5c1f974e 152 Handle(ISession2D_Curve) aGraphicCurve = new ISession2D_Curve(aCurve);
153 aGraphicCurve->SetColorIndex(aColorIndex) ;
154 aDoc->GetISessionContext()->Display(aGraphicCurve,UpdateViewer);
7fd59977 155}
156
157void GeomSources::DisplayCurveAndCurvature(CGeometryDoc* aDoc,
158 Handle(Geom2d_Curve) aCurve,
159 Standard_Integer aColorIndex,
160 Standard_Boolean UpdateViewer)
161{
5c1f974e 162 Handle(ISession2D_Curve) aGraphicCurve = new ISession2D_Curve(aCurve);
163 aGraphicCurve->SetDisplayCurbure(Standard_True) ;
164 aGraphicCurve->SetDiscretisation(20);
165 aGraphicCurve->SetColorIndex(aColorIndex) ;
166 aDoc->GetISessionContext()->Display(aGraphicCurve,UpdateViewer);
7fd59977 167}
168
0e5ef926 169void GeomSources::DisplayCurve (CGeometryDoc* theDoc,
170 Handle(Geom_Curve) theCurve,
171 Quantity_NameOfColor theNameOfColor,
172 Standard_Boolean theToUpdateViewer)
7fd59977 173{
0e5ef926 174 Handle(ISession_Curve) aGraphicCurve = new ISession_Curve (theCurve);
175 aGraphicCurve->Attributes()->SetLineAspect (new Prs3d_LineAspect (theNameOfColor, Aspect_TOL_SOLID, 1.0));
176 theDoc->GetAISContext()->Display (aGraphicCurve, theToUpdateViewer);
7fd59977 177}
178
179void GeomSources::DisplayCurve(CGeometryDoc* aDoc,
180 Handle(Geom_Curve) aCurve,
181 Standard_Boolean UpdateViewer)
182{
183 Handle(ISession_Curve) aGraphicCurve = new ISession_Curve(aCurve);
184 aDoc->GetAISContext()->Display(aGraphicCurve,UpdateViewer);
185}
186
0e5ef926 187void GeomSources::DisplaySurface (CGeometryDoc* theDoc,
188 Handle(Geom_Surface) theSurface,
189 Quantity_NameOfColor theNameOfColor,
190 Standard_Boolean theToUpdateViewer)
7fd59977 191{
0e5ef926 192 const Handle(AIS_InteractiveContext)& aCtx = theDoc->GetAISContext();
193 Handle(Prs3d_ShadingAspect) aShadeAspect = new Prs3d_ShadingAspect();
194 Handle(Prs3d_LineAspect) aLineAspect = new Prs3d_LineAspect (theNameOfColor, Aspect_TOL_SOLID, 1.0);
195 Handle(Prs3d_IsoAspect) anIsoAspect = new Prs3d_IsoAspect (theNameOfColor, Aspect_TOL_SOLID, 1.0,
196 aCtx->DefaultDrawer()->UIsoAspect()->Number());
197 aShadeAspect->SetColor (theNameOfColor);
198
199 Handle(ISession_Surface) aGraphicalSurface = new ISession_Surface (theSurface);
200 const Handle(Prs3d_Drawer)& aDrawer = aGraphicalSurface->Attributes();
201 aDrawer->SetShadingAspect (aShadeAspect);
202 aDrawer->SetLineAspect (aLineAspect);
203 aDrawer->SetFreeBoundaryAspect (aLineAspect);
204 aDrawer->SetUIsoAspect (anIsoAspect);
205 aDrawer->SetVIsoAspect (anIsoAspect);
206 aCtx->Display (aGraphicalSurface, theToUpdateViewer);
7fd59977 207}
208
209void GeomSources::DisplaySurface(CGeometryDoc* aDoc,
210 Handle(Geom_Surface) aSurface,
211 Standard_Boolean UpdateViewer)
212{
5c1f974e 213 Handle(ISession_Surface) aGraphicalSurface = new ISession_Surface(aSurface);
214 aDoc->GetAISContext()->Display(aGraphicalSurface,UpdateViewer);
7fd59977 215}
216
2f697f2f 217void GeomSources::ResetView(CGeometryDoc* aDoc)
218{
f7fc0c03 219 Handle(V3d_View) aView = aDoc->GetAISContext()->CurrentViewer()->ActiveViews().First();
2f697f2f 220 aView->Reset();
221}
222
7fd59977 223// Function name : GeomSources::gpTest1
224// Description :
225// Return type : void
226// Argument : CGeometryDoc* aDoc
227void GeomSources::gpTest1(CGeometryDoc* aDoc)
228{
229 DisplayType TheDisplayType = No2D3D;
230 PreProcess(aDoc,TheDisplayType);
5c1f974e 231 //==============================================================
232
233 gp_XYZ A(1,2,3);
234 gp_XYZ B(2,2,2);
235 gp_XYZ C(3,2,3);
236 Standard_Real result = A.DotCross(B,C);
7fd59977 237
238//==============================================================
5c1f974e 239 TCollection_AsciiString Message ("\
7fd59977 240 \n\
241gp_XYZ A(1,2,3); \n\
242gp_XYZ B(2,2,2); \n\
243gp_XYZ C(3,2,3); \n\
244Standard_Real result = A.DotCross(B,C); \n\
245 \n");
5c1f974e 246 AddSeparator(aDoc,Message);
7fd59977 247//--------------------------------------------------------------
5c573e69 248
7fd59977 249 DisplayPoint(aDoc,gp_Pnt(A),"A (1,2,3)",false,0.1);
250 DisplayPoint(aDoc,gp_Pnt(B),"B (2,2,2)",false,0.1);
5c573e69 251 DisplayPoint(aDoc,gp_Pnt(C),"C (3,2,3)",false,0.1);
7fd59977 252
253// to add a numeric value in a TCollectionAsciiString
5c1f974e 254 TCollection_AsciiString Message2 (result);
7fd59977 255
5c1f974e 256 Message+= " result = ";
257 Message+= Message2;
576f8b11 258 PostProcess(aDoc,ID_BUTTON_Test_1,TheDisplayType,Message);
7fd59977 259}
260
261// Function name : GeomSources::gpTest2
262// Description :
263// Return type : void
264// Argument : CGeometryDoc* aDoc
265void GeomSources::gpTest2(CGeometryDoc* aDoc)
266{
267 DisplayType TheDisplayType = No2D3D;
268 PreProcess(aDoc,TheDisplayType);
269//==============================================================
270
5c1f974e 271 gp_Pnt P1(1,2,3);
7fd59977 272
273//==============================================================
5c1f974e 274 TCollection_AsciiString Message ("\
7fd59977 275 \n\
276gp_Pnt P1(1,2,3); \n\
277 \n");
5c1f974e 278 AddSeparator(aDoc,Message);
7fd59977 279//--------------------------------------------------------------
2f697f2f 280 DisplayPoint(aDoc,P1,"P1 (1,2,3)",false,30);
281 PostProcess(aDoc,ID_BUTTON_Test_2,TheDisplayType,Message,Standard_False);
282 ResetView(aDoc);
7fd59977 283}
284
285
286// Function name : GeomSources::gpTest3
287// Description :
288// Return type : void
289// Argument : CGeometryDoc* aDoc
290void GeomSources::gpTest3(CGeometryDoc* aDoc)
291{
5c1f974e 292 DisplayType TheDisplayType = No2D3D;
293 PreProcess(aDoc,TheDisplayType);
7fd59977 294//==============================================================
295
5c1f974e 296 gp_XYZ A(1,2,3);
297 gp_Pnt P2(A);
7fd59977 298
299//==============================================================
5c1f974e 300 TCollection_AsciiString Message ("\
7fd59977 301 \n\
302gp_XYZ A(1,2,3); \n\
303gp_Pnt P2(A); \n\
304 \n");
5c1f974e 305 AddSeparator(aDoc,Message);
7fd59977 306//--------------------------------------------------------------
2f697f2f 307 DisplayPoint(aDoc,P2,"P2 (1,2,3)",false,30);
308 PostProcess(aDoc,ID_BUTTON_Test_3,TheDisplayType,Message,Standard_False);
309 ResetView(aDoc);
7fd59977 310}
311
312
313// Function name : GeomSources::gpTest4
314// Description :
315// Return type : void
316// Argument : CGeometryDoc* aDoc
317void GeomSources::gpTest4(CGeometryDoc* aDoc)
318{
5c1f974e 319 DisplayType TheDisplayType = No2D3D;
320 PreProcess(aDoc,TheDisplayType);
7fd59977 321//==============================================================
322
5c1f974e 323 gp_Pnt P3 = gp::Origin();
324 Standard_Real TheX = P3.X();
325 Standard_Real TheY = P3.Y();
326 Standard_Real TheZ = P3.Z();
7fd59977 327
328
329//==============================================================
330 TCollection_AsciiString Message ("\
331 \n\
332gp_Pnt P3 = gp::Origin(); \n\
333Standard_Real TheX = P3.X(); \n\
334Standard_Real TheY = P3.Y(); \n\
335Standard_Real TheZ = P3.Z(); \n\
336 \n");
5c1f974e 337 AddSeparator(aDoc,Message);
7fd59977 338//--------------------------------------------------------------
2f697f2f 339 DisplayPoint(aDoc,P3,"P3 = gp::Origin()",false,30);
5c1f974e 340
341 TCollection_AsciiString Message2 (TheX);
342 TCollection_AsciiString Message3 (TheY);
343 TCollection_AsciiString Message4 (TheZ);
344
345 Message += " TheX = ";
346 Message += Message2;
347 Message += " TheY = ";
348 Message += Message3;
349 Message += " TheZ = ";
350 Message4 = TheZ;
351 Message += Message4;
352
2f697f2f 353 PostProcess(aDoc,ID_BUTTON_Test_4,TheDisplayType,Message,Standard_False);
354 ResetView(aDoc);
7fd59977 355}
356
357
358// Function name : GeomSources::gpTest5
359// Description :
360// Return type : void
361// Argument : CGeometryDoc* aDoc
362void GeomSources::gpTest5(CGeometryDoc* aDoc)
363{
5c1f974e 364 DisplayType TheDisplayType = No2D3D;
365 PreProcess(aDoc,TheDisplayType);
7fd59977 366//==============================================================
367
5c1f974e 368 gp_Pnt P1(1,2,3);
369 gp_Pnt P2(3,4,5);
370 gp_Pnt PB = P1;
371 Standard_Real alpha = 3;
372 Standard_Real beta = 7;
373 PB.BaryCenter(alpha,P2,beta);
7fd59977 374
375//==============================================================
5c1f974e 376 TCollection_AsciiString Message ("\
7fd59977 377 \n\
378gp_Pnt P1(1,2,3); \n\
379gp_Pnt P2(3,4,5); \n\
380gp_Pnt PB = P1; \n\
381Standard_Real alpha = 3; \n\
382Standard_Real beta = 7; \n\
383PB.BaryCenter(alpha,P2,beta); \n\
384 \n");
385
5c1f974e 386 AddSeparator(aDoc,Message);
7fd59977 387//--------------------------------------------------------------
388
5c1f974e 389 DisplayPoint(aDoc,P1,"P1",false,0.2);
390 DisplayPoint(aDoc,P2,"P2",false,0.2);
391 DisplayPoint(aDoc,PB,"PB = barycenter ( 3 * P1 , 7 * P2) ",false,0.2);
392
393 TCollection_AsciiString Message2 (PB.X());
394 TCollection_AsciiString Message3 (PB.Y());
395 TCollection_AsciiString Message4 (PB.Z());
396
397 Message += " PB ( ";
398 Message += Message2;
399 Message += " , ";
400 Message += Message3;
401 Message += " , ";
402 Message += Message4;
403 Message += " ); ";
576f8b11 404 PostProcess(aDoc,ID_BUTTON_Test_5,TheDisplayType,Message);
7fd59977 405}
406
407
408// Function name : GeomSources::gpTest6
409// Description :
410// Return type : void
411// Argument : CGeometryDoc* aDoc
412void GeomSources::gpTest6(CGeometryDoc* aDoc)
413{
5c1f974e 414 DisplayType TheDisplayType = No2D3D;
415 PreProcess(aDoc,TheDisplayType);
7fd59977 416//==============================================================
417
418// Compute a 3d point P as BaryCenter of an array of point
5c1f974e 419 gp_Pnt P1(0,0,5);
420 gp_Pnt P2(1,2,3);
421 gp_Pnt P3(2,3,-2);
422 gp_Pnt P4(4,3,5);
423 gp_Pnt P5(5,5,4);
424 TColgp_Array1OfPnt array (1,5); // sizing array
425 array.SetValue(1,P1);
426 array.SetValue(2,P2);
427 array.SetValue(3,P3);
428 array.SetValue(4,P4);
429 array.SetValue(5,P5);
430
431 Standard_Real Tolerance = 8; // ajout de la tolerance
432 GProp_PEquation PE (array,Tolerance);
433
434 gp_Pnt P; // P declaration
435 Standard_Boolean IsPoint;
436
437 if (PE.IsPoint())
438 {
439 IsPoint = true;
7fd59977 440 P = PE .Point();
5c1f974e 441 }
442 else
443 {
444 IsPoint = false;
445 }
446
447 if (PE.IsLinear()){ /*... */ }
448 if (PE.IsPlanar()){ /*... */ }
449 if (PE.IsSpace()) { /*... */ }
7fd59977 450
451//==============================================================
5c1f974e 452 TCollection_AsciiString Message ("\
7fd59977 453 \n\
454 \n\
455// Compute a 3d point P as BaryCenter of an array of point \n\
456gp_Pnt P1(0,0,5); \n\
457gp_Pnt P2(1,2,3); \n\
458gp_Pnt P3(2,3,-2); \n\
459gp_Pnt P4(4,3,5); \n\
460gp_Pnt P5(5,5,4); \n\
461TColgp_Array1OfPnt array (1,5); // sizing array \n\
462array.SetValue(1,P1); \n\
463array.SetValue(2,P2); \n\
464array.SetValue(3,P3); \n\
465array.SetValue(4,P4); \n\
466array.SetValue(5,P5); \n\
467 \n\
468Standard_Real Tolerance = 8; // ajout de la tolerance \n\
469GProp_PEquation PE (array,Tolerance); \n\
470 \n\
471gp_Pnt P; // P declaration \n\
472Standard_Boolean IsPoint; \n\
473if (PE.IsPoint()){IsPoint = true; \n\
474 P = PE .Point();} \n\
475 else { IsPoint = false; } \n\
476if (PE.IsLinear()){ /*... */ } \n\
477if (PE.IsPlanar()){ /*... */ } \n\
478if (PE.IsSpace()) { /*... */ } \n\
479 \n");
5c1f974e 480 AddSeparator(aDoc,Message);
7fd59977 481 //--------------------------------------------------------------
482
5c1f974e 483 TCollection_AsciiString PointName("P");
7fd59977 484
485
486 for(Standard_Integer i= array.Lower();i <= array.Upper(); i++)
5c1f974e 487 {
488 TCollection_AsciiString TheString (i);
489 TheString = PointName+ TheString;
490 DisplayPoint(aDoc,array(i),TheString.ToCString(),false,0.5);
491 }
492
493 DisplayPoint(aDoc,P,"P",false,0.5);
494 TCollection_AsciiString Message2 (P.X());
495 TCollection_AsciiString Message3 (P.Y());
496 TCollection_AsciiString Message4 (P.Z());
497
498 Message += " IsPoint = ";
499 if (IsPoint)
500 {
501 Message += "True --> ";
502 Message += " P ( ";
7fd59977 503
5c1f974e 504 Message += Message2; Message += " , ";
505 Message += Message3; Message += " , ";
506 Message += Message4; Message += " ); \n";
507 }
508 else
509 Message += "False\n";
510
511 Message += " IsLinear = ";
512 if (PE.IsLinear())
513 Message += "True \n";
514 else
515 Message += "False\n";
516
517 Message += " IsPlanar = ";
518 if (PE.IsPlanar())
519 Message += "True \n";
520 else
521 Message += "False\n";
522
523 Message += " IsSpace = ";
524 if
525 (PE.IsSpace())
526 Message += "True \n";
527 else
528 Message += "False\n";
7fd59977 529
576f8b11 530 PostProcess(aDoc,ID_BUTTON_Test_6,TheDisplayType,Message);
7fd59977 531}
532
533// Function name : GeomSources::gpTest7
534// Description :
535// Return type : void
536// Argument : CGeometryDoc* aDoc
537void GeomSources::gpTest7(CGeometryDoc* aDoc)
538{
5c1f974e 539 DisplayType TheDisplayType = a2DNo3D;
540 PreProcess(aDoc,TheDisplayType);
7fd59977 541//==============================================================
542
5c1f974e 543 gp_Pnt2d P1(0,5);
544 gp_Pnt2d P2(5.5,1);
545 gp_Pnt2d P3(-2,2);
546
e91fd025 547 Handle(Geom2d_Curve) C =
7fd59977 548 GCE2d_MakeArcOfCircle (P1,P2,P3).Value();
549
5c1f974e 550 Standard_Real FirstParameter = C->FirstParameter();
551 Standard_Real LastParameter = C->LastParameter();
552 Standard_Real MiddleParameter = (FirstParameter+LastParameter)/2;
553 Standard_Real param = MiddleParameter; //in radians
7fd59977 554
5c1f974e 555 gp_Pnt2d P;
556 gp_Vec2d V;
557 C->D1(param,P,V);
7fd59977 558// we recover point P and the vector V
559
560//==============================================================
5c1f974e 561 TCollection_AsciiString Message ("\
7fd59977 562 \n\
563 \n\
564gp_Pnt2d P1(0,5); \n\
565gp_Pnt2d P2(5.5,1); \n\
566gp_Pnt2d P3(-2,2); \n\
567 \n\
568Handle(Geom2d_TrimmedCurve) C = \n\
569 GCE2d_MakeArcOfCircle (P1,P2,P3).Value(); \n\
570 \n\
571Standard_Real FirstParameter = C->FirstParameter(); \n\
572Standard_Real LastParameter = C->LastParameter(); \n\
573Standard_Real MiddleParameter = \n\
574 (FirstParameter+LastParameter)/2; \n\
575Standard_Real param = MiddleParameter; //in radians \n\
576 \n\
577gp_Pnt2d P; \n\
578gp_Vec2d V; \n\
579C->D1(param,P,V); \n\
580// we recover point P and the vector V \n\
581 \n");
5c1f974e 582 AddSeparator(aDoc,Message);
583 //--------------------------------------------------------------
7fd59977 584
e91fd025 585 DisplayCurve(aDoc,C);
5c1f974e 586 Handle(ISession_Direction) aDirection = new ISession_Direction(P,V);
587 aDoc->GetISessionContext()->Display(aDirection, Standard_False);
7fd59977 588
5c1f974e 589 DisplayPoint(aDoc,P,"P",false,0.5);
7fd59977 590
576f8b11 591 PostProcess(aDoc,ID_BUTTON_Test_7,TheDisplayType,Message);
7fd59977 592}
593
594// Function name : GeomSources::gpTest8
595// Description :
596// Return type : void
597// Argument : CGeometryDoc* aDoc
598void GeomSources::gpTest8(CGeometryDoc* aDoc)
599{
5c1f974e 600 DisplayType TheDisplayType = a2DNo3D;
601 PreProcess(aDoc,TheDisplayType);
7fd59977 602//==============================================================
603
5c1f974e 604 Standard_Real radius = 5;
605 Handle(Geom2d_Circle) C =
7fd59977 606 new Geom2d_Circle(gp::OX2d(),radius);
5c1f974e 607 Standard_Real param = 1.2*M_PI;
608 Geom2dLProp_CLProps2d CLP
7fd59977 609 (C,param,2,Precision::PConfusion());
5c1f974e 610 gp_Dir2d D;
611 CLP.Tangent(D);
7fd59977 612// D is the Tangent direction at parameter 1.2*PI
613
614//==============================================================
5c1f974e 615 TCollection_AsciiString Message (" \
7fd59977 616 \n\
617Standard_Real radius = 5; \n\
618Handle(Geom2d_Circle) C = \n\
619 new Geom2d_Circle(gp::OX2d(),radius); \n\
620Standard_Real param = 1.2*PI; \n\
621Geom2dLProp_CLProps2d CLP \n\
622 (C,param,2,Precision::PConfusion()); \n\
623 gp_Dir2d D; \n\
624CLP.Tangent(D); \n\
625// D is the Tangent direction at parameter 1.2*PI \n\
626 \n");
5c1f974e 627 AddSeparator(aDoc,Message);
628 //--------------------------------------------------------------
629 Handle(ISession2D_Curve) aCurve = new ISession2D_Curve(C);
630 aDoc->GetISessionContext()->Display(aCurve,Standard_False);
631 Handle(ISession_Direction) aDirection = new ISession_Direction(gp_Pnt2d(0,0),D,2);
632 aDoc->GetISessionContext()->Display(aDirection,Standard_False);
7fd59977 633
5c1f974e 634 TCollection_AsciiString Message2 (D.X());
635 TCollection_AsciiString Message3 (D.Y());
7fd59977 636
5c1f974e 637 Message += " D ( ";
638 Message += Message2; Message += " , ";
639 Message += Message3; Message += " ); \n";
7fd59977 640
576f8b11 641 PostProcess(aDoc,ID_BUTTON_Test_8,TheDisplayType,Message);
5c1f974e 642}
7fd59977 643
644// Function name : GeomSources::gpTest9
645// Description :
646// Return type : void
647// Argument : CGeometryDoc* aDoc
648void GeomSources::gpTest9(CGeometryDoc* aDoc)
649{
5c1f974e 650 DisplayType TheDisplayType = a2DNo3D;
651 PreProcess(aDoc,TheDisplayType);
652
653 //==============================================================
7fd59977 654
5c1f974e 655 Standard_Real radius = 5;
656 Handle(Geom2d_Circle) C =
7fd59977 657 new Geom2d_Circle(gp::OX2d(),radius);
5c1f974e 658 Geom2dAdaptor_Curve GAC (C);
659 Standard_Real startparam = 10*M_PI/180;
660 Standard_Real abscissa = 45*M_PI/180;
661 gp_Pnt2d P1;
662 C->D0(startparam,P1);
663 // abscissa is the distance along the curve from startparam
664 GCPnts_AbscissaPoint AP (GAC, abscissa, startparam);
665 gp_Pnt2d P2;
666 if (AP.IsDone()){C->D0(AP.Parameter(),P2);}
667 // P is now correctly set
668
669 //==============================================================
670 TCollection_AsciiString Message (" \n\
7fd59977 671 \n\
672 \n\
673Standard_Real radius = 5; \n\
674Handle(Geom2d_Circle) C = \n\
675 new Geom2d_Circle(gp::OX2d(),radius); \n\
676Geom2dAdaptor_Curve GAC (C); \n\
677Standard_Real startparam = 10*PI180; \n\
678Standard_Real abscissa = 45*PI180; \n\
679gp_Pnt2d P1; \n\
680C->D0(startparam,P1); \n\
681// abscissa is the distance along the curve from startparam \n\
682GCPnts_AbscissaPoint AP (GAC, abscissa, startparam); \n\
683gp_Pnt2d P2; \n\
684if (AP.IsDone()){C->D0(AP.Parameter(),P2);} \n\
685// P is now correctly set \n\
686 \n\
687 \n");
5c1f974e 688 AddSeparator(aDoc,Message);
689 //--------------------------------------------------------------
690 Handle(ISession2D_Curve) aCurve = new ISession2D_Curve(C);
691 aDoc->GetISessionContext()->Display(aCurve,Standard_False);
7fd59977 692
5c1f974e 693 DisplayPoint(aDoc,P1,"P1");
694 if (AP.IsDone()) DisplayPoint(aDoc,P2,"P2");
7fd59977 695
5c1f974e 696 TCollection_AsciiString Message2 (P1.X());
697 TCollection_AsciiString Message3 (P1.Y());
7fd59977 698
5c1f974e 699 TCollection_AsciiString Message4 (P2.X());
700 TCollection_AsciiString Message5 (P2.Y());
701
702 Message += " P1 ( ";
703 Message += Message2; Message += " , ";
704 Message += Message3; Message += " ); \n";
7fd59977 705
5c1f974e 706 Message += " P2 ( ";
707 Message += Message4; Message += " , ";
708 Message += Message5; Message += " ); \n";
576f8b11 709 PostProcess(aDoc,ID_BUTTON_Test_9,TheDisplayType,Message);
5c1f974e 710}
7fd59977 711
712// Function name : GeomSources::gpTest10
713// Description :
714// Return type : void
715// Argument : CGeometryDoc* aDoc
716void GeomSources::gpTest10(CGeometryDoc* aDoc)
717{
5c1f974e 718 DisplayType TheDisplayType = a2DNo3D;
719 PreProcess(aDoc,TheDisplayType);
720 //==============================================================
7fd59977 721
5c1f974e 722 gp_Pnt2d P;
723 Standard_Real radius = 5;
724 Handle(Geom2d_Circle) C =
725 new Geom2d_Circle(gp::OX2d(),radius);
726 Geom2dAdaptor_Curve GAC (C);
727 Standard_Real abscissa = 3;
728 GCPnts_UniformAbscissa UA (GAC,abscissa);
729 TColgp_SequenceOfPnt2d aSequence;
730 if (UA.IsDone())
7fd59977 731 {
5c1f974e 732 Standard_Real N = UA.NbPoints();
733 Standard_Integer count = 1;
734 for(;count<=N;count++)
735 {
736 C->D0(UA.Parameter(count),P);
5c573e69 737 //Standard_Real Parameter = UA.Parameter(count);
5c1f974e 738 // append P in a Sequence
739 aSequence.Append(P);
7fd59977 740 }
5c1f974e 741 }
742 Standard_Real Abscissa = UA.Abscissa();
7fd59977 743
5c1f974e 744 //==============================================================
745 TCollection_AsciiString Message (" \
7fd59977 746 \n\
747gp_Pnt2d P; \n\
748Standard_Real radius = 5; \n\
749Handle(Geom2d_Circle) C = \n\
750 new Geom2d_Circle(gp::OX2d(),radius); \n\
751Geom2dAdaptor_Curve GAC (C); \n\
752Standard_Real abscissa = 3; \n\
753GCPnts_UniformAbscissa UA (GAC,abscissa); \n\
754TColgp_SequenceOfPnt2d aSequence; \n\
755if (UA.IsDone()) \n\
756 { \n\
757 Standard_Real N = UA.NbPoints(); \n\
758 Standard_Integer count = 1; \n\
759 for(;count<=N;count++) \n\
760 { \n\
761 C->D0(UA.Parameter(count),P); \n\
762 Standard_Real Parameter = UA.Parameter(count); \n\
763 // append P in a Sequence \n\
764 aSequence.Append(P); \n\
765 } \n\
766} \n\
767Standard_Real Abscissa = UA.Abscissa(); \n\
768 \n");
5c1f974e 769 AddSeparator(aDoc,Message);
770 //--------------------------------------------------------------
771 Handle(ISession2D_Curve) aCurve = new ISession2D_Curve(C);
772 aDoc->GetISessionContext()->Display(aCurve,Standard_False);
7fd59977 773
5c1f974e 774 TCollection_AsciiString aString;
775 for (Standard_Integer i=1;i<= aSequence.Length();i++)
776 {
7fd59977 777
5c1f974e 778 TCollection_AsciiString Message2 (i);
779 TCollection_AsciiString Message3 (UA.Parameter(i));
780
781 aString = "P";
782 aString += Message2;
783 aString +=": Parameter : ";
784 aString += Message3;
785
786 // First and Last texts are displayed with an Y offset, point 4 is upper
787 Standard_Real YOffset = -0.3;
788 YOffset += 0.2 * ( i == 1 );
789 YOffset += 0.4 * ( i == 4 );
790 YOffset += -0.2 * ( i == aSequence.Length() );
791
792 DisplayPoint(aDoc,aSequence(i),aString.ToCString(),false,0.5,YOffset,0.04);
793 }
794
795 TCollection_AsciiString Message3 (Abscissa);
7fd59977 796
5c1f974e 797 Message += "Abscissa = ";
798 Message += Message3;
799 Message += " \n";
800
576f8b11 801 PostProcess(aDoc,ID_BUTTON_Test_10,TheDisplayType,Message);
5c1f974e 802}
7fd59977 803
804// Function name : GeomSources::gpTest11
805// Description :
806// Return type : void
807// Argument : CGeometryDoc* aDoc
808void GeomSources::gpTest11(CGeometryDoc* aDoc)
809{
5c1f974e 810 DisplayType TheDisplayType = No2D3D;
811 PreProcess(aDoc,TheDisplayType);
812 //==============================================================
813
814 Standard_Real radius = 5;
815 Handle(Geom_SphericalSurface) SP =
816 new Geom_SphericalSurface(gp_Ax3(gp::XOY()),radius);
817 Standard_Real u = 2;
818 Standard_Real v = 3;
819 gp_Pnt P = SP->Value(u,v);
820
7fd59977 821//==============================================================
822 TCollection_AsciiString Message (" \
823 \n\
824Standard_Real radius = 5; \n\
825Handle(Geom_SphericalSurface) SP = \n\
826 new Geom_SphericalSurface(gp_Ax3(gp::XOY()),radius); \n\
827Standard_Real u = 2; \n\
828Standard_Real v = 3; \n\
829gp_Pnt P = SP->Value(u,v); \n\
830 \n");
5c1f974e 831 AddSeparator(aDoc,Message);
832 //--------------------------------------------------------------
7fd59977 833
5c1f974e 834 DisplaySurface(aDoc,SP);
835 DisplayPoint(aDoc,P,"P",false,0.5);
836 TCollection_AsciiString Message2 (P.X());
837 TCollection_AsciiString Message3 (P.Y());
7fd59977 838
5c1f974e 839 Message += " P ( ";
840 Message += Message2;
841 Message += " , ";
842 Message += Message3;
843 Message += " ); \n";
7fd59977 844
576f8b11 845 PostProcess(aDoc,ID_BUTTON_Test_11,TheDisplayType,Message);
7fd59977 846}
847
7fd59977 848// Function name : GeomSources::gpTest12
849// Description :
850// Return type : void
851// Argument : CGeometryDoc* aDoc
852void GeomSources::gpTest12(CGeometryDoc* aDoc)
853{
5c1f974e 854 DisplayType TheDisplayType = No2D3D;
855 PreProcess(aDoc,TheDisplayType);
856 //==============================================================
857
858 gp_Pnt N,Q,P(1,2,3);
859 Standard_Real distance, radius = 5;
e91fd025 860 Handle(Geom_Curve) C = new Geom_Circle(gp::XOY(),radius);
5c1f974e 861 GeomAPI_ProjectPointOnCurve PPC (P,C);
862 N = PPC.NearestPoint();
863 Standard_Integer NbResults = PPC.NbPoints();
864
865 if(NbResults>0)
866 {
867 for(Standard_Integer i = 1;i<=NbResults;i++)
868 {
869 Q = PPC.Point(i);
870 distance = PPC.Distance(i);
871 // do something with Q or distance here
872 }
873 }
874
875 //==============================================================
876 TCollection_AsciiString Message (" \
7fd59977 877 \n\
878gp_Pnt N,Q,P(1,2,3); \n\
879Standard_Real distance, radius = 5; \n\
880Handle(Geom_Circle) C = new Geom_Circle(gp::XOY(),radius); \n\
881GeomAPI_ProjectPointOnCurve PPC (P,C); \n\
882N = PPC.NearestPoint(); \n\
883Standard_Integer NbResults = PPC.NbPoints(); \n\
884 \n\
885if(NbResults>0){ \n\
886 for(Standard_Integer i = 1;i<=NbResults;i++){ \n\
887 Q = PPC.Point(i); \n\
888 distance = PPC.Distance(i); \n\
889 // do something with Q or distance here \n\
890 } \n\
891 } \n\
892 \n");
893 AddSeparator(aDoc,Message);
894//--------------------------------------------------------------
895
5c1f974e 896 TCollection_AsciiString aString;
7fd59977 897
5c1f974e 898 DisplayPoint(aDoc,P,"P",false,0.5);
7fd59977 899
5c1f974e 900 TCollection_AsciiString Message2 (PPC.LowerDistance());
901
902 aString = "N : at Distance : ";
903 aString += Message2;
904
905 DisplayPoint(aDoc,N,aString.ToCString(),false,0.5,0,-0.5);
e91fd025 906 DisplayCurve(aDoc,C,Quantity_NOC_YELLOW,false);
5c1f974e 907
908 if(NbResults>0)
909 {
910 for(Standard_Integer i = 1;i<=NbResults;i++)
911 {
912 Q = PPC.Point(i);
913 distance = PPC.Distance(i);
914 TCollection_AsciiString Message3 (i);
915 TCollection_AsciiString Message4 (distance);
916
917 aString = "Q";
918 aString += Message3;
919 aString +=": at Distance : ";
920 aString += Message4;
921 DisplayPoint(aDoc,Q,aString.ToCString(),false,0.5);
922 }
923 }
924
576f8b11 925 PostProcess(aDoc,ID_BUTTON_Test_12,TheDisplayType,Message);
7fd59977 926}
927
928// Function name : GeomSources::gpTest13
929// Description :
930// Return type : void
931// Argument : CGeometryDoc* aDoc
932void GeomSources::gpTest13(CGeometryDoc* aDoc)
933{
5c1f974e 934 DisplayType TheDisplayType = No2D3D;
935 PreProcess(aDoc,TheDisplayType);
936
937 //==============================================================
938
939 gp_Pnt N,Q,P(7,8,9);
940 Standard_Real distance, radius = 5;
941 Handle(Geom_SphericalSurface) SP =
942 new Geom_SphericalSurface(gp_Ax3(gp::XOY()),radius);
943 GeomAPI_ProjectPointOnSurf PPS(P,SP);
944 N = PPS.NearestPoint();
945 Standard_Integer NbResults = PPS.NbPoints();
946 if(NbResults>0)
947 {
948 for(Standard_Integer i = 1;i<=NbResults;i++)
949 {
950 Q = PPS.Point(i);
951 distance = PPS.Distance(i);
952 // do something with Q or distance here
953 }
954 }
7fd59977 955
5c1f974e 956 //==============================================================
7fd59977 957 TCollection_AsciiString Message (" \
958 \n\
959gp_Pnt N,Q,P(7,8,9); \n\
960Standard_Real distance, radius = 5; \n\
961Handle(Geom_SphericalSurface) SP = \n\
962 new Geom_SphericalSurface(gp_Ax3(gp::XOY()),radius); \n\
963GeomAPI_ProjectPointOnSurf PPS(P,SP); \n\
964N = PPS.NearestPoint(); \n\
965Standard_Integer NbResults = PPS.NbPoints(); \n\
966if(NbResults>0){ \n\
967 for(Standard_Integer i = 1;i<=NbResults;i++){ \n\
968 Q = PPS.Point(i); \n\
969 distance = PPS.Distance(i); \n\
970 // do something with Q or distance here \n\
971 } \n\
972} \n\
973 \n");
5c1f974e 974 AddSeparator(aDoc,Message);
975 //--------------------------------------------------------------
976 TCollection_AsciiString aString;
977
978 DisplayPoint(aDoc,P,"P",false,0.5);
979 TCollection_AsciiString Message2 (PPS.LowerDistance());
980
981 aString = "N : at Distance : "; aString += Message2;
982 DisplayPoint(aDoc,N,aString.ToCString(),false,0.5,0,-0.6);
983
984 Handle(ISession_Surface) aSurface = new ISession_Surface(SP);
6262338c 985 Handle(Prs3d_Drawer) CurDrawer = aSurface->Attributes();
5c1f974e 986 CurDrawer->UIsoAspect()->SetNumber(10);
987 CurDrawer->VIsoAspect()->SetNumber(10);
0577ae8c 988 aDoc->GetAISContext()->SetLocalAttributes(aSurface, CurDrawer, Standard_False);
5c1f974e 989 aDoc->GetAISContext()->Display(aSurface, Standard_False);
990
991 if(NbResults>0)
992 {
993 for(Standard_Integer i = 1;i<=NbResults;i++)
994 {
995
996 Q = PPS.Point(i);
997 distance = PPS.Distance(i);
998 TCollection_AsciiString Message3 (i);
999 TCollection_AsciiString Message4 (distance);
1000
1001 aString = "Q";
1002 aString += Message3;
1003 aString +=": at Distance : ";
1004 aString += Message4;
1005
1006 DisplayPoint(aDoc,Q,aString.ToCString(),false,0.5);
1007 }
1008 }
576f8b11 1009 PostProcess(aDoc,ID_BUTTON_Test_13,TheDisplayType,Message);
7fd59977 1010}
1011
1012// Function name : GeomSources::gpTest14
1013// Description :
1014// Return type : void
1015// Argument : CGeometryDoc* aDoc
1016void GeomSources::gpTest14(CGeometryDoc* aDoc)
1017{
5c1f974e 1018 DisplayType TheDisplayType = No2D3D;
1019 PreProcess(aDoc,TheDisplayType);
1020 //==============================================================
7fd59977 1021
5c1f974e 1022 gp_Pnt P;
1023 gp_Ax3 theAxe(gp::XOY());
1024 gp_Pln PL(theAxe);
1025 Standard_Real MinorRadius = 5;
1026 Standard_Real MajorRadius = 8;
1027 gp_Elips EL (gp::YOZ(),MajorRadius,MinorRadius);
1028 IntAna_IntConicQuad ICQ
7fd59977 1029 (EL,PL,Precision::Angular(),Precision::Confusion());
5c1f974e 1030 if (ICQ.IsDone()){
7fd59977 1031 Standard_Integer NbResults = ICQ.NbPoints();
1032 if (NbResults>0){
5c1f974e 1033 for(Standard_Integer i = 1;i<=NbResults;i++){
7fd59977 1034 P = ICQ.Point(i);
1035 // do something with P here
5c1f974e 1036 }
1037 }
1038 }
7fd59977 1039
5c1f974e 1040 //==============================================================
1041 TCollection_AsciiString Message (" \
7fd59977 1042 \n\
1043gp_Pnt P; \n\
1044gp_Pln PL (gp_Ax3(gp::XOY())); \n\
1045Standard_Real MinorRadius = 5; \n\
1046Standard_Real MajorRadius = 8; \n\
1047gp_Elips EL (gp::YOZ(),MajorRadius,MinorRadius); \n\
1048IntAna_IntConicQuad ICQ \n\
1049 (EL,PL,Precision::Angular(),Precision::Confusion()); \n\
1050if (ICQ.IsDone()){ \n\
1051 Standard_Integer NbResults = ICQ.NbPoints(); \n\
1052 if (NbResults>0){ \n\
1053 for(Standard_Integer i = 1;i<=NbResults;i++){ \n\
1054 P = ICQ.Point(i); \n\
1055 // do something with P here \n\
1056 } \n\
1057 } \n\
1058} \n\
1059 \n");
5c1f974e 1060 AddSeparator(aDoc,Message);
1061 //--------------------------------------------------------------
7fd59977 1062
5c1f974e 1063 Handle(Geom_Plane) aPlane = GC_MakePlane(PL).Value();
1064 Handle(Geom_RectangularTrimmedSurface) aSurface= new Geom_RectangularTrimmedSurface(aPlane,-8.,8.,-12.,12.);
7fd59977 1065
5c1f974e 1066 DisplaySurface(aDoc,aSurface);
7fd59977 1067
e91fd025 1068 Handle(Geom_Curve) anEllips = GC_MakeEllipse(EL).Value();
1069 DisplayCurve(aDoc,anEllips,Quantity_NOC_YELLOW,false);
7fd59977 1070
5c1f974e 1071 TCollection_AsciiString aString;
7fd59977 1072
5c1f974e 1073 if (ICQ.IsDone())
1074 {
1075 Standard_Integer NbResults = ICQ.NbPoints();
1076 if (NbResults>0)
1077 {
1078 for(Standard_Integer i = 1;i<=NbResults;i++)
1079 {
7fd59977 1080
5c1f974e 1081 TCollection_AsciiString Message2(i);
1082
1083 P = ICQ.Point(i);
1084 aString = "P";aString += Message2;
1085 DisplayPoint(aDoc,P,aString.ToCString(),false,0.5);
1086 }
1087 }
1088 }
1089
576f8b11 1090 PostProcess(aDoc,ID_BUTTON_Test_14,TheDisplayType,Message);
7fd59977 1091}
1092
1093// Function name : GeomSources::gpTest15
1094// Description :
1095// Return type : void
1096// Argument : CGeometryDoc* aDoc
1097void GeomSources::gpTest15(CGeometryDoc* aDoc)
1098{
5c1f974e 1099 DisplayType TheDisplayType = No2D3D;
1100 PreProcess(aDoc,TheDisplayType);
1101 //==============================================================
1102
1103 gp_Pnt P1(1,2,3);
1104 gp_Pnt P1Copy = P1;
1105 gp_Pnt P2(5,4,6);
1106 gp_Trsf TRSF;
1107 TRSF.SetMirror(P2);
1108 P1Copy.Transform(TRSF);
1109
1110 //==============================================================
7fd59977 1111 TCollection_AsciiString Message (" \
1112 \n\
1113gp_Pnt P1(1,2,3); \n\
1114gp_Pnt P1Copy = P1; \n\
1115gp_Pnt P2(5,4,6); \n\
1116gp_Trsf TRSF; \n\
1117TRSF.SetMirror(P2); \n\
1118P1Copy.Transform(TRSF); \n\
1119 \n");
5c1f974e 1120 AddSeparator(aDoc,Message);
1121 //--------------------------------------------------------------
7fd59977 1122
5c1f974e 1123 DisplayPoint(aDoc,P1Copy,"P1Copy",false,0.5);
1124 DisplayPoint(aDoc,P1,"P1",false,0.5);
1125 DisplayPoint(aDoc,P2,"P2",false,0.5);
7fd59977 1126
576f8b11 1127 PostProcess(aDoc,ID_BUTTON_Test_15,TheDisplayType,Message);
7fd59977 1128}
1129
7fd59977 1130// Function name : GeomSources::gpTest16
1131// Description :
1132// Return type : void
1133// Argument : CGeometryDoc* aDoc
1134void GeomSources::gpTest16(CGeometryDoc* aDoc)
1135{
5c1f974e 1136 DisplayType TheDisplayType = No2D3D;
1137 PreProcess(aDoc,TheDisplayType);
7fd59977 1138//==============================================================
1139
5c1f974e 1140 gp_Pnt P1(1,2,3);
1141 gp_Pnt P2(5,4,6);
1142 gp_Vec V1 (P1,P2);
1143
1144 gp_Pnt P3(10,4,7);
1145 gp_Pnt P4(2,0,1);
1146 gp_Vec V2 (P3,P4);
1147
1148 Standard_Boolean result =
1149 V1.IsOpposite(V2,Precision::Angular());
1150 // result should be true
7fd59977 1151
1152//==============================================================
5c1f974e 1153 TCollection_AsciiString Message (" \
7fd59977 1154 \n\
1155gp_Pnt P1(1,2,3); \n\
1156gp_Pnt P2(5,4,6); \n\
1157gp_Vec V1 (P1,P2); \n\
1158 \n\
1159gp_Pnt P3(10,4,7); \n\
1160gp_Pnt P4(2,0,1); \n\
1161gp_Vec V2 (P3,P4); \n\
1162 \n\
1163Standard_Boolean result = \n\
1164V1.IsOpposite(V2,Precision::Angular()); \n\
1165// result should be true \n\
1166 \n");
5c1f974e 1167 AddSeparator(aDoc,Message);
1168 //--------------------------------------------------------------
7fd59977 1169
5c1f974e 1170 DisplayPoint(aDoc,P1,"P1",false,0.5);
1171 DisplayPoint(aDoc,P2,"P2",false,0.5);
1172 DisplayPoint(aDoc,P3,"P3",false,0.5);
1173 DisplayPoint(aDoc,P4,"P4",false,0.5);
7fd59977 1174
5c1f974e 1175 Handle(ISession_Direction) aDirection1 = new ISession_Direction(P1,V1);
1176 aDoc->GetAISContext()->Display(aDirection1, Standard_False);
7fd59977 1177
5c1f974e 1178 Handle(ISession_Direction) aDirection2 = new ISession_Direction(P3,V2);
1179 aDoc->GetAISContext()->Display(aDirection2, Standard_False);
7fd59977 1180
5c1f974e 1181 Message += "result = ";
1182 if (result) Message += "True \n"; else Message += "False \n";
7fd59977 1183
576f8b11 1184 PostProcess(aDoc,ID_BUTTON_Test_16,TheDisplayType,Message);
7fd59977 1185}
1186
1187// Function name : GeomSources::gpTest17
1188// Description :
1189// Return type : void
1190// Argument : CGeometryDoc* aDoc
1191void GeomSources::gpTest17(CGeometryDoc* aDoc)
1192{
5c1f974e 1193 DisplayType TheDisplayType = No2D3D;
1194 PreProcess(aDoc,TheDisplayType);
1195 //==============================================================
1196
1197 gp_Dir D1(1,2,3);
1198 gp_Dir D2(3,4,5);
1199 Standard_Real ang = D1.Angle(D2);
1200 // the result is in radians in the range [0,PI]
7fd59977 1201
5c1f974e 1202 //==============================================================
1203 TCollection_AsciiString Message (" \
7fd59977 1204 \n\
1205gp_Dir D1(1,2,3); \n\
1206gp_Dir D2(3,4,5); \n\
1207Standard_Real ang = D1.Angle(D2); \n\
1208// the result is in radians in the range [0,PI] \n\
1209 \n");
5c1f974e 1210 AddSeparator(aDoc,Message);
1211 //--------------------------------------------------------------
7fd59977 1212
5c1f974e 1213 Handle(ISession_Direction) aDirection1 = new ISession_Direction(gp_Pnt(0,0,0),D1,3);
1214 aDoc->GetAISContext()->Display(aDirection1, Standard_False);
7fd59977 1215
5c1f974e 1216 Handle(ISession_Direction) aDirection2 = new ISession_Direction(gp_Pnt(0,0,0),D2,3);
1217 aDoc->GetAISContext()->Display(aDirection2, Standard_False);
7fd59977 1218
04232180 1219 std::cout<<" D1.Angle(D2) : "<<ang<<std::endl;
5c1f974e 1220
1221 TCollection_AsciiString Message2 (ang);
1222 TCollection_AsciiString Message3 (ang/M_PI/180);
1223
1224 Message += " ang = ";
1225 Message += Message2;
1226 Message += " radian \n";
1227 Message += " ang/PI180 = ";
1228 Message += Message3;
1229 Message += " degree \n";
1230
576f8b11 1231 PostProcess(aDoc,ID_BUTTON_Test_17,TheDisplayType,Message);
7fd59977 1232}
1233
1234// Function name : GeomSources::gpTest18
1235// Description :
1236// Return type : void
1237// Argument : CGeometryDoc* aDoc
1238void GeomSources::gpTest18(CGeometryDoc* aDoc)
1239{
5c1f974e 1240 DisplayType TheDisplayType = a2DNo3D;
1241 PreProcess(aDoc,TheDisplayType);
1242 //==============================================================
1243
1244 gp_Pnt2d P(2,3);
1245 gp_Dir2d D(4,5);
1246 gp_Ax22d A(P,D);
1247 gp_Parab2d Para(A,6);
1248 // P is the vertex point
1249 // P and D give the axis of symmetry
1250 // 6 is the focal length of the parabola
1251
1252 //==============================================================
1253 TCollection_AsciiString Message (" \
7fd59977 1254 \n\
1255gp_Pnt2d P(2,3); \n\
1256gp_Dir2d D(4,5); \n\
1257gp_Ax22d A(P,D); \n\
1258gp_Parab2d Para(A,6); \n\
1259// P is the vertex point \n\
1260// P and D give the axis of symmetry \n\
1261// 6 is the focal length of the parabola \n\
1262 \n");
5c1f974e 1263 AddSeparator(aDoc,Message);
1264 //--------------------------------------------------------------
1265
1266 DisplayPoint(aDoc,P,"P",false,0.5,0,3);
1267
1268 Handle(ISession_Direction) aDirection = new ISession_Direction(P,D,200);
1269 aDoc->GetISessionContext()->Display(aDirection,Standard_False);
1270 Handle(Geom2d_Parabola) aParabola = GCE2d_MakeParabola(Para);
1271 Handle(Geom2d_TrimmedCurve) aTrimmedCurve = new Geom2d_TrimmedCurve(aParabola,-100,100);
1272 Handle(ISession2D_Curve) aCurve = new ISession2D_Curve(aTrimmedCurve);
1273 //aCurve->SetColorIndex(3);
1274 aDoc->GetISessionContext()->Display(aCurve, Standard_False);
1275
1276 Message += " The entity A of type gp_Ax22d is not displayable \n ";
1277 Message += " The entity D of type gp_Dir2d is displayed as a vector \n ( mean with a length != 1 ) \n ";
576f8b11 1278 PostProcess(aDoc,ID_BUTTON_Test_18,TheDisplayType,Message);
7fd59977 1279}
1280
1281// Function name : GeomSources::gpTest19
1282// Description :
1283// Return type : void
1284// Argument : CGeometryDoc* aDoc
1285void GeomSources::gpTest19(CGeometryDoc* aDoc)
1286{
5c1f974e 1287 DisplayType TheDisplayType = No2D3D;
1288 PreProcess(aDoc,TheDisplayType);
1289 //==============================================================
1290
1291 gp_Pnt P1(2,3,4);
1292 gp_Dir D(4,5,6);
1293 gp_Ax3 A(P1,D);
1294 Standard_Boolean IsDirectA = A.Direct();
1295
1296 gp_Dir AXDirection = A.XDirection() ;
1297 gp_Dir AYDirection = A.YDirection() ;
1298
1299 gp_Pnt P2(5,3,4);
1300 gp_Ax3 A2(P2,D);
1301 A2.YReverse();
1302 // axis3 is now left handed
1303 Standard_Boolean IsDirectA2 = A2.Direct();
1304
1305 gp_Dir A2XDirection = A2.XDirection() ;
1306 gp_Dir A2YDirection = A2.YDirection() ;
1307
1308 //==============================================================
1309 TCollection_AsciiString Message (" \
7fd59977 1310 \n\
1311gp_Pnt P1(2,3,4); \n\
1312gp_Dir D(4,5,6); \n\
1313gp_Ax3 A(P,D); \n\
1314Standard_Boolean IsDirectA = A.Direct(); \n\
1315 \n\
1316gp_Dir AXDirection = A.XDirection() ; \n\
1317gp_Dir AYDirection = A.YDirection() ; \n\
1318 \n\
1319gp_Pnt P2(5,3,4); \n\
1320gp_Ax3 A2(P2,D); \n\
1321A2.YReverse(); \n\
1322// axis3 is now left handed \n\
1323Standard_Boolean IsDirectA2 = A2.Direct(); \n\
1324 \n\
1325gp_Dir A2XDirection = A2.XDirection() ; \n\
1326gp_Dir A2YDirection = A2.YDirection() ; \n\
1327 \n");
5c1f974e 1328 AddSeparator(aDoc,Message);
1329 //--------------------------------------------------------------
1330
e5b32824 1331 // Set style for vector lines
1332 Handle(Prs3d_LineAspect) anAxesAspect = new Prs3d_LineAspect (Quantity_NOC_GREEN, Aspect_TOL_SOLID, 1.0);
1333
5c1f974e 1334 DisplayPoint(aDoc,P1,"P1",false,0.1);
1335 Handle(ISession_Direction) aDirection = new ISession_Direction(P1,D,2);
1336 aDoc->GetAISContext()->Display(aDirection, Standard_False);
1337
1338 Handle(ISession_Direction) aDirection2 = new ISession_Direction(P1,AXDirection,2);
5c573e69 1339 aDirection2->SetText("A.XDirection");
e5b32824 1340 aDirection2->SetLineAspect (anAxesAspect);
5c1f974e 1341 aDoc->GetAISContext()->Display(aDirection2, Standard_False);
1342 Handle(ISession_Direction) aDirection3 = new ISession_Direction(P1,AYDirection,2);
5c573e69 1343 aDirection3->SetText("A.YDirection");
e5b32824 1344 aDirection3->SetLineAspect (anAxesAspect);
5c1f974e 1345 aDoc->GetAISContext()->Display(aDirection3, Standard_False);
1346
1347 DisplayPoint(aDoc,P2,"P2",false,0.1);
1348 Handle(ISession_Direction) aDirection4 = new ISession_Direction(P2,D,2);
1349 aDoc->GetAISContext()->Display(aDirection4, Standard_False);
1350
1351 Handle(ISession_Direction) aDirection5 = new ISession_Direction(P2,A2XDirection,2);
5c573e69 1352 aDirection5->SetText("A2 XDirection");
e5b32824 1353 aDirection5->SetLineAspect (anAxesAspect);
5c1f974e 1354 aDoc->GetAISContext()->Display(aDirection5, Standard_False);
1355 Handle(ISession_Direction) aDirection6 = new ISession_Direction(P2,A2YDirection,2);
5c573e69 1356 aDirection6->SetText("A2 YDirection");
e5b32824 1357 aDirection6->SetLineAspect (anAxesAspect);
5c1f974e 1358 aDoc->GetAISContext()->Display(aDirection6, Standard_False);
1359
1360 Message += "IsDirectA = ";
1361 if(IsDirectA)
1362 Message += "True = Right Handed \n";
1363 else
1364 Message += "False = Left Handed \n";
1365
1366 Message += "IsDirectA2 = ";
1367 if(IsDirectA2)
1368 Message += "True = Right Handed \n";
1369 else
1370 Message += "False = Left Handed \n";
1371
576f8b11 1372 PostProcess(aDoc,ID_BUTTON_Test_19,TheDisplayType,Message);
7fd59977 1373}
1374
1375// Function name : GeomSources::gpTest20
1376// Description :
1377// Return type : void
1378// Argument : CGeometryDoc* aDoc
1379void GeomSources::gpTest20(CGeometryDoc* aDoc)
1380{
5c1f974e 1381 DisplayType TheDisplayType = a2DNo3D;
1382 PreProcess(aDoc,TheDisplayType);
1383 //==============================================================
1384
1385 TColgp_Array1OfPnt2d array (1,5); // sizing array
1386 array.SetValue(1,gp_Pnt2d (0,0));
1387 array.SetValue(2,gp_Pnt2d (1,2));
1388 array.SetValue(3,gp_Pnt2d (2,3));
1389 array.SetValue(4,gp_Pnt2d (4,3));
1390 array.SetValue(5,gp_Pnt2d (5,5));
1391 Handle(Geom2d_BSplineCurve) SPL1 =
1392 Geom2dAPI_PointsToBSpline(array);
7fd59977 1393
5c1f974e 1394 Handle(TColgp_HArray1OfPnt2d) harray =
1395 new TColgp_HArray1OfPnt2d (1,5); // sizing harray
1396 harray->SetValue(1,gp_Pnt2d (7+ 0,0));
1397 harray->SetValue(2,gp_Pnt2d (7+ 1,2));
1398 harray->SetValue(3,gp_Pnt2d (7+ 2,3));
1399 harray->SetValue(4,gp_Pnt2d (7+ 4,3));
1400 harray->SetValue(5,gp_Pnt2d (7+ 5,5));
1401 Geom2dAPI_Interpolate anInterpolation(harray,Standard_False,0.01);
1402 anInterpolation.Perform();
1403 Handle(Geom2d_BSplineCurve) SPL2 = anInterpolation.Curve();
1404
1405 Handle(TColgp_HArray1OfPnt2d) harray2 =
1406 new TColgp_HArray1OfPnt2d (1,5); // sizing harray
1407 harray2->SetValue(1,gp_Pnt2d (11+ 0,0));
1408 harray2->SetValue(2,gp_Pnt2d (11+ 1,2));
1409 harray2->SetValue(3,gp_Pnt2d (11+ 2,3));
1410 harray2->SetValue(4,gp_Pnt2d (11+ 4,3));
1411 harray2->SetValue(5,gp_Pnt2d (11+ 5,5));
1412 Geom2dAPI_Interpolate anInterpolation2(harray2,Standard_True,0.01);
1413 anInterpolation2.Perform();
1414 Handle(Geom2d_BSplineCurve) SPL3 = anInterpolation2.Curve();
1415 // redefined C++ operator allows these assignments
1416
1417 //==============================================================
1418 TCollection_AsciiString Message (" \
7fd59977 1419 \n\
1420TColgp_Array1OfPnt2d array (1,5); // sizing array \n\
1421array.SetValue(1,gp_Pnt2d (0,0)); \n\
1422array.SetValue(2,gp_Pnt2d (1,2)); \n\
1423array.SetValue(3,gp_Pnt2d (2,3)); \n\
1424array.SetValue(4,gp_Pnt2d (4,3)); \n\
1425array.SetValue(5,gp_Pnt2d (5,5)); \n\
1426Handle(Geom2d_BSplineCurve) SPL1 = \n\
1427 Geom2dAPI_PointsToBSpline(array); \n\
1428 \n\
1429Handle(TColgp_HArray1OfPnt2d) harray = \n\
1430 new TColgp_HArray1OfPnt2d (1,5); // sizing harray \n\
1431harray->SetValue(1,gp_Pnt2d (7+ 0,0)); \n\
1432harray->SetValue(2,gp_Pnt2d (7+ 1,2)); \n\
1433harray->SetValue(3,gp_Pnt2d (7+ 2,3)); \n\
1434harray->SetValue(4,gp_Pnt2d (7+ 4,3)); \n\
1435harray->SetValue(5,gp_Pnt2d (7+ 5,5)); \n\
1436Geom2dAPI_Interpolate anInterpolation(harray,Standard_False,0.01); \n\
1437anInterpolation.Perform(); \n\
1438Handle(Geom2d_BSplineCurve) SPL2 = anInterpolation.Curve(); \n\
1439 \n\
1440Handle(TColgp_HArray1OfPnt2d) harray2 = \n\
1441 new TColgp_HArray1OfPnt2d (1,5); // sizing harray \n");
5c1f974e 1442 Message += "\
7fd59977 1443harray2->SetValue(1,gp_Pnt2d (11+ 0,0)); \n\
1444harray2->SetValue(2,gp_Pnt2d (11+ 1,2)); \n\
1445harray2->SetValue(3,gp_Pnt2d (11+ 2,3)); \n\
1446harray2->SetValue(4,gp_Pnt2d (11+ 4,3)); \n\
1447harray2->SetValue(5,gp_Pnt2d (11+ 5,5)); \n\
1448Geom2dAPI_Interpolate anInterpolation2(harray2,Standard_True,0.01); \n\
1449anInterpolation2.Perform(); \n\
1450Handle(Geom2d_BSplineCurve) SPL3 = anInterpolation2.Curve(); \n\
1451// redefined C++ operator allows these assignments \n\
1452 \n";
5c1f974e 1453 AddSeparator(aDoc,Message);
1454 //--------------------------------------------------------------
1455 TCollection_AsciiString aString;
e0280ce9 1456 for(int i = array.Lower();i<=array.Upper();i++)
5c1f974e 1457 {
1458 gp_Pnt2d P = array(i);
1459 TCollection_AsciiString Message2 (i);
1460 aString = "array ";aString += Message2;
1461 DisplayPoint(aDoc,P,aString.ToCString(),false,0.5);
1462 }
1463 for( int i = harray->Lower();i<=harray->Upper();i++)
1464 {
1465 gp_Pnt2d P = harray->Value(i);
1466 TCollection_AsciiString Message2 (i);
1467 aString = "harray ";aString += Message2;
1468 DisplayPoint(aDoc,P,aString.ToCString(),false,0.5);
1469 }
e0280ce9 1470 for( int i = harray2->Lower();i<=harray2->Upper();i++)
5c1f974e 1471 {
1472 gp_Pnt2d P = harray2->Value(i);
1473 TCollection_AsciiString Message2 (i);
1474 aString = "harray2 ";aString += Message2;
1475 DisplayPoint(aDoc,P,aString.ToCString(),false,0.5);
1476 }
1477
1478 if (!SPL1.IsNull())
1479 {
1480 Handle(ISession2D_Curve) aCurve = new ISession2D_Curve(SPL1);
1481 aCurve->SetColorIndex(3);
1482 aDoc->GetISessionContext()->Display(aCurve, Standard_False);
1483 }
1484 else
576f8b11 1485 MessageBoxW (AfxGetApp()->m_pMainWnd->m_hWnd, L"SPL1.IsNull()", L"CasCade Error", MB_ICONERROR);
7fd59977 1486
5c1f974e 1487 if (!SPL2.IsNull())
1488 {
1489 Handle(ISession2D_Curve) aCurve2 = new ISession2D_Curve(SPL2);
1490 aCurve2->SetColorIndex(5);
1491 aDoc->GetISessionContext()->Display(aCurve2, Standard_False);
1492 }
1493 else
576f8b11 1494 MessageBoxW (AfxGetApp()->m_pMainWnd->m_hWnd, L"SPL2.IsNull()", L"CasCade Error", MB_ICONERROR);
7fd59977 1495
5c1f974e 1496 if (!SPL3.IsNull())
1497 {
1498 Handle(ISession2D_Curve) aCurve2 = new ISession2D_Curve(SPL3);
1499 aCurve2->SetColorIndex(6);
1500 aDoc->GetISessionContext()->Display(aCurve2, Standard_False);
1501 }
1502 else
576f8b11 1503 MessageBoxW (AfxGetApp()->m_pMainWnd->m_hWnd, L"SPL3.IsNull()", L"CasCade Error", MB_ICONERROR);
5c1f974e 1504
1505 Message += " SPL1 is Red \n";
1506 Message += " SPL2 is Blue \n";
1507 Message += " SPL3 is Yellow \n";
1508
576f8b11 1509 PostProcess(aDoc,ID_BUTTON_Test_20,TheDisplayType,Message);
7fd59977 1510}
1511
1512void GeomSources::gpTest21(CGeometryDoc* aDoc)
1513{
5c1f974e 1514 DisplayType TheDisplayType = a2DNo3D;
1515 PreProcess(aDoc,TheDisplayType);
1516
1517 //==============================================================
1518
1519 gp_Pnt2d P1(-184, 101);
1520 gp_Pnt2d P2(20 ,84);
1521 Standard_Real aheight = 1;
1522 FairCurve_Batten B (P1,P2,aheight);
1523 B.SetAngle1(22*M_PI/180);
1524 B.SetAngle2(44*M_PI/180);
1525 FairCurve_AnalysisCode anAnalysisCode;
1526 B.Compute(anAnalysisCode);
1527 Handle(Geom2d_BSplineCurve) C = B.Curve();
1528
1529 //==============================================================
1530 TCollection_AsciiString Message (" \
1531 \n\
1532gp_Pnt2d P1(-184, 101); \n\
7fd59977 1533gp_Pnt2d P2(20 ,84); \n\
1534Standard_Real aheight = 1; \n\
1535FairCurve_Batten B (P1,P2,aheight); \n\
1536B.SetAngle1(22*PI180); \n\
1537B.SetAngle2(44*PI180); \n\
1538FairCurve_AnalysisCode anAnalysisCode; \n\
1539B.Compute(anAnalysisCode); \n\
1540Handle(Geom2d_BSplineCurve) C = B.Curve(); \n\
1541 \n");
5c1f974e 1542 AddSeparator(aDoc,Message);
1543 //--------------------------------------------------------------
7fd59977 1544
5c1f974e 1545 DisplayCurveAndCurvature(aDoc,C,6,Standard_False);
7fd59977 1546
576f8b11 1547 PostProcess(aDoc,ID_BUTTON_Test_21,TheDisplayType,Message);
7fd59977 1548}
1549
1550void GeomSources::gpTest22(CGeometryDoc* aDoc)
1551{
5c1f974e 1552 DisplayType TheDisplayType = a2DNo3D;
1553 PreProcess(aDoc,TheDisplayType);
1554
1555 //==============================================================
7fd59977 1556
5c1f974e 1557 gp_Pnt2d P1(-184, 41);
1558 gp_Pnt2d P2(20 ,24);
1559 Standard_Real aheight = 1;
1560 FairCurve_MinimalVariation MV (P1,P2,aheight);
1561 MV.SetAngle1(22*M_PI/180);
1562 MV.SetAngle2(44*M_PI/180);
1563
1564 FairCurve_AnalysisCode anAnalysisCode;
1565 MV.Compute(anAnalysisCode);
1566
1567 Handle(Geom2d_BSplineCurve) C = MV.Curve();
1568
1569 //==============================================================
1570 TCollection_AsciiString Message (" \
7fd59977 1571 \n\
1572gp_Pnt2d P1(-184, 41); \n\
1573gp_Pnt2d P2(20 ,24); \n\
1574Standard_Real aheight = 1; \n\
1575FairCurve_MinimalVariation MV (P1,P2,aheight); \n\
1576MV.SetAngle1(22*PI180); \n\
1577MV.SetAngle2(44*PI180); \n\
1578 \n\
1579FairCurve_AnalysisCode anAnalysisCode; \n\
1580MV.Compute(anAnalysisCode); \n\
1581 \n\
1582Handle(Geom2d_BSplineCurve) C = MV.Curve(); \n\
1583 \n");
5c1f974e 1584 AddSeparator(aDoc,Message);
1585 //--------------------------------------------------------------
7fd59977 1586
5c1f974e 1587 DisplayCurveAndCurvature(aDoc,C,7,Standard_False);
1588 DisplayPoint(aDoc,P1,"P1",false,0.5);
1589 DisplayPoint(aDoc,P2,"P2",false,0.5);
7fd59977 1590
576f8b11 1591 PostProcess(aDoc,ID_BUTTON_Test_22,TheDisplayType,Message);
7fd59977 1592}
1593
7fd59977 1594// Function name : GeomSources::gpTest23
1595// Description :
1596// Return type : void
1597// Argument : CGeometryDoc* aDoc
1598void GeomSources::gpTest23(CGeometryDoc* aDoc)
1599{
5c1f974e 1600 DisplayType TheDisplayType = a2DNo3D;
1601 PreProcess(aDoc,TheDisplayType);
1602 //==============================================================
1603
1604 Standard_Real major = 12;
1605 Standard_Real minor = 4;
1606 gp_Ax2d axis = gp::OX2d();
1607 Handle(Geom2d_Ellipse) E = GCE2d_MakeEllipse (axis,major,minor);
1608 Handle(Geom2d_TrimmedCurve) TC = new Geom2d_TrimmedCurve(E,-1,2);
1609
1610 // The segment goes in the direction Vfrom P1
1611 // to the point projected on this line by P2
1612 // In the example (0,6).
1613 Handle(Geom2d_BSplineCurve) SPL =
1614 Geom2dConvert::CurveToBSplineCurve(TC);
1615
1616 //==============================================================
1617 TCollection_AsciiString Message (" \
7fd59977 1618 \n\
1619Standard_Real major = 12; \n\
1620Standard_Real minor = 4; \n\
1621gp_Ax2d axis = gp::OX2d(); \n\
1622Handle(Geom2d_Ellipse) E = GCE2d_MakeEllipse (axis,major,minor); \n\
1623 \n\
1624Handle(Geom2d_TrimmedCurve) TC = new Geom2d_TrimmedCurve(E,-1,2); \n\
1625 \n\
1626// The segment goes in the direction Vfrom P1 \n\
1627// to the point projected on this line by P2 \n\
1628// In the example (0,6). \n\
1629Handle(Geom2d_BSplineCurve) SPL = \n\
1630 Geom2dConvert::CurveToBSplineCurve(TC); \n\
1631 \n");
5c1f974e 1632 AddSeparator(aDoc,Message);
1633 //--------------------------------------------------------------
7fd59977 1634
5c1f974e 1635 Handle(ISession2D_Curve) aCurve = new ISession2D_Curve(E);
1636 aCurve->SetColorIndex(3); // Red
1637 aCurve->SetTypeOfLine(Aspect_TOL_DOTDASH);
1638 aDoc->GetISessionContext()->Display(aCurve, Standard_False);
7fd59977 1639
5c1f974e 1640 Handle(ISession2D_Curve) aCurve2 = new ISession2D_Curve(SPL);
1641 aDoc->GetISessionContext()->Display(aCurve2, Standard_False);
7fd59977 1642
576f8b11 1643 PostProcess(aDoc,ID_BUTTON_Test_23,TheDisplayType,Message);
7fd59977 1644}
1645
7fd59977 1646// Function name : GeomSources::gpTest24
1647// Description :
1648// Return type : void
1649// Argument : CGeometryDoc* aDoc
1650void GeomSources::gpTest24(CGeometryDoc* aDoc)
1651{
5c1f974e 1652 DisplayType TheDisplayType = a2D3D;
1653 PreProcess(aDoc,TheDisplayType);
1654 //==============================================================
1655
1656 Standard_Real radius = 5;
1657 gp_Ax2d ax2d(gp_Pnt2d(2,3),gp_Dir2d(1,0));
1658
1659 Handle(Geom2d_Circle) circ2d =
1660 new Geom2d_Circle(ax2d,radius);
1661
1662 gp_Ax2d circ2dXAxis = circ2d->XAxis();
1663
1664 // create a 3D curve in a given plane
1665 Handle(Geom_Curve) C3D =
1666 GeomAPI::To3d(circ2d,gp_Pln(gp_Ax3(gp::XOY())));
1667 Handle(Geom_Circle) C3DCircle =
1668 Handle(Geom_Circle)::DownCast(C3D);
1669
1670 gp_Ax1 C3DCircleXAxis = C3DCircle->XAxis();
1671
1672 // project it to a 2D curve in another plane
1673
1674 gp_Pln ProjectionPlane(gp_Pnt(1,1,0),gp_Dir( 1,1,1 ));
1675
1676 Handle(Geom2d_Curve) C2D =
1677 GeomAPI::To2d(C3D,ProjectionPlane);
1678
1679 Handle(Geom2d_Circle) C2DCircle =
1680 Handle(Geom2d_Circle)::DownCast(C2D);
1681 gp_Ax2d C2DCircleXAxis = C2DCircle->XAxis();
1682
1683 //==============================================================
1684 TCollection_AsciiString Message (" \
7fd59977 1685 \n\
1686Standard_Real radius = 5; \n\
1687gp_Ax2d ax2d(gp_Pnt2d(2,3),gp_Dir2d(1,0)); \n\
1688 \n\
1689Handle(Geom2d_Circle) circ2d = \n\
1690 new Geom2d_Circle(ax2d,radius); \n\
1691 \n\
1692gp_Ax2d circ2dXAxis = circ2d->XAxis(); \n\
1693 \n\
1694// create a 3D curve in a given plane \n\
1695Handle(Geom_Curve) C3D = \n\
1696 GeomAPI::To3d(circ2d,gp_Pln(gp_Ax3(gp::XOY()))); \n\
1697Handle(Geom_Circle) C3DCircle = \n\
1698 Handle(Geom_Circle)::DownCast(C3D); \n\
1699 \n\
1700gp_Ax1 C3DCircleXAxis = C3DCircle->XAxis(); \n\
1701 \n\
1702// project it to a 2D curve in another plane \n\
1703 \n\
1704gp_Pln ProjectionPlane(gp_Pnt(1,1,0),gp_Dir( 1,1,1 )); \n\
1705 \n\
1706Handle(Geom2d_Curve) C2D = \n\
1707 GeomAPI::To2d(C3D,ProjectionPlane); \n\
1708 \n\
1709Handle(Geom2d_Circle) C2DCircle = \n\
1710 Handle(Geom2d_Circle)::DownCast(C2D); \n\
1711gp_Ax2d C2DCircleXAxis = C2DCircle->XAxis(); \n\
1712 \n");
5c1f974e 1713 AddSeparator(aDoc,Message);
1714 //--------------------------------------------------------------
1715 Handle(Geom_Plane) aPlane = GC_MakePlane(gp_Pln(gp_Ax3(gp::XOY()))).Value();
1716 Handle(Geom_RectangularTrimmedSurface) aSurface= new Geom_RectangularTrimmedSurface(aPlane,-8.,8.,-12.,12.);
1717 DisplaySurface(aDoc,aSurface);
1718
1719 Handle(Geom_Plane) aProjectionPlane = GC_MakePlane(ProjectionPlane).Value();
1720 Handle(Geom_RectangularTrimmedSurface) aProjectionPlaneSurface=
1721 new Geom_RectangularTrimmedSurface(aProjectionPlane,-8.,8.,-12.,12.);
1722
1723 DisplaySurface(aDoc,aProjectionPlaneSurface);
1724
1725 Standard_CString aC3DEntityTypeName = C3D->DynamicType()->Name();
1726 Standard_CString aC2DEntityTypeName = C2D->DynamicType()->Name();
1727
1728 Message += " C3D->DynamicType()->Name() = ";
1729 Message += aC3DEntityTypeName; Message += " \n";
1730 Message += " C2D->DynamicType()->Name() = ";
1731 Message += aC2DEntityTypeName; Message += " \n";
1732
1733 DisplayCurve(aDoc,circ2d,4,false);
e91fd025 1734 DisplayCurve(aDoc,C3D,Quantity_NOC_YELLOW,false);
5c1f974e 1735 DisplayCurve(aDoc,C2D,5,false);
1736
5c573e69 1737 Handle(ISession_Direction) aC3DCircleXAxisDirection = new ISession_Direction(C3DCircleXAxis.Location(),C3DCircleXAxis.Direction(),5.2);
5c1f974e 1738 aDoc->GetAISContext()->Display(aC3DCircleXAxisDirection, Standard_False);
1739
5c573e69 1740 Handle(ISession_Direction) acirc2dXAxisDirection = new ISession_Direction(circ2dXAxis.Location(),circ2dXAxis.Direction(),5.2);
5c1f974e 1741 aDoc->GetISessionContext()->Display(acirc2dXAxisDirection, Standard_False);
1742
5c573e69 1743 Handle(ISession_Direction) aC2DCircleXAxisDirection = new ISession_Direction(C2DCircleXAxis.Location(),C2DCircleXAxis.Direction(),5.2);
5c1f974e 1744 aDoc->GetISessionContext()->Display(aC2DCircleXAxisDirection, Standard_False);
1745
576f8b11 1746 PostProcess(aDoc,ID_BUTTON_Test_24,TheDisplayType,Message);
7fd59977 1747}
1748
7fd59977 1749// Function name : GeomSources::gpTest25
1750// Description :
1751// Return type : void
1752// Argument : CGeometryDoc* aDoc
1753void GeomSources::gpTest25(CGeometryDoc* aDoc)
1754{
5c1f974e 1755 DisplayType TheDisplayType = a2DNo3D;
1756 PreProcess(aDoc,TheDisplayType);
1757
1758 //==============================================================
1759
1760 Handle(TColgp_HArray1OfPnt2d) harray =
1761 new TColgp_HArray1OfPnt2d (1,5); // sizing harray
1762 harray->SetValue(1,gp_Pnt2d (0,0));
1763 harray->SetValue(2,gp_Pnt2d (-3,1));
1764 harray->SetValue(3,gp_Pnt2d (-2,5));
1765 harray->SetValue(4,gp_Pnt2d (2,9));
1766 harray->SetValue(5,gp_Pnt2d (-4,14));
1767
1768Geom2dAPI_Interpolate anInterpolation(harray,Standard_False,0.01);
1769anInterpolation.Perform();
1770Handle(Geom2d_BSplineCurve) SPL = anInterpolation.Curve();
1771
1772gp_Pnt2d P1(-1,-2);
1773gp_Pnt2d P2(0,15);
1774gp_Dir2d V1 = gp::DY2d();
1775Handle(Geom2d_TrimmedCurve) TC1 =
1776 GCE2d_MakeSegment(P1,V1,P2);
1777
1778Standard_Real tolerance = Precision::Confusion();
1779Geom2dAPI_InterCurveCurve ICC (SPL,TC1,tolerance);
1780Standard_Integer NbPoints =ICC.NbPoints();
1781gp_Pnt2d PK;
1782
1783for (Standard_Integer k = 1;k<=NbPoints;k++)
1784{
1785 PK = ICC.Point(k);
1786 // do something with each intersection point
1787}
1788
1789 //==============================================================
1790 TCollection_AsciiString Message (" \
7fd59977 1791 \n\
1792Handle(TColgp_HArray1OfPnt2d) harray = \n\
1793 new TColgp_HArray1OfPnt2d (1,5); // sizing harray \n\
1794harray->SetValue(1,gp_Pnt2d (0,0)); \n\
1795harray->SetValue(2,gp_Pnt2d (-3,1)); \n\
1796harray->SetValue(3,gp_Pnt2d (-2,5)); \n\
1797harray->SetValue(4,gp_Pnt2d (2,9)); \n\
1798harray->SetValue(5,gp_Pnt2d (-4,14)); \n\
1799 \n\
1800Geom2dAPI_Interpolate anInterpolation(harray,Standard_False,0.01); \n\
1801anInterpolation.Perform(); \n\
1802Handle(Geom2d_BSplineCurve) SPL = anInterpolation.Curve(); \n\
1803 \n\
1804gp_Pnt2d P1(-1,-2); \n\
1805gp_Pnt2d P2(0,15); \n\
1806gp_Dir2d V1 = gp::DY2d(); \n\
1807Handle(Geom2d_TrimmedCurve) TC1= \n\
1808 GCE2d_MakeSegment(P1,V1,P2); \n\
1809 \n\
1810Standard_Real tolerance = Precision::Confusion(); \n\
1811Geom2dAPI_InterCurveCurve ICC (SPL,TC1,tolerance); \n\
1812Standard_Integer NbPoints =ICC.NbPoints(); \n\
1813gp_Pnt2d PK; \n\
1814for (Standard_Integer k = 1;k<=NbPoints;k++) \n\
1815 { \n\
1816 PK = ICC.Point(k); \n\
1817 // do something with each intersection point \n\
1818 } \n\
1819 \n");
5c1f974e 1820 AddSeparator(aDoc,Message);
1821 //--------------------------------------------------------------
1822
1823 Handle(ISession2D_Curve) aCurve1 = new ISession2D_Curve(SPL);
1824 aCurve1->SetDisplayPole(Standard_False);
1825 aDoc->GetISessionContext()->Display(aCurve1, Standard_False);
1826 Handle(ISession2D_Curve) aCurve2 = new ISession2D_Curve(TC1);
1827 aDoc->GetISessionContext()->Display(aCurve2, Standard_False);
1828
1829 TCollection_AsciiString aString;
1830 for (Standard_Integer i = 1;i<=NbPoints;i++)
1831 {
1832 PK = ICC.Point(i);
1833 // do something with each intersection point
1834 TCollection_AsciiString Message2 (i);
1835 TCollection_AsciiString Message3 (PK.X());
1836 TCollection_AsciiString Message4 (PK.Y());
1837 aString = "PK_";
1838 aString += Message2;
1839
1840 DisplayPoint(aDoc,PK,aString.ToCString(),false,0.5);
1841
1842 Message += "PK_";
1843 Message += Message2;
1844 Message += " ( ";
1845 Message += Message3;
1846 Message += " , ";
1847 Message += Message4;
1848 Message += " )\n";
1849 }
1850
576f8b11 1851 PostProcess(aDoc,ID_BUTTON_Test_25,TheDisplayType,Message);
7fd59977 1852}
1853
1854// Function name : GeomSources::gpTest26
1855// Description :
1856// Return type : void
1857// Argument : CGeometryDoc* aDoc
1858void GeomSources::gpTest26(CGeometryDoc* aDoc)
1859{
5c1f974e 1860 DisplayType TheDisplayType = a2DNo3D;
1861 PreProcess(aDoc,TheDisplayType);
1862
1863 //==============================================================
1864
1865 //----------- Build TC1 -----------------------
1866 gp_Pnt2d P1(0,0); gp_Pnt2d P2(2,6);
1867 gp_Dir2d V1 = gp::DY2d();
1868 Handle(Geom2d_TrimmedCurve) TC1 = GCE2d_MakeSegment(P1,V1,P2);
1869 Standard_Real FP1 = TC1->FirstParameter();
1870 Standard_Real LP1 = TC1->LastParameter();
1871 //----------- Build TC2 -----------------------
1872 gp_Pnt2d P3(-9,6.5); gp_Dir2d V2 = gp::DX2d();
1873 Handle(Geom2d_TrimmedCurve) TC2 = GCE2d_MakeSegment(P3,V2,P2);
1874 Standard_Real FP2 = TC1->FirstParameter();
1875 Standard_Real LP2 = TC1->LastParameter();
1876 //----------- Extrema TC1 / TC2 ---------------
1877 Geom2dAPI_ExtremaCurveCurve ECC (TC1,TC2, FP1,LP1, FP2,LP2);
1878 Standard_Real shortestdistance =-1;
1879 if (ECC.NbExtrema() != 0) shortestdistance = ECC.LowerDistance();
1880 //----------- Build SPL1 ----------------------
1881 TColgp_Array1OfPnt2d array (1,5); // sizing array
1882 array.SetValue(1,gp_Pnt2d (-4,0)); array.SetValue(2,gp_Pnt2d (-7,2));
1883 array.SetValue(3,gp_Pnt2d (-6,3)); array.SetValue(4,gp_Pnt2d (-4,3));
1884 array.SetValue(5,gp_Pnt2d (-3,5));
1885 Handle(Geom2d_BSplineCurve) SPL1 = Geom2dAPI_PointsToBSpline(array);
1886 Standard_Real FPSPL1 = SPL1->FirstParameter();
1887 Standard_Real LPSPL1 = SPL1->LastParameter();
1888 //----------- Extrema TC1 / SPL1 -------------
1889 Geom2dAPI_ExtremaCurveCurve ECC2 (TC1,SPL1, FP1,LP1, FPSPL1,LPSPL1);
1890 Standard_Real SPL1shortestdistance =-1;
1891 if (ECC2.NbExtrema()!=0) SPL1shortestdistance = ECC2.LowerDistance();
1892 Standard_Integer NbExtrema = ECC2.NbExtrema();
1893 TColgp_Array2OfPnt2d aSolutionArray(1,NbExtrema,1,2);
1894 for(int i=1;i <= NbExtrema; i++)
1895 {
e0280ce9 1896 gp_Pnt2d P1x,P2x;
1897 ECC2.Points(i,P1x,P2x);
1898 aSolutionArray(i,1) = P1x;
1899 aSolutionArray(i,2) = P2x;
5c1f974e 1900 }
1901
1902 //==============================================================
1903 TCollection_AsciiString Message (" \
7fd59977 1904//----------- Build TC1 ----------------------- \n\
1905gp_Pnt2d P1(0,0); gp_Pnt2d P2(2,6); \n\
1906gp_Dir2d V1 = gp::DY2d(); \n\
1907Handle(Geom2d_TrimmedCurve) TC1 = GCE2d_MakeSegment(P1,V1,P2); \n\
1908Standard_Real FP1 = TC1->FirstParameter(); \n\
1909Standard_Real LP1 = TC1->LastParameter(); \n\
1910//----------- Build TC2 ----------------------- \n\
1911gp_Pnt2d P3(-9,6.5); gp_Dir2d V2 = gp::DX2d(); \n\
1912Handle(Geom2d_TrimmedCurve) TC2 = GCE2d_MakeSegment(P3,V2,P2); \n\
1913Standard_Real FP2 = TC1->FirstParameter(); \n\
1914Standard_Real LP2 = TC1->LastParameter(); \n\
1915//----------- Extrema TC1 / TC2 --------------- \n\
1916Geom2dAPI_ExtremaCurveCurve ECC (TC1,TC2, FP1,LP1, FP2,LP2); \n\
1917Standard_Real shortestdistance =-1; \n\
1918if (ECC.NbExtrema() != 0) shortestdistance = ECC.LowerDistance(); \n\
1919//----------- Build SPL1 ---------------------- \n\
1920TColgp_Array1OfPnt2d array (1,5); // sizing array \n\
1921array.SetValue(1,gp_Pnt2d (-4,0)); array.SetValue(2,gp_Pnt2d (-7,2)); \n\
1922array.SetValue(3,gp_Pnt2d (-6,3)); array.SetValue(4,gp_Pnt2d (-4,3)); \n\
1923array.SetValue(5,gp_Pnt2d (-3,5)); \n\
1924Handle(Geom2d_BSplineCurve) SPL1 = Geom2dAPI_PointsToBSpline(array); \n\
1925Standard_Real FPSPL1 = SPL1->FirstParameter(); \n");
1926Message += "\
1927Standard_Real LPSPL1 = SPL1->LastParameter(); \n\
1928//----------- Extrema TC1 / SPL1 ------------- \n\
1929Geom2dAPI_ExtremaCurveCurve ECC2 (TC1,SPL1, FP1,LP1, FPSPL1,LPSPL1); \n\
1930Standard_Real SPL1shortestdistance =-1; \n\
1931if (ECC2.NbExtrema()!=0) SPL1shortestdistance = ECC2.LowerDistance(); \n\
1932Standard_Integer NbExtrema = ECC2.NbExtrema(); \n\
1933TColgp_Array2OfPnt2d aSolutionArray(1,NbExtrema,1,2); \n\
1934for(int i=1;i <= NbExtrema; i++) { \n\
1935 gp_Pnt2d P1,P2; \n\
1936 ECC2.Points(i,P1,P2); \n\
1937 aSolutionArray(i,1) = P1; aSolutionArray(i,2) = P2; } \n";
5c1f974e 1938 AddSeparator(aDoc,Message);
1939 //--------------------------------------------------------------
1940
1941 TCollection_AsciiString aString;
1942 for(int i = array.Lower();i<=array.Upper();i++)
1943 {
1944 TCollection_AsciiString Message2 (i);
1945 gp_Pnt2d P = array(i);
1946 aString = "array ";
1947 aString += Message2;
1948 DisplayPoint(aDoc,P,aString.ToCString(),false,0.5);
1949 }
1950
1951 if (!SPL1.IsNull())
1952 {
1953 Handle(ISession2D_Curve) aCurve = new ISession2D_Curve(SPL1);
1954 aCurve->SetDisplayPole(Standard_False);
1955 aCurve->SetColorIndex(3);
1956 aDoc->GetISessionContext()->Display(aCurve, Standard_False);
1957 }
1958 else
576f8b11 1959 MessageBoxW (AfxGetApp()->m_pMainWnd->m_hWnd, L"SPL1.IsNull()", L"CasCade Error", MB_ICONERROR);
5c1f974e 1960
1961 Handle(ISession2D_Curve) aCurve1 = new ISession2D_Curve(TC1);
1962 aCurve1->SetColorIndex(6);
1963 aDoc->GetISessionContext()->Display(aCurve1, Standard_False);
1964 Handle(ISession2D_Curve) aCurve2 = new ISession2D_Curve(TC2);
1965 aCurve2->SetColorIndex(5);
1966 aDoc->GetISessionContext()->Display(aCurve2, Standard_False);
1967
1968 for(int i=1;i <= NbExtrema; i++)
1969 {
e0280ce9 1970 gp_Pnt2d P1x =aSolutionArray(i,1);
5c1f974e 1971
1972 TCollection_AsciiString Message2 (i);
1973 aString = "P1_";
1974 aString += Message2;
e0280ce9 1975 DisplayPoint(aDoc,P1x,aString.ToCString(),false,0.7*i);
5c1f974e 1976
e0280ce9 1977 gp_Pnt2d P2x = aSolutionArray(i,2);
5c1f974e 1978
1979 Handle(Geom2d_TrimmedCurve) SolutionCurve =
e0280ce9 1980 GCE2d_MakeSegment(P1x,P2x);
5c1f974e 1981 Handle(ISession2D_Curve) aSolutionCurve = new ISession2D_Curve(SolutionCurve);
1982 aDoc->GetISessionContext()->Display(aSolutionCurve, Standard_False);
1983 }
1984
1985 Message += "TC1 is Yellow ,TC2 is Blue ,SPL1 is Red \n";
1986 Message += "ECC.NbExtrema() = ";
1987 Message += ECC.NbExtrema();
1988 Message += " shortestdistance = ";
1989 Message+= shortestdistance;
1990 Message += "\n";
1991 Message += "ECC2.NbExtrema() = ";
1992 Message += NbExtrema;
1993 Message += " SPL1shortestdistance = ";
1994 Message+= SPL1shortestdistance;
1995 Message += "\n";
1996
576f8b11 1997 PostProcess(aDoc,ID_BUTTON_Test_26,TheDisplayType,Message);
7fd59977 1998}
1999
2000// Function name : GeomSources::gpTest27
2001// Description :
2002// Return type : void
2003// Argument : CGeometryDoc* aDoc
2004void GeomSources::gpTest27(CGeometryDoc* aDoc)
2005{
5c1f974e 2006 DisplayType TheDisplayType = a2DNo3D;
2007 PreProcess(aDoc,TheDisplayType);
2008 //==============================================================
2009
2010 TColgp_Array1OfPnt2d array (1,5); // sizing array
2011 array.SetValue(1,gp_Pnt2d (-4,0)); array.SetValue(2,gp_Pnt2d (-7,2));
2012 array.SetValue(3,gp_Pnt2d (-6,3)); array.SetValue(4,gp_Pnt2d (-4,3));
2013 array.SetValue(5,gp_Pnt2d (-3,5));
2014 Handle(Geom2d_BSplineCurve) SPL1 = Geom2dAPI_PointsToBSpline(array);
2015
2016 Standard_Real dist = 1;
2017 Handle(Geom2d_OffsetCurve) OC =
2018 new Geom2d_OffsetCurve(SPL1,dist);
2019 Standard_Boolean result = OC->IsCN(2);
2020 Standard_Real dist2 = 1.5;
2021 Handle(Geom2d_OffsetCurve) OC2 =
2022 new Geom2d_OffsetCurve(SPL1,dist2);
2023 Standard_Boolean result2 = OC2->IsCN(2);
2024
2025 //==============================================================
2026 TCollection_AsciiString Message (" \
7fd59977 2027 \n\
2028TColgp_Array1OfPnt2d array (1,5); // sizing array \n\
2029array.SetValue(1,gp_Pnt2d (-4,0)); array.SetValue(2,gp_Pnt2d (-7,2)); \n\
2030array.SetValue(3,gp_Pnt2d (-6,3)); array.SetValue(4,gp_Pnt2d (-4,3)); \n\
2031array.SetValue(5,gp_Pnt2d (-3,5)); \n\
2032Handle(Geom2d_BSplineCurve) SPL1 = Geom2dAPI_PointsToBSpline(array); \n\
2033 \n\
2034Standard_Real dist = 1; \n\
2035Handle(Geom2d_OffsetCurve) OC = \n\
2036 new Geom2d_OffsetCurve(SPL1,dist); \n\
2037Standard_Boolean result = OC->IsCN(2); \n\
2038 \n\
2039Standard_Real dist2 = 1.5; \n\
2040Handle(Geom2d_OffsetCurve) OC2 = \n\
2041 new Geom2d_OffsetCurve(SPL1,dist2); \n\
2042Standard_Boolean result2 = OC2->IsCN(2); \n\
2043 \n");
5c1f974e 2044 AddSeparator(aDoc,Message);
2045 //--------------------------------------------------------------
2046 Handle(ISession2D_Curve) aCurve1 = new ISession2D_Curve(SPL1);
2047 aCurve1->SetColorIndex(6);
2048 aDoc->GetISessionContext()->Display(aCurve1, Standard_False);
2049 Handle(ISession2D_Curve) aCurve2 = new ISession2D_Curve(OC);
2050 aCurve2->SetColorIndex(5);
2051 aDoc->GetISessionContext()->Display(aCurve2, Standard_False);
2052 Handle(ISession2D_Curve) aCurve3 = new ISession2D_Curve(OC2);
2053 aCurve3->SetColorIndex(3);
2054 aDoc->GetISessionContext()->Display(aCurve3, Standard_False);
2055
2056
2057 Message += "SPL1 is Yellow \n";
2058 Message += "OC is Blue \n";
2059 Message += "OC2 is Red \n\n";
2060 Message += " Warning, Continuity is not guaranteed : \n ";
2061 if(result)
2062 Message += " result = True \n";
2063 else
2064 Message += " result = False \n";
2065 if(result2)
2066 Message += " result2 = True \n";
2067 else
2068 Message += " result2 = False \n";
2069
576f8b11 2070 PostProcess(aDoc,ID_BUTTON_Test_27,TheDisplayType,Message);
7fd59977 2071}
2072
2073// Function name : GeomSources::gpTest28
2074// Description :
2075// Return type : void
2076// Argument : CGeometryDoc* aDoc
2077void GeomSources::gpTest28(CGeometryDoc* aDoc)
2078{
5c1f974e 2079 DisplayType TheDisplayType = a2DNo3D;
2080 PreProcess(aDoc,TheDisplayType);
2081 //==============================================================
2082
2083 gp_Pnt2d P1(1,2);
2084 gp_Pnt2d P2(4,5);
2085 gp_Lin2d L = gce_MakeLin2d(P1,P2);
2086 // assignment by overloaded operator
2087
2088 //==============================================================
2089 TCollection_AsciiString Message (" \
7fd59977 2090 \n\
2091gp_Pnt2d P1(1,2); \n\
2092gp_Pnt2d P2(4,5); \n\
2093gp_Lin2d L = gce_MakeLin2d(P1,P2); \n\
2094// assignment by overloaded operator \n\
2095 \n");
5c1f974e 2096 AddSeparator(aDoc,Message);
2097 //--------------------------------------------------------------
7fd59977 2098
5c1f974e 2099 DisplayPoint(aDoc,P1,"P1",false,0.5);
2100 DisplayPoint(aDoc,P2,"P2",false,0.5);
7fd59977 2101
5c1f974e 2102 Handle(Geom2d_TrimmedCurve) aLine = GCE2d_MakeSegment(L,-3,8);
2103 Handle(ISession2D_Curve) aCurve = new ISession2D_Curve(aLine);
2104 aDoc->GetISessionContext()->Display(aCurve, Standard_False);
2105
576f8b11 2106 PostProcess(aDoc,ID_BUTTON_Test_28,TheDisplayType,Message);
7fd59977 2107}
2108
2109// Function name : GeomSources::gpTest29
2110// Description :
2111// Return type : void
2112// Argument : CGeometryDoc* aDoc
2113void GeomSources::gpTest29(CGeometryDoc* aDoc)
2114{
5c1f974e 2115 DisplayType TheDisplayType = a2DNo3D;
2116 PreProcess(aDoc,TheDisplayType);
2117
2118 //==============================================================
7fd59977 2119
5c1f974e 2120 gp_Pnt2d P1(1,2);
2121 gp_Pnt2d P2(4,5);
2122 gp_Lin2d L;
2123 GccAna_Pnt2dBisec B(P1,P2);
2124 if (B.IsDone())
2125 {
2126 L = B.ThisSolution();
2127 }
2128
2129 //==============================================================
2130 TCollection_AsciiString Message (" \
7fd59977 2131 \n\
2132gp_Pnt2d P1(1,2); \n\
2133gp_Pnt2d P2(4,5); \n\
2134gp_Lin2d L; \n\
2135GccAna_Pnt2dBisec B(P1,P2); \n\
2136if (B.IsDone()) \n\
2137 { \n\
2138 L = B.ThisSolution(); \n\
2139 } \n\
2140 \n");
5c1f974e 2141 AddSeparator(aDoc,Message);
2142 //--------------------------------------------------------------
7fd59977 2143
5c1f974e 2144 DisplayPoint(aDoc,P1,"P1",false,0.5);
2145 DisplayPoint(aDoc,P2,"P2",false,0.5);
7fd59977 2146
5c1f974e 2147 if (B.IsDone())
2148 {
2149 Handle(Geom2d_TrimmedCurve) aLine = GCE2d_MakeSegment(L,-8,8);
2150 Handle(ISession2D_Curve) aCurve = new ISession2D_Curve(aLine);
2151 aDoc->GetISessionContext()->Display(aCurve, Standard_False);
2152 }
7fd59977 2153
5c1f974e 2154 if (B.IsDone()) Message += " \n B Is Done ";
2155 else Message += " \n B Is not Done ";
576f8b11 2156 PostProcess(aDoc,ID_BUTTON_Test_29,TheDisplayType,Message);
7fd59977 2157}
2158
2159// Function name : GeomSources::gpTest30
2160// Description :
2161// Return type : void
2162// Argument : CGeometryDoc* aDoc
2163void GeomSources::gpTest30(CGeometryDoc* aDoc)
2164{
5c1f974e 2165 DisplayType TheDisplayType =a2DNo3D ;
2166 PreProcess(aDoc,TheDisplayType);
2167
2168 //==============================================================
2169
2170 gp_Pnt2d P1 (2,3);
2171 gp_Pnt2d P2 (4,4);
2172 gp_Pnt2d P3 (6,7);
2173 gp_Pnt2d P4 (10,10);
2174 gp_Circ2d C = gce_MakeCirc2d (P1,P2,P3);
2175 GccEnt_QualifiedCirc QC = GccEnt::Outside(C);
2176 GccAna_Lin2d2Tan LT (QC,P4,Precision::Confusion());
5c1f974e 2177 if (LT.IsDone())
2178 {
e0280ce9 2179 Standard_Integer NbSol = LT.NbSolutions();
5c1f974e 2180 for(Standard_Integer k=1; k<=NbSol; k++)
2181 {
2182 gp_Lin2d L = LT.ThisSolution(k);
2183 // do something with L
2184 }
2185 }
2186
2187 //==============================================================
2188 TCollection_AsciiString Message (" \
7fd59977 2189 \n\
2190gp_Pnt2d P1 (2,3); \n\
2191gp_Pnt2d P2 (4,4); \n\
2192gp_Pnt2d P3 (6,7); \n\
2193gp_Pnt2d P4 (10,10); \n\
2194gp_Circ2d C = gce_MakeCirc2d (P1,P2,P3); \n\
2195GccEnt_QualifiedCirc QC = GccEnt::Outside(C); \n\
2196GccAna_Lin2d2Tan LT (QC,P4,Precision::Confusion()); \n\
2197Standard_Integer NbSol; \n\
2198if (LT.IsDone()) \n\
2199 { \n\
2200 NbSol = LT.NbSolutions(); \n\
2201 for(Standard_Integer k=1; k<=NbSol; k++) \n\
2202 { \n\
2203 gp_Lin2d L = LT.ThisSolution(k); \n\
2204 // do something with L \n\
2205 } \n\
2206 } \n\
2207 \n");
5c1f974e 2208 AddSeparator(aDoc,Message);
2209 //--------------------------------------------------------------
7fd59977 2210
5c1f974e 2211 DisplayPoint(aDoc,P1,"P1",false,0.5,-1,0.1);
2212 DisplayPoint(aDoc,P2,"P2",false,0.5,-0.7,0.1);
2213 DisplayPoint(aDoc,P3,"P3",false,0.5,-0.5,0.1);
2214 DisplayPoint(aDoc,P4,"P4",false,0.5,0,0.1);
7fd59977 2215
5c1f974e 2216 Handle(Geom2d_Circle) aCircle = new Geom2d_Circle(C);
2217 Handle(ISession2D_Curve) aCurve = new ISession2D_Curve(aCircle);
2218 aCurve->SetColorIndex(5);
2219 aDoc->GetISessionContext()->Display(aCurve, Standard_False);
7fd59977 2220
5c1f974e 2221 if (LT.IsDone())
2222 {
2223 Standard_Integer NbSol = LT.NbSolutions();
2224 for(Standard_Integer k=1; k<=NbSol; k++)
2225 {
2226 gp_Lin2d L = LT.ThisSolution(k);
2227 Handle(Geom2d_TrimmedCurve) aLine = GCE2d_MakeSegment(L,-10,20);
e0280ce9 2228 Handle(ISession2D_Curve) aCurveN = new ISession2D_Curve(aLine);
2229 aDoc->GetISessionContext()->Display(aCurveN, Standard_False);
5c1f974e 2230 }
2231 }
2232 Message += " C is Blue \n\n";
2233 Message += "LT.IsDone() = ";
2234 if (LT.IsDone()) Message += "True \n"; else Message += "False \n";
e0280ce9 2235 TCollection_AsciiString Message2 (LT.NbSolutions());
5c1f974e 2236 Message += "NbSol = "; Message += Message2 ; Message += "\n";
2237
576f8b11 2238 PostProcess(aDoc,ID_BUTTON_Test_30,TheDisplayType,Message);
5c1f974e 2239}
7fd59977 2240
2241// Function name : GeomSources::gpTest31
2242// Description :
2243// Return type : void
2244// Argument : CGeometryDoc* aDoc
2245void GeomSources::gpTest31(CGeometryDoc* aDoc)
2246{
5c1f974e 2247 DisplayType TheDisplayType = a2DNo3D;
2248 PreProcess(aDoc,TheDisplayType);
2249
2250 //==============================================================
2251
2252gp_Pnt2d P1 (9,6);
2253gp_Pnt2d P2 (10,4);
2254gp_Pnt2d P3 (6,7);
2255gp_Circ2d C = gce_MakeCirc2d (P1,P2,P3);
2256GccEnt_QualifiedCirc QC = GccEnt::Outside(C);
2257gp_Pnt2d P4 (-2,7);
2258gp_Pnt2d P5 (12,-3);
2259gp_Lin2d L = GccAna_Lin2d2Tan(P4,P5,Precision::Confusion()).ThisSolution(1);
2260GccEnt_QualifiedLin QL = GccEnt::Unqualified(L);
2261Standard_Real radius = 2;
2262GccAna_Circ2d2TanRad TR (QC,QL,radius,Precision::Confusion());
2263Standard_Real parsol,pararg;
2264gp_Pnt2d tangentpoint1,tangentpoint2;
2265gp_Circ2d circ;
2266if (TR.IsDone())
2267{
2268 Standard_Integer NbSol = TR.NbSolutions();
2269 for (Standard_Integer k=1; k<=NbSol; k++)
2270 {
2271 circ = TR.ThisSolution(k);
2272 // find the solution circle
2273 TR.Tangency1(k,parsol,pararg,tangentpoint1);
2274 // find the first tangent point
2275 TR.Tangency2(k,parsol,pararg,tangentpoint2);
2276 // find the second tangent point
2277 }
2278}
2279
2280 //==============================================================
2281 TCollection_AsciiString Message;
2282 Message = "\
7fd59977 2283 \n\
2284gp_Pnt2d P1 (9,6); \n\
2285gp_Pnt2d P2 (10,4); \n\
2286gp_Pnt2d P3 (6,7); \n\
2287gp_Circ2d C = gce_MakeCirc2d (P1,P2,P3); \n\
2288GccEnt_QualifiedCirc QC = GccEnt::Outside(C); \n\
2289gp_Pnt2d P4 (-2,7); \n\
2290gp_Pnt2d P5 (12,-3); \n\
2291gp_Lin2d L = GccAna_Lin2d2Tan(P4,P5,Precision::Confusion()).ThisSolution(1); \n\
2292GccEnt_QualifiedLin QL = GccEnt::Unqualified(L); \n\
2293Standard_Real radius = 2; \n\
2294GccAna_Circ2d2TanRad TR (QC,QL,radius,Precision::Confusion()); \n\
2295Standard_Real parsol,pararg; \n\
2296gp_Pnt2d tangentpoint1,tangentpoint2; \n\
2297gp_Circ2d circ; \n\
2298if (TR.IsDone()) \n\
2299 { \n\
2300 Standard_Integer NbSol = TR.NbSolutions(); \n\
2301 for (Standard_Integer k=1; k<=NbSol; k++) \n\
2302 { \n";
5c1f974e 2303 Message += "\
7fd59977 2304 circ = TR.ThisSolution(k); \n\
2305 // find the solution circle \n\
2306 TR.Tangency1(k,parsol,pararg,tangentpoint1); \n\
2307 // find the first tangent point \n\
2308 TR.Tangency2(k,parsol,pararg,tangentpoint2); \n\
2309 // find the second tangent point \n\
2310 } \n\
2311 } \n\
2312 \n";
5c1f974e 2313 AddSeparator(aDoc,Message);
2314
2315 //--------------------------------------------------------------
2316 DisplayPoint(aDoc,P1,"P1",false,0.3);
2317 DisplayPoint(aDoc,P2,"P2",false,0.3);
2318 DisplayPoint(aDoc,P3,"P3",false,0.3);
2319 DisplayPoint(aDoc,P4,"P4",false,0.3);
2320 DisplayPoint(aDoc,P5,"P5",false,0.3);
2321
2322 Handle(Geom2d_Circle) aCircle = new Geom2d_Circle(C);
2323 Handle(ISession2D_Curve) aCurve = new ISession2D_Curve(aCircle);
2324 aCurve->SetColorIndex(3);
2325
2326 aDoc->GetISessionContext()->Display(aCurve, Standard_False);
2327 Handle(Geom2d_TrimmedCurve) aLine = GCE2d_MakeSegment(L,-2,20);
2328 Handle(ISession2D_Curve) aCurve2 = new ISession2D_Curve(aLine);
2329 aCurve2->SetColorIndex(5);
2330 aDoc->GetISessionContext()->Display(aCurve2, Standard_False);
2331
2332 if (TR.IsDone())
2333 {
2334 Standard_Integer NbSol = TR.NbSolutions();
2335 for (Standard_Integer k=1; k<=NbSol; k++)
2336 {
2337 circ = TR.ThisSolution(k);
e0280ce9 2338 Handle(Geom2d_Circle) aCircleN = new Geom2d_Circle(circ);
2339 Handle(ISession2D_Curve) aCurveN = new ISession2D_Curve(aCircleN);
2340 aDoc->GetISessionContext()->Display(aCurveN, Standard_False);
7fd59977 2341
5c1f974e 2342 // find the solution circle
2343 TR.Tangency1(k,parsol,pararg,tangentpoint1);
2344 // find the first tangent point
2345 TR.Tangency2(k,parsol,pararg,tangentpoint2);
2346 // find the second tangent point
2347 DisplayPoint(aDoc,tangentpoint1,"tangentpoint1",false,0.3);
2348 DisplayPoint(aDoc,tangentpoint2,"tangentpoint2",false,0.3);
2349 }
2350 }
2351 Message += "C is Red \n";
2352 Message += "L is Blue \n";
576f8b11 2353 PostProcess(aDoc,ID_BUTTON_Test_31,TheDisplayType,Message);
7fd59977 2354}
2355
2356// Function name : GeomSources::gpTest32
2357// Description :
2358// Return type : void
2359// Argument : CGeometryDoc* aDoc
2360void GeomSources::gpTest32(CGeometryDoc* aDoc)
2361{
5c1f974e 2362 DisplayType TheDisplayType = a2DNo3D;
2363 PreProcess(aDoc,TheDisplayType);
2364
2365 //==============================================================
2366
2367 Standard_Real major = 12;
2368 Standard_Real minor = 4;
2369 gp_Ax2d axis = gp::OX2d();
2370 gp_Elips2d EE(axis,major,minor);
2371 Handle(Geom2d_TrimmedCurve) arc = GCE2d_MakeArcOfEllipse(EE,0.0,M_PI/4);
2372
2373 //==============================================================
2374 TCollection_AsciiString Message (" \
7fd59977 2375 \n\
2376Standard_Real major = 12; \n\
2377Standard_Real minor = 4; \n\
2378gp_Ax2d axis = gp::OX2d(); \n\
2379gp_Elips2d EE(axis,major,minor); \n\
2380Handle(Geom2d_TrimmedCurve) arc = GCE2d_MakeArcOfEllipse(EE,0.0,PI/4); \n\
2381 \n");
5c1f974e 2382 AddSeparator(aDoc,Message);
2383 //--------------------------------------------------------------
9e3ca93a 2384 Handle(Geom2d_Ellipse) E = GCE2d_MakeEllipse(EE);
5c1f974e 2385 Handle(ISession2D_Curve) aCurve = new ISession2D_Curve(E);
2386 aCurve->SetColorIndex(3);
2387 aCurve->SetTypeOfLine(Aspect_TOL_DOTDASH);
2388 //SetWidthOfLine
2389 aDoc->GetISessionContext()->Display(aCurve, Standard_False);
2390 Handle(ISession2D_Curve) aCurve2 = new ISession2D_Curve(arc);
2391 aDoc->GetISessionContext()->Display(aCurve2, Standard_False);
2392 TCollection_AsciiString Message2 (M_PI);
2393 Message += " PI = ";Message+= Message2;
2394
576f8b11 2395 PostProcess(aDoc,ID_BUTTON_Test_32,TheDisplayType,Message);
7fd59977 2396}
2397
2398// Function name : GeomSources::gpTest33
2399// Description :
2400// Return type : void
2401// Argument : CGeometryDoc* aDoc
2402void GeomSources::gpTest33(CGeometryDoc* aDoc)
2403{
5c1f974e 2404 DisplayType TheDisplayType = No2D3D;
2405 PreProcess(aDoc,TheDisplayType);
2406
2407 //==============================================================
2408
2409 gp_Pnt P1(0,0,1);
2410 gp_Pnt P2(1,2,2);
2411 gp_Pnt P3(2,3,3);
2412 gp_Pnt P4(4,3,4);
2413 gp_Pnt P5(5,5,5);
2414 TColgp_Array1OfPnt array (1,5); // sizing array
2415 array.SetValue(1,P1);
2416 array.SetValue(2,P2);
2417 array.SetValue(3,P3);
2418 array.SetValue(4,P4);
2419 array.SetValue(5,P5);
2420 Handle(TColgp_HArray1OfPnt) harray =
2421 new TColgp_HArray1OfPnt (1,5); // sizing harray
2422 harray->SetValue(1,P1.Translated(gp_Vec(4,0,0)));
2423 harray->SetValue(2,P2.Translated(gp_Vec(4,0,0)));
2424 harray->SetValue(3,P3.Translated(gp_Vec(4,0,0)));
2425 harray->SetValue(4,P4.Translated(gp_Vec(4,0,0)));
2426 harray->SetValue(5,P5.Translated(gp_Vec(4,0,0)));
2427 Handle(Geom_BSplineCurve) SPL1 =
2428 GeomAPI_PointsToBSpline(array).Curve();
2429
2430 GeomAPI_Interpolate anInterpolation(harray,Standard_False,Precision::Approximation());
2431 anInterpolation.Perform();
2432
2433 Handle(Geom_BSplineCurve) SPL2;
2434 if (anInterpolation.IsDone())
2435 SPL2 = anInterpolation.Curve();
2436 else
576f8b11 2437 MessageBoxW (AfxGetApp()->m_pMainWnd->m_hWnd, L"The Interpolation is Not done", L"CasCade Warning", MB_ICONWARNING);
5c1f974e 2438
2439 //==============================================================
2440 TCollection_AsciiString Message (" \
7fd59977 2441 \n\
2442gp_Pnt P1(0,0,1); \n\
2443gp_Pnt P2(1,2,2); \n\
2444gp_Pnt P3(2,3,3); \n\
2445gp_Pnt P4(4,3,4); \n\
2446gp_Pnt P5(5,5,5); \n\
2447TColgp_Array1OfPnt array (1,5); // sizing array \n\
2448array.SetValue(1,P1); \n\
2449array.SetValue(2,P2); \n\
2450array.SetValue(3,P3); \n\
2451array.SetValue(4,P4); \n\
2452array.SetValue(5,P5); \n\
2453Handle(TColgp_HArray1OfPnt) harray = \n\
2454 new TColgp_HArray1OfPnt (1,5); // sizing harray \n\
2455harray->SetValue(1,P1.Translated(gp_Vec(4,0,0))); \n\
2456harray->SetValue(2,P2.Translated(gp_Vec(4,0,0))); \n\
2457harray->SetValue(3,P3.Translated(gp_Vec(4,0,0))); \n\
2458harray->SetValue(4,P4.Translated(gp_Vec(4,0,0))); \n\
2459harray->SetValue(5,P5.Translated(gp_Vec(4,0,0))); \n\
2460Handle(Geom_BSplineCurve) SPL1 = \n\
2461 GeomAPI_PointsToBSpline(array).Curve(); \n");
5c1f974e 2462 Message += "\
7fd59977 2463 \n\
2464GeomAPI_Interpolate anInterpolation(harray,Standard_False,Precision::Approximation()); \n\
2465anInterpolation.Perform(); \n\
2466 \n\
2467Handle(Geom_BSplineCurve) SPL2; \n\
2468if (anInterpolation.IsDone()) \n\
2469 SPL2 = anInterpolation.Curve(); \n\
2470else \n\
2471 MessageBox(0,\"The Interpolation is Not done\",\"CasCade Warning\",MB_ICONWARNING); \n\
2472 \n";
5c1f974e 2473 AddSeparator(aDoc,Message);
7fd59977 2474
5c1f974e 2475 //--------------------------------------------------------------
7fd59977 2476
5c1f974e 2477 TCollection_AsciiString aString;
2478 for(Standard_Integer i = array.Lower();i<=array.Upper();i++)
2479 {
2480
2481 TCollection_AsciiString Message2 (i);
2482 gp_Pnt P = array(i);
2483
2484 aString = "P";
2485 aString += Message2;
2486 if (i == 1) aString += " (array) ";
2487 DisplayPoint(aDoc,P,aString.ToCString(),false,0.5);\
2488
2489 aString = "P";
2490 aString += Message2;
2491 if (i == 1) aString += " (harray) ";
2492 DisplayPoint(aDoc,P.Translated(gp_Vec(4,0,0)),aString.ToCString(),false,0.5);\
2493
2494 }
2495
2496 Handle(ISession_Curve) aCurve = new ISession_Curve(SPL1);
0577ae8c 2497 aDoc->GetAISContext()->SetDisplayMode(aCurve,1, Standard_False);
5c1f974e 2498 aDoc->GetAISContext()->Display(aCurve, Standard_False);
2499
2500 if (anInterpolation.IsDone())
2501 {
2502 Handle(ISession_Curve) aCurve2 = new ISession_Curve(SPL2);
0577ae8c 2503 aDoc->GetAISContext()->SetDisplayMode(aCurve2,1, Standard_False);
5c1f974e 2504 aDoc->GetAISContext()->Display(aCurve2, Standard_False);
2505 }
2506
576f8b11 2507 PostProcess(aDoc,ID_BUTTON_Test_33,TheDisplayType,Message);
7fd59977 2508}
2509
2510// Function name : GeomSources::gpTest34
2511// Description :
2512// Return type : void
2513// Argument : CGeometryDoc* aDoc
2514void GeomSources::gpTest34(CGeometryDoc* aDoc)
2515{
5c1f974e 2516 DisplayType TheDisplayType = No2D3D;
2517 PreProcess(aDoc,TheDisplayType);
2518
2519 //==============================================================
2520
2521 TColgp_Array1OfPnt array (1,5); // sizing array
2522 array.SetValue(1,gp_Pnt(0,0,1));
2523 array.SetValue(2,gp_Pnt(1,2,2));
2524 array.SetValue(3,gp_Pnt(2,3,3));
2525 array.SetValue(4,gp_Pnt(4,4,4));
2526 array.SetValue(5,gp_Pnt(5,5,5));
2527
2528 GProp_PEquation PE (array,1.5 );
2529
2530 if (PE.IsPoint())
2531 {/* ... */}
2532 gp_Lin L;
2533 if (PE.IsLinear())
2534 {
2535 L = PE.Line();
2536 }
2537 if (PE.IsPlanar())
2538 {/* ... */}
2539 if (PE.IsSpace())
2540 {/* ... */}
7fd59977 2541
5c1f974e 2542 //==============================================================
2543 TCollection_AsciiString Message (" \
7fd59977 2544 \n\
2545TColgp_Array1OfPnt array (1,5); // sizing array \n\
2546array.SetValue(1,gp_Pnt(0,0,1)); \n\
2547array.SetValue(2,gp_Pnt(1,2,2)); \n\
2548array.SetValue(3,gp_Pnt(2,3,3)); \n\
2549array.SetValue(4,gp_Pnt(4,4,4)); \n\
2550array.SetValue(5,gp_Pnt(5,5,5)); \n\
2551 \n\
2552GProp_PEquation PE (array,1.5 ); \n\
2553 \n\
2554if (PE.IsPoint()){ /* ... */ } \n\
2555gp_Lin L; \n\
2556if (PE.IsLinear()) { L = PE.Line(); } \n\
2557if (PE.IsPlanar()){ /* ... */ } \n\
2558if (PE.IsSpace()) { /* ... */ } \n\
2559 \n");
5c1f974e 2560 AddSeparator(aDoc,Message);
2561 //--------------------------------------------------------------
2562 TCollection_AsciiString aString;
2563 for(Standard_Integer i = array.Lower();i<=array.Upper();i++)
2564 {
2565 TCollection_AsciiString Message2 (i);
2566 gp_Pnt P = array(i);
2567
2568 aString = "P";
2569 aString += Message2;
2570 DisplayPoint(aDoc,P,aString.ToCString(),false,0.5);
2571 }
2572
2573 Message += " PE.IsPoint() = ";
2574 if (PE.IsPoint())
2575 Message += "True \n";
2576 else
2577 Message += "False\n";
2578
2579 if (PE.IsLinear()) {
2580 Message += " PE.IsLinear() = True \n";
2581 L = PE.Line();
2582 Handle(Geom_Line) aLine = new Geom_Line(L);
2583 Handle(Geom_TrimmedCurve) aTrimmedCurve = new Geom_TrimmedCurve(aLine,-10,10);
2584 Handle(ISession_Curve) aCurve = new ISession_Curve(aTrimmedCurve);
2585 aDoc->GetAISContext()->Display(aCurve, Standard_False);
2586 }
2587 else
7fd59977 2588 Message += "PE.IsLinear() = False \n";
2589
5c1f974e 2590 Message += " PE.IsPlanar() = ";
2591 if (PE.IsPlanar())
2592 Message += "True \n";
2593 else
2594 Message += "False\n";
2595
2596 Message += " PE.IsSpace() = ";
2597 if (PE.IsSpace())
2598 Message += "True \n";
2599 else
2600 Message += "False\n";
7fd59977 2601
576f8b11 2602 PostProcess(aDoc,ID_BUTTON_Test_34,TheDisplayType,Message);
7fd59977 2603}
2604
2605// Function name : GeomSources::gpTest35
2606// Description :
2607// Return type : void
2608// Argument : CGeometryDoc* aDoc
2609void GeomSources::gpTest35(CGeometryDoc* aDoc)
2610{
5c1f974e 2611 DisplayType TheDisplayType = No2D3D;
2612 PreProcess(aDoc,TheDisplayType);
2613
2614 //==============================================================
2615
2616 gp_Pnt P1(-5,-5,0);
2617 gp_Pnt P2(9,9,9);
2618 Handle(Geom_Curve) aCurve = GC_MakeSegment(P1,P2).Value();
2619 gp_Pnt P3(3,0,0);
2620 gp_Pnt P4(3,0,10);
2621 Standard_Real radius1 = 3;
2622 Standard_Real radius2 = 2;
2623 Handle(Geom_Surface) aSurface =
2624 GC_MakeConicalSurface(P3,P4,radius1,radius2).Value();
2625 GeomAPI_IntCS CS (aCurve,aSurface);
2626 Handle(Geom_Curve) segment;
2627
5c573e69 2628 Standard_Integer NbSeg = 0;
2629 Standard_Integer NbPoints = 0;
5c1f974e 2630 if(CS.IsDone())
2631 {
2632 NbSeg = CS.NbSegments();
2633 for (Standard_Integer k=1; k<=NbSeg; k++)
2634 {
2635 segment = CS.Segment(k);
2636 // do something with the segment
2637 }
2638
2639 NbPoints = CS.NbPoints();
2640 for (int k=1; k<=NbPoints; k++)
2641 {
2642 gp_Pnt aPoint=CS.Point(k);
2643 // do something with the point
2644 }
2645 }
2646
2647 //==============================================================
2648 TCollection_AsciiString Message (" \
7fd59977 2649 \n\
2650gp_Pnt P1(-5,-5,0); \n\
2651gp_Pnt P2(9,9,9); \n\
2652Handle(Geom_Curve) aCurve = GC_MakeSegment(P1,P2).Value(); \n\
2653gp_Pnt P3(3,0,0); \n\
2654gp_Pnt P4(3,0,10); \n\
2655Standard_Real radius1 = 3; \n\
2656Standard_Real radius2 = 2; \n\
2657Handle(Geom_Surface) aSurface = \n\
2658 GC_MakeConicalSurface(P3,P4,radius1,radius2).Value(); \n\
2659GeomAPI_IntCS CS (aCurve,aSurface); \n\
2660Handle(Geom_Curve) segment; \n\
2661 \n\
2662Standard_Integer NbSeg; \n\
2663Standard_Integer NbPoints; \n\
2664if(CS.IsDone()) \n\
2665 { \n\
2666 NbSeg = CS.NbSegments(); \n\
2667 for (Standard_Integer k=1; k<=NbSeg; k++) \n\
2668 { \n\
2669 segment = CS.Segment(k); \n\
2670 // do something with the segment \n\
2671 } \n\
2672 \n\
2673 NbPoints = CS.NbPoints(); \n\
2674 for (k=1; k<=NbPoints; k++) \n\
2675 { \n\
2676 gp_Pnt aPoint=CS.Point(k); \n\
2677 // do something with the point \n\
2678 } \n\
2679 } \n\
2680 \n");
5c1f974e 2681 AddSeparator(aDoc,Message);
2682
2683 //--------------------------------------------------------------
7fd59977 2684
5c1f974e 2685 Handle(ISession_Curve) aCurve2 = new ISession_Curve(aCurve);
2686 aDoc->GetAISContext()->Display(aCurve2, Standard_False);
7fd59977 2687
5c1f974e 2688 Handle(Geom_RectangularTrimmedSurface) aTrimmedSurface= new Geom_RectangularTrimmedSurface(aSurface,-50.,50.,false);
2689
2690 DisplaySurface(aDoc,aTrimmedSurface);
2691
2692 TCollection_AsciiString aString;
2693 Standard_Integer k;
2694 if(CS.IsDone())
2695 {
e0280ce9 2696 NbSeg = CS.NbSegments();
5c1f974e 2697 for (k=1; k<=NbSeg; k++)
2698 {
2699 TCollection_AsciiString Message2 (k);
2700 segment = CS.Segment(k);
2701 aString = "S_";aString += Message2;
e0280ce9 2702 Handle(ISession_Curve) aCurveN = new ISession_Curve(segment);
2703 aDoc->GetAISContext()->Display(aCurveN, Standard_False);
5c1f974e 2704 }
2705
2706 for ( k=1; k<=NbPoints; k++)
2707 {
2708 TCollection_AsciiString Message2 (k);
2709 gp_Pnt aPoint=CS.Point(k);
2710 aString = "P_";aString += Message2;
2711 DisplayPoint(aDoc,aPoint,aString.ToCString(),false,0.5);
2712 // do something with the point
2713 }
2714 }
2715 TCollection_AsciiString Message2 (NbSeg);
2716 TCollection_AsciiString Message3 (NbPoints);
2717
2718 Message += "NbSeg = "; Message += Message2 ; Message += "\n";
2719 Message += "NbPoints = "; Message += Message3 ; Message += "\n";
2720
576f8b11 2721 PostProcess(aDoc,ID_BUTTON_Test_35,TheDisplayType,Message);
7fd59977 2722}
2723
2724//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2725
2726// Function name : GeomSources::gpTest36
2727// Description :
2728// Return type : void
2729// Argument : CGeometryDoc* aDoc
2730void GeomSources::gpTest36(CGeometryDoc* aDoc)
2731{
5c1f974e 2732 DisplayType TheDisplayType = No2D3D;
2733 PreProcess(aDoc,TheDisplayType);
7fd59977 2734//==============================================================
5c1f974e 2735
2736 gp_Pnt centre (5,5,0); gp_Pnt axispoint (9,9,0);
2737 Standard_Real radius = 3;
2738 Handle(Geom_Circle) circle =
2739 GC_MakeCircle(centre,axispoint,radius);
2740
2741 Handle(Geom_Geometry) aRotatedEntity = circle->Rotated(gp::OZ(),M_PI/4);
2742 Standard_CString aRotatedEntityTypeName = aRotatedEntity->DynamicType()->Name();
2743
2744 Handle(Geom_Geometry) aMirroredEntity = aRotatedEntity->Mirrored(gp::ZOX());
2745 Standard_CString aMirroredEntityTypeName = aMirroredEntity->DynamicType()->Name();
2746
2747 gp_Pnt scalepoint (4,8,0);
2748 Standard_Real scalefactor = 0.2;
2749 Handle(Geom_Geometry) aScaledEntity =
2750 aMirroredEntity->Scaled(scalepoint, scalefactor);
2751 Standard_CString aScaledEntityTypeName = aScaledEntity->DynamicType()->Name();
2752
2753 Handle (Geom_Transformation) GT = GC_MakeTranslation (centre, scalepoint);
2754 gp_Trsf TR = GT->Trsf();
2755
2756 gp_Vec aTranslationVector(TR.TranslationPart ());
2757 Handle(Geom_Geometry) aTranslatedEntity =
2758 aScaledEntity->Translated( aTranslationVector );
2759 Standard_CString aTranslatedEntityTypeName = aTranslatedEntity->DynamicType()->Name();
2760
2761 gp_Mat matrix = TR.HVectorialPart();
2762 Standard_Real value = matrix.Determinant();
2763
7fd59977 2764//==============================================================
2765 TCollection_AsciiString Message (" \
2766 \n\
2767gp_Pnt centre (5,5,0); gp_Pnt axispoint (9,9,0); \n\
2768Standard_Real radius = 3; \n\
2769Handle(Geom_Circle) circle = \n\
2770 GC_MakeCircle(centre,axispoint,radius); \n\
2771 \n\
2772Handle(Geom_Geometry) aRotatedEntity = circle->Rotated(gp::OZ(),PI/4); \n\
2773Standard_CString aRotatedEntityTypeName = aRotatedEntity->DynamicType()->Name(); \n\
2774 \n\
2775Handle(Geom_Geometry) aMirroredEntity = aRotatedEntity->Mirrored(gp::ZOX()); \n\
2776Standard_CString aMirroredEntityTypeName = aMirroredEntity->DynamicType()->Name(); \n\
2777 \n\
2778gp_Pnt scalepoint (4,8,0); \n\
2779Standard_Real scalefactor = 0.2; \n\
2780Handle(Geom_Geometry) aScaledEntity = \n\
2781 aMirroredEntity->Scaled(scalepoint, scalefactor); \n\
2782Standard_CString aScaledEntityTypeName = aScaledEntity->DynamicType()->Name(); \n\
2783 \n\
2784Handle (Geom_Transformation) GT = GC_MakeTranslation (centre, scalepoint); \n\
2785gp_Trsf TR = GT->Trsf(); \n\
2786 \n");
2787 Message +="\
2788gp_Vec aTranslationVector(TR.TranslationPart ()); \n\
2789Handle(Geom_Geometry) aTranslatedEntity = \n\
2790 aScaledEntity->Translated( aTranslationVector ); \n\
2791Standard_CString aTranslatedEntityTypeName = aTranslatedEntity->DynamicType()->Name(); \n\
2792 \n\
2793gp_Mat matrix = TR.HVectorialPart(); \n\
2794Standard_Real value = matrix.Determinant(); \n\
2795 \n";
5c1f974e 2796 AddSeparator(aDoc,Message);
2797 //--------------------------------------------------------------
2798
2799 DisplayPoint(aDoc,centre,"centre",false,0.5);
2800 DisplayPoint(aDoc,axispoint,"axispoint",false,0.5);
2801 DisplayPoint(aDoc,scalepoint,"scalepoint",false,0.5);
2802
2803 DisplayCurve(aDoc,circle, Quantity_NOC_RED,false);
2804 DisplayCurve(aDoc,Handle(Geom_Curve)::DownCast(aRotatedEntity),Quantity_NOC_PEACHPUFF, false);
2805 DisplayCurve(aDoc,Handle(Geom_Curve)::DownCast(aMirroredEntity), Quantity_NOC_YELLOWGREEN,false);
2806 DisplayCurve(aDoc,Handle(Geom_Curve)::DownCast(aScaledEntity), Quantity_NOC_GREEN,false);
2807 DisplayCurve(aDoc,Handle(Geom_Curve)::DownCast(aTranslatedEntity),Quantity_NOC_WHITE,false);
2808
2809 TCollection_AsciiString Message0 (M_PI);
2810 Message += " PI = ";
2811 Message+= Message0;
2812 Message += "\n";
2813 Message += " circle is Red; aRotatedEntity is Peach; aMirroredEntity is Yellow Green\n";
2814 Message += " aScaleEntity is Green; aTranslatedEntity is White\n\n";
2815
2816 TCollection_AsciiString Message2 (aTranslationVector.X());
2817 TCollection_AsciiString Message3 (aTranslationVector.Y());
2818 TCollection_AsciiString Message4 (aTranslationVector.Z());
2819 Message += " aTranslationVector ( ";
2820 Message += Message2; Message += " , ";
2821 Message += Message3; Message += " , ";
2822 Message += Message4; Message += " ); \n";
2823
2824 TCollection_AsciiString Message5 (value);
2825 Message += " value = ";Message+= Message5; Message += "\n";
2826
2827 TCollection_AsciiString Message6 (aRotatedEntityTypeName);
2828 TCollection_AsciiString Message7 (aMirroredEntityTypeName);
2829 TCollection_AsciiString Message8 (aScaledEntityTypeName);
2830 TCollection_AsciiString Message9 (aTranslatedEntityTypeName);
2831
2832 Message += " aRotatedEntityTypeName = ";Message+= Message6; Message += "\n";
2833 Message += " aMirroredEntityTypeName = ";Message+= Message7; Message += "\n";
2834 Message += " aScaledEntityTypeName = ";Message+= Message8; Message += "\n";
2835 Message += " aTranslatedEntityTypeName = ";Message+= Message9; Message += "\n";
2836
576f8b11 2837 PostProcess(aDoc,ID_BUTTON_Test_36,TheDisplayType,Message);
7fd59977 2838}
2839
2840// Function name : GeomSources::gpTest37
2841// Description :
2842// Return type : void
2843// Argument : CGeometryDoc* aDoc
2844void GeomSources::gpTest37(CGeometryDoc* aDoc)
2845{
5c1f974e 2846 DisplayType TheDisplayType = No2D3D;
2847 PreProcess(aDoc,TheDisplayType);
2848 //==============================================================
2849
2850 TColgp_Array1OfPnt anArrayofPnt (1,5); // sizing array
2851 anArrayofPnt.SetValue(1,gp_Pnt(0,0,1));
2852 anArrayofPnt.SetValue(2,gp_Pnt(1,2,2));
2853 anArrayofPnt.SetValue(3,gp_Pnt(2,3,3));
2854 anArrayofPnt.SetValue(4,gp_Pnt(4,3,4));
2855 anArrayofPnt.SetValue(5,gp_Pnt(5,5,5));
2856
2857 Standard_Real Tolerance = 1;
2858
2859 gp_Pln P;
2860 GProp_PEquation PE (anArrayofPnt,Tolerance);
2861 if (PE.IsPlanar()) { P = PE.Plane();}
2862
2863 if (PE.IsPoint()) { /* ... */ }
2864 if (PE.IsLinear()) { /* ... */ }
2865 if (PE.IsPlanar()) { P = PE.Plane();}
2866 if (PE.IsSpace()) { /* ... */ }
2867
2868 //==============================================================
7fd59977 2869 TCollection_AsciiString Message (" \
2870 \n\
2871TColgp_Array1OfPnt anArrayofPnt (1,5); // sizing array \n\
2872anArrayofPnt.SetValue(1,gp_Pnt(0,0,1)); \n\
2873anArrayofPnt.SetValue(2,gp_Pnt(1,2,2)); \n\
2874anArrayofPnt.SetValue(3,gp_Pnt(2,3,3)); \n\
2875anArrayofPnt.SetValue(4,gp_Pnt(4,3,4)); \n\
2876anArrayofPnt.SetValue(5,gp_Pnt(5,5,5)); \n\
2877 \n\
2878Standard_Real Tolerance = 1; \n\
2879 \n\
2880gp_Pln P; \n\
2881GProp_PEquation PE (anArrayofPnt,Tolerance); \n\
2882if (PE.IsPlanar()) { P = PE.Plane();} \n\
2883 \n\
2884if (PE.IsPoint()) { /* ... */ } \n\
2885if (PE.IsLinear()) { /* ... */ } \n\
2886if (PE.IsPlanar()) { P = PE.Plane();} \n\
2887if (PE.IsSpace()) { /* ... */ } \n\
2888 \n");
5c1f974e 2889 AddSeparator(aDoc,Message);
2890 //--------------------------------------------------------------
2891
2892 TCollection_AsciiString aString;
2893 for(Standard_Integer i = anArrayofPnt.Lower();i<=anArrayofPnt.Upper();i++){
2894 TCollection_AsciiString Message2(i);
e0280ce9 2895 gp_Pnt aP = anArrayofPnt(i);
2896 aString = "P";
2897 aString += Message2;
2898 DisplayPoint(aDoc,aP,aString.ToCString(),false,0.5);
5c1f974e 2899 }
2900
2901 Message += " PE.IsPoint() = "; if (PE.IsPoint()) Message += "True \n"; else Message += "False\n";
2902 Message += " PE.IsLinear() = "; if (PE.IsLinear()) Message += "True \n"; else Message += "False\n";
2903
2904 if (PE.IsPlanar()) {
2905 Message += " PE.IsPlanar() = True \n";
2906 P = PE.Plane();
2907 Handle(Geom_Plane) aPlane = new Geom_Plane(P);
2908 Handle(Geom_RectangularTrimmedSurface) aSurface= new Geom_RectangularTrimmedSurface(aPlane,-4.,4.,-4.,4.);
7fd59977 2909
5c1f974e 2910 DisplaySurface(aDoc,aSurface);
7fd59977 2911
5c1f974e 2912 }
2913 else
7fd59977 2914 Message += " PE.IsPlanar() = False \n";
2915
5c1f974e 2916 Message += " PE.IsSpace() = "; if (PE.IsSpace() ) Message += "True \n"; else Message += "False\n";
7fd59977 2917
576f8b11 2918 PostProcess(aDoc,ID_BUTTON_Test_37,TheDisplayType,Message);
7fd59977 2919}
2920
2921void GeomSources::gpTest38(CGeometryDoc* aDoc)
2922{
5c1f974e 2923 DisplayType TheDisplayType = No2D3D;
2924 PreProcess(aDoc,TheDisplayType);
2925 //==============================================================
2926
2927 TColgp_Array1OfPnt array1 (1,5); // sizing array
2928 array1.SetValue(1,gp_Pnt (-4,0,2 )); array1.SetValue(2,gp_Pnt (-7,2,2 ));
2929 array1.SetValue(3,gp_Pnt (-6,3,1 )); array1.SetValue(4,gp_Pnt (-4,3,-1));
2930 array1.SetValue(5,gp_Pnt (-3,5,-2));
2931 Handle(Geom_BSplineCurve) SPL1 = GeomAPI_PointsToBSpline(array1).Curve();
2932
2933 TColgp_Array1OfPnt array2 (1,5); // sizing array
2934 array2.SetValue(1,gp_Pnt (-4,0, 2)); array2.SetValue(2,gp_Pnt (-2,2,0 ));
2935 array2.SetValue(3,gp_Pnt (2 ,3,-1)); array2.SetValue(4,gp_Pnt (3 ,7,-2));
2936 array2.SetValue(5,gp_Pnt (4 ,9,-1));
2937 Handle(Geom_BSplineCurve) SPL2 = GeomAPI_PointsToBSpline(array2).Curve();
2938
2939 GeomFill_FillingStyle Type = GeomFill_StretchStyle;
2940 GeomFill_BSplineCurves aGeomFill1(SPL1,SPL2,Type);
2941 Handle(Geom_BSplineSurface) aBSplineSurface1 = aGeomFill1.Surface();
2942
2943 Type = GeomFill_CoonsStyle;
2944 GeomFill_BSplineCurves aGeomFill2(
2945 Handle(Geom_BSplineCurve)::DownCast(SPL1->Translated(gp_Vec(10,0,0))),
2946 Handle(Geom_BSplineCurve)::DownCast(SPL2->Translated(gp_Vec(10,0,0))),Type);
2947 Handle(Geom_BSplineSurface) aBSplineSurface2 = aGeomFill2.Surface();
2948 Type = GeomFill_CurvedStyle;
2949 GeomFill_BSplineCurves aGeomFill3(
2950 Handle(Geom_BSplineCurve)::DownCast(SPL1->Translated(gp_Vec(20,0,0))),
2951 Handle(Geom_BSplineCurve)::DownCast(SPL2->Translated(gp_Vec(20,0,0))),Type);
2952 Handle(Geom_BSplineSurface) aBSplineSurface3 = aGeomFill3.Surface();
2953
2954 //==============================================================
2955 TCollection_AsciiString Message (" \
7fd59977 2956 \n\
2957TColgp_Array1OfPnt array1 (1,5); // sizing array \n\
2958array1.SetValue(1,gp_Pnt (-4,0,2 )); array1.SetValue(2,gp_Pnt (-7,2,2 )); \n\
2959array1.SetValue(3,gp_Pnt (-6,3,1 )); array1.SetValue(4,gp_Pnt (-4,3,-1)); \n\
2960array1.SetValue(5,gp_Pnt (-3,5,-2)); \n\
2961Handle(Geom_BSplineCurve) SPL1 = GeomAPI_PointsToBSpline(array1).Curve(); \n\
2962 \n\
2963TColgp_Array1OfPnt array2 (1,5); // sizing array \n\
2964array2.SetValue(1,gp_Pnt (-4,0, 2)); array2.SetValue(2,gp_Pnt (-2,2,0 )); \n\
2965array2.SetValue(3,gp_Pnt (2 ,3,-1)); array2.SetValue(4,gp_Pnt (3 ,7,-2)); \n\
2966array2.SetValue(5,gp_Pnt (4 ,9,-1)); \n\
2967Handle(Geom_BSplineCurve) SPL2 = GeomAPI_PointsToBSpline(array2).Curve(); \n\
2968 \n\
2969GeomFill_FillingStyle Type = GeomFill_StretchStyle; \n\
2970GeomFill_BSplineCurves aGeomFill1(SPL1,SPL2,Type); \n\
2971Handle(Geom_BSplineSurface) aBSplineSurface1 = aGeomFill1.Surface(); \n\
2972 \n\
2973Type = GeomFill_CoonsStyle; \n\
2974GeomFill_BSplineCurves aGeomFill2( \n");
2975Message += "\
2976 Handle(Geom_BSplineCurve)::DownCast(SPL1->Translated(gp_Vec(10,0,0))), \n\
2977 Handle(Geom_BSplineCurve)::DownCast(SPL2->Translated(gp_Vec(10,0,0))),Type); \n\
2978Handle(Geom_BSplineSurface) aBSplineSurface2 = aGeomFill2.Surface(); \n\
2979Type = GeomFill_CurvedStyle; \n\
2980GeomFill_BSplineCurves aGeomFill3( \n\
2981 Handle(Geom_BSplineCurve)::DownCast(SPL1->Translated(gp_Vec(20,0,0))), \n\
2982 Handle(Geom_BSplineCurve)::DownCast(SPL2->Translated(gp_Vec(20,0,0))),Type); \n\
2983Handle(Geom_BSplineSurface) aBSplineSurface3 = aGeomFill3.Surface(); \n\
2984 \n";
5c1f974e 2985 AddSeparator(aDoc,Message);
2986 //--------------------------------------------------------------
7fd59977 2987
5c1f974e 2988 // Trace des frontieres. -> FreeBoundaryAspect
2989 // Trace des isoparametriques. --> UIsoAspect()
7fd59977 2990
5c1f974e 2991 DisplaySurface(aDoc,aBSplineSurface1,Quantity_NOC_YELLOW);
2992 DisplaySurface(aDoc,aBSplineSurface2,Quantity_NOC_SALMON);
2993 DisplaySurface(aDoc,aBSplineSurface3,Quantity_NOC_HOTPINK);
2994
2995 for (int i=0;i<=2;i++)
2996 {
2997 DisplayCurve(aDoc,Handle(Geom_BSplineCurve)::DownCast(SPL1->Translated(gp_Vec(i*10,0,0))), Quantity_NOC_RED,false);
2998 DisplayCurve(aDoc,Handle(Geom_BSplineCurve)::DownCast(SPL2->Translated(gp_Vec(i*10,0,0))), Quantity_NOC_GREEN,false);
2999 }
7fd59977 3000
5c1f974e 3001 Message += "SPL1 is Red; \n";
3002 Message += "SPL2 is Green; \n";
3003 Message += "aBSplineSurface1 is Yellow; ( GeomFill_StretchStyle )\n";
3004 Message += "aBSplineSurface2 is Salmon; ( GeomFill_CoonsStyle ) \n";
3005 Message += "aBSplineSurface3 is Hot pink; ( GeomFill_CurvedStyle ) \n";
7fd59977 3006
576f8b11 3007 PostProcess(aDoc,ID_BUTTON_Test_38,TheDisplayType,Message);
7fd59977 3008}
3009void GeomSources::gpTest39(CGeometryDoc* aDoc)
3010{
5c1f974e 3011 DisplayType TheDisplayType = No2D3D;
3012 PreProcess(aDoc,TheDisplayType);
3013 //==============================================================
3014
3015 TColgp_Array1OfPnt array1 (1,5); // sizing array
3016 array1.SetValue(1,gp_Pnt (-4,0,2 ));
3017 array1.SetValue(2,gp_Pnt (-5,1,0 ));
3018 array1.SetValue(3,gp_Pnt (-6,2,-2 ));
3019 array1.SetValue(4,gp_Pnt (-5,4,-7));
3020 array1.SetValue(5,gp_Pnt (-3,5,-12));
3021
3022 TColgp_Array1OfPnt array2 (1,5); // sizing array
3023 array2.SetValue(1,gp_Pnt (-4,0, 2));
3024 array2.SetValue(2,gp_Pnt (-3,2,1 ));
3025 array2.SetValue(3,gp_Pnt (-1,5,0));
3026 array2.SetValue(4,gp_Pnt (2 ,7,-1));
3027 array2.SetValue(5,gp_Pnt (4 ,9,-1));
3028
3029 TColgp_Array1OfPnt array3 (1,4); // sizing array
3030 array3.SetValue(1,gp_Pnt (-3,5, -12));
3031 array3.SetValue(2,gp_Pnt (-2,6,-7 ));
3032 array3.SetValue(3,gp_Pnt (0 ,8,-3));
3033 array3.SetValue(4,gp_Pnt (4 ,9,-1));
3034
3035 Handle(Geom_BSplineCurve) SPL1 = GeomAPI_PointsToBSpline(array1).Curve();
3036 Handle(Geom_BSplineCurve) SPL2 = GeomAPI_PointsToBSpline(array2).Curve();
3037 Handle(Geom_BSplineCurve) SPL3 = GeomAPI_PointsToBSpline(array3).Curve();
3038
3039 Handle(GeomAdaptor_HCurve) SPL1Adaptor = new GeomAdaptor_HCurve(SPL1);
3040 Handle(GeomFill_SimpleBound) B1 =
3041 new GeomFill_SimpleBound(SPL1Adaptor,Precision::Approximation(),Precision::Angular());
3042 Handle(GeomAdaptor_HCurve) SPL2Adaptor = new GeomAdaptor_HCurve(SPL2);
3043 Handle(GeomFill_SimpleBound) B2 =
3044 new GeomFill_SimpleBound(SPL2Adaptor,Precision::Approximation(),Precision::Angular());
3045 Handle(GeomAdaptor_HCurve) SPL3Adaptor = new GeomAdaptor_HCurve(SPL3);
3046 Handle(GeomFill_SimpleBound) B3 =
3047 new GeomFill_SimpleBound(SPL3Adaptor,Precision::Approximation(),Precision::Angular());
3048 Standard_Boolean NoCheck= Standard_False;
3049
3050 Standard_Integer MaxDeg = 8;
3051 Standard_Integer MaxSeg = 2;
3052 GeomFill_ConstrainedFilling aConstrainedFilling(MaxDeg, MaxSeg);
3053
3054 aConstrainedFilling.Init(B1,B2,B3,NoCheck);
3055
3056 Handle(Geom_BSplineSurface) aBSplineSurface = aConstrainedFilling.Surface();
3057
7fd59977 3058//==============================================================
3059 TCollection_AsciiString Message (" \
3060 \n\
3061TColgp_Array1OfPnt array1 (1,5); // sizing array \n\
3062... \n\
3063Handle(Geom_BSplineCurve) SPL1 = GeomAPI_PointsToBSpline(array1).Curve(); \n\
3064Handle(Geom_BSplineCurve) SPL2 = GeomAPI_PointsToBSpline(array2).Curve(); \n\
3065Handle(Geom_BSplineCurve) SPL3 = GeomAPI_PointsToBSpline(array3).Curve(); \n\
3066 \n\
3067Handle(GeomAdaptor_HCurve) SPL1Adaptor = new GeomAdaptor_HCurve(SPL1); \n\
3068Handle(GeomFill_SimpleBound) B1 = \n\
3069 new GeomFill_SimpleBound(SPL1Adaptor,Precision::Approximation(),Precision::Angular()); \n\
3070Handle(GeomAdaptor_HCurve) SPL2Adaptor = new GeomAdaptor_HCurve(SPL2); \n\
3071Handle(GeomFill_SimpleBound) B2 = \n\
3072 new GeomFill_SimpleBound(SPL2Adaptor,Precision::Approximation(),Precision::Angular()); \n\
3073Handle(GeomAdaptor_HCurve) SPL3Adaptor = new GeomAdaptor_HCurve(SPL3); \n\
3074Handle(GeomFill_SimpleBound) B3 = \n\
3075 new GeomFill_SimpleBound(SPL3Adaptor,Precision::Approximation(),Precision::Angular()); \n\
3076Standard_Boolean NoCheck= Standard_False; \n\
3077 \n\
3078Standard_Integer MaxDeg = 8; \n");
3079Message += "\
3080Standard_Integer MaxSeg = 2; \n\
3081GeomFill_ConstrainedFilling aConstrainedFilling(MaxDeg, MaxSeg); \n\
3082 \n\
3083aConstrainedFilling.Init(B1,B2,B3,NoCheck); \n\
3084 \n\
3085Handle(Geom_BSplineSurface) aBSplineSurface = aConstrainedFilling.Surface(); \n\
3086 \n";
5c1f974e 3087 AddSeparator(aDoc,Message);
3088 //--------------------------------------------------------------
7fd59977 3089
5c1f974e 3090 TCollection_AsciiString aString;
7fd59977 3091
5c1f974e 3092 DisplaySurface(aDoc,aBSplineSurface,Quantity_NOC_YELLOW);
3093 DisplayCurve(aDoc,SPL1,Quantity_NOC_RED ,false);
3094 DisplayCurve(aDoc,SPL2,Quantity_NOC_GREEN ,false);
3095 DisplayCurve(aDoc,SPL3,Quantity_NOC_BLUE1 ,false);
7fd59977 3096
5c1f974e 3097 Message += "SPL1 is Red; \n";
3098 Message += "SPL2 is Green; \n";
3099 Message += "SPL3 is Blue; \n";
7fd59977 3100
5c1f974e 3101 Message += "aBSplineSurface is Yellow; \n";
7fd59977 3102
576f8b11 3103 PostProcess(aDoc,ID_BUTTON_Test_39,TheDisplayType,Message);
7fd59977 3104}
3105
3106void GeomSources::gpTest40(CGeometryDoc* aDoc)
3107{
5c1f974e 3108 DisplayType TheDisplayType = No2D3D;
3109 PreProcess(aDoc,TheDisplayType);
3110 //==============================================================
3111
3112 TColgp_Array1OfPnt array1 (1,5); // sizing array
3113 array1.SetValue(1,gp_Pnt (-4,0,2 ));
3114 array1.SetValue(2,gp_Pnt (-5,1,0 ));
3115 array1.