0031939: Coding - correction of spelling errors in comments [part 2]
[occt.git] / samples / mfc / standard / 02_Modeling / src / ModelingDoc.cpp
1 // ModelingDoc.cpp : implementation of the CModelingDoc class
2 //
3
4 #include "stdafx.h"
5
6 #include "ModelingDoc.h"
7
8 #include "ModelingApp.h"
9 #include "ResultDialog.h"
10 #include "State.h"
11
12 #include "ISession_Direction.h"
13 #include "..\res\resource.h"
14
15 #include <Adaptor3d_HCurveOnSurface.hxx>
16 #include <Adaptor3d_CurveOnSurface.hxx>
17 #include <AIS_ColoredShape.hxx>
18 #include <AIS_ListOfInteractive.hxx>
19 #include <AIS_ListIteratorOfListOfInteractive.hxx>
20 #include <TColStd_Array2OfReal.hxx>
21 #include <OCC_MainFrame.h>
22 #include <BRepPrimAPI_MakeCylinder.hxx>
23 #include <TopExp_Explorer.hxx>
24 #include <Geom_Plane.hxx>
25 #include <BRepTools.hxx>
26
27 static Handle(AIS_Shape) AIS1;
28 static TopoDS_Face THE_F1, THE_F2;
29 static TopoDS_Edge THE_E1, THE_E2;
30
31 /////////////////////////////////////////////////////////////////////////////
32 // CModelingDoc
33
34 IMPLEMENT_DYNCREATE(CModelingDoc, CDocument)
35
36 BEGIN_MESSAGE_MAP(CModelingDoc, OCC_3dBaseDoc)
37         //{{AFX_MSG_MAP(CModelingDoc)
38         ON_COMMAND(ID_MIRROR, OnMirror)
39         ON_COMMAND(ID_MIRRORAXIS, OnMirroraxis)
40         ON_COMMAND(ID_ROTATE, OnRotate)
41         ON_COMMAND(ID_SCALE, OnScale)
42         ON_COMMAND(ID_TRANSLATION, OnTranslation)
43         ON_COMMAND(ID_DISPLACEMENT, OnDisplacement)
44         ON_COMMAND(ID_DEFORM, OnDeform)
45         ON_COMMAND(ID_BOX, OnBox)
46         ON_COMMAND(ID_Cylinder, OnCylinder)
47         ON_COMMAND(ID_CONE, OnCone)
48         ON_COMMAND(ID_SPHERE, OnSphere)
49         ON_COMMAND(ID_TORUS, OnTorus)
50         ON_COMMAND(ID_WEDGE, OnWedge)
51         ON_COMMAND(ID_PRISM, OnPrism)
52         ON_COMMAND(ID_REVOL, OnRevol)
53         ON_COMMAND(ID_PIPE, OnPipe)
54         ON_COMMAND(ID_THRU, OnThru)
55         ON_COMMAND(ID_EVOLVED, OnEvolved)
56         ON_COMMAND(ID_DRAFT, OnDraft)
57         ON_COMMAND(ID_CUT, OnCut)
58         ON_COMMAND(ID_FUSE, OnFuse)
59         ON_COMMAND(ID_SECTION, OnSection)
60         ON_COMMAND(ID_COMMON, OnCommon)
61         ON_COMMAND(ID_PSECTION, OnPsection)
62         ON_COMMAND(ID_BLEND, OnBlend)
63         ON_COMMAND(ID_CHAMF, OnChamf)
64         ON_COMMAND(ID_EVOLVEDBLEND, OnEvolvedblend)
65         ON_COMMAND(ID_PRISM_LOCAL, OnPrismLocal)
66         ON_COMMAND(ID_REVOL_LOCAL, OnRevolLocal)
67         ON_COMMAND(ID_GLUE_LOCAL, OnGlueLocal)
68         ON_COMMAND(ID_DPRISM_LOCAL, OnDprismLocal)
69         ON_COMMAND(ID_Pipe_LOCAL, OnPipeLocal)
70         ON_COMMAND(ID_LINEAR_LOCAL, OnLinearLocal)
71         ON_COMMAND(ID_SPLIT_LOCAL, OnSplitLocal)
72         ON_COMMAND(ID_THICK_LOCAL, OnThickLocal)
73         ON_COMMAND(ID_OFFSET_LOCAL, OnOffsetLocal)
74         ON_COMMAND(ID_VERTEX, OnVertex)
75         ON_COMMAND(ID_EDGE, OnEdge)
76         ON_COMMAND(ID_WIRE, OnWire)
77         ON_COMMAND(ID_FACE, OnFace)
78         ON_COMMAND(ID_SHELL, OnShell)
79         ON_COMMAND(ID_COMPOUND, OnCompound)
80         ON_COMMAND(ID_GEOMETRIE, OnGeometrie)
81         ON_COMMAND(ID_SEWING, OnSewing)
82         ON_COMMAND(ID_EXPLORER, OnExplorer)
83         ON_COMMAND(ID_BUILDER, OnBuilder)
84         ON_COMMAND(ID_VALID, OnValid)
85         ON_COMMAND(ID_LINEAR, OnLinear)
86         ON_COMMAND(ID_VOLUME, OnVolume)
87         ON_COMMAND(ID_SURFACE, OnSurface)
88         ON_COMMAND(ID_BUTTON_FILL, OnButtonFill)
89         ON_COMMAND(ID_STOP_STOP, OnStopStop)
90         ON_COMMAND(ID_FILLWITHTANG, OnFillwithtang)
91         //}}AFX_MSG_MAP
92 END_MESSAGE_MAP()
93
94 /////////////////////////////////////////////////////////////////////////////
95 // CModelingDoc construction/destruction
96
97 CModelingDoc::CModelingDoc()
98 {
99         myAISContext->SetDisplayMode(AIS_Shaded,Standard_False);
100 }
101
102 CModelingDoc::~CModelingDoc()
103 {
104 }
105  
106 void CModelingDoc::OnMirror() 
107 {
108         AIS_ListOfInteractive aList;
109         myAISContext->DisplayedObjects(aList);
110         AIS_ListIteratorOfListOfInteractive aListIterator;
111         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
112                 myAISContext->Remove (aListIterator.Value(), Standard_False);
113         }
114         TopoDS_Shape S = BRepPrimAPI_MakeWedge (60.,100.,80.,20.).Shape();
115         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
116         myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False);
117         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);
118         myAISContext->Display(ais1,Standard_False);
119         gp_Trsf theTransformation;
120         gp_Pnt PntCenterOfTheTransformation(110,60,60);
121         Handle(AIS_Point) aispnt = new AIS_Point(new Geom_CartesianPoint(PntCenterOfTheTransformation));
122         myAISContext->Display(aispnt,Standard_False);
123         theTransformation.SetMirror(PntCenterOfTheTransformation);
124         BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);
125         TopoDS_Shape S2 = myBRepTransformation.Shape();
126         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
127         myAISContext->SetColor(ais2,Quantity_NOC_BLUE1,Standard_False); 
128         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
129         myAISContext->Display(ais2,Standard_False);
130         Fit();
131     TCollection_AsciiString Message ("\
132 \n\
133 TopoDS_Shape S = BRepBuilderAPI_MakeWedge(60.,100.,80.,20.); \n\
134 gp_Trsf theTransformation; \n\
135 gp_Pnt PntCenterOfTheTransformation(110,60,60); \n\
136 theTransformation.SetMirror(PntCenterOfTheTransformation);\n\
137 BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);\n\
138 TopoDS_Shape TransformedShape = myBRepTransformation.Shape();   \n");
139         PocessTextInDialog("Transform a Shape with Mirror and One point.", Message);
140         
141 }
142
143 void CModelingDoc::OnMirroraxis() 
144 {
145         AIS_ListOfInteractive aList;
146         myAISContext->DisplayedObjects(aList);
147         AIS_ListIteratorOfListOfInteractive aListIterator;
148         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
149                 myAISContext->Remove (aListIterator.Value(), Standard_False);
150         }
151         TopoDS_Shape S = BRepPrimAPI_MakeWedge(60.,100.,80.,20.).Shape(); 
152         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
153         myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False); 
154         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
155         myAISContext->Display(ais1,Standard_False);
156         gp_Trsf theTransformation;
157         gp_Ax1 axe = gp_Ax1(gp_Pnt(110,60,60),gp_Dir(0.,1.,0.));
158         Handle(Geom_Axis1Placement) Gax1 = new Geom_Axis1Placement(axe);
159         Handle (AIS_Axis) ax1 = new AIS_Axis(Gax1);
160         myAISContext->Display(ax1,Standard_False);
161         theTransformation.SetMirror(axe);
162         BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);
163         TopoDS_Shape S2 = myBRepTransformation.Shape();
164         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
165         myAISContext->SetColor(ais2,Quantity_NOC_BLUE1,Standard_False); 
166         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
167         myAISContext->Display(ais2,Standard_False);
168         Fit();
169
170     TCollection_AsciiString Message ("\
171 \n\
172 TopoDS_Shape S = BRepBuilderAPI_MakeWedge(60.,100.,80.,20.); \n\
173 gp_Trsf theTransformation; \n\
174 gp_Ax1 Axis = gp_Ax1(gp_Pnt(110,60,60),gp_Dir(0.,1.,0.)); \n\
175 theTransformation.SetMirror(Axis);\n\
176 BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);\n\
177 TopoDS_Shape TransformedShape = myBRepTransformation.Shape();   \n");
178
179         PocessTextInDialog("Transform a Shape with Mirror and One axis.", Message);
180
181 }
182
183
184 void CModelingDoc::OnRotate() 
185 {
186         AIS_ListOfInteractive aList;
187         myAISContext->DisplayedObjects(aList);
188         AIS_ListIteratorOfListOfInteractive aListIterator;
189         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
190                 myAISContext->Remove (aListIterator.Value(), Standard_False);
191         }
192         TopoDS_Shape S = BRepPrimAPI_MakeWedge(60.,100.,80.,20.).Shape(); 
193         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
194         myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False); 
195         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
196         myAISContext->Display(ais1,Standard_False);
197         gp_Trsf theTransformation;
198         gp_Ax1 axe = gp_Ax1(gp_Pnt(200,60,60),gp_Dir(0.,1.,0.));
199         Handle(Geom_Axis1Placement) Gax1 = new Geom_Axis1Placement(axe);
200         Handle (AIS_Axis) ax1 = new AIS_Axis(Gax1);
201         myAISContext->Display(ax1,Standard_False);
202         theTransformation.SetRotation(axe,30*M_PI/180);
203         BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);
204         TopoDS_Shape S2 = myBRepTransformation.Shape();
205         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
206         myAISContext->SetColor(ais2,Quantity_NOC_BLUE1,Standard_False); 
207         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
208         myAISContext->Display(ais2,Standard_False);
209         Fit();
210
211     TCollection_AsciiString Message ("\
212 \n\
213 TopoDS_Shape S = BRepBuilderAPI_MakeWedge(60.,100.,80.,20.); \n\
214 gp_Trsf theTransformation; \n\
215 gp_Ax1 Axis = gp_Ax1(gp_Pnt(200,60,60),gp_Dir(0.,1.,0.)); \n\
216 theTransformation.SetRotation(Axis,30*PI/180); // Rotation of 30 degrees \n\
217 BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);\n\
218 TopoDS_Shape TransformedShape = myBRepTransformation.Shape();   \n");
219
220         PocessTextInDialog("Transform a Shape with Rotation.", Message);
221         
222 }
223
224 void CModelingDoc::OnScale() 
225 {
226         AIS_ListOfInteractive aList;
227         myAISContext->DisplayedObjects(aList);
228         AIS_ListIteratorOfListOfInteractive aListIterator;
229         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
230                 myAISContext->Remove (aListIterator.Value(), Standard_False);
231         }
232         TopoDS_Shape S = BRepPrimAPI_MakeWedge(60.,100.,80.,20.).Shape(); 
233         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
234         myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False); 
235         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
236         myAISContext->Display(ais1,Standard_False);
237         gp_Trsf theTransformation;
238         gp_Pnt theCenterOfScale(200,60,60);
239         Handle(AIS_Point) aispnt = new AIS_Point(new Geom_CartesianPoint(theCenterOfScale));
240
241         myAISContext->Display(aispnt,Standard_False);
242         theTransformation.SetScale(theCenterOfScale,0.5);
243         BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);
244         TopoDS_Shape S2 = myBRepTransformation.Shape();
245
246         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
247         myAISContext->SetColor(ais2,Quantity_NOC_BLUE1,Standard_False); 
248         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
249         myAISContext->Display(ais2,Standard_False);
250         Fit();
251
252     TCollection_AsciiString Message ("\
253 \n\
254 TopoDS_Shape S = BRepBuilderAPI_MakeWedge(60.,100.,80.,20.); \n\
255 gp_Trsf theTransformation; \n\
256 gp_Pnt theCenterOfScale(200,60,60); \n\
257 theTransformation.SetScale(theCenterOfScale,0.5); // Scale : value = 0.5 \n\
258 BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);\n\
259 TopoDS_Shape TransformedShape = myBRepTransformation.Shape();   \n");
260
261         PocessTextInDialog("Scale a Shape with One point.", Message);
262         
263
264 }
265
266
267
268 void CModelingDoc::OnTranslation() 
269 {
270         AIS_ListOfInteractive aList;
271         myAISContext->DisplayedObjects(aList);
272         AIS_ListIteratorOfListOfInteractive aListIterator;
273         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
274                 myAISContext->Remove (aListIterator.Value(), Standard_False);
275         }
276         TopoDS_Shape S = BRepPrimAPI_MakeWedge(6.,10.,8.,2.).Shape(); 
277         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
278         myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False); 
279         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);
280         myAISContext->Display(ais1,Standard_False);
281         gp_Trsf theTransformation;
282         gp_Vec theVectorOfTranslation(-6,-6,6);
283
284         Handle(ISession_Direction) aDirection1 = new ISession_Direction(gp_Pnt(0,0,0),theVectorOfTranslation);
285         myAISContext->Display(aDirection1,Standard_False);
286
287         theTransformation.SetTranslation(theVectorOfTranslation);
288         BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);
289         TopoDS_Shape S2 = myBRepTransformation.Shape();
290
291         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
292         myAISContext->SetColor(ais2,Quantity_NOC_BLUE1,Standard_False); 
293         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
294         myAISContext->Display(ais2,Standard_False);
295
296         Fit();
297
298     TCollection_AsciiString Message ("\
299 \n\
300 TopoDS_Shape S = BRepBuilderAPI_MakeWedge(6.,10.,8.,2.); \n\
301 gp_Trsf theTransformation; \n\
302 gp_Vec theVectorOfTranslation(6,6,6); \n\
303 theTransformation.SetTranslation(theVectorOfTranslation); \n\
304 BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);\n\
305 TopoDS_Shape TransformedShape = myBRepTransformation.Shape();   \n");
306
307         PocessTextInDialog("Translate a Shape with One vector.", Message);
308         
309 }
310
311 void CModelingDoc::OnDisplacement() 
312 {
313         AIS_ListOfInteractive aList;
314         myAISContext->DisplayedObjects(aList);
315         AIS_ListIteratorOfListOfInteractive aListIterator;
316         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
317                 myAISContext->Remove (aListIterator.Value(), Standard_False);
318         }
319   TopoDS_Shape S = BRepPrimAPI_MakeWedge(60., 100., 80., 20.).Shape();
320         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
321         myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False); 
322         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
323         myAISContext->Display(ais1,Standard_False);
324         gp_Trsf theTransformation;
325
326         gp_Ax3 ax3_1(gp_Pnt(0,0,0),gp_Dir(0,0,1));
327         gp_Ax3 ax3_2(gp_Pnt(60,60,60),gp_Dir(1,1,1));
328
329         theTransformation.SetDisplacement(ax3_1,ax3_2);
330         BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);
331         TopoDS_Shape TransformedShape = myBRepTransformation.Shape();
332         Handle(AIS_Shape) ais2 = new AIS_Shape(TransformedShape);
333         myAISContext->SetColor(ais2,Quantity_NOC_BLUE1,Standard_False); 
334         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
335         myAISContext->Display(ais2,Standard_False);
336         Fit();
337     TCollection_AsciiString Message ("\
338 \n\
339 TopoDS_Shape S = BRepBuilderAPI_MakeWedge(60.,100.,80.,20.); \n\
340 gp_Trsf theTransformation; \n\
341 gp_Ax3 ax3_1(gp_Pnt(0,0,0),gp_Dir(0,0,1)); \n\
342 gp_Ax3 ax3_2(gp_Pnt(60,60,60),gp_Dir(1,1,1)); \n\
343 theTransformation.SetDisplacement(ax3_1,ax3_2); \n\
344 BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);\n\
345 TopoDS_Shape TransformedShape = myBRepTransformation.Shape();   \n");
346
347         PocessTextInDialog("Displace a Shape with Two coordinate systems.", Message);
348         
349         
350 }
351
352
353 void CModelingDoc::OnDeform() 
354 {
355         AIS_ListOfInteractive aList;
356         myAISContext->DisplayedObjects(aList);
357         AIS_ListIteratorOfListOfInteractive aListIterator;
358         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
359                 myAISContext->Remove (aListIterator.Value(), Standard_False);
360         }
361   TopoDS_Shape S = BRepPrimAPI_MakeWedge(60., 100., 80., 20.).Shape();
362         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
363         myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False); 
364         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
365         myAISContext->Display(ais1,Standard_False);
366
367         gp_GTrsf theTransformation;
368         gp_Mat rot(1, 0, 0, 0, 0.5, 0, 0, 0, 1.5);
369         theTransformation.SetVectorialPart(rot);
370         theTransformation.SetTranslationPart(gp_XYZ(5,5,5));
371
372         BRepBuilderAPI_GTransform myBRepTransformation(S,theTransformation);
373         TopoDS_Shape S2 = myBRepTransformation.Shape();
374
375         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
376         myAISContext->SetColor(ais2,Quantity_NOC_BLUE1,Standard_False); 
377         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
378         myAISContext->Display(ais2,Standard_False);
379         Fit();
380     TCollection_AsciiString Message ("\
381 \n\
382 TopoDS_Shape S = BRepBuilderAPI_MakeWedge(60.,100.,80.,20.); \n\
383 gp_GTrsf theTransformation; \n\
384 gp_Mat rot(1, 0, 0, 0, 0.5, 0, 0, 0, 1.5); // scaling : 100% on X ; 50% on Y ; 150% on Z . \n\
385 theTransformation.SetVectorialPart(rot); \n\
386 theTransformation.SetTranslationPart(gp_XYZ(5,5,5)); \n\
387 BRepBuilderAPI_GTransform myBRepGTransformation(S,theTransformation);\n\
388 TopoDS_Shape TransformedShape = myBRepGTransformation.Shape();  \n");
389
390         PocessTextInDialog("Deform a Shape with One matrix of deformation and One translation.", Message);
391 }
392
393 /* =================================================================================
394    ====================   P R I M I T I V E S   ====================================
395    ================================================================================= */
396
397 void CModelingDoc::OnBox() 
398 {
399         AIS_ListOfInteractive aList;
400         myAISContext->DisplayedObjects(aList);
401         AIS_ListIteratorOfListOfInteractive aListIterator;
402         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
403                 myAISContext->Remove (aListIterator.Value(), Standard_False);
404         }
405   TopoDS_Shape B1 = BRepPrimAPI_MakeBox(200., 150., 100.).Shape();
406         Handle(AIS_Shape) aBox1 = new AIS_Shape(B1);
407         myAISContext->SetMaterial(aBox1,Graphic3d_NOM_PLASTIC,Standard_False);    
408         myAISContext->SetColor(aBox1,Quantity_NOC_GREEN,Standard_False); 
409         myAISContext->Display(aBox1,Standard_False);
410         TopoDS_Shape B2 = BRepPrimAPI_MakeBox (gp_Ax2(gp_Pnt(-200.,-80.,-70.),
411                                          gp_Dir(1.,2.,1.)),
412                                          80., 90., 120.).Shape();
413         Handle(AIS_Shape) aBox2 = new AIS_Shape(B2);
414         myAISContext->SetMaterial(aBox2,Graphic3d_NOM_PLASTIC,Standard_False);    
415         myAISContext->SetColor(aBox2,Quantity_NOC_RED,Standard_False); 
416         myAISContext->Display(aBox2,Standard_False);
417         Fit();
418     TCollection_AsciiString Message ("\
419                 \n\
420 TopoDS_Shape B1 = BRepPrimAPI_MakeBox (200.,150.,100.); \n\
421 TopoDS_Shape B2 = BRepPrimAPI_MakeBox (gp_Ax2(gp_Pnt(-200.,-80.,-70.), \n\
422                                           gp_Dir(1.,2.,1.)), \n\
423                                    80.,90.,120.); \n\
424                 \n");
425         PocessTextInDialog("Make a topological box", Message);
426 }
427
428 void CModelingDoc::OnCylinder() 
429 {
430         AIS_ListOfInteractive aList;
431         myAISContext->DisplayedObjects(aList);
432         AIS_ListIteratorOfListOfInteractive aListIterator;
433         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
434                 myAISContext->Remove (aListIterator.Value(), Standard_False);
435         }
436
437   TopoDS_Shape C1 = BRepPrimAPI_MakeCylinder(50., 200.).Shape();
438         Handle(AIS_Shape) aCyl1 = new AIS_Shape(C1);
439         myAISContext->SetMaterial(aCyl1,Graphic3d_NOM_PLASTIC,Standard_False);    
440         myAISContext->SetColor(aCyl1,Quantity_NOC_RED,Standard_False); 
441         myAISContext->Display(aCyl1,Standard_False);
442         TopoDS_Shape C2 = BRepPrimAPI_MakeCylinder (gp_Ax2(gp_Pnt(200.,200.,0.),
443                                                                                                                       gp_Dir(0.,0.,1.)),
444                                               40., 110., 210.*M_PI / 180).Shape();
445         Handle(AIS_Shape) aCyl2 = new AIS_Shape(C2);
446         myAISContext->SetMaterial(aCyl2,Graphic3d_NOM_PLASTIC,Standard_False);    
447         myAISContext->SetColor(aCyl2,Quantity_NOC_MATRABLUE,Standard_False);    
448         myAISContext->Display(aCyl2,Standard_False);
449         Fit();
450
451     TCollection_AsciiString Message ("\
452                 \n\
453 TopoDS_Shape C1 = BRepPrimAPI_MakeCylinder (50.,200.); \n\
454 TopoDS_Shape C2 = BRepPrimAPI_MakeCylinder (gp_Ax2(gp_Pnt(200.,200.,0.), \n\
455                                         gp_Dir(0.,0.,1.)), \n\
456                                         40.,110.,210.*PI180.); \n\
457                 \n");
458         PocessTextInDialog("Make a cylinder", Message);
459 }
460
461
462 void CModelingDoc::OnCone() 
463 {
464         AIS_ListOfInteractive aList;
465         myAISContext->DisplayedObjects(aList);
466         AIS_ListIteratorOfListOfInteractive aListIterator;
467         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
468                 myAISContext->Remove (aListIterator.Value(), Standard_False);
469         }
470   TopoDS_Shape C1 = BRepPrimAPI_MakeCone(50., 25., 200.).Shape();
471         Handle(AIS_Shape) ais1 = new AIS_Shape(C1);
472         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);    
473         myAISContext->SetColor(ais1,Quantity_NOC_MATRABLUE,Standard_False);             
474         myAISContext->Display(ais1,Standard_False);
475         TopoDS_Shape C2 = BRepPrimAPI_MakeCone(gp_Ax2(gp_Pnt(100.,100.,0.),
476                                                                                                                  gp_Dir(0.,0.,1.)),
477                                          60., 0., 150., 210.*M_PI / 180).Shape();
478         Handle(AIS_Shape) ais2 = new AIS_Shape(C2);
479         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);    
480         myAISContext->SetColor(ais2,Quantity_NOC_GREEN,Standard_False); 
481         myAISContext->Display(ais2,Standard_False);
482         Fit();
483
484     TCollection_AsciiString Message ("\
485                 \n\
486 TopoDS_Shape C1 = BRepPrimAPI_MakeCone (50.,25.,200.); \n\
487 TopoDS_Shape C2 = BRepPrimAPI_MakeCone(gp_Ax2(gp_Pnt(100.,100.,0.), \n\
488                                           gp_Dir(0.,0.,1.)), \n\
489                                    605.,0.,150.,210.*PI180); \n\
490                 \n");
491         PocessTextInDialog("Make a cone", Message);
492 }
493
494 void CModelingDoc::OnSphere() 
495 {
496         AIS_ListOfInteractive aList;
497         myAISContext->DisplayedObjects(aList);
498         AIS_ListIteratorOfListOfInteractive aListIterator;
499         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
500                 myAISContext->Remove (aListIterator.Value(), Standard_False);
501         }
502
503   TopoDS_Shape S1 = BRepPrimAPI_MakeSphere(gp_Pnt(-200., -250., 0.), 80.).Shape();
504         Handle(AIS_Shape) ais1 = new AIS_Shape(S1);
505         myAISContext->SetColor(ais1,Quantity_NOC_AZURE,Standard_False); 
506         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);    
507         myAISContext->Display(ais1,Standard_False);
508   TopoDS_Shape S2 = BRepPrimAPI_MakeSphere(100., 120.*M_PI / 180).Shape();
509         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
510         myAISContext->SetColor(ais2,Quantity_NOC_GREEN,Standard_False); 
511         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);    
512         myAISContext->Display(ais2,Standard_False);
513         TopoDS_Shape S3 = BRepPrimAPI_MakeSphere(gp_Pnt(200.,250.,0.),100.,
514                                            -60.*M_PI / 180, 60.*M_PI / 180).Shape();
515         Handle(AIS_Shape) ais3 = new AIS_Shape(S3);
516         myAISContext->SetColor(ais3,Quantity_NOC_RED,Standard_False); 
517         myAISContext->SetMaterial(ais3,Graphic3d_NOM_PLASTIC,Standard_False);    
518         myAISContext->Display(ais3,Standard_False);
519         TopoDS_Shape S4 = BRepPrimAPI_MakeSphere(gp_Pnt(0.,0.,-300.),150.,
520                                            -45.*M_PI / 180, 45.*M_PI / 180, 45.*M_PI / 180).Shape();
521         Handle(AIS_Shape) ais4 = new AIS_Shape(S4);
522         myAISContext->SetColor(ais4,Quantity_NOC_MATRABLUE,Standard_False); 
523         myAISContext->SetMaterial(ais4,Graphic3d_NOM_PLASTIC,Standard_False);    
524         myAISContext->Display(ais4,Standard_False);
525         Fit();
526
527     TCollection_AsciiString Message ("\
528                 \n\
529 TopoDS_Shape S1 = BRepPrimAPI_MakeSphere(gp_Pnt(-200.,-250.,0.),80.); \n\
530 TopoDS_Shape S2 = BRepPrimAPI_MakeSphere(100.,120.*PI180); \n\
531 TopoDS_Shape S3 = BRepPrimAPI_MakeSphere(gp_Pnt(200.,250.,0.),100., \n\
532                                      -60.*PI180, 60.*PI180); \n\
533 TopoDS_Shape S4 = BRepPrimAPI_MakeSphere(gp_Pnt(0.,0.,-300.),150., \n\
534                                      -45.*PI180, 45.*PI180, 45.*PI180); \n\
535                 \n");
536         PocessTextInDialog("Make a sphere", Message);
537 }
538
539 void CModelingDoc::OnTorus() 
540 {
541         AIS_ListOfInteractive aList;
542         myAISContext->DisplayedObjects(aList);
543         AIS_ListIteratorOfListOfInteractive aListIterator;
544         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
545                 myAISContext->Remove (aListIterator.Value(), Standard_False);
546         }
547
548   TopoDS_Shape S1 = BRepPrimAPI_MakeTorus(60., 20.).Shape();
549         Handle(AIS_Shape) ais1 = new AIS_Shape(S1);
550         myAISContext->SetColor(ais1,Quantity_NOC_AZURE,Standard_False); 
551         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);    
552         myAISContext->Display(ais1,Standard_False);
553         TopoDS_Shape S2 = BRepPrimAPI_MakeTorus(gp_Ax2(gp_Pnt(100.,100.,0.),gp_Dir(1.,1.,1.)),
554                                           50., 20., 210.*M_PI / 180).Shape();
555         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
556         myAISContext->SetColor(ais2,Quantity_NOC_GREEN,Standard_False); 
557         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);    
558         myAISContext->Display(ais2,Standard_False);
559         TopoDS_Shape S3 = BRepPrimAPI_MakeTorus(gp_Ax2(gp_Pnt(-200.,-150.,-100),gp_Dir(0.,1.,0.)),
560                                           60., 20., -45.*M_PI / 180, 45.*M_PI / 180, 90.*M_PI / 180).Shape();
561         Handle(AIS_Shape) ais3= new AIS_Shape(S3);
562         myAISContext->SetColor(ais3,Quantity_NOC_CORAL,Standard_False); 
563         myAISContext->SetMaterial(ais3,Graphic3d_NOM_PLASTIC,Standard_False);    
564         myAISContext->Display(ais3,Standard_False);
565         Fit();
566
567     TCollection_AsciiString Message ("\
568                 \n\
569 TopoDS_Shape S1 = BRepPrimAPI_MakeTorus(60.,20.); \n\
570 TopoDS_Shape S2 = BRepPrimAPI_MakeTorus(gp_Ax2(gp_Pnt(100.,100.,0.),gp_Dir(1.,1.,1.)), \n\
571                                     50.,20.,210.*PI180); \n\
572 TopoDS_Shape S3 = BRepPrimAPI_MakeTorus(gp_Ax2(gp_Pnt(-200.,-150.,-100),gp_Dir(0.,1.,0.)), \n\
573                                     60.,20.,-45.*PI180,45.*PI180,90.*PI180); \n\
574                 \n");
575         PocessTextInDialog("Make a torus", Message);
576 }
577
578 void CModelingDoc::OnWedge() 
579 {
580         AIS_ListOfInteractive aList;
581         myAISContext->DisplayedObjects(aList);
582         AIS_ListIteratorOfListOfInteractive aListIterator;
583         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
584                 myAISContext->Remove (aListIterator.Value(), Standard_False);
585         }
586
587   TopoDS_Shape S1 = BRepPrimAPI_MakeWedge(60., 100., 80., 20.).Shape();
588         Handle(AIS_Shape) ais1 = new AIS_Shape(S1);
589         myAISContext->SetColor(ais1,Quantity_NOC_AZURE,Standard_False); 
590         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);    
591         myAISContext->Display(ais1,Standard_False);
592         TopoDS_Shape S2 = BRepPrimAPI_MakeWedge(gp_Ax2(gp_Pnt(100.,100.,0.),gp_Dir(0.,0.,1.)),
593                                           60., 50., 80., 25., -10., 40., 70.).Shape();
594         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
595         myAISContext->SetColor(ais2,Quantity_NOC_CORAL2,Standard_False); 
596         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);    
597         myAISContext->Display(ais2,Standard_False);
598         Fit();
599
600     TCollection_AsciiString Message ("\
601                 \n\
602 TopoDS_Shape S1 = BRepPrimAPI_MakeWedge(60.,100.,80.,20.); \n\
603 TopoDS_Shape S2 = BRepPrimAPI_MakeWedge(gp_Ax2(gp_Pnt(100.,100.,0.),gp_Dir(0.,0.,1.)), \n\
604                                     60.,50.,80.,25.,-10.,40.,70.); \n\
605                 \n");
606         PocessTextInDialog("Make a wedge", Message);
607 }
608
609 void CModelingDoc::OnPrism() 
610 {
611         AIS_ListOfInteractive aList;
612         myAISContext->DisplayedObjects(aList);
613         AIS_ListIteratorOfListOfInteractive aListIterator;
614         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
615                 myAISContext->Remove (aListIterator.Value(), Standard_False);
616         }
617
618         TopoDS_Vertex V1 = BRepBuilderAPI_MakeVertex(gp_Pnt(-200.,-200.,0.));
619         Handle(AIS_Shape) ais1 = new AIS_Shape(V1);
620         myAISContext->Display(ais1,Standard_False);
621         TopoDS_Shape S1 = BRepPrimAPI_MakePrism(V1,gp_Vec(0.,0.,100.));
622         Handle(AIS_Shape) ais2 = new AIS_Shape(S1);
623         myAISContext->Display(ais2,Standard_False);
624
625         TopoDS_Edge E = BRepBuilderAPI_MakeEdge(gp_Pnt(-150.,-150,0.), gp_Pnt(-50.,-50,0.));
626         Handle(AIS_Shape) ais3 = new AIS_Shape(E);
627         myAISContext->Display(ais3,Standard_False);
628         TopoDS_Shape S2 = BRepPrimAPI_MakePrism(E,gp_Vec(0.,0.,100.));
629         Handle(AIS_Shape) ais4 = new AIS_Shape(S2);
630         myAISContext->SetColor(ais4,Quantity_NOC_CORAL2,Standard_False); 
631         myAISContext->SetMaterial(ais4,Graphic3d_NOM_PLASTIC,Standard_False);    
632         myAISContext->Display(ais4,Standard_False);
633
634         TopoDS_Edge E1 = BRepBuilderAPI_MakeEdge(gp_Pnt(0.,0.,0.), gp_Pnt(50.,0.,0.));
635         TopoDS_Edge E2 = BRepBuilderAPI_MakeEdge(gp_Pnt(50.,0.,0.), gp_Pnt(50.,50.,0.));
636         TopoDS_Edge E3 = BRepBuilderAPI_MakeEdge(gp_Pnt(50.,50.,0.), gp_Pnt(0.,0.,0.));
637         TopoDS_Wire W = BRepBuilderAPI_MakeWire(E1,E2,E3);
638         TopoDS_Shape S3 = BRepPrimAPI_MakePrism(W,gp_Vec(0.,0.,100.));
639         Handle(AIS_Shape) ais5 = new AIS_Shape(W);
640         myAISContext->Display(ais5,Standard_False);
641         Handle(AIS_Shape) ais6 = new AIS_Shape(S3);
642         myAISContext->SetColor(ais6,Quantity_NOC_GREEN,Standard_False); 
643         myAISContext->SetMaterial(ais6,Graphic3d_NOM_PLASTIC,Standard_False);    
644         myAISContext->Display(ais6,Standard_False);
645
646         gp_Circ c = gp_Circ(gp_Ax2(gp_Pnt(200.,200.,0.),gp_Dir(0.,0.,1.)), 80.);
647         TopoDS_Edge Ec = BRepBuilderAPI_MakeEdge(c);
648         TopoDS_Wire Wc = BRepBuilderAPI_MakeWire(Ec);
649         TopoDS_Face F = BRepBuilderAPI_MakeFace(gp_Pln(gp::XOY()),Wc);
650         Handle(AIS_Shape) ais7 = new AIS_Shape(F);
651         myAISContext->Display(ais7,Standard_False);
652         TopoDS_Shape S4 = BRepPrimAPI_MakePrism(F,gp_Vec(0.,0.,100.));
653         Handle(AIS_Shape) ais8 = new AIS_Shape(S4);
654         myAISContext->SetColor(ais8,Quantity_NOC_MATRABLUE,Standard_False); 
655         myAISContext->SetMaterial(ais8,Graphic3d_NOM_PLASTIC,Standard_False);    
656         myAISContext->Display(ais8,Standard_False);
657         Fit();
658
659     TCollection_AsciiString Message ("\
660                 \n\
661 --- Prism a vertex -> result is an edge --- \n\
662 \n\
663 TopoDS_Vertex V1 = BRepBuilderAPI_MakeVertex(gp_Pnt(-200.,-200.,0.)); \n\
664 TopoDS_Shape S1 = BRepBuilderAPI_MakePrism(V1,gp_Vec(0.,0.,100.)); \n\
665 \n\
666 --- Prism an edge -> result is a face --- \n\
667 \n\
668 TopoDS_Edge E = BRepBuilderAPI_MakeEdge(gp_Pnt(-150.,-150,0.), gp_Pnt(-50.,-50,0.)); \n\
669 TopoDS_Shape S2 = BRepPrimAPI_MakePrism(E,gp_Vec(0.,0.,100.)); \n\
670 \n\
671 --- Prism an wire -> result is a shell --- \n\
672 \n\
673 TopoDS_Edge E1 = BREpBuilderAPI_MakeEdge(gp_Pnt(0.,0.,0.), gp_Pnt(50.,0.,0.)); \n\
674 TopoDS_Edge E2 = BREpBuilderAPI_MakeEdge(gp_Pnt(50.,0.,0.), gp_Pnt(50.,50.,0.)); \n\
675 TopoDS_Edge E3 = BREpBuilderAPI_MakeEdge(gp_Pnt(50.,50.,0.), gp_Pnt(0.,0.,0.)); \n\
676 TopoDS_Wire W = BRepBuilderAPI_MakeWire(E1,E2,E3); \n\
677 TopoDS_Shape S3 = BRepPrimAPI_MakePrism(W,gp_Vec(0.,0.,100.)); \n\
678 \n\
679 --- Prism a face or a shell -> result is a solid --- \n\
680 \n\
681 gp_Circ c = gp_Circ(gp_Ax2(gp_Pnt(200.,200.,0.gp_Dir(0.,0.,1.)), 80.); \n\
682 TopoDS_Edge Ec = BRepBuilderAPI_MakeEdge(c); \n\
683 TopoDS_Wire Wc = BRepBuilderAPI_MakeWire(Ec); \n\
684 TopoDS_Face F = BRepBuilderAPI_MakeFace(gp::XOY(),Wc); \n\
685 TopoDS_Shape S4 = BRepBuilderAPI_MakePrism(F,gp_Vec(0.,0.,100.)); \n\
686                 \n");
687         PocessTextInDialog("Make a prism", Message);
688 }
689
690 void CModelingDoc::OnRevol() 
691 {
692         AIS_ListOfInteractive aList;
693         myAISContext->DisplayedObjects(aList);
694         AIS_ListIteratorOfListOfInteractive aListIterator;
695         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
696                 myAISContext->Remove (aListIterator.Value(), Standard_False);
697         }
698
699         TopoDS_Vertex V1 = BRepBuilderAPI_MakeVertex(gp_Pnt(-200.,-200.,0.));
700         Handle(AIS_Shape) ais1 = new AIS_Shape(V1);
701         myAISContext->Display(ais1,Standard_False);
702         gp_Ax1 axe = gp_Ax1(gp_Pnt(-170.,-170.,0.),gp_Dir(0.,0.,1.));
703         Handle(Geom_Axis1Placement) Gax1 = new Geom_Axis1Placement(axe);
704         Handle (AIS_Axis) ax1 = new AIS_Axis(Gax1);
705         myAISContext->Display(ax1,Standard_False);
706         TopoDS_Shape S1 = BRepPrimAPI_MakeRevol(V1,axe);
707         Handle(AIS_Shape) ais2 = new AIS_Shape(S1);
708         myAISContext->Display(ais2,Standard_False);
709
710         TopoDS_Edge E = BRepBuilderAPI_MakeEdge(gp_Pnt(-120.,-120,0.), gp_Pnt(-120.,-120,100.));
711         Handle(AIS_Shape) ais3 = new AIS_Shape(E);
712         myAISContext->Display(ais3,Standard_False);
713         axe = gp_Ax1(gp_Pnt(-100.,-100.,0.),gp_Dir(0.,0.,1.));
714         Handle(Geom_Axis1Placement) Gax2 = new Geom_Axis1Placement(axe);
715         Handle (AIS_Axis) ax2 = new AIS_Axis(Gax2);
716         myAISContext->Display(ax2,Standard_False);
717         TopoDS_Shape S2 = BRepPrimAPI_MakeRevol(E,axe);
718         Handle(AIS_Shape) ais4 = new AIS_Shape(S2);
719         myAISContext->SetColor(ais4,Quantity_NOC_YELLOW,Standard_False); 
720         myAISContext->SetMaterial(ais4,Graphic3d_NOM_PLASTIC,Standard_False);    
721         myAISContext->Display(ais4,Standard_False);
722
723         TopoDS_Edge E1 = BRepBuilderAPI_MakeEdge(gp_Pnt(0.,0.,0.), gp_Pnt(50.,0.,0.));
724         TopoDS_Edge E2 = BRepBuilderAPI_MakeEdge(gp_Pnt(50.,0.,0.), gp_Pnt(50.,50.,0.));
725         TopoDS_Edge E3 = BRepBuilderAPI_MakeEdge(gp_Pnt(50.,50.,0.), gp_Pnt(0.,0.,0.));
726         TopoDS_Wire W = BRepBuilderAPI_MakeWire(E1,E2,E3);
727         axe = gp_Ax1(gp_Pnt(0.,0.,30.),gp_Dir(0.,1.,0.));
728         Handle(Geom_Axis1Placement) Gax3 = new Geom_Axis1Placement(axe);
729         Handle (AIS_Axis) ax3 = new AIS_Axis(Gax3);
730         myAISContext->Display(ax3,Standard_False);
731         TopoDS_Shape S3 = BRepPrimAPI_MakeRevol(W,axe, 210.*M_PI/180);
732         Handle(AIS_Shape) ais5 = new AIS_Shape(W);
733         myAISContext->Display(ais5,Standard_False);
734         Handle(AIS_Shape) ais6 = new AIS_Shape(S3);
735         myAISContext->SetColor(ais6,Quantity_NOC_GREEN,Standard_False); 
736         myAISContext->SetMaterial(ais6,Graphic3d_NOM_PLASTIC,Standard_False);    
737         myAISContext->Display(ais6,Standard_False);
738
739         gp_Circ c = gp_Circ(gp_Ax2(gp_Pnt(200.,200.,0.),gp_Dir(0.,0.,1.)), 80.);
740         TopoDS_Edge Ec = BRepBuilderAPI_MakeEdge(c);
741         TopoDS_Wire Wc = BRepBuilderAPI_MakeWire(Ec);
742         TopoDS_Face F = BRepBuilderAPI_MakeFace(gp_Pln(gp::XOY()),Wc);
743         axe = gp_Ax1(gp_Pnt(290,290.,0.),gp_Dir(0.,1,0.));
744         Handle(Geom_Axis1Placement) Gax4 = new Geom_Axis1Placement(axe);
745         Handle (AIS_Axis) ax4 = new AIS_Axis(Gax4);
746         myAISContext->Display(ax4,Standard_False);
747         TopoDS_Shape S4 = BRepPrimAPI_MakeRevol(F,axe, 90.*M_PI/180);
748         Handle(AIS_Shape) ais8 = new AIS_Shape(S4);
749         myAISContext->SetColor(ais8,Quantity_NOC_MATRABLUE,Standard_False); 
750         myAISContext->SetMaterial(ais8,Graphic3d_NOM_PLASTIC,Standard_False);    
751         myAISContext->Display(ais8,Standard_False);
752         Fit();
753
754         TCollection_AsciiString Message ("\
755                 \n\
756 --- Revol of a vertex -> result is an edge --- \n\
757 \n\
758 TopoDS_Vertex V1 = BRepBuilderAPI_MakeVertex(gp_Pnt(-200.,-200.,0.)); \n\
759 gp_Ax1 axe = gp_Ax1(gp_Pnt(-170.,-170.,0.),gp_Dir(0.,0.,1.)); \n\
760 TopoDS_Shape S1 = BRepPrimAPI_MakeRevol(V1,axe); \n\
761 \n\
762 --- Revol of an edge -> result is a face --- \n\
763 \n\
764 TopoDS_Edge E = BRepBuilderAPI_MakeEdge(gp_Pnt(-120.,-120,0.), gp_Pnt(-120.,-120,100.)); \n\
765 axe = gp_Ax1(gp_Pnt(-100.,-100.,0.),gp_Dir(0.,0.,1.)); \n\
766 TopoDS_Shape S2 = BRepPrimAPI_MakeRevol(E,axe); \n\
767 \n\
768 --- Revol of a wire -> result is a shell --- \n\
769 \n\
770 TopoDS_Edge E1 = BRepBuilderAPI_MakeEdge(gp_Pnt(0.,0.,0.), gp_Pnt(50.,0.,0.)); \n\
771 TopoDS_Edge E2 = BRepBuilderAPI_MakeEdge(gp_Pnt(50.,0.,0.), gp_Pnt(50.,50.,0.)); \n\
772 TopoDS_Edge E3 = BRepBuilderAPI_MakeEdge(gp_Pnt(50.,50.,0.), gp_Pnt(0.,0.,0.)); \n\
773 TopoDS_Wire W = BRepBuilderAPI_MakeWire(E1,E2,E3); \n\
774 axe = gp_Ax1(gp_Pnt(0.,0.,30.),gp_Dir(0.,1.,0.)); \n\
775 TopoDS_Shape S3 = BRepPrimAPI_MakeRevol(W,axe, 210.*PI180); \n\
776 \n\
777 --- Revol of a face -> result is a solid --- \n\
778 \n\
779 gp_Circ c = gp_Circ(gp_Ax2(gp_Pnt(200.,200.,0.),gp_Dir(0.,0.,1.)), 80.); \n\
780 TopoDS_Edge Ec = BRepBuilderAPI_MakeEdge(c); \n\
781 TopoDS_Wire Wc = BRepBuilderPI_MakeWire(Ec); \n\
782 TopoDS_Face F = BRepBuilderAPI_MakeFace(gp_Pln(gp::XOY()),Wc); \n\
783 axe = gp_Ax1(gp_Pnt(290,290.,0.),gp_Dir(0.,1,0.)); \n\
784 TopoDS_Shape S4 = BRepPrimAPI_MakeRevol(F,axe, 90.*PI180); \n\
785                 \n");
786   PocessTextInDialog("Make a revol", Message);
787 }
788
789 void CModelingDoc::OnPipe() 
790 {
791         AIS_ListOfInteractive aList;
792         myAISContext->DisplayedObjects(aList);
793         AIS_ListIteratorOfListOfInteractive aListIterator;
794         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
795                 myAISContext->Remove (aListIterator.Value(), Standard_False);
796         }
797
798         TColgp_Array1OfPnt CurvePoles(1,4);
799         gp_Pnt pt = gp_Pnt(0.,0.,0.);
800         CurvePoles(1) = pt;
801         pt = gp_Pnt(20.,50.,0.);
802         CurvePoles(2) = pt;
803         pt = gp_Pnt(60.,100.,0.);
804         CurvePoles(3) = pt;
805         pt = gp_Pnt(150.,0.,0.);
806         CurvePoles(4) = pt;
807         Handle(Geom_BezierCurve) curve = new Geom_BezierCurve(CurvePoles);
808         TopoDS_Edge E = BRepBuilderAPI_MakeEdge(curve);
809         TopoDS_Wire W = BRepBuilderAPI_MakeWire(E);
810         Handle(AIS_Shape) ais1 = new AIS_Shape(W);
811         myAISContext->Display(ais1,Standard_False);
812         Fit();
813         Sleep(500);
814         gp_Circ c = gp_Circ(gp_Ax2(gp_Pnt(0.,0.,0.),gp_Dir(0.,1.,0.)),10.);
815         TopoDS_Edge Ec = BRepBuilderAPI_MakeEdge(c);
816         TopoDS_Wire Wc = BRepBuilderAPI_MakeWire(Ec);
817         Handle(AIS_Shape) ais3 = new AIS_Shape(Wc);
818         myAISContext->Display(ais3,Standard_False);
819         TopoDS_Face F = BRepBuilderAPI_MakeFace(gp_Pln(gp::ZOX()),Wc);
820         TopoDS_Shape S = BRepOffsetAPI_MakePipe(W,F);
821         Handle(AIS_Shape) ais2 = new AIS_Shape(S);
822         myAISContext->SetColor(ais2,Quantity_NOC_MATRABLUE,Standard_False); 
823         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
824         myAISContext->Display(ais2,Standard_False);
825         Fit();
826
827         TCollection_AsciiString Message ("\
828                 \n\
829 TColgp_Array1OfPnt CurvePoles(1,6);\n\
830 gp_Pnt pt = gp_Pnt(0.,0.,0.);\n\
831 CurvePoles(1) = pt;\n\
832 pt = gp_Pnt(20.,50.,0.);\n\
833 CurvePoles(2) = pt;\n\
834 pt = gp_Pnt(60.,100.,0.);\n\
835 CurvePoles(3) = pt;\n\
836 pt = gp_Pnt(150.,0.,0.);\n\
837 CurvePoles(4) = pt;\n\
838 Handle(Geom_BezierCurve) curve = new Geom_BezierCurve(CurvePoles);\n\
839 TopoDS_Edge E = BRepBuilderAPI_MakeEdge(curve);\n\
840 TopoDS_Wire W = BRepBuilderAPI_MakeWire(E);\n\
841 gp_Circ c = gp_Circ(gp_Ax2(gp_Pnt(0.,0.,0.),gp_Dir(0.,1.,0.)),10.);\n\
842 TopoDS_Edge Ec = BRepBuilderAPI_MakeEdge(c);\n\
843 TopoDS_Wire Wc = BRepBuilderAPI_MakeWire(Ec);\n\
844 TopoDS_Face F = BRepBuilderAPI_MakeFace(gp_Pln(gp::ZOX()),Wc);\n\
845 TopoDS_Shape S = BRepBuilderAPI_MakePipe(W,F);\n\
846                 \n");
847   PocessTextInDialog("Make a pipe", Message);
848
849 }
850
851 void CModelingDoc::OnThru() 
852 {
853         AIS_ListOfInteractive aList;
854         myAISContext->DisplayedObjects(aList);
855         AIS_ListIteratorOfListOfInteractive aListIterator;
856         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
857                 myAISContext->Remove (aListIterator.Value(), Standard_False);
858         }
859
860         gp_Circ c1 = gp_Circ(gp_Ax2(gp_Pnt(-100.,0.,-100.),gp_Dir(0.,0.,1.)),40.);
861         TopoDS_Edge E1 = BRepBuilderAPI_MakeEdge(c1);
862         TopoDS_Wire W1 = BRepBuilderAPI_MakeWire(E1);
863         Handle(AIS_Shape) sec1 = new AIS_Shape(W1);
864         myAISContext->Display(sec1,Standard_False);
865         gp_Circ c2 = gp_Circ(gp_Ax2(gp_Pnt(-10.,0.,-0.),gp_Dir(0.,0.,1.)),40.);
866         TopoDS_Edge E2 = BRepBuilderAPI_MakeEdge(c2);
867         TopoDS_Wire W2 = BRepBuilderAPI_MakeWire(E2);
868         Handle(AIS_Shape) sec2 = new AIS_Shape(W2);
869         myAISContext->Display(sec2,Standard_False);     
870         gp_Circ c3 = gp_Circ(gp_Ax2(gp_Pnt(-75.,0.,100.),gp_Dir(0.,0.,1.)),40.);
871         TopoDS_Edge E3 = BRepBuilderAPI_MakeEdge(c3);
872         TopoDS_Wire W3 = BRepBuilderAPI_MakeWire(E3);
873         Handle(AIS_Shape) sec3 = new AIS_Shape(W3);
874         myAISContext->Display(sec3,Standard_False);
875         gp_Circ c4= gp_Circ(gp_Ax2(gp_Pnt(0.,0.,200.),gp_Dir(0.,0.,1.)),40.);
876         TopoDS_Edge E4 = BRepBuilderAPI_MakeEdge(c4);
877         TopoDS_Wire W4 = BRepBuilderAPI_MakeWire(E4);
878         Handle(AIS_Shape) sec4 = new AIS_Shape(W4);
879         myAISContext->Display(sec4,Standard_False);
880         BRepOffsetAPI_ThruSections generator(Standard_False,Standard_True);
881         generator.AddWire(W1);
882         generator.AddWire(W2);
883         generator.AddWire(W3);
884         generator.AddWire(W4);
885         generator.Build();
886         TopoDS_Shape S1 = generator.Shape();
887         Handle(AIS_Shape) ais1 = new AIS_Shape(S1);
888         myAISContext->SetColor(ais1,Quantity_NOC_MATRABLUE,Standard_False); 
889         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
890         myAISContext->Display(ais1,Standard_False);
891
892         gp_Circ c1b = gp_Circ(gp_Ax2(gp_Pnt(100.,0.,-100.),gp_Dir(0.,0.,1.)),40.);
893         TopoDS_Edge E1b = BRepBuilderAPI_MakeEdge(c1b);
894         TopoDS_Wire W1b = BRepBuilderAPI_MakeWire(E1b);
895         Handle(AIS_Shape) sec1b = new AIS_Shape(W1b);
896         myAISContext->Display(sec1b,Standard_False);
897         gp_Circ c2b = gp_Circ(gp_Ax2(gp_Pnt(210.,0.,-0.),gp_Dir(0.,0.,1.)),40.);
898         TopoDS_Edge E2b = BRepBuilderAPI_MakeEdge(c2b);
899         TopoDS_Wire W2b = BRepBuilderAPI_MakeWire(E2b);
900         Handle(AIS_Shape) sec2b = new AIS_Shape(W2b);
901         myAISContext->Display(sec2b,Standard_False);    
902         gp_Circ c3b = gp_Circ(gp_Ax2(gp_Pnt(275.,0.,100.),gp_Dir(0.,0.,1.)),40.);
903         TopoDS_Edge E3b = BRepBuilderAPI_MakeEdge(c3b);
904         TopoDS_Wire W3b = BRepBuilderAPI_MakeWire(E3b);
905         Handle(AIS_Shape) sec3b = new AIS_Shape(W3b);
906         myAISContext->Display(sec3b,Standard_False);
907         gp_Circ c4b= gp_Circ(gp_Ax2(gp_Pnt(200.,0.,200.),gp_Dir(0.,0.,1.)),40.);
908         TopoDS_Edge E4b = BRepBuilderAPI_MakeEdge(c4b);
909         TopoDS_Wire W4b = BRepBuilderAPI_MakeWire(E4b);
910         Handle(AIS_Shape) sec4b = new AIS_Shape(W4b);
911         myAISContext->Display(sec4b,Standard_False);
912         BRepOffsetAPI_ThruSections generatorb(Standard_True,Standard_False);
913         generatorb.AddWire(W1b);
914         generatorb.AddWire(W2b);
915         generatorb.AddWire(W3b);
916         generatorb.AddWire(W4b);
917         generatorb.Build();
918         TopoDS_Shape S2 = generatorb.Shape();
919         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
920         myAISContext->SetColor(ais2,Quantity_NOC_ALICEBLUE,Standard_False); 
921         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
922         myAISContext->Display(ais2,Standard_False);
923         Fit();
924
925         TCollection_AsciiString Message ("\
926                 \n\
927 ---------- ruled -------------- \n\
928 \n\
929 gp_Circ c1 = gp_Circ(gp_Ax2(gp_Pnt(-100.,0.,-100.),gp_Dir(0.,0.,1.)),40.);\n\
930 TopoDS_Edge E1 = BRepBuilderAPI_MakeEdge(c1);\n\
931 TopoDS_Wire W1 = BRepBuilderAPI_MakeWire(E1);\n\
932 gp_Circ c2 = gp_Circ(gp_Ax2(gp_Pnt(-10.,0.,-0.),gp_Dir(0.,0.,1.)),40.);\n\
933 TopoDS_Edge E2 = BRepBuilderAPI_MakeEdge(c2);\n\
934 TopoDS_Wire W2 = BRepBuilderAPI_MakeWire(E2);\n\
935 gp_Circ c3 = gp_Circ(gp_Ax2(gp_Pnt(-75.,0.,100.),gp_Dir(0.,0.,1.)),40.);\n\
936 TopoDS_Edge E3 = BRepBuilderAPI_MakeEdge(c3);\n\
937 TopoDS_Wire W3 = BRepBuilderAPI_MakeWire(E3);\n\
938 gp_Circ c4= gp_Circ(gp_Ax2(gp_Pnt(0.,0.,200.),gp_Dir(0.,0.,1.)),40.);\n\
939 TopoDS_Edge E4 = BRep>BuilderAPI_MakeEdge(c4);\n\
940 TopoDS_Edge E4 = BRepBuilderAPI_MakeEdge(c4);\n\
941 TopoDS_Edge E4 = BRepBuilderAPI_MakeEdge(c4);\n\
942 TopoDS_Wire W4 = BRepBuilderAPI_MakeWire(E4);\n\
943 BRepOffsetAPI_ThruSections generator(Standard_False,Standard_True);\n\
944 generator.AddWire(W1);\n\
945 generator.AddWire(W2);\n\
946 generator.AddWire(W3);\n\
947 generator.AddWire(W4);\n\
948 generator.Build();\n\
949 TopoDS_Shape S1 = generator.Shape();\n\
950 \n\
951 ---------- smooth -------------- \n\
952 \n\
953 gp_Circ c1b = gp_Circ(gp_Ax2(gp_Pnt(100.,0.,-100.),gp_Dir(0.,0.,1.)),40.); \n\
954 TopoDS_Edge E1b = BRepBuilderAPI_MakeEdge(c1b); \n\
955 TopoDS_Wire W1b = BRepBuilderAPI_MakeWire(E1b); \n\
956 gp_Circ c2b = gp_Circ(gp_Ax2(gp_Pnt(210.,0.,-0.),gp_Dir(0.,0.,1.)),40.); \n\
957 TopoDS_Edge E2b = BRepBuilderAPI_MakeEdge(c2b);\n\
958 TopoDS_Wire W2b = BRepBuilderAPI_MakeWire(E2b); \n\
959 gp_Circ c3b = gp_Circ(gp_Ax2(gp_Pnt(275.,0.,100.),gp_Dir(0.,0.,1.)),40.);\n\
960 TopoDS_Edge E3b = BRepBuilderAPI_MakeEdge(c3b);\n\
961 TopoDS_Wire W3b = BRepBuilderAPI_MakeWire(E3b);\n\
962 gp_Circ c4b= gp_Circ(gp_Ax2(gp_Pnt(200.,0.,200.),gp_Dir(0.,0.,1.)),40.);\n\
963 TopoDS_Edge E4b = BRepBuilderAPI_MakeEdge(c4b);\n\
964 TopoDS_Wire W4b = BRepBuilderAPI_MakeWire(E4b);\n\
965 BRepOffsetAPI_ThruSections generatorb(Standard_True,Standard_False);\n\
966 generatorb.AddWire(W1b);\n\
967 generatorb.AddWire(W2b);\n\
968 generatorb.AddWire(W3b);\n\
969 generatorb.AddWire(W4b);\n\
970 generatorb.Build();\n\
971 TopoDS_Shape S2 = generatorb.Shape();\n\
972                 \n");
973   PocessTextInDialog("Make a Thru sections", Message);
974
975 }
976
977 void CModelingDoc::OnEvolved() 
978 {
979         AIS_ListOfInteractive aList;
980         myAISContext->DisplayedObjects(aList);
981         AIS_ListIteratorOfListOfInteractive aListIterator;
982         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
983                 myAISContext->Remove (aListIterator.Value(), Standard_False);
984         }
985
986         BRepBuilderAPI_MakePolygon P;
987         P.Add(gp_Pnt(0.,0.,0.));
988         P.Add(gp_Pnt(200.,0.,0.));
989         P.Add(gp_Pnt(200.,200.,0.));
990         P.Add(gp_Pnt(0.,200.,0.));
991         P.Add(gp_Pnt(0.,0.,0.));
992         TopoDS_Wire W = P.Wire();
993         
994         Handle(AIS_Shape) ais1 = new AIS_Shape(W);
995         myAISContext->Display(ais1,Standard_False);
996         
997         TopoDS_Wire wprof = BRepBuilderAPI_MakePolygon(gp_Pnt(0.,0.,0.),gp_Pnt(-60.,-60.,-200.));
998         
999         Handle(AIS_Shape) ais3 = new AIS_Shape(wprof);
1000         myAISContext->Display(ais3,Standard_False);
1001         Fit();
1002         Sleep(500);
1003         TopoDS_Shape S = BRepOffsetAPI_MakeEvolved(W,wprof,GeomAbs_Arc,Standard_True,Standard_False,Standard_True,0.0001);
1004         
1005         Handle(AIS_Shape) ais2 = new AIS_Shape(S);
1006         myAISContext->SetColor(ais2,Quantity_NOC_MATRABLUE,Standard_False); 
1007         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
1008         myAISContext->Display(ais2,Standard_False);
1009         Fit();
1010         
1011         TCollection_AsciiString Message ("\
1012                 \n\
1013 ---------- Evolved shape -------------- \n\
1014 \n\
1015 BRepBuilderAPI_MakePolygon P;\n\
1016 P.Add(gp_Pnt(0.,0.,0.));\n\
1017 P.Add(gp_Pnt(200.,0.,0.));\n\
1018 P.Add(gp_Pnt(200.,200.,0.));\n\
1019 P.Add(gp_Pnt(0.,200.,0.));\n\
1020 P.Add(gp_Pnt(0.,0.,0.));\n\
1021 TopoDS_Wire W = P.Wire();\n\
1022 TopoDS_Wire wprof = BRepBuilderAPI_MakePolygon(gp_Pnt(0.,0.,0.),gp_Pnt(-60.,-60.,-200.));\n\
1023 TopoDS_Shape S = BRepBuilderAPI_MakeEvolved(W,wprof,GeomAbs_Arc,Standard_True,Standard_False,Standard_True,0.0001);\n\
1024                 \n");
1025   PocessTextInDialog("Make an evolved shape", Message);
1026
1027 }
1028
1029 void CModelingDoc::OnDraft() 
1030 {
1031         AIS_ListOfInteractive aList;
1032         myAISContext->DisplayedObjects(aList);
1033         AIS_ListIteratorOfListOfInteractive aListIterator;
1034         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1035                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1036         }
1037
1038   TopoDS_Shape S = BRepPrimAPI_MakeBox(200., 300., 150.).Shape();
1039         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
1040         myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False); 
1041         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
1042         myAISContext->Display(ais1,Standard_False);
1043         Fit();
1044         Sleep(500);
1045         BRepOffsetAPI_DraftAngle adraft(S);
1046         TopExp_Explorer Ex;
1047         for (Ex.Init(S,TopAbs_FACE); Ex.More(); Ex.Next()) {
1048                 TopoDS_Face F = TopoDS::Face(Ex.Current());
1049                 Handle(Geom_Plane) surf = Handle(Geom_Plane)::DownCast(BRep_Tool::Surface(F));
1050                 gp_Pln apln = surf->Pln();
1051                 gp_Dir dirF = apln.Axis().Direction();
1052                 if (dirF.IsNormal(gp_Dir(0.,0.,1.),Precision::Angular()))
1053                         adraft.Add(F, gp_Dir(0.,0.,1.), 15.*M_PI/180, gp_Pln(gp::XOY()));
1054         }
1055         ais1->Set(adraft.Shape());
1056         myAISContext->Redisplay(ais1,Standard_False);
1057         Fit();
1058
1059         TCollection_AsciiString Message ("\
1060                 \n\
1061 ---------- Tapered shape -------------- \n\
1062 \n\
1063 TopoDS_Shape S = BRepPrimAPI_MakeBox(200.,300.,150.);\n\
1064 BRepOffsetAPI_DraftAngle adraft(S);\n\
1065 TopExp_Explorer Ex;\n\
1066 for (Ex.Init(S,TopAbs_FACE); Ex.More(); Ex.Next()) {\n\
1067         TopoDS_Face F = TopoDS::Face(Ex.Current());\n\
1068         Handle(Geom_Plane) surf = Handle(Geom_Plane)::DownCast(BRep_Tool::Surface(F));\n\
1069         gp_Pln apln = surf->Pln();\n\
1070         gp_Dir dirF = apln.Axis().Direction();\n\
1071         if (dirF.IsNormal(gp_Dir(0.,0.,1.),Precision::Angular()))\n\
1072                 adraft.Add(F, gp_Dir(0.,0.,1.), 15.*PI180, gp_Pln(gp::XOY()));\n\
1073 }\n\
1074                 \n");
1075   PocessTextInDialog("Make a tapered shape", Message);
1076
1077 }
1078
1079 /* =================================================================================
1080    ====================   O P E R A T I O N S   ====================================
1081    ================================================================================= */
1082
1083 void CModelingDoc::OnCut() 
1084 {
1085         AIS_ListOfInteractive aList;
1086         myAISContext->DisplayedObjects(aList);
1087         AIS_ListIteratorOfListOfInteractive aListIterator;
1088         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1089                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1090         }
1091
1092   TopoDS_Shape theBox = BRepPrimAPI_MakeBox(200, 60, 60).Shape();
1093
1094 Handle (AIS_Shape)      ais1 = new AIS_Shape(theBox);
1095 myAISContext->SetDisplayMode(ais1,1,Standard_False);
1096 myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False);
1097 myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);
1098 myAISContext->Display(ais1,Standard_False);
1099 const Handle(AIS_InteractiveObject)& anIO1 = ais1;
1100 myAISContext->SetSelected (anIO1, Standard_False);
1101 Fit();
1102 Sleep(1000);
1103
1104
1105 TopoDS_Shape theSphere = BRepPrimAPI_MakeSphere(gp_Pnt(100, 20, 20), 80).Shape();
1106 Handle (AIS_Shape)      ais2 = new AIS_Shape(theSphere);
1107 myAISContext->SetDisplayMode(ais2,1,Standard_False);
1108 myAISContext->SetColor(ais2,Quantity_NOC_YELLOW,Standard_False);
1109 myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);
1110 myAISContext->Display(ais2,Standard_False);
1111 const Handle(AIS_InteractiveObject)& anIO2 = ais2;
1112 myAISContext->SetSelected (anIO2, Standard_False);
1113 Fit();
1114 Sleep(1000);
1115
1116 TopoDS_Shape ShapeCut = BRepAlgoAPI_Cut(theSphere,theBox);
1117
1118 myAISContext->Erase(ais1,Standard_False);
1119 myAISContext->Erase(ais2,Standard_False);
1120
1121 Handle (AIS_Shape)      aSection = new AIS_Shape(ShapeCut);
1122 myAISContext->SetDisplayMode(aSection,1,Standard_False);
1123 myAISContext->SetColor(aSection,Quantity_NOC_RED,Standard_False);
1124 myAISContext->SetMaterial(aSection,Graphic3d_NOM_PLASTIC,Standard_False);
1125 myAISContext->Display(aSection,Standard_False);
1126 const Handle(AIS_InteractiveObject)& anIOSection = aSection;
1127 myAISContext->SetSelected (anIOSection, Standard_False);
1128 Fit();
1129
1130     TCollection_AsciiString Message ("\
1131                 \n\
1132 TopoDS_Shape theBox = BRepPrimAPI_MakeBox(200,40,40); \n\
1133  \n\
1134 TopoDS_Shape theSphere = BRepPrimAPI_MakeSphere(gp_Pnt(100,20,20),80); \n\
1135  \n\
1136 TopoDS_Shape ShapeCut = BRepAlgoAPI_Cut(theSphere,theBox); \n\
1137  \n");
1138         PocessTextInDialog("Cut the sphere with a box", Message);
1139
1140
1141 }
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152 void CModelingDoc::OnFuse() 
1153 {
1154         AIS_ListOfInteractive aList;
1155         myAISContext->DisplayedObjects(aList);
1156         AIS_ListIteratorOfListOfInteractive aListIterator;
1157         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1158                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1159         }
1160
1161 gp_Pnt P(-5,5,-5);
1162 TopoDS_Shape theBox1 = BRepPrimAPI_MakeBox(60, 200, 70).Shape();
1163 Handle (AIS_Shape)      ais1 = new AIS_Shape(theBox1);
1164 myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False);
1165 myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);
1166 myAISContext->Display(ais1,Standard_False);
1167 const Handle(AIS_InteractiveObject)& anIO1 = ais1;
1168 myAISContext->SetSelected (anIO1, Standard_False);
1169 Fit();
1170 Sleep(1000);
1171
1172 TopoDS_Shape theBox2 = BRepPrimAPI_MakeBox(P, 20, 150, 110).Shape();
1173 Handle (AIS_Shape)      ais2 = new AIS_Shape(theBox2);
1174 myAISContext->SetColor(ais2,Quantity_NOC_YELLOW,Standard_False);
1175 myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);
1176 myAISContext->Display(ais2,Standard_False);
1177 const Handle(AIS_InteractiveObject)& anIO2 = ais2;
1178 myAISContext->SetSelected (anIO2, Standard_False);
1179 Fit();
1180 Sleep(1000);
1181
1182 TopoDS_Shape FusedShape = BRepAlgoAPI_Fuse(theBox1,theBox2);
1183
1184 myAISContext->Erase(ais1,false);
1185 myAISContext->Erase(ais2,false);
1186
1187 Handle (AIS_Shape)      aFusion = new AIS_Shape(FusedShape);
1188 myAISContext->SetDisplayMode(aFusion,1,Standard_False);
1189 myAISContext->SetColor(aFusion,Quantity_NOC_RED,Standard_False);
1190 myAISContext->SetMaterial(aFusion,Graphic3d_NOM_PLASTIC,Standard_False);
1191 myAISContext->Display(aFusion,Standard_False);
1192 const Handle(AIS_InteractiveObject)& anIOFusion = aFusion;
1193 myAISContext->SetSelected (anIOFusion, Standard_False);
1194 myAISContext->UpdateCurrentViewer();
1195
1196     TCollection_AsciiString Message ("\
1197                 \n\
1198 TopoDS_Shape theBox1 = BRepPrimAPI_MakeBox(50,200,70); \n\
1199  \n\
1200 TopoDS_Shape theBox2 = BRepPrimAPI_MakeBox(-30,150,70); \n\
1201  \n\
1202 TopoDS_Shape FusedShape = BRepAlgoAPI_Fuse(theBox1,theBox2); \n");
1203         PocessTextInDialog("Fuse the boxes", Message);
1204
1205 }
1206
1207 void CModelingDoc::OnCommon() 
1208 {
1209         AIS_ListOfInteractive aList;
1210         myAISContext->DisplayedObjects(aList);
1211         AIS_ListIteratorOfListOfInteractive aListIterator;
1212         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1213                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1214         }
1215
1216 gp_Ax2 axe(gp_Pnt(10,10,10),gp_Dir(1,2,1));
1217 TopoDS_Shape theBox = BRepPrimAPI_MakeBox(axe, 60, 80, 100).Shape();
1218
1219 Handle(AIS_Shape) aboxshape=new AIS_Shape(theBox);
1220 myAISContext->SetColor(aboxshape,Quantity_NOC_YELLOW,Standard_False);
1221 myAISContext->SetMaterial(aboxshape,Graphic3d_NOM_PLASTIC,Standard_False);    
1222 myAISContext->SetTransparency(aboxshape,0.2,Standard_False);
1223 myAISContext->Display(aboxshape, AIS_Shaded, 0, Standard_False);
1224 const Handle(AIS_InteractiveObject)& anIOBoxShape = aboxshape;
1225 myAISContext->SetSelected (anIOBoxShape, Standard_False);
1226 Fit();
1227 Sleep(500);
1228
1229 TopoDS_Shape theWedge = BRepPrimAPI_MakeWedge(60., 100., 80., 20.).Shape();
1230
1231 Handle(AIS_Shape) awedge = new AIS_Shape(theWedge);
1232 myAISContext->SetColor(awedge,Quantity_NOC_RED,Standard_False);
1233 myAISContext->SetMaterial(awedge,Graphic3d_NOM_PLASTIC,Standard_False);    
1234 myAISContext->SetTransparency(awedge,0.0,Standard_False);
1235 myAISContext->Display(awedge,Standard_False);
1236 const Handle(AIS_InteractiveObject)& anIOWedge = awedge;
1237 myAISContext->SetSelected (anIOWedge, Standard_False);
1238 myAISContext->UpdateCurrentViewer();
1239 Sleep(500);
1240
1241 TopoDS_Shape theCommonSurface = BRepAlgoAPI_Common(theBox,theWedge);
1242
1243 myAISContext->Erase(aboxshape, false);
1244 myAISContext->Erase(awedge, false);
1245
1246 Handle(AIS_Shape) acommon = new AIS_Shape(theCommonSurface);
1247 myAISContext->SetColor(acommon,Quantity_NOC_GREEN,Standard_False); 
1248 myAISContext->SetMaterial(acommon,Graphic3d_NOM_PLASTIC,Standard_False);    
1249 myAISContext->Display (acommon, AIS_Shaded, 0,Standard_False);
1250 const Handle(AIS_InteractiveObject)& anIOCommon = acommon;
1251 myAISContext->SetSelected (anIOCommon, Standard_False);
1252 myAISContext->UpdateCurrentViewer();
1253
1254    TCollection_AsciiString Message ("\
1255                 \n\
1256 gp_Ax2 axe(gp_Pnt(10,10,10),gp_Dir(1,2,1)); \n\
1257  \n\
1258 TopoDS_Shape theBox = BRepPrimAPI_MakeBox(axe,60,80,100); \n\
1259  \n\
1260 TopoDS_Shape theWedge = BRepPrimAPI_MakeWedge(60.,100.,80.,20.); \n\
1261  \n\
1262 TopoDS_Shape theCommonSurface = BRepAlgoAPI_Common(theBox,theWedge); \n\
1263  \n");
1264
1265         PocessTextInDialog("Compute the common surface ", Message);
1266
1267 }
1268
1269 void CModelingDoc::OnSection() 
1270 {
1271
1272         AIS_ListOfInteractive aList;
1273         myAISContext->DisplayedObjects(aList);
1274         AIS_ListIteratorOfListOfInteractive aListIterator;
1275         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1276                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1277         }
1278
1279   TopoDS_Shape atorus = BRepPrimAPI_MakeTorus(120, 20).Shape();
1280
1281     Handle(AIS_Shape) ashape=new AIS_Shape(atorus);
1282     myAISContext->SetColor(ashape,Quantity_NOC_RED,Standard_False);
1283     myAISContext->SetMaterial(ashape,Graphic3d_NOM_PLASTIC,Standard_False);    
1284     myAISContext->SetDisplayMode(ashape,1,Standard_False);
1285         myAISContext->SetTransparency(ashape,0.1,Standard_False);
1286     myAISContext->Display(ashape,Standard_False);
1287
1288 gp_Vec V1(1,1,1);
1289 Standard_Real radius = 120;
1290 Standard_Integer i=-3;
1291
1292 for(i;i<=3;i++) {
1293     TopoDS_Shape asphere = BRepPrimAPI_MakeSphere(gp_Pnt(26 * 3 * i, 0, 0), radius).Shape();
1294
1295     Handle (AIS_Shape) theShape=new AIS_Shape (asphere);
1296     myAISContext->SetTransparency(theShape,0.1,Standard_False);
1297     myAISContext->SetColor(theShape,Quantity_NOC_WHITE,Standard_False);
1298     myAISContext->SetDisplayMode(theShape,1,Standard_False);
1299     myAISContext->Display(theShape,Standard_False);
1300         Fit();
1301
1302     Standard_Boolean PerformNow=Standard_False; 
1303
1304     BRepAlgoAPI_Section section(atorus,asphere,PerformNow);
1305     section.ComputePCurveOn1(Standard_True);
1306     section.Approximation(TopOpeBRepTool_APPROX);
1307     section.Build();
1308
1309     Handle(AIS_Shape) asection=new AIS_Shape(section.Shape());
1310     myAISContext->SetDisplayMode (asection, 0, Standard_False);
1311     myAISContext->SetColor (asection, Quantity_NOC_WHITE, Standard_False);
1312     myAISContext->Display (asection, Standard_False);
1313     if(i<3) {
1314     myAISContext->Remove (theShape, Standard_False);
1315         }
1316 }
1317   myAISContext->UpdateCurrentViewer();
1318    TCollection_AsciiString Message ("\
1319                 \n\
1320 TopoDS_Shape atorus = BRepPrimAPI_MakeTorus(120,20); \n\
1321 gp_Vec V1(1,1,1); \n\
1322 Standard_Real radius = 120; \n\
1323 Standard_Integer i=-3; \n\
1324 for(i;i<=3;i++) { \n\
1325     TopoDS_Shape asphere = BRepPrimAPI_MakeSphere(gp_Pnt(78*i,0,0),radius); \n\
1326     Standard_Boolean PerformNow=Standard_False; \n\
1327     BRepAlgoAPI_Section section(atorus,asphere,PerformNow); \n\
1328     section.ComputePCurveOn1(Standard_True); \n\
1329     section.Approximation(TopOpeBRepTool_APPROX); \n\
1330     section.Build(); \n\
1331         \n");
1332
1333         PocessTextInDialog("Compute the sections ", Message);
1334
1335 }
1336
1337 void CModelingDoc::OnPsection() 
1338 {
1339         AIS_ListOfInteractive aList;
1340         myAISContext->DisplayedObjects(aList);
1341         AIS_ListIteratorOfListOfInteractive aListIterator;
1342         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1343                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1344         }
1345
1346 TopoDS_Shape theTorus = BRepPrimAPI_MakeTorus(35, 8).Shape();
1347 Handle(AIS_Shape) atorus = new AIS_Shape(theTorus);
1348 myAISContext->SetColor(atorus,Quantity_NOC_YELLOW,Standard_False); 
1349 myAISContext->SetMaterial(atorus,Graphic3d_NOM_PLASTIC,Standard_False);
1350 myAISContext->SetTransparency(atorus,0.1,Standard_False);
1351 myAISContext->Display(atorus,Standard_False);
1352 const Handle(AIS_InteractiveObject)& anIOTorus = atorus;
1353 myAISContext->SetSelected (anIOTorus, Standard_False);
1354 Fit();
1355 Sleep(500);
1356
1357 gp_Pln aplane(1,0.25,3,4);
1358 Handle (Geom_Plane) thePlane = new Geom_Plane(aplane);
1359 Handle (AIS_Plane) ais1 = new AIS_Plane(thePlane);
1360 myAISContext->Display(ais1,Standard_False);
1361 const Handle(AIS_InteractiveObject)& anIO1 = ais1;
1362 myAISContext->SetSelected (anIO1, Standard_False);
1363 Fit();
1364 Sleep(300);
1365
1366 BRepAlgoAPI_Section section(theTorus,thePlane,Standard_False);
1367 section.ComputePCurveOn1(Standard_True);
1368 section.Approximation(TopOpeBRepTool_APPROX);
1369 section.Build();
1370
1371 Handle(AIS_Shape) asection=new AIS_Shape(section.Shape());
1372 myAISContext->SetDisplayMode(asection ,0,Standard_False);
1373 myAISContext->SetColor(asection,Quantity_NOC_WHITE,Standard_False); 
1374 myAISContext->Display(asection,Standard_False);
1375 Fit();
1376
1377    TCollection_AsciiString Message ("\
1378                 \n\
1379 TopoDS_Shape theTorus = BRepPrimAPI_MakeTorus(60.,20.); \n\
1380  \n\
1381 gp_Pln P(1,2,1,-15); \n\
1382  \n\
1383 TopoDS_Shape Psection = BRepAlgoAPI_Section(theTorus,P);  \n\
1384 \n");
1385
1386         PocessTextInDialog("Compute the plane section ", Message);
1387
1388 }
1389
1390 void CModelingDoc::OnBlend() 
1391 {
1392         AIS_ListOfInteractive aList;
1393         myAISContext->DisplayedObjects(aList);
1394         AIS_ListIteratorOfListOfInteractive aListIterator;
1395         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1396                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1397         }
1398
1399 TopoDS_Shape Box = BRepPrimAPI_MakeBox(gp_Pnt(-400,0,0),200,230,180).Shape();
1400 Handle(AIS_Shape) ais1 = new AIS_Shape(Box);
1401 myAISContext->SetColor(ais1,Quantity_NOC_YELLOW,Standard_False); 
1402 myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False); 
1403 myAISContext->Display(ais1,Standard_False);
1404 const Handle(AIS_InteractiveObject)& anIO1 = ais1;
1405 myAISContext->SetSelected (anIO1, Standard_False);
1406 Fit();
1407 Sleep(500);
1408
1409 BRepFilletAPI_MakeFillet fillet(Box);
1410
1411 for (TopExp_Explorer ex(Box,TopAbs_EDGE); ex.More(); ex.Next()) {
1412         TopoDS_Edge Edge =TopoDS::Edge(ex.Current());
1413         fillet.Add(20,Edge);
1414 }
1415
1416 myAISContext->Remove(ais1,Standard_False);
1417
1418 TopoDS_Shape blendedBox = fillet.Shape();
1419 Handle(AIS_Shape) aBlendbox = new AIS_Shape(blendedBox);
1420 myAISContext->SetColor(aBlendbox,Quantity_NOC_YELLOW,Standard_False); 
1421 myAISContext->SetMaterial(aBlendbox,Graphic3d_NOM_PLASTIC,Standard_False); 
1422 myAISContext->Display(aBlendbox,Standard_False);
1423 const Handle(AIS_InteractiveObject)& anIOBlendBox = aBlendbox;
1424 myAISContext->SetSelected (anIOBlendBox, Standard_False);
1425 Fit();
1426 Sleep(500);
1427
1428
1429 gp_Pnt P1(250,150,75);
1430 TopoDS_Shape S1 = BRepPrimAPI_MakeBox(300, 200, 200).Shape();
1431 TopoDS_Shape S2 = BRepPrimAPI_MakeBox(P1, 120, 180, 70).Shape();
1432
1433 TopoDS_Shape fusedShape = BRepAlgoAPI_Fuse(S1,S2);
1434 Handle(AIS_Shape) ais2 = new AIS_Shape(fusedShape);
1435 myAISContext->SetColor(ais2,Quantity_NOC_RED,Standard_False); 
1436 myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);  
1437 myAISContext->Display(ais2,Standard_False);
1438 const Handle(AIS_InteractiveObject)& anIO2 = ais2;
1439 myAISContext->SetSelected (anIO2, Standard_False);
1440 Fit();
1441
1442 BRepFilletAPI_MakeFillet fill(fusedShape);
1443
1444 for (TopExp_Explorer ex1(fusedShape,TopAbs_EDGE); ex1.More(); ex1.Next()) {
1445         TopoDS_Edge E =TopoDS::Edge(ex1.Current());
1446         fill.Add(E);
1447 }
1448
1449 for (Standard_Integer i = 1;i<=fill.NbContours();i++) {
1450         Standard_Real longueur(fill.Length(i));
1451         Standard_Real Rad(0.15*longueur);
1452         fill.SetRadius(Rad,i, 1);
1453 }
1454
1455 TopoDS_Shape blendedFusedSolids = fill.Shape();
1456
1457 Handle(AIS_Shape) aBlend = new AIS_Shape(blendedFusedSolids);
1458 myAISContext->SetColor(aBlend,Quantity_NOC_RED,Standard_False); 
1459 myAISContext->SetMaterial(aBlend,Graphic3d_NOM_PLASTIC,Standard_False);  
1460 myAISContext->Display(aBlend,Standard_False);
1461
1462 myAISContext->Remove(ais2,Standard_False);
1463 Fit();
1464
1465
1466  TCollection_AsciiString Message ("\
1467                 \n\
1468 //THE YELLOW BOX\n\
1469 TopoDS_Shape Box = BRepPrimAPI_MakeBox(gp_Pnt(-400,0,0),200,230,180);\n\
1470 \n\
1471 BRepPrimAPI_MakeFillet fillet(Box);\n\
1472 \n\
1473 for (TopExp_Explorer ex(Box,TopAbs_EDGE); ex.More(); ex.Next()) {\n\
1474         TopoDS_Edge Edge =TopoDS::Edge(ex.Current());\n\
1475         fillet.Add(20,Edge);\n\
1476 }\n\
1477 TopoDS_Shape blendedBox = fillet.Shape();\n\
1478 \n\
1479 ////////////////////////////////////////////////////////////////////////\n\
1480 \n\
1481 //THE RED SOLID\n\
1482  \n\
1483 //Warning : On the acute angles of the boxes a fillet is created. \n\
1484 On the angles of fusion a blend is created. \n\
1485 \n\
1486 gp_Pnt P1(150,150,75);\n\
1487 TopoDS_Shape S1 = BRepPrimAPI_MakeBox(300,200,200);\n\
1488 TopoDS_Shape S2 = BRepPrimAPI_MakeBox(P1,100,200,70);\n\
1489 \n\
1490 TopoDS_Shape fusedShape = BRepAlgoAPI_Fuse(S1,S2);\n\
1491 BRepPrimAPI_MakeFillet fill(fusedShape);\n\
1492 \n\
1493 for (TopExp_Explorer ex1(fusedShape,TopAbs_EDGE); ex1.More(); ex1.Next()) {\n\
1494         TopoDS_Edge E =TopoDS::Edge(ex1.Current());\n\
1495         fill.Add(E);\n\
1496 }\n\
1497 \n\
1498 for (Standard_Integer i = 1;i<=fill.NbContours();i++) {\n\
1499         Standard_Real longueur(fill.Length(i));\n\
1500         Standard_Real Rad(0.2*longueur);\n\
1501         fill.SetRadius(Rad,i);\n\
1502 }\n\
1503 \n\
1504 TopoDS_Shape blendedFusedSolids = fill.Shape(); \n");
1505
1506         PocessTextInDialog("Compute the blend on the edges ", Message);
1507 }
1508
1509 void CModelingDoc::OnEvolvedblend() 
1510 {
1511
1512         AIS_ListOfInteractive aList;
1513         myAISContext->DisplayedObjects(aList);
1514         AIS_ListIteratorOfListOfInteractive aListIterator;
1515         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1516                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1517         }
1518
1519 TopoDS_Shape theBox = BRepPrimAPI_MakeBox(200, 200, 200).Shape();
1520 Handle(AIS_Shape) ais1 = new AIS_Shape(theBox);
1521 myAISContext->SetColor(ais1,Quantity_NOC_BROWN,Standard_False); 
1522 myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False); 
1523 myAISContext->Display(ais1,Standard_False);
1524 const Handle(AIS_InteractiveObject)& anIO1 = ais1;
1525 myAISContext->SetSelected (anIO1, Standard_False);
1526 Fit();
1527 Sleep(500);
1528
1529 BRepFilletAPI_MakeFillet Rake(theBox);
1530
1531 TopExp_Explorer ex(theBox,TopAbs_EDGE);
1532 ex.Next();
1533 ex.Next();
1534 ex.Next();
1535 ex.Next();
1536 Rake.Add(8,50,TopoDS::Edge(ex.Current()));
1537 Rake.Build();
1538 if (Rake.IsDone() ){
1539         TopoDS_Shape evolvedBox = Rake.Shape();
1540         ais1->Set(evolvedBox);
1541         myAISContext->Redisplay(ais1,Standard_False);
1542         myAISContext->SetSelected(anIO1, Standard_False);
1543         Fit();
1544         Sleep(500);
1545
1546 }
1547
1548 TopoDS_Shape theCylinder = BRepPrimAPI_MakeCylinder(gp_Ax2(gp_Pnt(-300, 0, 0), gp::DZ()), 100, 200).Shape();
1549 Handle(AIS_Shape) ais3 = new AIS_Shape(theCylinder);
1550 myAISContext->SetColor(ais3,Quantity_NOC_GREEN,Standard_False); 
1551 myAISContext->SetMaterial(ais3,Graphic3d_NOM_PLASTIC,Standard_False);    
1552 myAISContext->Display(ais3,Standard_False);
1553 const Handle(AIS_InteractiveObject)& anIO3 = ais3;
1554 myAISContext->SetSelected (anIO3, Standard_False);
1555 Fit();
1556 Sleep(500);
1557
1558 BRepFilletAPI_MakeFillet fillet(theCylinder);
1559
1560 TColgp_Array1OfPnt2d TabPoint2(1,20);
1561
1562 for (Standard_Integer i=0; i<=19; i++) {
1563         gp_Pnt2d Point2d(i*2*M_PI/19,60*cos(i*M_PI/19-M_PI/2)+10);
1564         TabPoint2.SetValue(i+1,Point2d);
1565 }
1566
1567 TopExp_Explorer exp2(theCylinder,TopAbs_EDGE);
1568 fillet.Add(TabPoint2,TopoDS::Edge(exp2.Current()));
1569 fillet.Build();
1570 if (fillet.IsDone() ){
1571         TopoDS_Shape LawEvolvedCylinder = fillet.Shape();
1572         ais3->Set(LawEvolvedCylinder);
1573         myAISContext->Redisplay(ais3,Standard_False);
1574         myAISContext->SetSelected(anIO3,Standard_False);
1575         Fit();
1576         Sleep(500);
1577 }
1578
1579 gp_Pnt P(350,0,0);
1580 TopoDS_Shape theBox2 = BRepPrimAPI_MakeBox(P, 200, 200, 200).Shape();
1581 Handle(AIS_Shape) ais2 = new AIS_Shape(theBox2);
1582 myAISContext->SetColor(ais2,Quantity_NOC_RED,Standard_False); 
1583 myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);    
1584 myAISContext->Display(ais2,Standard_False);
1585 const Handle(AIS_InteractiveObject)& anIO2 = ais2;
1586 myAISContext->SetSelected (anIO2, Standard_False);
1587 Fit();
1588 Sleep(500);
1589
1590
1591 BRepFilletAPI_MakeFillet afillet(theBox2);
1592
1593 TColgp_Array1OfPnt2d TabPoint(1,6);
1594
1595 gp_Pnt2d P1(0.,8.);
1596 gp_Pnt2d P2(0.2,16.);
1597 gp_Pnt2d P3(0.4,25.);
1598 gp_Pnt2d P4(0.6,55.);
1599 gp_Pnt2d P5(0.8,28.);
1600 gp_Pnt2d P6(1.,20.);
1601 TabPoint.SetValue(1,P1);
1602 TabPoint.SetValue(2,P2);
1603 TabPoint.SetValue(3,P3);
1604 TabPoint.SetValue(4,P4);
1605 TabPoint.SetValue(5,P5);
1606 TabPoint.SetValue(6,P6);
1607
1608 TopExp_Explorer exp(theBox2,TopAbs_EDGE);
1609 exp.Next();
1610 exp.Next();
1611 exp.Next();
1612 exp.Next();
1613
1614 afillet.Add(TabPoint, TopoDS::Edge(exp.Current()));
1615
1616 afillet.Build();
1617 if (afillet.IsDone() ){
1618         TopoDS_Shape LawevolvedBox = afillet.Shape();
1619         ais2->Set(LawevolvedBox);
1620         myAISContext->Redisplay(ais2,Standard_False);
1621         myAISContext->SetSelected(anIO2,Standard_False);
1622         Fit();
1623         
1624 }
1625
1626    TCollection_AsciiString Message ("\
1627                 \n\
1628 //THE BROWN BOX \n\
1629 \n\
1630 TopoDS_Shape theBox = BRepPrimAPI_MakeBox(200,200,200); \n\
1631         \n\
1632 BRepPrimAPI_MakeFillet Rake(theBox);    \n\
1633 ChFi3d_FilletShape FSh = ChFi3d_Rational;       \n\
1634 Rake.SetFilletShape(FSh);       \n\
1635         \n\
1636 TopExp_Explorer ex(theBox,TopAbs_EDGE); \n\
1637 ex.Next();   //in order to recover the front edge       \n\
1638 ex.Next();      \n\
1639 ex.Next();      \n\
1640 ex.Next();      \n\
1641 Rake.Add(8,50,TopoDS::Edge(ex.Current()));      \n\
1642         \n\
1643 Rake.Build();  \n\
1644 if (Rake.IsDone() )  \n\
1645         TopoDS_Shape theBrownBox = Rake.Shape();        \n\
1646         \n\
1647 //////////////////////////////////////////////////////////      \n\
1648         \n\
1649 //THE GREEN CYLINDER    \n\
1650         \n\
1651 TopoDS_Shape theCylinder = BRepPrimAPI_MakeCylinder(gp_Ax2(gp_Pnt(-300,0,0),gp_Dir(0,0,1)),100,200);    \n\
1652         \n\
1653 BRepPrimAPI_MakeFillet fillet(theCylinder);     \n\
1654         \n\
1655 TColgp_Array1OfPnt2d TabPoint2(1,20);   \n\
1656         \n\
1657 for (Standard_Integer i=0; i<=19; i++) {        \n\
1658         gp_Pnt2d Point2d(i*2*PI/19,60*cos(i*PI/19-PI/2)+10);    \n\
1659         TabPoint2.SetValue(i+1,Point2d);        \n\
1660 }       \n\
1661         \n\
1662 TopExp_Explorer exp2(theCylinder,TopAbs_EDGE);  \n\
1663 fillet.Add(TabPoint2,TopoDS::Edge(exp2.Current()));     \n\
1664         \n\
1665 fillet.Build();  \n\
1666 if (fillet.IsDone() )  \n\
1667         TopoDS_Shape LawEvolvedCylinder = fillet.Shape();       \n\
1668         \n\
1669 ////////////////////////////////////////////////////////////    \n\
1670         \n\
1671         //THE RED BOX \n\
1672  \n\
1673 gp_Pnt P(350,0,0);      \n\
1674 TopoDS_Shape theBox2 = BRepPrimAPI_MakeBox(P,200,200,200);      \n\
1675         \n\
1676 BRepPrimAPI_MakeFillet fill(theBox2);   \n\
1677         \n\
1678 TColgp_Array1OfPnt2d TabPoint(1,6);     \n\
1679 gp_Pnt2d P1(0,8);       \n\
1680 gp_Pnt2d P2(0.2,16);    \n\
1681 gp_Pnt2d P3(0.4,25);    \n\
1682 gp_Pnt2d P4(0.6,55);    \n\
1683 gp_Pnt2d P5(0.8,28);    \n\
1684 gp_Pnt2d P6(1,20);      \n\
1685 TabPoint.SetValue(1,P1);        \n\
1686 TabPoint.SetValue(2,P2);        \n\
1687 TabPoint.SetValue(3,P3);        \n\
1688 TabPoint.SetValue(4,P4);        \n\
1689 TabPoint.SetValue(5,P5);        \n\
1690 TabPoint.SetValue(6,P6);        \n\
1691         \n\
1692 TopExp_Explorer exp(theBox2,TopAbs_EDGE);       \n\
1693 exp.Next();  //in order to trcover the front edge       \n\
1694 exp.Next();     \n\
1695 exp.Next();     \n\
1696 exp.Next();     \n\
1697 fill.Add(TabPoint,TopoDS::Edge(exp.Current())); \n\
1698         \n\
1699 fill.Build();   \n\
1700 if (fillet.IsDone() )  \n\
1701         TopoDS_Shape theRedBox = fill.Shape();  \n\
1702 \n");
1703
1704         PocessTextInDialog("Compute evolutiv blend on an edge ", Message);
1705
1706 }
1707
1708 void CModelingDoc::OnChamf() 
1709 {
1710         AIS_ListOfInteractive aList;
1711         myAISContext->DisplayedObjects(aList);
1712         AIS_ListIteratorOfListOfInteractive aListIterator;
1713         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1714                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1715         }
1716
1717 TopoDS_Shape theBox = BRepPrimAPI_MakeBox(60,200,70).Shape();
1718 Handle(AIS_Shape) ais1 = new AIS_Shape(theBox);
1719 myAISContext->SetColor(ais1,Quantity_NOC_YELLOW,Standard_False); 
1720 myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);    
1721 myAISContext->Display(ais1,Standard_False);
1722 const Handle(AIS_InteractiveObject)& anIO1 = ais1;
1723 myAISContext->SetSelected (anIO1, Standard_False);
1724 Fit();
1725 Sleep(500);
1726
1727 BRepFilletAPI_MakeChamfer MC(theBox);
1728 // add all the edges to chamfer
1729 TopTools_IndexedDataMapOfShapeListOfShape M;
1730 TopExp::MapShapesAndAncestors(theBox,TopAbs_EDGE,TopAbs_FACE,M);
1731 for (Standard_Integer i = 1;i<=M.Extent();i++) {
1732         TopoDS_Edge E = TopoDS::Edge(M.FindKey(i));
1733         TopoDS_Face F = TopoDS::Face(M.FindFromIndex(i).First());
1734         MC.Add(5,5,E,F);
1735         }
1736
1737 TopoDS_Shape ChanfrenedBox = MC.Shape();
1738 Handle(AIS_Shape) aBlendedBox = new AIS_Shape(ChanfrenedBox);
1739 myAISContext->SetColor(aBlendedBox,Quantity_NOC_YELLOW,Standard_False); 
1740 myAISContext->SetMaterial(aBlendedBox,Graphic3d_NOM_PLASTIC,Standard_False);    
1741 myAISContext->Display(aBlendedBox,Standard_False);
1742 const Handle(AIS_InteractiveObject)& anIOBlendedBox = aBlendedBox;
1743 myAISContext->SetSelected (anIOBlendedBox, Standard_False);
1744 Fit();
1745 Sleep(500);
1746
1747 myAISContext->Erase(ais1,Standard_True);
1748
1749    TCollection_AsciiString Message ("\
1750                 \n\
1751 TopoDS_Shape theBox = BRepPrimAPI_MakeBox(130,200,170); \n\
1752 BRepFilletAPI_MakeChamfer MC(theBox); \n\
1753 TopTools_IndexedDataMapOfShapeListOfShape M; \n\
1754 TopExp::MapShapesAndAncestors(theBox,TopAbs_EDGE,TopAbs_FACE,M); \n\
1755 for (Standar1d_Integer i;i<M.Extent();i++) { \n\
1756         TopoDS_Edge E = TopoDS::Edge(M.FindKey(i)); \n\
1757         TopoDS_Face F = TopoDS::Face(M.FindFromIndex(i).First()); \n\
1758         MC.Add(15,15,E,F); \n\
1759         } \n\
1760 TopoDS_Shape ChanfrenedBox = MC.Shape();  \n");
1761
1762         PocessTextInDialog("Compute the chamfers on all the edges ", Message);
1763 }
1764
1765 /* =================================================================================
1766    ====================   L O C A L   O P E R A T I O N S   ========================
1767    ================================================================================= */
1768
1769 void CModelingDoc::OnPrismLocal() 
1770 {
1771         AIS_ListOfInteractive aList;
1772         myAISContext->DisplayedObjects(aList);
1773         AIS_ListIteratorOfListOfInteractive aListIterator;
1774         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1775                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1776         }
1777   TopoDS_Shape S = BRepPrimAPI_MakeBox(400., 250., 300.).Shape();
1778         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
1779
1780         myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False); 
1781         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
1782         myAISContext->Display(ais1,Standard_False);
1783         const Handle(AIS_InteractiveObject)& anIO1 = ais1;
1784         myAISContext->SetSelected (anIO1, Standard_False);
1785         Fit();
1786         Sleep(500);
1787
1788         TopExp_Explorer Ex;
1789         Ex.Init(S,TopAbs_FACE);
1790         Ex.Next();
1791         TopoDS_Face F = TopoDS::Face(Ex.Current());
1792         Handle(Geom_Surface) surf = BRep_Tool::Surface(F);
1793         Handle(Geom_Plane) Pl = Handle(Geom_Plane)::DownCast(surf);
1794         gp_Dir D = Pl->Pln().Axis().Direction();
1795 // new in 2.0 ..use the trigonometric orientation to make the extrusion.
1796         D.Reverse();
1797         gp_Pnt2d p1,p2;
1798         Handle(Geom2d_Curve) aline;
1799         BRepBuilderAPI_MakeWire MW;
1800         p1 = gp_Pnt2d(200.,-100.);
1801         p2 = gp_Pnt2d(100.,-100.);
1802         aline = GCE2d_MakeLine(p1,p2).Value();
1803         MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
1804         p1 = p2;
1805         p2 = gp_Pnt2d(100.,-200.);
1806         aline = GCE2d_MakeLine(p1,p2).Value();
1807         MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
1808         p1 = p2;
1809         p2 = gp_Pnt2d(200.,-200.);
1810         aline = GCE2d_MakeLine(p1,p2).Value();
1811         MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
1812         p1 = p2;
1813         p2 = gp_Pnt2d(200.,-100.);
1814         aline = GCE2d_MakeLine(p1,p2).Value();
1815         MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
1816         BRepBuilderAPI_MakeFace MKF;
1817         MKF.Init(surf,Standard_False, Precision::Confusion());
1818         MKF.Add(MW.Wire());
1819         TopoDS_Shape FP = MKF.Face();
1820         BRepLib::BuildCurves3d(FP);
1821         BRepFeat_MakePrism MKP(S,FP,F,D,0,Standard_True);
1822         MKP.Perform(200.);
1823         TopoDS_Shape res1 = MKP.Shape();
1824         ais1->Set(res1);
1825
1826         myAISContext->Redisplay(ais1,Standard_False);
1827         myAISContext->SetSelected(anIO1,Standard_False);
1828         Fit();
1829         Sleep(500);
1830
1831         Ex.Next();
1832         TopoDS_Face F2 = TopoDS::Face(Ex.Current());
1833         surf = BRep_Tool::Surface(F2);
1834         Pl = Handle(Geom_Plane)::DownCast(surf);
1835         D = Pl->Pln().Axis().Direction();
1836         D.Reverse();
1837         BRepBuilderAPI_MakeWire MW2;
1838         p1 = gp_Pnt2d(100.,100.);
1839         p2 = gp_Pnt2d(200.,100.);
1840         aline = GCE2d_MakeLine(p1,p2).Value();
1841         MW2.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
1842         p1 = p2;
1843         p2 = gp_Pnt2d(150.,200.);
1844         aline = GCE2d_MakeLine(p1,p2).Value();
1845         MW2.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
1846         p1 = p2;
1847         p2 = gp_Pnt2d(100.,100.);
1848         aline = GCE2d_MakeLine(p1,p2).Value();
1849         MW2.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
1850         BRepBuilderAPI_MakeFace MKF2;
1851         MKF2.Init(surf,Standard_False, Precision::Confusion());
1852         MKF2.Add(MW2.Wire());
1853         FP = MKF2.Face();
1854         BRepLib::BuildCurves3d(FP);
1855         BRepFeat_MakePrism MKP2(res1,FP,F2,D,1,Standard_True);
1856         MKP2.Perform(100.);
1857         TopoDS_Shape res2 = MKP2.Shape();
1858         ais1->Set(res2);
1859
1860         myAISContext->Redisplay (ais1, Standard_False);
1861         myAISContext->SetSelected (anIO1, Standard_False);
1862         Fit();
1863
1864         TCollection_AsciiString Message ("\
1865         \n\
1866 --- Extrusion ---\n\
1867         \n\
1868 TopoDS_Shape S = BRepPrimAPI_MakeBox(400.,250.,300.);\n\
1869 TopExp_Explorer Ex;\n\
1870 Ex.Init(S,TopAbs_FACE);\n\
1871 Ex.Next();\n\
1872 TopoDS_Face F = TopoDS::Face(Ex.Current());\n\
1873 Handle(Geom_Surface) surf = BRep_Tool::Surface(F);\n\
1874 Handle(Geom_Plane) Pl = Handle(Geom_Plane)::DownCast(surf);\n\
1875 gp_Dir D = Pl->Pln().Axis().Direction();\n\
1876 D.Reverse();\n\
1877 gp_Pnt2d p1,p2;\n\
1878 Handle(Geom2d_Curve) aline;\n\
1879 BRepBuilderAPI_MakeWire MW;\n\
1880 p1 = gp_Pnt2d(200.,-100.);\n\
1881 p2 = gp_Pnt2d(100.,-100.);\n\
1882 aline = GCE2d_MakeLine(p1,p2).Value();\n\
1883 MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
1884 p1 = p2;\n\
1885 p2 = gp_Pnt2d(100.,-200.);\n\
1886 aline = GCE2d_MakeLine(p1,p2).Value();\n\
1887 MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
1888 p1 = p2;\n\
1889 p2 = gp_Pnt2d(200.,-200.);\n\
1890 aline = GCE2d_MakeLine(p1,p2).Value();\n\
1891 MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
1892 p1 = p2;\n\
1893 p2 = gp_Pnt2d(200.,-100.);\n\
1894 aline = GCE2d_MakeLine(p1,p2).Value();\n\
1895 MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
1896 BRepBuilderAPI_MakeFace MKF;\n\
1897 MKF.Init(surf,Standard_False);\n\
1898 MKF.Add(MW.Wire());\n\
1899 TopoDS_Shape FP = MKF.Face();\n\
1900 BRepLib::BuildCurves3d(FP);\n\
1901 BRepFeat_MakePrism MKP(S,FP,F,D,0,Standard_True);\n\
1902 MKP.Perform(200);\n\
1903 TopoDS_Shape res1 = MKP.Shape();\n\
1904         \n");
1905                 Message += "\n\
1906 --- Protrusion --- \n\
1907 \n\
1908 Ex.Next();\n\
1909 TopoDS_Face F2 = TopoDS::Face(Ex.Current());\n\
1910 surf = BRep_Tool::Surface(F2);\n\
1911 Pl = Handle(Geom_Plane)::DownCast(surf);\n\
1912 D = Pl->Pln().Axis().Direction();\n\
1913 D.Reverse();\n\
1914 BRepBuilderAPI_MakeWire MW2;\n\
1915 p1 = gp_Pnt2d(100.,100.);\n\
1916 p2 = gp_Pnt2d(200.,100.);\n\
1917 aline = GCE2d_MakeLine(p1,p2).Value();\n\
1918 MW2.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
1919 p1 = p2;\n\
1920 p2 = gp_Pnt2d(150.,200.);\n\
1921 aline = GCE2d_MakeLine(p1,p2).Value();\n\
1922 MW2.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
1923 p1 = p2;\n\
1924 p2 = gp_Pnt2d(100.,100.);\n\
1925 aline = GCE2d_MakeLine(p1,p2).Value();\n\
1926 MW2.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
1927 BRepBuilderAPI_MakeFace MKF2;\n\
1928 MKF2.Init(surf,Standard_False);\n\
1929 MKF2.Add(MW2.Wire());\n\
1930 FP = MKF2.Face();\n\
1931 BRepLib::BuildCurves3d(FP);\n\
1932 BRepFeat_MakePrism MKP2(res1,FP,F2,D,1,Standard_True);\n\
1933 MKP2.Perform(100.);\n\
1934 TopoDS_Shape res2 = MKP2.Shape();\n\
1935         \n";
1936         PocessTextInDialog("Make an extrusion or a protrusion", Message);
1937 }
1938
1939 //
1940 // BRepFeat_MakeDPrism
1941 //
1942 void CModelingDoc::OnDprismLocal() 
1943 {
1944         AIS_ListOfInteractive aList;
1945         myAISContext->DisplayedObjects(aList);
1946         AIS_ListIteratorOfListOfInteractive aListIterator;
1947         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1948                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1949         }
1950
1951   TopoDS_Shape S = BRepPrimAPI_MakeBox(400., 250., 300.).Shape();
1952         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
1953
1954         myAISContext->SetColor(ais1,Quantity_NOC_RED,Standard_False); 
1955         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
1956         
1957         TopExp_Explorer Ex;
1958         Ex.Init(S,TopAbs_FACE);
1959         Ex.Next();
1960         Ex.Next();
1961         Ex.Next();
1962         Ex.Next();
1963         Ex.Next();
1964         TopoDS_Face F = TopoDS::Face(Ex.Current());
1965         Handle(Geom_Surface) surf = BRep_Tool::Surface(F);
1966         gp_Circ2d c(gp_Ax2d(gp_Pnt2d(200.,130.),gp_Dir2d(1.,0.)),50.);
1967         BRepBuilderAPI_MakeWire MW;
1968         Handle(Geom2d_Curve) aline = new Geom2d_Circle(c);
1969         MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,M_PI));
1970         MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,M_PI,2.*M_PI));
1971         BRepBuilderAPI_MakeFace MKF;
1972         MKF.Init(surf,Standard_False, Precision::Confusion());
1973         MKF.Add(MW.Wire());
1974         TopoDS_Face FP = MKF.Face();
1975         BRepLib::BuildCurves3d(FP);
1976         BRepFeat_MakeDPrism MKDP(S,FP,F,10*M_PI/180,1,Standard_True);
1977         MKDP.Perform(200);
1978         TopoDS_Shape res1 = MKDP.Shape();
1979
1980         myAISContext->Display(ais1,Standard_False);
1981         const Handle(AIS_InteractiveObject)& anIO1 = ais1;
1982         myAISContext->SetSelected (anIO1, Standard_False);
1983         Fit();
1984         Sleep(500);
1985
1986         ais1->Set(res1);
1987         
1988         myAISContext->Redisplay(ais1,Standard_False);
1989         myAISContext->SetSelected(anIO1,Standard_False);
1990
1991         Fit();
1992
1993         TCollection_AsciiString Message ("\
1994         \n\
1995 --- Protrusion with draft angle --- \n\
1996         \n\
1997 TopoDS_Shape S = BRepPrimAPI_MakeBox(400.,250.,300.);\n\
1998 TopExp_Explorer Ex;\n\
1999 Ex.Init(S,TopAbs_FACE);\n\
2000 Ex.Next();\n\
2001 Ex.Next();\n\
2002 Ex.Next();\n\
2003 Ex.Next();\n\
2004 Ex.Next();\n\
2005 TopoDS_Face F = TopoDS::Face(Ex.Current());\n\
2006 Handle(Geom_Surface) surf = BRep_Tool::Surface(F);\n\
2007 gp_Circ2d c(gp_Ax2d(gp_Pnt2d(200.,130.),gp_Dir2d(1.,0.)),50.);\n\
2008 BRepBuilderAPI_MakeWire MW;\n\
2009 Handle(Geom2d_Curve) aline = new Geom2d_Circle(c);\n\
2010 MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,PI));\n\
2011 MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,PI,2.*PI));\n\
2012 BRepBuilderAPI_MakeFace MKF;\n\
2013 MKF.Init(surf,Standard_False);\n\
2014 MKF.Add(MW.Wire());\n\
2015 TopoDS_Face FP = MKF.Face();\n\
2016 BRepLib::BuildCurves3d(FP);\n\
2017 BRepFeat_MakeDPrism MKDP(S,FP,F,10*PI180,1,Standard_True);\n\
2018 MKDP.Perform(200);\n\
2019 TopoDS_Shape res1 = MKDP.Shape();\n\
2020         \n");
2021         PocessTextInDialog("Make an extrusion or a protrusion with a draft angle", Message);
2022 }
2023
2024 void CModelingDoc::OnRevolLocal() 
2025 {
2026         AIS_ListOfInteractive aList;
2027         myAISContext->DisplayedObjects(aList);
2028         AIS_ListIteratorOfListOfInteractive aListIterator;
2029         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
2030                 myAISContext->Remove (aListIterator.Value(), Standard_False);
2031         }
2032   TopoDS_Shape S = BRepPrimAPI_MakeBox(400., 250., 300.).Shape();
2033
2034         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
2035         
2036         myAISContext->SetColor(ais1,Quantity_NOC_CORAL,Standard_False); 
2037         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
2038         myAISContext->Display(ais1,Standard_False);
2039         const Handle(AIS_InteractiveObject)& anIO1 = ais1;
2040         myAISContext->SetSelected (anIO1, Standard_False);
2041         Fit();
2042         Sleep(500);
2043
2044         TopExp_Explorer Ex;
2045         Ex.Init(S,TopAbs_FACE);
2046         Ex.Next();
2047         Ex.Next();
2048         TopoDS_Face F1 = TopoDS::Face(Ex.Current());
2049         Handle(Geom_Surface) surf = BRep_Tool::Surface(F1);
2050         Handle (Geom_Plane) Pl = Handle(Geom_Plane)::DownCast(surf);
2051         gp_Ax1 D = gp::OX();
2052         BRepBuilderAPI_MakeWire MW1;
2053         gp_Pnt2d p1,p2;
2054         p1 = gp_Pnt2d(100.,100.);
2055         p2 = gp_Pnt2d(200.,100.);
2056         Handle(Geom2d_Line) aline = GCE2d_MakeLine(p1,p2).Value();
2057         MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
2058         p1 = p2;
2059         p2 = gp_Pnt2d(150.,200.);
2060         aline = GCE2d_MakeLine(p1,p2).Value();
2061         MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
2062         p1 = p2;
2063         p2 = gp_Pnt2d(100.,100.);
2064         aline = GCE2d_MakeLine(p1,p2).Value();
2065         MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
2066         BRepBuilderAPI_MakeFace MKF1;
2067         MKF1.Init(surf,Standard_False, Precision::Confusion());
2068         MKF1.Add(MW1.Wire());
2069         TopoDS_Face FP = MKF1.Face();
2070         BRepLib::BuildCurves3d(FP);
2071         BRepFeat_MakeRevol MKrev(S,FP,F1,D,1,Standard_True);
2072         Ex.Next();
2073         Ex.Next();
2074         TopoDS_Face F2 = TopoDS::Face(Ex.Current());
2075         MKrev.Perform(F2);
2076         TopoDS_Shape res1 = MKrev.Shape();
2077
2078
2079         myAISContext->Remove (ais1, Standard_False);
2080         Handle(AIS_Shape) ais2 = new AIS_Shape(res1);
2081         myAISContext->Display(ais2,Standard_False);
2082         const Handle(AIS_InteractiveObject)& anIO2 = ais2;
2083         myAISContext->SetSelected (anIO2, Standard_False);
2084         Fit();
2085
2086         TCollection_AsciiString Message ("\
2087         \n\
2088 TopoDS_Shape S = BRepPrimAPI_MakeBox(400.,250.,300.);\n\
2089 TopExp_Explorer Ex;\n\
2090 Ex.Init(S,TopAbs_FACE);\n\
2091 Ex.Next();\n\
2092 Ex.Next();\n\
2093 TopoDS_Face F1 = TopoDS::Face(Ex.Current());\n\
2094 Handle(Geom_Surface) surf = BRep_Tool::Surface(F1);\n\
2095 Handle (Geom_Plane) Pl = Handle(Geom_Plane)::DownCast(surf);\n\
2096 gp_Ax1 D = gp::OX();\n\
2097 BRepBuilderAPI_MakeWire MW1;\n\
2098 gp_Pnt2d p1,p2;\n\
2099 p1 = gp_Pnt2d(100.,100.);\n\
2100 p2 = gp_Pnt2d(200.,100.);\n\
2101 Handle(Geom2d_Line) aline = GCE2d_MakeLine(p1,p2).Value();\n\
2102 MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
2103 p1 = p2;\n\
2104 p2 = gp_Pnt2d(150.,200.);\n\
2105 aline = GCE2d_MakeLine(p1,p2).Value();\n\
2106 MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
2107 p1 = p2;\n\
2108 p2 = gp_Pnt2d(100.,100.);\n\
2109 aline = GCE2d_MakeLine(p1,p2).Value();\n\
2110 MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
2111 BRepBuilderAPI_MakeFace MKF1;\n\
2112 MKF1.Init(surf,Standard_False);\n\
2113 MKF1.Add(MW1.Wire());\n\
2114 TopoDS_Face FP = MKF1.Face();\n\
2115 BRepLib::BuildCurves3d(FP);\n\
2116 BRepFeat_MakeRevol MKrev(S,FP,F1,D,1,Standard_True);\n\
2117 Ex.Next();\n\
2118 TopoDS_Face F2 = TopoDS::Face(Ex.Current());\n\
2119 MKrev.Perform(F2);\n\
2120 TopoDS_Shape res1 = MKrev.Shape();\n\
2121         \n");
2122   PocessTextInDialog("Make a local revolution", Message);
2123 }
2124
2125 void CModelingDoc::OnGlueLocal() 
2126 {
2127         AIS_ListOfInteractive aList;
2128         myAISContext->DisplayedObjects(aList);
2129         AIS_ListIteratorOfListOfInteractive aListIterator;
2130         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
2131                 myAISContext->Remove (aListIterator.Value(), Standard_False);
2132         }
2133   TopoDS_Shape S1 = BRepPrimAPI_MakeBox(gp_Pnt(-500., -500., 0.), gp_Pnt(-100., -250., 300.)).Shape();
2134
2135         Handle(AIS_Shape) ais1 = new AIS_Shape(S1);
2136         myAISContext->SetColor(ais1,Quantity_NOC_ORANGE,Standard_False); 
2137         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
2138         myAISContext->Display(ais1,Standard_False);
2139         const Handle(AIS_InteractiveObject)& anIO1 = ais1;
2140         myAISContext->SetSelected (anIO1, Standard_False);
2141         Fit();
2142         Sleep(1000);
2143         
2144         TopExp_Explorer Ex1;
2145         Ex1.Init(S1,TopAbs_FACE);
2146         Ex1.Next();
2147         Ex1.Next();
2148         Ex1.Next();
2149         Ex1.Next();
2150         Ex1.Next();
2151         TopoDS_Face F1 = TopoDS::Face(Ex1.Current());
2152   TopoDS_Shape S2 = BRepPrimAPI_MakeBox(gp_Pnt(-400., -400., 300.), gp_Pnt(-200., -300., 500.)).Shape();
2153         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
2154
2155         myAISContext->SetColor(ais2,Quantity_NOC_AZURE,Standard_False); 
2156         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
2157         myAISContext->Display(ais2,Standard_False);
2158         const Handle(AIS_InteractiveObject)& anIO2 = ais2;
2159         myAISContext->SetSelected (anIO2, Standard_False);
2160         Fit();
2161         Sleep(1000);
2162
2163         TopExp_Explorer Ex2;
2164         Ex2.Init(S2,TopAbs_FACE);
2165         Ex2.Next();
2166         Ex2.Next();
2167         Ex2.Next();
2168         Ex2.Next();
2169         TopoDS_Face F2 = TopoDS::Face(Ex2.Current());
2170         BRepFeat_Gluer glue(S2,S1);
2171         glue.Bind(F2,F1);
2172         TopoDS_Shape res1 = glue.Shape();
2173         myAISContext->Erase(ais2,Standard_False);
2174         
2175         ais1->Set(res1);
2176
2177         myAISContext->Redisplay (ais1, Standard_False);
2178         myAISContext->SetSelected(anIO1,Standard_False);
2179         Fit();
2180         Sleep(1000);
2181
2182   TopoDS_Shape S3 = BRepPrimAPI_MakeBox(500., 400., 300.).Shape();
2183
2184         Handle(AIS_Shape) ais3 = new AIS_Shape(S3);
2185         myAISContext->SetColor(ais3,Quantity_NOC_ORANGE,Standard_False); 
2186         myAISContext->SetMaterial(ais3,Graphic3d_NOM_PLASTIC,Standard_False);   
2187         myAISContext->Display(ais3,Standard_False);
2188         const Handle(AIS_InteractiveObject)& anIO3 = ais3;
2189         myAISContext->SetSelected (anIO3, Standard_False);
2190         Fit();
2191         Sleep(1000);
2192
2193         TopExp_Explorer Ex3;
2194         Ex3.Init(S3,TopAbs_FACE);
2195         Ex3.Next();
2196         Ex3.Next();
2197         Ex3.Next();
2198         Ex3.Next();
2199         Ex3.Next();
2200         TopoDS_Face F3 = TopoDS::Face(Ex3.Current());
2201   TopoDS_Shape S4 = BRepPrimAPI_MakeBox(gp_Pnt(0., 0., 300.), gp_Pnt(200., 200., 500.)).Shape();
2202
2203         Handle(AIS_Shape) ais4 = new AIS_Shape(S4);
2204         myAISContext->SetColor(ais4,Quantity_NOC_AZURE,Standard_False); 
2205         myAISContext->SetMaterial(ais4,Graphic3d_NOM_PLASTIC,Standard_False);   
2206         myAISContext->Display(ais4,Standard_False);
2207         const Handle(AIS_InteractiveObject)& anIO4 = ais4;
2208         myAISContext->SetSelected (anIO4, Standard_False);
2209         Fit();
2210         Sleep(1000);
2211
2212         TopExp_Explorer Ex4;
2213         Ex4.Init(S4,TopAbs_FACE);
2214         Ex4.Next();
2215         Ex4.Next();
2216         Ex4.Next();
2217         Ex4.Next();
2218         TopoDS_Face F4 = TopoDS::Face(Ex4.Current());
2219         BRepFeat_Gluer glue2(S4,S3);
2220         glue2.Bind(F4,F3);
2221         LocOpe_FindEdges CommonEdges(F4,F3);
2222         for (CommonEdges.InitIterator(); CommonEdges.More(); CommonEdges.Next()) 
2223                 glue2.Bind(CommonEdges.EdgeFrom(),CommonEdges.EdgeTo());
2224         TopoDS_Shape res2 = glue2.Shape();
2225         myAISContext->Erase(ais3,Standard_False);
2226         
2227         ais4->Set(res2);
2228
2229         myAISContext->Redisplay(ais4,Standard_False);
2230         myAISContext->SetSelected(anIO4,Standard_False);
2231         Fit();
2232         Sleep(1000);
2233
2234         TCollection_AsciiString Message ("\
2235         \n\
2236 --- Without common edges ---\n\
2237         \n\
2238 TopoDS_Shape S1 = BRepPrimAPI_MakeBox(gp_Pnt(-500.,-500.,0.),gp_Pnt(-100.,-250.,300.));\n\
2239 TopExp_Explorer Ex1;\n\
2240 Ex1.Init(S1,TopAbs_FACE);\n\
2241 Ex1.Next();\n\
2242 Ex1.Next();\n\
2243 Ex1.Next();\n\
2244 Ex1.Next();\n\
2245 Ex1.Next();\n\
2246 TopoDS_Face F1 = TopoDS::Face(Ex1.Current());\n\
2247 TopoDS_Shape S2 = BRepPrimAPI_MakeBox(gp_Pnt(-400.,-400.,300.),gp_Pnt(-200.,-300.,500.));\n\
2248 TopExp_Explorer Ex2;\n\
2249 Ex2.Init(S2,TopAbs_FACE);\n\
2250 Ex2.Next();\n\
2251 Ex2.Next();\n\
2252 Ex2.Next();\n\
2253 Ex2.Next();\n\
2254 TopoDS_Face F2 = TopoDS::Face(Ex2.Current());\n\
2255 BRepFeat_Gluer glue(S2,S1);\n\
2256 glue.Bind(F2,F1);\n\
2257 TopoDS_Shape res1 = glue.Shape();\n\
2258 \n\
2259 --- With common edges ---\n\
2260 \n\
2261 TopoDS_Shape S3 = BRepPrimAPI_MakeBox(500.,400.,300.);\n\
2262 TopExp_Explorer Ex3;\n\
2263 Ex3.Init(S3,TopAbs_FACE);\n\
2264 Ex3.Next();\n\
2265 Ex3.Next();\n\
2266 Ex3.Next();\n\
2267 Ex3.Next();\n\
2268 Ex3.Next();\n\
2269 TopoDS_Face F3 = TopoDS::Face(Ex3.Current());\n\
2270 TopoDS_Shape S4 = BRepPrimAPI_MakeBox(gp_Pnt(0.,0.,300.),gp_Pnt(200.,200.,500.));\n\
2271 TopExp_Explorer Ex4;\n\
2272 Ex4.Init(S4,TopAbs_FACE);\n\
2273 Ex4.Next();\n\
2274 Ex4.Next();\n\
2275 Ex4.Next();\n\
2276 Ex4.Next();\n\
2277 TopoDS_Face F4 = TopoDS::Face(Ex4.Current());\n\
2278 BRepFeat_Gluer glue2(S4,S3);\n\
2279 glue2.Bind(F4,F3);\n\
2280 LocOpe_FindEdges CommonEdges(F4,F3);\n\
2281 for (CommonEdges.InitIterator(); CommonEdges.More(); CommonEdges.Next()) \n\
2282         glue2.Bind(CommonEdges.EdgeFrom(),CommonEdges.EdgeTo());\n\
2283 TopoDS_Shape res2 = glue2.Shape();\n\
2284         \n");
2285   PocessTextInDialog("Glue two solids", Message);
2286 }
2287
2288
2289 void CModelingDoc::OnPipeLocal() 
2290 {
2291         AIS_ListOfInteractive aList;
2292         myAISContext->DisplayedObjects(aList);
2293         AIS_ListIteratorOfListOfInteractive aListIterator;
2294         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
2295                 myAISContext->Remove (aListIterator.Value(), Standard_False);
2296         }
2297   TopoDS_Shape S = BRepPrimAPI_MakeBox(400., 250., 300.).Shape();
2298         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
2299
2300         myAISContext->SetColor(ais1,Quantity_NOC_CORAL,Standard_False); 
2301         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
2302         myAISContext->Display(ais1,Standard_False);
2303         const Handle(AIS_InteractiveObject)& anIO1 = ais1;
2304         myAISContext->SetSelected (anIO1, Standard_False);
2305         Fit();
2306         Sleep(500);
2307
2308         TopExp_Explorer Ex;
2309         Ex.Init(S,TopAbs_FACE);
2310         Ex.Next();
2311         Ex.Next();
2312         TopoDS_Face F1 = TopoDS::Face(Ex.Current());
2313         Handle(Geom_Surface) surf = BRep_Tool::Surface(F1);
2314         BRepBuilderAPI_MakeWire MW1;
2315         gp_Pnt2d p1,p2;
2316         p1 = gp_Pnt2d(100.,100.);
2317         p2 = gp_Pnt2d(200.,100.);
2318         Handle(Geom2d_Line) aline = GCE2d_MakeLine(p1,p2).Value();
2319         MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
2320         p1 = p2;
2321         p2 = gp_Pnt2d(150.,200.);
2322         aline = GCE2d_MakeLine(p1,p2).Value();
2323         MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
2324         p1 = p2;
2325         p2 = gp_Pnt2d(100.,100.);
2326         aline = GCE2d_MakeLine(p1,p2).Value();
2327         MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
2328         BRepBuilderAPI_MakeFace MKF1;
2329         MKF1.Init(surf,Standard_False, Precision::Confusion());
2330         MKF1.Add(MW1.Wire());
2331         TopoDS_Face FP = MKF1.Face();
2332         BRepLib::BuildCurves3d(FP);
2333         TColgp_Array1OfPnt CurvePoles(1,3);
2334         gp_Pnt pt = gp_Pnt(150.,0.,150.);
2335         CurvePoles(1) = pt;
2336         pt = gp_Pnt(200.,-100.,150.);
2337         CurvePoles(2) = pt;
2338         pt = gp_Pnt(150.,-200.,150.);
2339         CurvePoles(3) = pt;
2340         Handle(Geom_BezierCurve) curve = new Geom_BezierCurve(CurvePoles);
2341         TopoDS_Edge E = BRepBuilderAPI_MakeEdge(curve);
2342         TopoDS_Wire W = BRepBuilderAPI_MakeWire(E);
2343         BRepFeat_MakePipe MKPipe(S,FP,F1,W,1,Standard_True);
2344         MKPipe.Perform();
2345         TopoDS_Shape res1 = MKPipe.Shape();
2346         ais1->Set(res1);
2347
2348         myAISContext->Redisplay(ais1,Standard_False); 
2349         myAISContext->SetSelected(anIO1,Standard_False);
2350         Fit();
2351         
2352         TCollection_AsciiString Message ("\
2353         \n\
2354 TopoDS_Shape S = BRepPrimAPI_MakeBox(400.,250.,300.);\n\
2355 TopExp_Explorer Ex;\n\
2356 Ex.Init(S,TopAbs_FACE);\n\
2357 Ex.Next();\n\
2358 Ex.Next();\n\
2359 TopoDS_Face F1 = TopoDS::Face(Ex.Current());\n\
2360 Handle(Geom_Surface) surf = BRep_Tool::Surface(F1);\n\
2361 BRepBuilderAPI_MakeWire MW1;\n\
2362 gp_Pnt2d p1,p2;\n\
2363 p1 = gp_Pnt2d(100.,100.);\n\
2364 p2 = gp_Pnt2d(200.,100.);\n\
2365 Handle(Geom2d_Line) aline = GCE2d_MakeLine(p1,p2).Value();\n\
2366 MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
2367 p1 = p2;\n\
2368 p2 = gp_Pnt2d(150.,200.);\n\
2369 aline = GCE2d_MakeLine(p1,p2).Value();\n\
2370 MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
2371 p1 = p2;\n\
2372 p2 = gp_Pnt2d(100.,100.);\n\
2373 aline = GCE2d_MakeLine(p1,p2).Value();\n\
2374 MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
2375 BRepBuilderAPI_MakeFace MKF1;\n\
2376 MKF1.Init(surf,Standard_False);\n\
2377 TopoDS_Face FP = MKF1.Face();\n\
2378 BRepLib::BuildCurves3d(FP);\n\
2379 TColgp_Array1OfPnt CurvePoles(1,3);\n\
2380 gp_Pnt pt = gp_Pnt(150.,0.,150.);\n\
2381 CurvePoles(1) = pt;\n\
2382 pt = gp_Pnt(200.,-100.,150.);\n\
2383 CurvePoles(2) = pt;\n\
2384 pt = gp_Pnt(150.,-200.,150.);\n\
2385 CurvePoles(3) = pt;\n\
2386 Handle(Geom_BezierCurve) curve = new Geom_BezierCurve(CurvePoles);\n\
2387 TopoDS_Edge E = BRepBuilderAPI_MakeEdge(curve);\n\
2388 TopoDS_Wire W = BRepBuilderAPI_MakeWire(E);\n\
2389 BRepFeat_MakePipe MKPipe(S,FP,F1,W,1,Standard_True);\n\
2390 MKPipe.Perform();\n\
2391 TopoDS_Shape res1 = MKPipe.Shape();\n\
2392         \n");
2393   PocessTextInDialog("Make a local pipe", Message);
2394 }
2395
2396
2397 void CModelingDoc::OnLinearLocal() 
2398 {
2399         AIS_ListOfInteractive aList;
2400         myAISContext->DisplayedObjects(aList);
2401         AIS_ListIteratorOfListOfInteractive aListIterator;
2402         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
2403                 myAISContext->Remove (aListIterator.Value(), Standard_False);
2404         }
2405         BRepBuilderAPI_MakeWire mkw;
2406         gp_Pnt p1 = gp_Pnt(0.,0.,0.);
2407         gp_Pnt p2 = gp_Pnt(200.,0.,0.);
2408         mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));
2409         p1 = p2;
2410         p2 = gp_Pnt(200.,0.,50.);
2411         mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));
2412         p1 = p2;
2413         p2 = gp_Pnt(50.,0.,50.);
2414         mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));
2415         p1 = p2;
2416         p2 = gp_Pnt(50.,0.,200.);
2417         mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));
2418         p1 = p2;
2419         p2 = gp_Pnt(0.,0.,200.);
2420         mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));
2421         p1 = p2;
2422         mkw.Add(BRepBuilderAPI_MakeEdge(p2,gp_Pnt(0.,0.,0.)));
2423         
2424         TopoDS_Shape S = BRepPrimAPI_MakePrism(BRepBuilderAPI_MakeFace(mkw.Wire()), 
2425                                                                            gp_Vec(gp_Pnt(0.,0.,0.),gp_Pnt(0.,100.,0.)));
2426
2427         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
2428         myAISContext->SetColor(ais1,Quantity_NOC_CYAN2,Standard_False); 
2429         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
2430         myAISContext->Display(ais1,Standard_False);
2431         const Handle(AIS_InteractiveObject)& anIO1 = ais1;
2432         myAISContext->SetSelected (anIO1, Standard_False);
2433         Fit();
2434         Sleep(500);
2435
2436         TopoDS_Wire W = BRepBuilderAPI_MakeWire(BRepBuilderAPI_MakeEdge(gp_Pnt(50.,45.,100.),
2437                                                                                                           gp_Pnt(100.,45.,50.)));       
2438         Handle(Geom_Plane) aplane = new Geom_Plane(0.,1.,0.,-45.);
2439         BRepFeat_MakeLinearForm aform(S, W, aplane, gp_Vec(0.,10.,0.), gp_Vec(0.,0.,0.),
2440                                                                   1, Standard_True);
2441         aform.Perform(/*10.*/); // new in 2.0
2442
2443         TopoDS_Shape res = aform.Shape();
2444         ais1->Set(res);
2445         myAISContext->Redisplay(ais1,Standard_False);
2446         myAISContext->SetSelected (anIO1, Standard_False);
2447         Fit();
2448
2449         TCollection_AsciiString Message ("\
2450         \n\
2451 BRepBuilderAPI_MakeWire mkw;\n\
2452 gp_Pnt p1 = gp_Pnt(0.,0.,0.);\n\
2453 gp_Pnt p2 = gp_Pnt(200.,0.,0.);\n\
2454 mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));\n\
2455 p1 = p2;\n\
2456 p2 = gp_Pnt(200.,0.,50.);\n\
2457 mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));\n\
2458 p1 = p2;\n\
2459 p2 = gp_Pnt(50.,0.,50.);\n\
2460 mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));\n\
2461 p1 = p2;\n\
2462 p2 = gp_Pnt(50.,0.,200.);\n\
2463 mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));\n\
2464 p1 = p2;\n\
2465 p2 = gp_Pnt(0.,0.,200.);\n\
2466 mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));\n\
2467 p1 = p2;\n\
2468 mkw.Add(BRepBuilderAPI_MakeEdge(p2,gp_Pnt(0.,0.,0.)));\n\
2469 TopoDS_Shape S = BRepPrimAPI_MakePrism(BRepBuilderAPI_MakeFace(mkw.Wire()), \n\
2470                                                                 gp_Vec(gp_Pnt(0.,0.,0.),gp_Pnt(0.,100.,0.)));\n\
2471 TopoDS_Wire W = BRepBuilderAPI_MakeWire(BRepBuilderAPI_MakeEdge(gp_Pnt(50.,45.,100.),\n\
2472                                                                                                 gp_Pnt(100.,45.,50.)));\n\
2473 Handle(Geom_Plane) aplane = new Geom_Plane(0.,1.,0.,-45.);\n\
2474 BRepFeat_MakeLinearForm aform(S, W, aplane, gp_Dir(0.,10.,0.), gp_Dir(0.,0.,0.),\n\
2475                                                         1, Standard_True);\n\
2476 aform.Perform(10.);\n\
2477 TopoDS_Shape res = aform.Shape();\n\
2478         \n");
2479   PocessTextInDialog("Make a rib", Message);
2480 }
2481
2482
2483 void CModelingDoc::OnSplitLocal() 
2484 {
2485         AIS_ListOfInteractive aList;
2486         myAISContext->DisplayedObjects(aList);
2487         AIS_ListIteratorOfListOfInteractive aListIterator;
2488         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
2489                 myAISContext->Remove (aListIterator.Value(), Standard_False);
2490         }
2491
2492   TopoDS_Shape S = BRepPrimAPI_MakeBox(gp_Pnt(-100, -60, -80), 150, 200, 170).Shape();
2493         
2494         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
2495         myAISContext->SetColor(ais1,Quantity_NOC_RED,Standard_False);
2496         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);
2497         myAISContext->Display(ais1,Standard_False);
2498         const Handle(AIS_InteractiveObject)& anIO1 = ais1;
2499         myAISContext->SetSelected (anIO1, Standard_False);
2500         Fit();
2501         Sleep(500);
2502
2503         BRepAlgoAPI_Section asect(S, gp_Pln(1,2,1,-15),Standard_False);
2504         asect.ComputePCurveOn1(Standard_True);
2505         asect.Approximation(Standard_True);
2506         asect.Build();
2507         TopoDS_Shape R = asect.Shape();
2508
2509         BRepFeat_SplitShape asplit(S);
2510         
2511         for (TopExp_Explorer Ex(R,TopAbs_EDGE); Ex.More(); Ex.Next()) {
2512                 TopoDS_Shape anEdge = Ex.Current();
2513                 TopoDS_Shape aFace;
2514                 if (asect.HasAncestorFaceOn1(anEdge,aFace)) {
2515                         TopoDS_Face F = TopoDS::Face(aFace);
2516                         TopoDS_Edge E = TopoDS::Edge(anEdge);
2517                         asplit.Add(E,F);
2518                 }
2519         }
2520
2521         asplit.Build();
2522
2523         //Sleep(1000);
2524         myAISContext->Erase(ais1,Standard_False);
2525         //Fit();
2526
2527         TopoDS_Shape Result = asplit.Shape();
2528         
2529         Handle(AIS_Shape) ais2 = new AIS_Shape(Result);
2530
2531         myAISContext->SetColor(ais2,Quantity_NOC_RED,Standard_False);
2532         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);
2533         myAISContext->SetDisplayMode(ais2,1,Standard_False);
2534         myAISContext->Display(ais2,Standard_False);
2535         const Handle(AIS_InteractiveObject)& anIO2 = ais2;
2536         myAISContext->SetSelected (anIO2, Standard_False);
2537         Fit();
2538                 TCollection_AsciiString Message ("\
2539         \n\
2540 TopoDS_Shape S = BRepPrimAPI_MakeBox(gp_Pnt(-100,-60,-80),150,200,170);         \n\
2541                 \n\
2542 BRepBuilderAPI_Section asect(S, gp_Pln(1,2,1,-15),Standard_False);      \n\
2543 asect.ComputePCurveOn1(Standard_True);  \n\
2544 asect.Approximation(Standard_True);     \n\
2545 asect.Build();  \n\
2546 TopoDS_Shape R = asect.Shape(); \n\
2547         \n\
2548 BRepFeat_SplitShape asplit(S);  \n\
2549         \n\
2550 for (TopExp_Explorer Ex(R,TopAbs_EDGE); Ex.More(); Ex.Next()) { \n\
2551 TopoDS_Shape anEdge = Ex.Current();     \n\
2552         TopoDS_Shape aFace;     \n\
2553         if (asect.HasAncestorFaceOn1(anEdge,aFace)) {   \n\
2554                 TopoDS_Face F = TopoDS::Face(aFace);    \n\
2555                 TopoDS_Edge E = TopoDS::Edge(anEdge);   \n\
2556                 asplit.Add(E,F);        \n\
2557         }       \n\
2558 }       \n\
2559         \n\
2560 asplit.Build(); \n\
2561         \n\
2562 TopoDS_Shape Result = asplit.Shape();   \n\
2563         \n\
2564 \n");
2565
2566 PocessTextInDialog("Split a shape", Message);
2567 }
2568
2569
2570
2571 void CModelingDoc::OnThickLocal() 
2572 {
2573         AIS_ListOfInteractive L;
2574         myAISContext->DisplayedObjects(L);
2575         AIS_ListIteratorOfListOfInteractive aListIterator;
2576         for(aListIterator.Initialize(L);aListIterator.More();aListIterator.Next()){
2577                 myAISContext->Remove (aListIterator.Value(), Standard_False);
2578         }
2579
2580   TopoDS_Shape S1 = BRepPrimAPI_MakeBox(150, 200, 110).Shape();
2581         
2582         Handle(AIS_Shape) abox1 = new AIS_Shape(S1);
2583         myAISContext->SetColor (abox1, Quantity_NOC_WHITE, Standard_False);
2584         myAISContext->SetMaterial(abox1,Graphic3d_NOM_PLASTIC,Standard_False);
2585         myAISContext->Display(abox1,Standard_False);
2586         const Handle(AIS_InteractiveObject)& anIOBox1 = abox1;
2587         myAISContext->SetSelected (anIOBox1, Standard_False);
2588         Fit();
2589         Sleep(1000);
2590
2591         TopTools_ListOfShape aList;
2592         TopExp_Explorer Ex(S1,TopAbs_FACE);
2593         Ex.Next();      //this is the front face
2594         TopoDS_Shape aFace = Ex.Current();
2595         aList.Append(aFace);
2596         
2597     BRepOffsetAPI_MakeThickSolid aSolidMaker;
2598     aSolidMaker.MakeThickSolidByJoin(S1,aList,10,0.01);
2599         TopoDS_Shape aThickSolid = aSolidMaker.Shape();
2600
2601         Handle(AIS_Shape) ais1 = new AIS_Shape(aThickSolid);
2602         myAISContext->SetColor(ais1,Quantity_NOC_RED,Standard_False);
2603         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);
2604         myAISContext->Display(ais1,Standard_False);
2605         const Handle(AIS_InteractiveObject)& anIO1 = ais1;
2606         myAISContext->SetSelected (anIO1, Standard_False);
2607         Fit();
2608         Sleep(1000);
2609         
2610         myAISContext->Erase(abox1,Standard_True);
2611         Fit();
2612
2613
2614                 TCollection_AsciiString Message ("\
2615         \n\
2616 TopoDS_Shape S = BRepPrimAPI_MakeBox(150,200,110);      \n\
2617         \n\
2618 TopTools_ListOfShape aList;     \n\
2619 TopExp_Explorer Ex(S,TopAbs_FACE);      \n\
2620 Ex.Next();      //in order to recover the front face    \n\
2621 TopoDS_Shape aFace = Ex.Current();      \n\
2622 aList.Append(aFace);    \n\
2623                         \n\
2624 TopoDS_Shape aThickSolid = BRepPrimAPI_MakeThickSolid(S,aList,15,0.01); \n\
2625         \n\
2626 \n");
2627 PocessTextInDialog("Make a thick solid", Message);
2628 }
2629
2630 void CModelingDoc::OnOffsetLocal() 
2631 {
2632         AIS_ListOfInteractive aList;
2633         myAISContext->DisplayedObjects(aList);
2634         AIS_ListIteratorOfListOfInteractive aListIterator;
2635         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
2636                 myAISContext->Remove (aListIterator.Value(), Standard_False);
2637         }
2638
2639   TopoDS_Shape S1 = BRepPrimAPI_MakeBox(150, 200, 110).Shape();
2640
2641         Handle(AIS_Shape) aisBox1 = new AIS_Shape(S1);
2642         myAISContext->SetColor(aisBox1,Quantity_NOC_BROWN,Standard_False);
2643         myAISContext->SetMaterial(aisBox1,Graphic3d_NOM_GOLD,Standard_False);
2644         myAISContext->Display(aisBox1,Standard_False);
2645         Fit();
2646         Sleep(500);
2647
2648     BRepOffsetAPI_MakeOffsetShape aShapeMaker1;
2649     aShapeMaker1.PerformByJoin(S1,60,0.01);
2650         TopoDS_Shape anOffsetShape1 = aShapeMaker1.Shape();
2651
2652         Handle(AIS_Shape) ais1 = new AIS_Shape(anOffsetShape1);
2653         myAISContext->SetColor(ais1,Quantity_NOC_MATRABLUE,Standard_False);
2654         myAISContext->SetMaterial(ais1,Graphic3d_NOM_GOLD,Standard_False);
2655         myAISContext->SetTransparency(ais1,0.5,Standard_False);
2656         myAISContext->Display(ais1,Standard_False);
2657         Fit();
2658         Sleep(500);
2659
2660   TopoDS_Shape S2 = BRepPrimAPI_MakeBox(gp_Pnt(500, 0, 0), 220, 140, 180).Shape();
2661         
2662         Handle(AIS_Shape) aisBox2 = new AIS_Shape(S2);
2663         myAISContext->SetColor(aisBox2,Quantity_NOC_WHITE,Standard_False);
2664         myAISContext->SetMaterial(aisBox2,Graphic3d_NOM_GOLD,Standard_False);
2665         myAISContext->SetTransparency(aisBox2,0.5,Standard_False);
2666         myAISContext->Display(aisBox2,Standard_False);
2667         Fit();
2668         Sleep(500);
2669
2670     BRepOffsetAPI_MakeOffsetShape aShapeMaker2;
2671     aShapeMaker2.PerformByJoin(S2,-40,0.01,
2672       BRepOffset_Skin,Standard_False,Standard_False,GeomAbs_Arc);
2673         TopoDS_Shape anOffsetShape2 = aShapeMaker2.Shape();
2674
2675         Handle(AIS_Shape) ais2 = new AIS_Shape(anOffsetShape2);
2676         myAISContext->SetColor (ais2, Quantity_NOC_MATRABLUE, Standard_False);
2677         myAISContext->SetMaterial(ais2,Graphic3d_NOM_GOLD,Standard_False);
2678         myAISContext->Display (ais2, Standard_False);
2679         Fit();
2680         
2681         TCollection_AsciiString Message ("\
2682         \n\
2683 \n\
2684 TopoDS_Shape S1 = BRepPrimAPI_MakeBox(150,200,110);     \n\
2685 \n\
2686 TopoDS_Shape anOffsetShape1 = BRepPrimAPI_MakeOffsetShape(S1,60,0.01);  \n\
2687 \n\
2688 //The white box \n\
2689         \n\
2690 TopoDS_Shape S2 = BRepPrimAPI_MakeBox(gp_Pnt(300,0,0),220,140,180);     \n\
2691 \n\
2692 TopoDS_Shape anOffsetShape2 = BRepPrimAPI_MakeOffsetShape(S2,-20,0.01,  \n\
2693         BRepOffset_Skin,Standard_False,Standard_False,GeomAbs_Arc);     \n\
2694         \n\
2695 \n\
2696 \n");
2697 PocessTextInDialog("Make an offset shape", Message);
2698
2699 }
2700
2701 /* =================================================================================
2702    ====================   B U I L D I N G   ========================================
2703    ================================================================================= */
2704
2705
2706 void CModelingDoc::OnVertex() 
2707 {
2708         AIS_ListOfInteractive aList;
2709         myAISContext->DisplayedObjects(aList);
2710         AIS_ListIteratorOfListOfInteractive aListIterator;
2711         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
2712                 myAISContext->Remove (aListIterator.Value(), Standard_False);
2713         }
2714
2715         TopoDS_Vertex V1,V2,V3;
2716         
2717         V1 = BRepBuilderAPI_MakeVertex(gp_Pnt(0,0,0));
2718         V2 = BRepBuilderAPI_MakeVertex(gp_Pnt(10,7,25));
2719         
2720         gp_Pnt P(-12,8,-4);
2721         BRepBuilderAPI_MakeVertex MV(P);
2722         V3 = MV.Vertex();
2723
2724         Handle(AIS_Shape) Point1 = new AIS_Shape(V1);
2725         myAISContext->Display(Point1,Standard_False);
2726         Handle(AIS_Shape) Point2 = new AIS_Shape(V2);
2727         myAISContext->Display(Point2,Standard_False);
2728         Handle(AIS_Shape) Point3 = new AIS_Shape(V3);
2729         myAISContext->Display(Point3,Standard_False);
2730
2731         Fit();
2732
2733    TCollection_AsciiString Message ("\
2734                 \n\
2735 TopoDS_Vertex V1,V2,V3; \n\
2736                 \n\
2737 V1 = BRepBuilderAPI_MakeVertex(gp_Pnt(0,0,0));  \n\
2738         \n\
2739 V2 = BRepBuilderAPI_MakeVertex(gp_Pnt(10,7,25));        \n\
2740                 \n\
2741 gp_Pnt P(-12,8,-4);     \n\
2742 BRepBuilderAPI_MakeVertex MV(P);        \n\
2743 V3 = MV.Vertex();       \n\
2744         \n\
2745 \n");
2746
2747         PocessTextInDialog("Make vertex from point ", Message);
2748
2749 }
2750
2751 void CModelingDoc::OnEdge() 
2752 {
2753         
2754         AIS_ListOfInteractive aList;
2755         myAISContext->DisplayedObjects(aList);
2756         AIS_ListIteratorOfListOfInteractive aListIterator;
2757         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
2758                 myAISContext->Remove (aListIterator.Value(), Standard_False);
2759         }
2760         
2761         
2762         TopoDS_Edge BlueEdge,YellowEdge,WhiteEdge,RedEdge,GreenEdge;
2763         TopoDS_Vertex V1,V2,V3,V4;
2764         
2765 /////////////The blue edge
2766
2767         BlueEdge = BRepBuilderAPI_MakeEdge(gp_Pnt(-80,-50,-20),gp_Pnt(-30,-60,-60));
2768
2769 /////////////The yellow edge
2770         
2771         V1 = BRepBuilderAPI_MakeVertex(gp_Pnt(-20,10,-30));
2772         V2 = BRepBuilderAPI_MakeVertex(gp_Pnt(10,7,-25));
2773         YellowEdge = BRepBuilderAPI_MakeEdge(V1,V2);
2774
2775 /////////////The white edge
2776         
2777         gp_Lin line(gp_Ax1(gp_Pnt(10,10,10),gp_Dir(1,0,0)));
2778         WhiteEdge = BRepBuilderAPI_MakeEdge(line,-20,10);
2779
2780 //////////////The red edge
2781
2782         gp_Elips Elips(gp_Ax2(gp_Pnt(10,0,0),gp_Dir(1,1,1)),60,30);
2783         RedEdge = BRepBuilderAPI_MakeEdge(Elips,0,M_PI/2);
2784
2785 /////////////The green edge and the both extreme vertex
2786
2787         gp_Pnt P1(-15,200,10);
2788         gp_Pnt P2(5,204,0);
2789         gp_Pnt P3(15,200,0);
2790         gp_Pnt P4(-15,20,15);
2791         gp_Pnt P5(-5,20,0);
2792         gp_Pnt P6(15,20,0);
2793         gp_Pnt P7(24,120,0);
2794         gp_Pnt P8(-24,120,12.5);
2795         TColgp_Array1OfPnt array(1,8);
2796         array.SetValue(1,P1);
2797         array.SetValue(2,P2);
2798         array.SetValue(3,P3); 
2799         array.SetValue(4,P4); 
2800         array.SetValue(5,P5); 
2801         array.SetValue(6,P6); 
2802         array.SetValue(7,P7); 
2803         array.SetValue(8,P8); 
2804         Handle (Geom_BezierCurve) curve = new Geom_BezierCurve(array);
2805         
2806         BRepBuilderAPI_MakeEdge ME (curve);
2807         GreenEdge = ME;
2808         V3 = ME.Vertex1();
2809         V4 = ME.Vertex2();
2810
2811 //////////////Display
2812 Handle(AIS_Shape) blue = new AIS_Shape(BlueEdge);
2813 myAISContext->SetColor(blue,Quantity_NOC_MATRABLUE,Standard_False); 
2814 myAISContext->Display(blue,Standard_False);
2815
2816 Handle(AIS_Shape) yellow = new AIS_Shape(YellowEdge);
2817 myAISContext->SetColor(yellow,Quantity_NOC_YELLOW,Standard_False); 
2818 myAISContext->Display(yellow,Standard_False);
2819
2820 Handle(AIS_Shape) white = new AIS_Shape(WhiteEdge);
2821 myAISContext->SetColor(white,Quantity_NOC_WHITE,Standard_False); 
2822 myAISContext->Display(white,Standard_False);
2823
2824 Handle(AIS_Shape) red = new AIS_Shape(RedEdge);
2825 myAISContext->SetColor(red,Quantity_NOC_RED,Standard_False); 
2826 myAISContext->Display(red,Standard_False);
2827
2828 Handle(AIS_Shape) green = new AIS_Shape(GreenEdge);
2829 myAISContext->SetColor(green,Quantity_NOC_GREEN,Standard_False); 
2830 myAISContext->Display(green,Standard_False);
2831
2832 Handle(AIS_Shape) Point1 = new AIS_Shape(V3);
2833 myAISContext->Display(Point1,Standard_False);
2834 Handle(AIS_Shape) Point2 = new AIS_Shape(V4);
2835 myAISContext->Display(Point2,Standard_False);
2836
2837 Fit();
2838
2839    TCollection_AsciiString Message ("\
2840                 \n\
2841 TopoDS_Edge BlueEdge, YellowEdge, WhiteEdge, RedEdge, GreenEdge;        \n\
2842 TopoDS_Vertex V1,V2,V3,V4;      \n\
2843                 \n\
2844 /////////////The blue edge      \n\
2845         \n\
2846 BlueEdge = BRepBuilderAPI_MakeEdge(gp_Pnt(-80,-50,-20),gp_Pnt(-30,-60,-60));    \n\
2847         \n\
2848 /////////////The yellow edge    \n\
2849                 \n\
2850 V1 = BRepBuilderAPI_MakeVertex(gp_Pnt(-20,10,-30));     \n\
2851 V2 = BRepBuilderAPI_MakeVertex(gp_Pnt(10,7,-25));       \n\
2852 YellowEdge = BRepBuilderAPI_MakeEdge(V1,V2);    \n\
2853         \n\
2854 /////////////The white edge     \n\
2855                 \n\
2856 gp_Lin line(gp_Ax1(gp_Pnt(10,10,10),gp_Dir(1,0,0)));    \n\
2857 WhiteEdge = BRepBuilderAPI_MakeEdge(line,-20,10);       \n\
2858         \n\
2859 //////////////The red edge      \n\
2860         \n\
2861 gp_Elips Elips(gp_Ax2(gp_Pnt(10,0,0),gp_Dir(1,1,1)),60,30);     \n\
2862 RedEdge = BRepBuilderAPI_MakeEdge(Elips,0,PI/2);        \n\
2863         \n\
2864 /////////////The green edge and the both extreme vertex \n\
2865         \n\
2866 gp_Pnt P1(-15,200,10);  \n\
2867 gp_Pnt P2(5,204,0);     \n\
2868 gp_Pnt P3(15,200,0);    \n\
2869 gp_Pnt P4(-15,20,15);   \n\
2870 gp_Pnt P5(-5,20,0);     \n\
2871 gp_Pnt P6(15,20,0);     \n\
2872 gp_Pnt P7(24,120,0);    \n\
2873 gp_Pnt P8(-24,120,12.5);        \n\
2874 TColgp_Array1OfPnt array(1,8);  \n\
2875 array.SetValue(1,P1);   \n\
2876 array.SetValue(2,P2);   \n\
2877 array.SetValue(3,P3);   \n\
2878 array.SetValue(4,P4);   \n\
2879 array.SetValue(5,P5);   \n\
2880 array.SetValue(6,P6);   \n\
2881 array.SetValue(7,P7);   \n\
2882 array.SetValue(8,P8);   \n\
2883 Handle (Geom_BezierCurve) curve = new Geom_BezierCurve(array);  \n\
2884         \n\
2885 BRepBuilderAPI_MakeEdge ME (curve);     \n\
2886 GreenEdge = ME; \n\
2887 V3 = ME.Vertex1();      \n\
2888 V4 = ME.Vertex2();      \n\
2889         \n\
2890 \n");
2891
2892         PocessTextInDialog("Make edge", Message);
2893         
2894 }
2895
2896 void CModelingDoc::OnWire() 
2897 {
2898         AIS_ListOfInteractive aList;
2899         myAISContext->DisplayedObjects(aList);
2900         AIS_ListIteratorOfListOfInteractive aListIterator;
2901         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
2902                 myAISContext->Remove (aListIterator.Value(), Standard_False);
2903         }
2904
2905         TopoDS_Wire RedWire,YellowWire,WhiteWire,
2906                 ExistingWire, ExistingWire2;
2907
2908         TopoDS_Edge Edge1,Edge2,Edge3,Edge4,Edge5,Edge6,Edge7,LastEdge;
2909         TopoDS_Vertex LastVertex;
2910
2911 ////////////The red wire is build from a single edge
2912
2913         gp_Elips Elips(gp_Ax2(gp_Pnt(250,0,0),gp_Dir(1,1,1)),160,90);
2914         Edge1 = BRepBuilderAPI_MakeEdge(Elips,0,M_PI/2);
2915
2916         RedWire = BRepBuilderAPI_MakeWire(Edge1);
2917
2918 ///////////the yellow wire is build from an existing wire and an edge
2919         
2920         gp_Circ circle(gp_Ax2(gp_Pnt(-300,0,0),gp_Dir(1,0,0)),80);
2921         Edge2 = BRepBuilderAPI_MakeEdge(circle,0,M_PI);
2922
2923         ExistingWire = BRepBuilderAPI_MakeWire(Edge2);
2924
2925         Edge3 = BRepBuilderAPI_MakeEdge(gp_Pnt(-300,0,-80),gp_Pnt(-90,20,-30));
2926
2927         BRepBuilderAPI_MakeWire MW1(ExistingWire,Edge3);
2928         if (MW1.IsDone()) {
2929                         YellowWire = MW1;
2930         }
2931
2932
2933 //////////the white wire is built with an existing wire and 3 edges.
2934 //////////we use the methods Add, Edge and Vertex from BRepBuilderAPI_MakeWire.
2935
2936         gp_Circ circle2(gp_Ax2(gp_Pnt(0,0,0),gp_Dir(0,1,0)),200);
2937         Edge4 = BRepBuilderAPI_MakeEdge(circle2,0,M_PI);
2938
2939         ExistingWire2 = BRepBuilderAPI_MakeWire(Edge4);
2940
2941         gp_Pnt P1(0,0,-200);
2942         gp_Pnt P2(5,204,0);
2943         Edge5 = BRepBuilderAPI_MakeEdge(P1,P2);
2944
2945         gp_Pnt P3(-15,20,15);
2946         Edge6 = BRepBuilderAPI_MakeEdge(P2,P3);
2947         gp_Pnt P4(15,20,0);     
2948         Edge7 = BRepBuilderAPI_MakeEdge(P3,P4);
2949
2950         BRepBuilderAPI_MakeWire MW;
2951         MW.Add(ExistingWire2);
2952         MW.Add(Edge5);
2953         MW.Add(Edge6);
2954         MW.Add(Edge7);
2955
2956         if (MW.IsDone()) {
2957                 WhiteWire = MW.Wire();
2958                 LastEdge = MW.Edge();
2959                 LastVertex = MW.Vertex();
2960         }
2961
2962
2963 Handle(AIS_Shape) red = new AIS_Shape(RedWire);
2964 myAISContext->SetColor(red,Quantity_NOC_RED,Standard_False); 
2965 myAISContext->Display(red,Standard_False);
2966
2967 Handle(AIS_Shape) yellow = new AIS_Shape(YellowWire);
2968 myAISContext->SetColor(yellow,Quantity_NOC_YELLOW,Standard_False); 
2969 myAISContext->Display(yellow,Standard_False);
2970
2971 Handle(AIS_Shape) white = new AIS_Shape(WhiteWire);
2972 myAISContext->SetColor(white,Quantity_NOC_WHITE,Standard_False); 
2973 myAISContext->Display(white,Standard_False);
2974
2975 Handle(AIS_Shape) lastE = new AIS_Shape(LastEdge);
2976 myAISContext->SetWidth(lastE,3,Standard_False);
2977 myAISContext->SetColor(lastE,Quantity_NOC_RED,Standard_False); 
2978 myAISContext->Display(lastE,Standard_False);
2979
2980 Handle(AIS_Shape) lastV = new AIS_Shape(LastVertex);
2981 myAISContext->Display(lastV,Standard_False);
2982
2983 Fit();
2984
2985    TCollection_AsciiString Message ("\
2986         \n\
2987 TopoDS_Wire RedWire,YellowWire,WhiteWire,       \n\
2988 ExistingWire, ExistingWire2;    \n\
2989         \n\
2990 TopoDS_Edge Edge1,Edge2,Edge3,Edge4,Edge5,Edge6,Edge7,LastEdge; \n\
2991 TopoDS_Vertex LastVertex;       \n\
2992         \n\
2993 ////////////The red wire is build from a single edge    \n\
2994         \n\
2995 gp_Elips Elips(gp_Ax2(gp_Pnt(10,0,0),gp_Dir(1,1,1)),160,90);    \n\
2996 Edge1 = BRepBuilderAPI_MakeEdge(Elips,0,PI/2);  \n\
2997         \n\
2998 RedWire = BRepBuilderAPI_MakeWire(Edge1);       \n\
2999         \n\
3000 ///////////the yellow wire is build from an existing wire and an edge   \n\
3001                 \n\
3002 gp_Circ circle(gp_Ax2(gp_Pnt(0,0,0),gp_Dir(1,0,0)),80); \n\
3003 Edge2 = BRepBuilderAPI_MakeEdge(circle,0,PI);   \n\
3004         \n\
3005 ExistingWire = BRepBuilderAPI_MakeWire(Edge2);  \n\
3006         \n\
3007 Edge3 = BRepBuilderAPI_MakeEdge(gp_Pnt(0,0,-80),gp_Pnt(90,20,30));      \n\
3008         \n\
3009 BRepBuilderAPI_MakeWire MW1(ExistingWire,Edge3);        \n\
3010 if (MW1.IsDone()) {     \n\
3011                 YellowWire = MW1;       \n\
3012 }       \n\
3013         \n\
3014 ///the white wire is built with an existing wire and 3 edges.   \n\
3015 ///we use the methods Add, Edge and Vertex from BRepBuilderAPI_MakeWire \n\
3016 ///in order to display the last edge and the last vertices we   \n\
3017 ///add to the wire.     \n\
3018         \n\
3019 gp_Circ circle2(gp_Ax2(gp_Pnt(0,0,0),gp_Dir(0,1,0)),200);       \n\
3020 Edge4 = BRepBuilderAPI_MakeEdge(circle2,0,PI);  \n\
3021         \n\
3022 ExistingWire2 = BRepBuilderAPI_MakeWire(Edge4); \n\
3023         \n\
3024 gp_Pnt P1(0,0,-200);    \n\
3025 gp_Pnt P2(5,204,0);     \n\
3026 Edge5 = BRepBuilderAPI_MakeEdge(P1,P2); \n\
3027         \n\
3028 gp_Pnt P3(-15,20,15);   \n\
3029 Edge6 = BRepBuilderAPI_MakeEdge(P2,P3); \n\
3030 gp_Pnt P4(15,20,0);             \n\
3031 Edge7 = BRepBuilderAPI_MakeEdge(P3,P4); \n\
3032         \n\
3033 BRepBuilderAPI_MakeWire MW;     \n\
3034 MW.Add(ExistingWire2);  \n\
3035 MW.Add(Edge5);  \n\
3036 MW.Add(Edge6);  \n\
3037 MW.Add(Edge7);  \n\
3038         \n\
3039 if (MW.IsDone()) {      \n\
3040         WhiteWire = MW.Wire();  \n\
3041         LastEdge = MW.Edge();   \n\
3042         LastVertex = MW.Vertex();       \n\
3043 }       \n\
3044         \n\
3045 \n");
3046
3047         PocessTextInDialog("Make wire ", Message);
3048 }
3049
3050 void CModelingDoc::OnFace() 
3051 {
3052         AIS_ListOfInteractive aList;
3053         myAISContext->DisplayedObjects(aList);
3054         AIS_ListIteratorOfListOfInteractive aListIterator;
3055         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
3056                 myAISContext->Remove (aListIterator.Value(), Standard_False);
3057         }
3058
3059
3060
3061         TopoDS_Face WhiteFace, BrownFace, RedFace, PinkFace;
3062         TopoDS_Edge Edge1, Edge2, Edge3, Edge4, Edge5, Edge6, Edge7;
3063         TopoDS_Wire Wire1;
3064         gp_Pnt P1, P2, P3, P4, P5, P6, P7;
3065
3066         gp_Sphere sphere (gp_Ax3(gp_Pnt(0,0,0),gp_Dir(1,0,0)),150);
3067
3068         WhiteFace = BRepBuilderAPI_MakeFace(sphere,0.1,0.7,0.2,0.9);
3069
3070 //////////////////////////////////
3071
3072         P1.SetCoord(-15,200,10);
3073         P2.SetCoord(5,204,0);
3074         P3.SetCoord(15,200,0);
3075         P4.SetCoord(-15,20,15);
3076         P5.SetCoord(-5,20,0);
3077         P6.SetCoord(15,20,35);
3078         TColgp_Array2OfPnt array(1,3,1,2);
3079         array.SetValue(1,1,P1);
3080         array.SetValue(2,1,P2);
3081         array.SetValue(3,1,P3); 
3082         array.SetValue(1,2,P4); 
3083         array.SetValue(2,2,P5); 
3084         array.SetValue(3,2,P6);
3085         Handle (Geom_BSplineSurface) curve = GeomAPI_PointsToBSplineSurface(array,3,8,GeomAbs_C2,0.001);
3086
3087         RedFace = BRepBuilderAPI_MakeFace(curve, Precision::Confusion());
3088
3089 ////////////////////
3090
3091         gp_Circ circle(gp_Ax2(gp_Pnt(0,0,0),gp_Dir(1,0,0)),80);
3092         Edge1 = BRepBuilderAPI_MakeEdge(circle,0,M_PI);
3093
3094         Edge2 = BRepBuilderAPI_MakeEdge(gp_Pnt(0,0,-80),gp_Pnt(0,-10,40));
3095         Edge3 = BRepBuilderAPI_MakeEdge(gp_Pnt(0,-10,40),gp_Pnt(0,0,80));
3096
3097         TopoDS_Wire YellowWire;
3098         BRepBuilderAPI_MakeWire MW1(Edge1,Edge2,Edge3);
3099         if (MW1.IsDone()) {
3100                         YellowWire = MW1;
3101         }
3102
3103         BrownFace = BRepBuilderAPI_MakeFace(YellowWire);
3104
3105
3106 /////////////
3107
3108         P1.SetCoord(35,-200,40);
3109         P2.SetCoord(50,-204,30);
3110         P3.SetCoord(65,-200,30);
3111         P4.SetCoord(35,-20,45);
3112         P5.SetCoord(45,-20,30);
3113         P6.SetCoord(65,-20,65);
3114         TColgp_Array2OfPnt array2(1,3,1,2);
3115         array2.SetValue(1,1,P1);
3116         array2.SetValue(2,1,P2);
3117         array2.SetValue(3,1,P3); 
3118         array2.SetValue(1,2,P4); 
3119         array2.SetValue(2,2,P5); 
3120         array2.SetValue(3,2,P6);
3121         
3122         Handle (Geom_BSplineSurface) BSplineSurf = GeomAPI_PointsToBSplineSurface(array2,3,8,GeomAbs_C2,0.001);
3123         
3124         TopoDS_Face aFace = BRepBuilderAPI_MakeFace(BSplineSurf, Precision::Confusion());
3125
3126         //2d lines
3127         gp_Pnt2d P12d(0.9,0.1);
3128         gp_Pnt2d P22d(0.2,0.7);
3129         gp_Pnt2d P32d(0.02,0.1);
3130
3131         Handle (Geom2d_Line) line1 = new Geom2d_Line(P12d,gp_Dir2d((0.2-0.9),(0.7-0.1)));
3132         Handle (Geom2d_Line) line2 = new Geom2d_Line(P22d,gp_Dir2d((0.02-0.2),(0.1-0.7)));
3133         Handle (Geom2d_Line) line3 = new Geom2d_Line(P32d,gp_Dir2d((0.9-0.02),(0.1-0.1)));
3134
3135
3136         //Edges are on the BSpline surface
3137         Edge1 = BRepBuilderAPI_MakeEdge(line1,BSplineSurf,0,P12d.Distance(P22d));
3138         Edge2 = BRepBuilderAPI_MakeEdge(line2,BSplineSurf,0,P22d.Distance(P32d));
3139         Edge3 = BRepBuilderAPI_MakeEdge(line3,BSplineSurf,0,P32d.Distance(P12d));
3140
3141         Wire1 = BRepBuilderAPI_MakeWire(Edge1,Edge2,Edge3);
3142         Wire1.Reverse();
3143         PinkFace = BRepBuilderAPI_MakeFace(aFace,Wire1);
3144         BRepLib::BuildCurves3d(PinkFace);
3145
3146 /////////////Display
3147         Handle(AIS_Shape) white = new AIS_Shape(WhiteFace);
3148         myAISContext->SetColor(white,Quantity_NOC_WHITE,Standard_False);
3149         myAISContext->SetMaterial(white,Graphic3d_NOM_PLASTIC,Standard_False);    
3150         myAISContext->Display(white,Standard_False);
3151         
3152         Handle(AIS_Shape) red = new AIS_Shape(RedFace);
3153         myAISContext->SetColor(red,Quantity_NOC_RED,Standard_False);
3154         myAISContext->SetMaterial(red,Graphic3d_NOM_PLASTIC,Standard_False);    
3155         myAISContext->Display(red,Standard_False);
3156         
3157         Handle(AIS_Shape) brown = new AIS_Shape(BrownFace);
3158         myAISContext->SetColor(brown,Quantity_NOC_BROWN,Standard_False);
3159         myAISContext->SetMaterial(brown,Graphic3d_NOM_PLASTIC,Standard_False);    
3160         myAISContext->Display(brown,Standard_False);
3161         
3162         Handle(AIS_Shape) pink = new AIS_Shape(PinkFace);
3163         myAISContext->SetColor(pink,Quantity_NOC_HOTPINK,Standard_False);
3164         myAISContext->SetMaterial(pink,Graphic3d_NOM_PLASTIC,Standard_False);    
3165         myAISContext->Display(pink,Standard_False);
3166
3167         Fit();
3168
3169
3170   TCollection_AsciiString Message ("\
3171         \n\
3172 TopoDS_Face WhiteFace, BrownFace, RedFace, PinkFace;    \n\
3173 TopoDS_Edge Edge1, Edge2, Edge3, Edge4, Edge5, Edge6, Edge7;    \n\
3174 TopoDS_Wire Wire1;      \n\
3175 gp_Pnt P1, P2, P3, P4, P5, P6, P7;      \n\
3176 \n\
3177 ////////The white Face \n\
3178 \n\
3179 gp_Sphere sphere (gp_Ax3(gp_Pnt(0,0,0),gp_Dir(1,0,0)),150);     \n\
3180 \n\
3181 WhiteFace = BRepBuilderAPI_MakeFace(sphere,0.1,0.7,0.2,0.9);    \n\
3182 \n\
3183 ////////The red face    \n\
3184 \n\
3185 P1.SetCoord(-15,200,10);        \n\
3186 P2.SetCoord(5,204,0);   \n\
3187 P3.SetCoord(15,200,0);  \n\
3188 P4.SetCoord(-15,20,15); \n\
3189 P5.SetCoord(-5,20,0);   \n\
3190 P6.SetCoord(15,20,35);  \n\
3191 TColgp_Array2OfPnt array(1,3,1,2);      \n\
3192 array.SetValue(1,1,P1); \n\
3193 array.SetValue(2,1,P2); \n\
3194 array.SetValue(3,1,P3);         \n\
3195 array.SetValue(1,2,P4);         \n\
3196 array.SetValue(2,2,P5);         \n\
3197 array.SetValue(3,2,P6); \n\
3198 Handle (Geom_BSplineSurface) curve = GeomAPI_PointsToBSplineSurface(array,3,8,GeomAbs_C2,0.001);        \n\
3199 \n\
3200 RedFace = BRepBuilderAPI_MakeFace(curve);       \n\
3201 \n\
3202 ////////The brown face  \n\
3203 \n\
3204 gp_Circ circle(gp_Ax2(gp_Pnt(0,0,0),gp_Dir(1,0,0)),80); \n\
3205 Edge1 = BRepBuilderAPI_MakeEdge(circle,0,PI);   \n\
3206 \n\
3207 Edge2 = BRepBuilderAPI_MakeEdge(gp_Pnt(0,0,-80),gp_Pnt(0,-10,40));      \n\
3208 Edge3 = BRepBuilderAPI_MakeEdge(gp_Pnt(0,-10,40),gp_Pnt(0,0,80));       \n\
3209 \n\
3210 TopoDS_Wire YellowWire; \n\
3211 BRepBuilderAPI_MakeWire MW1(Edge1,Edge2,Edge3); \n\
3212 if (MW1.IsDone()) {     \n\
3213                 YellowWire = MW1;       \n\
3214 }       \n\
3215 \n\
3216 BrownFace = BRepBuilderAPI_MakeFace(YellowWire);        \n\
3217 \n");
3218 Message +=("\
3219 ////////The pink face   \n\
3220 \n\
3221 P1.SetCoord(35,-200,40);        \n\
3222 P2.SetCoord(50,-204,30);        \n\
3223 P3.SetCoord(65,-200,30);        \n\
3224 P4.SetCoord(35,-20,45); \n\
3225 P5.SetCoord(45,-20,30); \n\
3226 P6.SetCoord(65,-20,65); \n\
3227 TColgp_Array2OfPnt array2(1,3,1,2);     \n\
3228 array2.SetValue(1,1,P1);        \n\
3229 array2.SetValue(2,1,P2);        \n\
3230 array2.SetValue(3,1,P3);        \n\
3231 array2.SetValue(1,2,P4);        \n\
3232 array2.SetValue(2,2,P5);        \n\
3233 array2.SetValue(3,2,P6);        \n\
3234         \n\
3235 Handle (Geom_BSplineSurface) BSplineSurf = GeomAPI_PointsToBSplineSurface(array2,3,8,GeomAbs_C2,0.001); \n\
3236         \n\
3237 TopoDS_Face aFace = BRepBuilderAPI_MakeFace(BSplineSurf);       \n\
3238 \n\
3239 //2d lines      \n\
3240 gp_Pnt2d P12d(0.9,0.1); \n\
3241 gp_Pnt2d P22d(0.2,0.7); \n\
3242 gp_Pnt2d P32d(0.02,0.1);        \n\
3243 \n\
3244 Handle (Geom2d_Line) line1=             \n\
3245         new Geom2d_Line(P12d,gp_Dir2d((0.2-0.9),(0.7-0.1)));    \n\
3246 Handle (Geom2d_Line) line2=             \n\
3247         new Geom2d_Line(P22d,gp_Dir2d((0.02-0.2),(0.1-0.7)));   \n\
3248 Handle (Geom2d_Line) line3=             \n\
3249         new Geom2d_Line(P32d,gp_Dir2d((0.9-0.02),(0.1-0.1)));   \n\
3250                 \n\
3251 //Edges are on the BSpline surface      \n\
3252 Edge1 = BRepBuilderAPI_MakeEdge(line1,BSplineSurf,0,P12d.Distance(P22d));       \n\
3253 Edge2 = BRepBuilderAPI_MakeEdge(line2,BSplineSurf,0,P22d.Distance(P32d));       \n\
3254 Edge3 = BRepBuilderAPI_MakeEdge(line3,BSplineSurf,0,P32d.Distance(P12d));       \n\
3255 \n\
3256 Wire1 = BRepBuilderAPI_MakeWire(Edge1,Edge2,Edge3);     \n\
3257 Wire1.Reverse();        \n\
3258 PinkFace = BRepBuilderAPI_MakeFace(aFace,Wire1);        \n\
3259 BRepLib::BuildCurves3d(PinkFace);       \n\
3260 \n\
3261 \n");
3262
3263 PocessTextInDialog("Make face ", Message);
3264 }
3265
3266 void CModelingDoc::OnShell() 
3267 {
3268         AIS_ListOfInteractive aList;
3269         myAISContext->DisplayedObjects(aList);
3270         AIS_ListIteratorOfListOfInteractive aListIterator;
3271         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
3272                 myAISContext->Remove (aListIterator.Value(), Standard_False);
3273         }
3274
3275         TColgp_Array2OfPnt Poles(1,2,1,4);
3276         Poles.SetValue(1,1,gp_Pnt(0,0,0));
3277         Poles.SetValue(1,2,gp_Pnt(0,10,2));
3278         Poles.SetValue(1,3,gp_Pnt(0,20,10)); 
3279         Poles.SetValue(1,4,gp_Pnt(0,30,0)); 
3280         Poles.SetValue(2,1,gp_Pnt(10,0,5));
3281         Poles.SetValue(2,2,gp_Pnt(10,10,3));
3282         Poles.SetValue(2,3,gp_Pnt(10,20,20));
3283         Poles.SetValue(2,4,gp_Pnt(10,30,0));
3284
3285         TColStd_Array1OfReal UKnots(1,2);
3286         UKnots.SetValue(1,0);
3287         UKnots.SetValue(2,1);
3288
3289         TColStd_Array1OfInteger UMults(1,2);
3290         UMults.SetValue(1,2);
3291         UMults.SetValue(2,2);
3292
3293         TColStd_Array1OfReal VKnots(1,3);
3294         VKnots.SetValue(1,0);
3295         VKnots.SetValue(2,1);
3296         VKnots.SetValue(3,2);
3297
3298         TColStd_Array1OfInteger VMults(1,3);
3299         VMults.SetValue(1,3);
3300         VMults.SetValue(2,1);
3301         VMults.SetValue(3,3);
3302
3303         Standard_Integer UDegree(1);
3304         Standard_Integer VDegree(2);
3305         
3306         Handle (Geom_BSplineSurface) BSpline = new Geom_BSplineSurface(Poles,UKnots,VKnots,UMults,VMults,UDegree,VDegree);
3307         
3308         TopoDS_Face WhiteFace = BRepBuilderAPI_MakeFace(BSpline, Precision::Confusion());
3309
3310         
3311         Handle(AIS_Shape) white = new AIS_Shape(WhiteFace);
3312         myAISContext->SetColor (white, Quantity_NOC_WHITE, Standard_False);
3313         myAISContext->SetMaterial(white,Graphic3d_NOM_PLASTIC,Standard_False);    
3314         myAISContext->SetTransparency (white, 0.7, Standard_Fa