ee0b7140b4077b3f9d2b8ff9418167aa848b2bcf
[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_ListOfInteractive.hxx>
18 #include <AIS_ListIteratorOfListOfInteractive.hxx>
19 #include <TColStd_Array2OfReal.hxx>
20 #include <OCC_MainFrame.h>
21 #include <BRepPrimAPI_MakeCylinder.hxx>
22 #include <TopExp_Explorer.hxx>
23 #include <Geom_Plane.hxx>
24 #include <BRepTools.hxx>
25
26 static Handle(AIS_Shape) AIS1;
27 static TopoDS_Face THE_F1, THE_F2;
28 static TopoDS_Edge THE_E1, THE_E2;
29
30 /////////////////////////////////////////////////////////////////////////////
31 // CModelingDoc
32
33 IMPLEMENT_DYNCREATE(CModelingDoc, CDocument)
34
35 BEGIN_MESSAGE_MAP(CModelingDoc, OCC_3dBaseDoc)
36         //{{AFX_MSG_MAP(CModelingDoc)
37         ON_COMMAND(ID_MIRROR, OnMirror)
38         ON_COMMAND(ID_MIRRORAXIS, OnMirroraxis)
39         ON_COMMAND(ID_ROTATE, OnRotate)
40         ON_COMMAND(ID_SCALE, OnScale)
41         ON_COMMAND(ID_TRANSLATION, OnTranslation)
42         ON_COMMAND(ID_DISPLACEMENT, OnDisplacement)
43         ON_COMMAND(ID_DEFORM, OnDeform)
44         ON_COMMAND(ID_BOX, OnBox)
45         ON_COMMAND(ID_Cylinder, OnCylinder)
46         ON_COMMAND(ID_CONE, OnCone)
47         ON_COMMAND(ID_SPHERE, OnSphere)
48         ON_COMMAND(ID_TORUS, OnTorus)
49         ON_COMMAND(ID_WEDGE, OnWedge)
50         ON_COMMAND(ID_PRISM, OnPrism)
51         ON_COMMAND(ID_REVOL, OnRevol)
52         ON_COMMAND(ID_PIPE, OnPipe)
53         ON_COMMAND(ID_THRU, OnThru)
54         ON_COMMAND(ID_EVOLVED, OnEvolved)
55         ON_COMMAND(ID_DRAFT, OnDraft)
56         ON_COMMAND(ID_CUT, OnCut)
57         ON_COMMAND(ID_FUSE, OnFuse)
58         ON_COMMAND(ID_SECTION, OnSection)
59         ON_COMMAND(ID_COMMON, OnCommon)
60         ON_COMMAND(ID_PSECTION, OnPsection)
61         ON_COMMAND(ID_BLEND, OnBlend)
62         ON_COMMAND(ID_CHAMF, OnChamf)
63         ON_COMMAND(ID_EVOLVEDBLEND, OnEvolvedblend)
64         ON_COMMAND(ID_PRISM_LOCAL, OnPrismLocal)
65         ON_COMMAND(ID_REVOL_LOCAL, OnRevolLocal)
66         ON_COMMAND(ID_GLUE_LOCAL, OnGlueLocal)
67         ON_COMMAND(ID_DPRISM_LOCAL, OnDprismLocal)
68         ON_COMMAND(ID_Pipe_LOCAL, OnPipeLocal)
69         ON_COMMAND(ID_LINEAR_LOCAL, OnLinearLocal)
70         ON_COMMAND(ID_SPLIT_LOCAL, OnSplitLocal)
71         ON_COMMAND(ID_THICK_LOCAL, OnThickLocal)
72         ON_COMMAND(ID_OFFSET_LOCAL, OnOffsetLocal)
73         ON_COMMAND(ID_VERTEX, OnVertex)
74         ON_COMMAND(ID_EDGE, OnEdge)
75         ON_COMMAND(ID_WIRE, OnWire)
76         ON_COMMAND(ID_FACE, OnFace)
77         ON_COMMAND(ID_SHELL, OnShell)
78         ON_COMMAND(ID_COMPOUND, OnCompound)
79         ON_COMMAND(ID_GEOMETRIE, OnGeometrie)
80         ON_COMMAND(ID_SEWING, OnSewing)
81         ON_COMMAND(ID_EXPLORER, OnExplorer)
82         ON_COMMAND(ID_BUILDER, OnBuilder)
83         ON_COMMAND(ID_VALID, OnValid)
84         ON_COMMAND(ID_LINEAR, OnLinear)
85         ON_COMMAND(ID_VOLUME, OnVolume)
86         ON_COMMAND(ID_SURFACE, OnSurface)
87         ON_COMMAND(ID_BUTTON_FILL, OnButtonFill)
88         ON_COMMAND(ID_STOP_STOP, OnStopStop)
89         ON_COMMAND(ID_FILLWITHTANG, OnFillwithtang)
90         //}}AFX_MSG_MAP
91 END_MESSAGE_MAP()
92
93 /////////////////////////////////////////////////////////////////////////////
94 // CModelingDoc construction/destruction
95
96 CModelingDoc::CModelingDoc()
97 {
98         myAISContext->SetDisplayMode(AIS_Shaded,Standard_False);
99 }
100
101 CModelingDoc::~CModelingDoc()
102 {
103 }
104  
105 void CModelingDoc::OnMirror() 
106 {
107         AIS_ListOfInteractive aList;
108         myAISContext->DisplayedObjects(aList);
109         AIS_ListIteratorOfListOfInteractive aListIterator;
110         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
111                 myAISContext->Remove (aListIterator.Value(), Standard_False);
112         }
113         TopoDS_Shape S = BRepPrimAPI_MakeWedge (60.,100.,80.,20.).Shape();
114         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
115         myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False);
116         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);
117         myAISContext->Display(ais1,Standard_False);
118         gp_Trsf theTransformation;
119         gp_Pnt PntCenterOfTheTransformation(110,60,60);
120         Handle(AIS_Point) aispnt = new AIS_Point(new Geom_CartesianPoint(PntCenterOfTheTransformation));
121         myAISContext->Display(aispnt,Standard_False);
122         theTransformation.SetMirror(PntCenterOfTheTransformation);
123         BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);
124         TopoDS_Shape S2 = myBRepTransformation.Shape();
125         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
126         myAISContext->SetColor(ais2,Quantity_NOC_BLUE1,Standard_False); 
127         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
128         myAISContext->Display(ais2,Standard_False);
129         Fit();
130     TCollection_AsciiString Message ("\
131 \n\
132 TopoDS_Shape S = BRepBuilderAPI_MakeWedge(60.,100.,80.,20.); \n\
133 gp_Trsf theTransformation; \n\
134 gp_Pnt PntCenterOfTheTransformation(110,60,60); \n\
135 theTransformation.SetMirror(PntCenterOfTheTransformation);\n\
136 BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);\n\
137 TopoDS_Shape TransformedShape = myBRepTransformation.Shape();   \n");
138         PocessTextInDialog("Transform a Shape with Mirror and One point.", Message);
139         
140 }
141
142 void CModelingDoc::OnMirroraxis() 
143 {
144         AIS_ListOfInteractive aList;
145         myAISContext->DisplayedObjects(aList);
146         AIS_ListIteratorOfListOfInteractive aListIterator;
147         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
148                 myAISContext->Remove (aListIterator.Value(), Standard_False);
149         }
150         TopoDS_Shape S = BRepPrimAPI_MakeWedge(60.,100.,80.,20.).Shape(); 
151         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
152         myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False); 
153         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
154         myAISContext->Display(ais1,Standard_False);
155         gp_Trsf theTransformation;
156         gp_Ax1 axe = gp_Ax1(gp_Pnt(110,60,60),gp_Dir(0.,1.,0.));
157         Handle(Geom_Axis1Placement) Gax1 = new Geom_Axis1Placement(axe);
158         Handle (AIS_Axis) ax1 = new AIS_Axis(Gax1);
159         myAISContext->Display(ax1,Standard_False);
160         theTransformation.SetMirror(axe);
161         BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);
162         TopoDS_Shape S2 = myBRepTransformation.Shape();
163         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
164         myAISContext->SetColor(ais2,Quantity_NOC_BLUE1,Standard_False); 
165         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
166         myAISContext->Display(ais2,Standard_False);
167         Fit();
168
169     TCollection_AsciiString Message ("\
170 \n\
171 TopoDS_Shape S = BRepBuilderAPI_MakeWedge(60.,100.,80.,20.); \n\
172 gp_Trsf theTransformation; \n\
173 gp_Ax1 Axis = gp_Ax1(gp_Pnt(110,60,60),gp_Dir(0.,1.,0.)); \n\
174 theTransformation.SetMirror(Axis);\n\
175 BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);\n\
176 TopoDS_Shape TransformedShape = myBRepTransformation.Shape();   \n");
177
178         PocessTextInDialog("Transform a Shape with Mirror and One axis.", Message);
179
180 }
181
182
183 void CModelingDoc::OnRotate() 
184 {
185         AIS_ListOfInteractive aList;
186         myAISContext->DisplayedObjects(aList);
187         AIS_ListIteratorOfListOfInteractive aListIterator;
188         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
189                 myAISContext->Remove (aListIterator.Value(), Standard_False);
190         }
191         TopoDS_Shape S = BRepPrimAPI_MakeWedge(60.,100.,80.,20.).Shape(); 
192         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
193         myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False); 
194         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
195         myAISContext->Display(ais1,Standard_False);
196         gp_Trsf theTransformation;
197         gp_Ax1 axe = gp_Ax1(gp_Pnt(200,60,60),gp_Dir(0.,1.,0.));
198         Handle(Geom_Axis1Placement) Gax1 = new Geom_Axis1Placement(axe);
199         Handle (AIS_Axis) ax1 = new AIS_Axis(Gax1);
200         myAISContext->Display(ax1,Standard_False);
201         theTransformation.SetRotation(axe,30*M_PI/180);
202         BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);
203         TopoDS_Shape S2 = myBRepTransformation.Shape();
204         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
205         myAISContext->SetColor(ais2,Quantity_NOC_BLUE1,Standard_False); 
206         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
207         myAISContext->Display(ais2,Standard_False);
208         Fit();
209
210     TCollection_AsciiString Message ("\
211 \n\
212 TopoDS_Shape S = BRepBuilderAPI_MakeWedge(60.,100.,80.,20.); \n\
213 gp_Trsf theTransformation; \n\
214 gp_Ax1 Axis = gp_Ax1(gp_Pnt(200,60,60),gp_Dir(0.,1.,0.)); \n\
215 theTransformation.SetRotation(Axis,30*PI/180); // Rotation of 30 degrees \n\
216 BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);\n\
217 TopoDS_Shape TransformedShape = myBRepTransformation.Shape();   \n");
218
219         PocessTextInDialog("Transform a Shape with Rotation.", Message);
220         
221 }
222
223 void CModelingDoc::OnScale() 
224 {
225         AIS_ListOfInteractive aList;
226         myAISContext->DisplayedObjects(aList);
227         AIS_ListIteratorOfListOfInteractive aListIterator;
228         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
229                 myAISContext->Remove (aListIterator.Value(), Standard_False);
230         }
231         TopoDS_Shape S = BRepPrimAPI_MakeWedge(60.,100.,80.,20.).Shape(); 
232         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
233         myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False); 
234         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
235         myAISContext->Display(ais1,Standard_False);
236         gp_Trsf theTransformation;
237         gp_Pnt theCenterOfScale(200,60,60);
238         Handle(AIS_Point) aispnt = new AIS_Point(new Geom_CartesianPoint(theCenterOfScale));
239
240         myAISContext->Display(aispnt,Standard_False);
241         theTransformation.SetScale(theCenterOfScale,0.5);
242         BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);
243         TopoDS_Shape S2 = myBRepTransformation.Shape();
244
245         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
246         myAISContext->SetColor(ais2,Quantity_NOC_BLUE1,Standard_False); 
247         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
248         myAISContext->Display(ais2,Standard_False);
249         Fit();
250
251     TCollection_AsciiString Message ("\
252 \n\
253 TopoDS_Shape S = BRepBuilderAPI_MakeWedge(60.,100.,80.,20.); \n\
254 gp_Trsf theTransformation; \n\
255 gp_Pnt theCenterOfScale(200,60,60); \n\
256 theTransformation.SetScale(theCenterOfScale,0.5); // Scale : value = 0.5 \n\
257 BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);\n\
258 TopoDS_Shape TransformedShape = myBRepTransformation.Shape();   \n");
259
260         PocessTextInDialog("Scale a Shape with One point.", Message);
261         
262
263 }
264
265
266
267 void CModelingDoc::OnTranslation() 
268 {
269         AIS_ListOfInteractive aList;
270         myAISContext->DisplayedObjects(aList);
271         AIS_ListIteratorOfListOfInteractive aListIterator;
272         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
273                 myAISContext->Remove (aListIterator.Value(), Standard_False);
274         }
275         TopoDS_Shape S = BRepPrimAPI_MakeWedge(6.,10.,8.,2.).Shape(); 
276         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
277         myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False); 
278         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);
279         myAISContext->Display(ais1,Standard_False);
280         gp_Trsf theTransformation;
281         gp_Vec theVectorOfTranslation(-6,-6,6);
282
283         Handle(ISession_Direction) aDirection1 = new ISession_Direction(gp_Pnt(0,0,0),theVectorOfTranslation);
284         myAISContext->Display(aDirection1,Standard_False);
285
286         theTransformation.SetTranslation(theVectorOfTranslation);
287         BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);
288         TopoDS_Shape S2 = myBRepTransformation.Shape();
289
290         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
291         myAISContext->SetColor(ais2,Quantity_NOC_BLUE1,Standard_False); 
292         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
293         myAISContext->Display(ais2,Standard_False);
294
295         Fit();
296
297     TCollection_AsciiString Message ("\
298 \n\
299 TopoDS_Shape S = BRepBuilderAPI_MakeWedge(6.,10.,8.,2.); \n\
300 gp_Trsf theTransformation; \n\
301 gp_Vec theVectorOfTranslation(6,6,6); \n\
302 theTransformation.SetTranslation(theVectorOfTranslation); \n\
303 BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);\n\
304 TopoDS_Shape TransformedShape = myBRepTransformation.Shape();   \n");
305
306         PocessTextInDialog("Translate a Shape with One vector.", Message);
307         
308 }
309
310 void CModelingDoc::OnDisplacement() 
311 {
312         AIS_ListOfInteractive aList;
313         myAISContext->DisplayedObjects(aList);
314         AIS_ListIteratorOfListOfInteractive aListIterator;
315         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
316                 myAISContext->Remove (aListIterator.Value(), Standard_False);
317         }
318   TopoDS_Shape S = BRepPrimAPI_MakeWedge(60., 100., 80., 20.).Shape();
319         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
320         myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False); 
321         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
322         myAISContext->Display(ais1,Standard_False);
323         gp_Trsf theTransformation;
324
325         gp_Ax3 ax3_1(gp_Pnt(0,0,0),gp_Dir(0,0,1));
326         gp_Ax3 ax3_2(gp_Pnt(60,60,60),gp_Dir(1,1,1));
327
328         theTransformation.SetDisplacement(ax3_1,ax3_2);
329         BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);
330         TopoDS_Shape TransformedShape = myBRepTransformation.Shape();
331         Handle(AIS_Shape) ais2 = new AIS_Shape(TransformedShape);
332         myAISContext->SetColor(ais2,Quantity_NOC_BLUE1,Standard_False); 
333         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
334         myAISContext->Display(ais2,Standard_False);
335         Fit();
336     TCollection_AsciiString Message ("\
337 \n\
338 TopoDS_Shape S = BRepBuilderAPI_MakeWedge(60.,100.,80.,20.); \n\
339 gp_Trsf theTransformation; \n\
340 gp_Ax3 ax3_1(gp_Pnt(0,0,0),gp_Dir(0,0,1)); \n\
341 gp_Ax3 ax3_2(gp_Pnt(60,60,60),gp_Dir(1,1,1)); \n\
342 theTransformation.SetDisplacement(ax3_1,ax3_2); \n\
343 BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation);\n\
344 TopoDS_Shape TransformedShape = myBRepTransformation.Shape();   \n");
345
346         PocessTextInDialog("Displace a Shape with Two coordinate systems.", Message);
347         
348         
349 }
350
351
352 void CModelingDoc::OnDeform() 
353 {
354         AIS_ListOfInteractive aList;
355         myAISContext->DisplayedObjects(aList);
356         AIS_ListIteratorOfListOfInteractive aListIterator;
357         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
358                 myAISContext->Remove (aListIterator.Value(), Standard_False);
359         }
360   TopoDS_Shape S = BRepPrimAPI_MakeWedge(60., 100., 80., 20.).Shape();
361         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
362         myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False); 
363         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
364         myAISContext->Display(ais1,Standard_False);
365
366         gp_GTrsf theTransformation;
367         gp_Mat rot(1, 0, 0, 0, 0.5, 0, 0, 0, 1.5);
368         theTransformation.SetVectorialPart(rot);
369         theTransformation.SetTranslationPart(gp_XYZ(5,5,5));
370
371         BRepBuilderAPI_GTransform myBRepTransformation(S,theTransformation);
372         TopoDS_Shape S2 = myBRepTransformation.Shape();
373
374         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
375         myAISContext->SetColor(ais2,Quantity_NOC_BLUE1,Standard_False); 
376         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
377         myAISContext->Display(ais2,Standard_False);
378         Fit();
379     TCollection_AsciiString Message ("\
380 \n\
381 TopoDS_Shape S = BRepBuilderAPI_MakeWedge(60.,100.,80.,20.); \n\
382 gp_GTrsf theTransformation; \n\
383 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\
384 theTransformation.SetVectorialPart(rot); \n\
385 theTransformation.SetTranslationPart(gp_XYZ(5,5,5)); \n\
386 BRepBuilderAPI_GTransform myBRepGTransformation(S,theTransformation);\n\
387 TopoDS_Shape TransformedShape = myBRepGTransformation.Shape();  \n");
388
389         PocessTextInDialog("Deform a Shape with One matrix of deformation and One translation.", Message);
390 }
391
392 /* =================================================================================
393    ====================   P R I M I T I V E S   ====================================
394    ================================================================================= */
395
396 void CModelingDoc::OnBox() 
397 {
398         AIS_ListOfInteractive aList;
399         myAISContext->DisplayedObjects(aList);
400         AIS_ListIteratorOfListOfInteractive aListIterator;
401         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
402                 myAISContext->Remove (aListIterator.Value(), Standard_False);
403         }
404   TopoDS_Shape B1 = BRepPrimAPI_MakeBox(200., 150., 100.).Shape();
405         Handle(AIS_Shape) aBox1 = new AIS_Shape(B1);
406         myAISContext->SetMaterial(aBox1,Graphic3d_NOM_PLASTIC,Standard_False);    
407         myAISContext->SetColor(aBox1,Quantity_NOC_GREEN,Standard_False); 
408         myAISContext->Display(aBox1,Standard_False);
409         TopoDS_Shape B2 = BRepPrimAPI_MakeBox (gp_Ax2(gp_Pnt(-200.,-80.,-70.),
410                                          gp_Dir(1.,2.,1.)),
411                                          80., 90., 120.).Shape();
412         Handle(AIS_Shape) aBox2 = new AIS_Shape(B2);
413         myAISContext->SetMaterial(aBox2,Graphic3d_NOM_PLASTIC,Standard_False);    
414         myAISContext->SetColor(aBox2,Quantity_NOC_RED,Standard_False); 
415         myAISContext->Display(aBox2,Standard_False);
416         Fit();
417     TCollection_AsciiString Message ("\
418                 \n\
419 TopoDS_Shape B1 = BRepPrimAPI_MakeBox (200.,150.,100.); \n\
420 TopoDS_Shape B2 = BRepPrimAPI_MakeBox (gp_Ax2(gp_Pnt(-200.,-80.,-70.), \n\
421                                           gp_Dir(1.,2.,1.)), \n\
422                                    80.,90.,120.); \n\
423                 \n");
424         PocessTextInDialog("Make a topological box", Message);
425 }
426
427 void CModelingDoc::OnCylinder() 
428 {
429         AIS_ListOfInteractive aList;
430         myAISContext->DisplayedObjects(aList);
431         AIS_ListIteratorOfListOfInteractive aListIterator;
432         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
433                 myAISContext->Remove (aListIterator.Value(), Standard_False);
434         }
435
436   TopoDS_Shape C1 = BRepPrimAPI_MakeCylinder(50., 200.).Shape();
437         Handle(AIS_Shape) aCyl1 = new AIS_Shape(C1);
438         myAISContext->SetMaterial(aCyl1,Graphic3d_NOM_PLASTIC,Standard_False);    
439         myAISContext->SetColor(aCyl1,Quantity_NOC_RED,Standard_False); 
440         myAISContext->Display(aCyl1,Standard_False);
441         TopoDS_Shape C2 = BRepPrimAPI_MakeCylinder (gp_Ax2(gp_Pnt(200.,200.,0.),
442                                                                                                                       gp_Dir(0.,0.,1.)),
443                                               40., 110., 210.*M_PI / 180).Shape();
444         Handle(AIS_Shape) aCyl2 = new AIS_Shape(C2);
445         myAISContext->SetMaterial(aCyl2,Graphic3d_NOM_PLASTIC,Standard_False);    
446         myAISContext->SetColor(aCyl2,Quantity_NOC_MATRABLUE,Standard_False);    
447         myAISContext->Display(aCyl2,Standard_False);
448         Fit();
449
450     TCollection_AsciiString Message ("\
451                 \n\
452 TopoDS_Shape C1 = BRepPrimAPI_MakeCylinder (50.,200.); \n\
453 TopoDS_Shape C2 = BRepPrimAPI_MakeCylinder (gp_Ax2(gp_Pnt(200.,200.,0.), \n\
454                                         gp_Dir(0.,0.,1.)), \n\
455                                         40.,110.,210.*PI180.); \n\
456                 \n");
457         PocessTextInDialog("Make a cylinder", Message);
458 }
459
460
461 void CModelingDoc::OnCone() 
462 {
463         AIS_ListOfInteractive aList;
464         myAISContext->DisplayedObjects(aList);
465         AIS_ListIteratorOfListOfInteractive aListIterator;
466         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
467                 myAISContext->Remove (aListIterator.Value(), Standard_False);
468         }
469   TopoDS_Shape C1 = BRepPrimAPI_MakeCone(50., 25., 200.).Shape();
470         Handle(AIS_Shape) ais1 = new AIS_Shape(C1);
471         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);    
472         myAISContext->SetColor(ais1,Quantity_NOC_MATRABLUE,Standard_False);             
473         myAISContext->Display(ais1,Standard_False);
474         TopoDS_Shape C2 = BRepPrimAPI_MakeCone(gp_Ax2(gp_Pnt(100.,100.,0.),
475                                                                                                                  gp_Dir(0.,0.,1.)),
476                                          60., 0., 150., 210.*M_PI / 180).Shape();
477         Handle(AIS_Shape) ais2 = new AIS_Shape(C2);
478         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);    
479         myAISContext->SetColor(ais2,Quantity_NOC_GREEN,Standard_False); 
480         myAISContext->Display(ais2,Standard_False);
481         Fit();
482
483     TCollection_AsciiString Message ("\
484                 \n\
485 TopoDS_Shape C1 = BRepPrimAPI_MakeCone (50.,25.,200.); \n\
486 TopoDS_Shape C2 = BRepPrimAPI_MakeCone(gp_Ax2(gp_Pnt(100.,100.,0.), \n\
487                                           gp_Dir(0.,0.,1.)), \n\
488                                    605.,0.,150.,210.*PI180); \n\
489                 \n");
490         PocessTextInDialog("Make a cone", Message);
491 }
492
493 void CModelingDoc::OnSphere() 
494 {
495         AIS_ListOfInteractive aList;
496         myAISContext->DisplayedObjects(aList);
497         AIS_ListIteratorOfListOfInteractive aListIterator;
498         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
499                 myAISContext->Remove (aListIterator.Value(), Standard_False);
500         }
501
502   TopoDS_Shape S1 = BRepPrimAPI_MakeSphere(gp_Pnt(-200., -250., 0.), 80.).Shape();
503         Handle(AIS_Shape) ais1 = new AIS_Shape(S1);
504         myAISContext->SetColor(ais1,Quantity_NOC_AZURE,Standard_False); 
505         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);    
506         myAISContext->Display(ais1,Standard_False);
507   TopoDS_Shape S2 = BRepPrimAPI_MakeSphere(100., 120.*M_PI / 180).Shape();
508         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
509         myAISContext->SetColor(ais2,Quantity_NOC_GREEN,Standard_False); 
510         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);    
511         myAISContext->Display(ais2,Standard_False);
512         TopoDS_Shape S3 = BRepPrimAPI_MakeSphere(gp_Pnt(200.,250.,0.),100.,
513                                            -60.*M_PI / 180, 60.*M_PI / 180).Shape();
514         Handle(AIS_Shape) ais3 = new AIS_Shape(S3);
515         myAISContext->SetColor(ais3,Quantity_NOC_RED,Standard_False); 
516         myAISContext->SetMaterial(ais3,Graphic3d_NOM_PLASTIC,Standard_False);    
517         myAISContext->Display(ais3,Standard_False);
518         TopoDS_Shape S4 = BRepPrimAPI_MakeSphere(gp_Pnt(0.,0.,-300.),150.,
519                                            -45.*M_PI / 180, 45.*M_PI / 180, 45.*M_PI / 180).Shape();
520         Handle(AIS_Shape) ais4 = new AIS_Shape(S4);
521         myAISContext->SetColor(ais4,Quantity_NOC_MATRABLUE,Standard_False); 
522         myAISContext->SetMaterial(ais4,Graphic3d_NOM_PLASTIC,Standard_False);    
523         myAISContext->Display(ais4,Standard_False);
524         Fit();
525
526     TCollection_AsciiString Message ("\
527                 \n\
528 TopoDS_Shape S1 = BRepPrimAPI_MakeSphere(gp_Pnt(-200.,-250.,0.),80.); \n\
529 TopoDS_Shape S2 = BRepPrimAPI_MakeSphere(100.,120.*PI180); \n\
530 TopoDS_Shape S3 = BRepPrimAPI_MakeSphere(gp_Pnt(200.,250.,0.),100., \n\
531                                      -60.*PI180, 60.*PI180); \n\
532 TopoDS_Shape S4 = BRepPrimAPI_MakeSphere(gp_Pnt(0.,0.,-300.),150., \n\
533                                      -45.*PI180, 45.*PI180, 45.*PI180); \n\
534                 \n");
535         PocessTextInDialog("Make a sphere", Message);
536 }
537
538 void CModelingDoc::OnTorus() 
539 {
540         AIS_ListOfInteractive aList;
541         myAISContext->DisplayedObjects(aList);
542         AIS_ListIteratorOfListOfInteractive aListIterator;
543         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
544                 myAISContext->Remove (aListIterator.Value(), Standard_False);
545         }
546
547   TopoDS_Shape S1 = BRepPrimAPI_MakeTorus(60., 20.).Shape();
548         Handle(AIS_Shape) ais1 = new AIS_Shape(S1);
549         myAISContext->SetColor(ais1,Quantity_NOC_AZURE,Standard_False); 
550         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);    
551         myAISContext->Display(ais1,Standard_False);
552         TopoDS_Shape S2 = BRepPrimAPI_MakeTorus(gp_Ax2(gp_Pnt(100.,100.,0.),gp_Dir(1.,1.,1.)),
553                                           50., 20., 210.*M_PI / 180).Shape();
554         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
555         myAISContext->SetColor(ais2,Quantity_NOC_GREEN,Standard_False); 
556         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);    
557         myAISContext->Display(ais2,Standard_False);
558         TopoDS_Shape S3 = BRepPrimAPI_MakeTorus(gp_Ax2(gp_Pnt(-200.,-150.,-100),gp_Dir(0.,1.,0.)),
559                                           60., 20., -45.*M_PI / 180, 45.*M_PI / 180, 90.*M_PI / 180).Shape();
560         Handle(AIS_Shape) ais3= new AIS_Shape(S3);
561         myAISContext->SetColor(ais3,Quantity_NOC_CORAL,Standard_False); 
562         myAISContext->SetMaterial(ais3,Graphic3d_NOM_PLASTIC,Standard_False);    
563         myAISContext->Display(ais3,Standard_False);
564         Fit();
565
566     TCollection_AsciiString Message ("\
567                 \n\
568 TopoDS_Shape S1 = BRepPrimAPI_MakeTorus(60.,20.); \n\
569 TopoDS_Shape S2 = BRepPrimAPI_MakeTorus(gp_Ax2(gp_Pnt(100.,100.,0.),gp_Dir(1.,1.,1.)), \n\
570                                     50.,20.,210.*PI180); \n\
571 TopoDS_Shape S3 = BRepPrimAPI_MakeTorus(gp_Ax2(gp_Pnt(-200.,-150.,-100),gp_Dir(0.,1.,0.)), \n\
572                                     60.,20.,-45.*PI180,45.*PI180,90.*PI180); \n\
573                 \n");
574         PocessTextInDialog("Make a torus", Message);
575 }
576
577 void CModelingDoc::OnWedge() 
578 {
579         AIS_ListOfInteractive aList;
580         myAISContext->DisplayedObjects(aList);
581         AIS_ListIteratorOfListOfInteractive aListIterator;
582         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
583                 myAISContext->Remove (aListIterator.Value(), Standard_False);
584         }
585
586   TopoDS_Shape S1 = BRepPrimAPI_MakeWedge(60., 100., 80., 20.).Shape();
587         Handle(AIS_Shape) ais1 = new AIS_Shape(S1);
588         myAISContext->SetColor(ais1,Quantity_NOC_AZURE,Standard_False); 
589         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);    
590         myAISContext->Display(ais1,Standard_False);
591         TopoDS_Shape S2 = BRepPrimAPI_MakeWedge(gp_Ax2(gp_Pnt(100.,100.,0.),gp_Dir(0.,0.,1.)),
592                                           60., 50., 80., 25., -10., 40., 70.).Shape();
593         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
594         myAISContext->SetColor(ais2,Quantity_NOC_CORAL2,Standard_False); 
595         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);    
596         myAISContext->Display(ais2,Standard_False);
597         Fit();
598
599     TCollection_AsciiString Message ("\
600                 \n\
601 TopoDS_Shape S1 = BRepPrimAPI_MakeWedge(60.,100.,80.,20.); \n\
602 TopoDS_Shape S2 = BRepPrimAPI_MakeWedge(gp_Ax2(gp_Pnt(100.,100.,0.),gp_Dir(0.,0.,1.)), \n\
603                                     60.,50.,80.,25.,-10.,40.,70.); \n\
604                 \n");
605         PocessTextInDialog("Make a wedge", Message);
606 }
607
608 void CModelingDoc::OnPrism() 
609 {
610         AIS_ListOfInteractive aList;
611         myAISContext->DisplayedObjects(aList);
612         AIS_ListIteratorOfListOfInteractive aListIterator;
613         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
614                 myAISContext->Remove (aListIterator.Value(), Standard_False);
615         }
616
617         TopoDS_Vertex V1 = BRepBuilderAPI_MakeVertex(gp_Pnt(-200.,-200.,0.));
618         Handle(AIS_Shape) ais1 = new AIS_Shape(V1);
619         myAISContext->Display(ais1,Standard_False);
620         TopoDS_Shape S1 = BRepPrimAPI_MakePrism(V1,gp_Vec(0.,0.,100.));
621         Handle(AIS_Shape) ais2 = new AIS_Shape(S1);
622         myAISContext->Display(ais2,Standard_False);
623
624         TopoDS_Edge E = BRepBuilderAPI_MakeEdge(gp_Pnt(-150.,-150,0.), gp_Pnt(-50.,-50,0.));
625         Handle(AIS_Shape) ais3 = new AIS_Shape(E);
626         myAISContext->Display(ais3,Standard_False);
627         TopoDS_Shape S2 = BRepPrimAPI_MakePrism(E,gp_Vec(0.,0.,100.));
628         Handle(AIS_Shape) ais4 = new AIS_Shape(S2);
629         myAISContext->SetColor(ais4,Quantity_NOC_CORAL2,Standard_False); 
630         myAISContext->SetMaterial(ais4,Graphic3d_NOM_PLASTIC,Standard_False);    
631         myAISContext->Display(ais4,Standard_False);
632
633         TopoDS_Edge E1 = BRepBuilderAPI_MakeEdge(gp_Pnt(0.,0.,0.), gp_Pnt(50.,0.,0.));
634         TopoDS_Edge E2 = BRepBuilderAPI_MakeEdge(gp_Pnt(50.,0.,0.), gp_Pnt(50.,50.,0.));
635         TopoDS_Edge E3 = BRepBuilderAPI_MakeEdge(gp_Pnt(50.,50.,0.), gp_Pnt(0.,0.,0.));
636         TopoDS_Wire W = BRepBuilderAPI_MakeWire(E1,E2,E3);
637         TopoDS_Shape S3 = BRepPrimAPI_MakePrism(W,gp_Vec(0.,0.,100.));
638         Handle(AIS_Shape) ais5 = new AIS_Shape(W);
639         myAISContext->Display(ais5,Standard_False);
640         Handle(AIS_Shape) ais6 = new AIS_Shape(S3);
641         myAISContext->SetColor(ais6,Quantity_NOC_GREEN,Standard_False); 
642         myAISContext->SetMaterial(ais6,Graphic3d_NOM_PLASTIC,Standard_False);    
643         myAISContext->Display(ais6,Standard_False);
644
645         gp_Circ c = gp_Circ(gp_Ax2(gp_Pnt(200.,200.,0.),gp_Dir(0.,0.,1.)), 80.);
646         TopoDS_Edge Ec = BRepBuilderAPI_MakeEdge(c);
647         TopoDS_Wire Wc = BRepBuilderAPI_MakeWire(Ec);
648         TopoDS_Face F = BRepBuilderAPI_MakeFace(gp_Pln(gp::XOY()),Wc);
649         Handle(AIS_Shape) ais7 = new AIS_Shape(F);
650         myAISContext->Display(ais7,Standard_False);
651         TopoDS_Shape S4 = BRepPrimAPI_MakePrism(F,gp_Vec(0.,0.,100.));
652         Handle(AIS_Shape) ais8 = new AIS_Shape(S4);
653         myAISContext->SetColor(ais8,Quantity_NOC_MATRABLUE,Standard_False); 
654         myAISContext->SetMaterial(ais8,Graphic3d_NOM_PLASTIC,Standard_False);    
655         myAISContext->Display(ais8,Standard_False);
656         Fit();
657
658     TCollection_AsciiString Message ("\
659                 \n\
660 --- Prism a vertex -> result is an edge --- \n\
661 \n\
662 TopoDS_Vertex V1 = BRepBuilderAPI_MakeVertex(gp_Pnt(-200.,-200.,0.)); \n\
663 TopoDS_Shape S1 = BRepBuilderAPI_MakePrism(V1,gp_Vec(0.,0.,100.)); \n\
664 \n\
665 --- Prism an edge -> result is a face --- \n\
666 \n\
667 TopoDS_Edge E = BRepBuilderAPI_MakeEdge(gp_Pnt(-150.,-150,0.), gp_Pnt(-50.,-50,0.)); \n\
668 TopoDS_Shape S2 = BRepPrimAPI_MakePrism(E,gp_Vec(0.,0.,100.)); \n\
669 \n\
670 --- Prism an wire -> result is a shell --- \n\
671 \n\
672 TopoDS_Edge E1 = BREpBuilderAPI_MakeEdge(gp_Pnt(0.,0.,0.), gp_Pnt(50.,0.,0.)); \n\
673 TopoDS_Edge E2 = BREpBuilderAPI_MakeEdge(gp_Pnt(50.,0.,0.), gp_Pnt(50.,50.,0.)); \n\
674 TopoDS_Edge E3 = BREpBuilderAPI_MakeEdge(gp_Pnt(50.,50.,0.), gp_Pnt(0.,0.,0.)); \n\
675 TopoDS_Wire W = BRepBuilderAPI_MakeWire(E1,E2,E3); \n\
676 TopoDS_Shape S3 = BRepPrimAPI_MakePrism(W,gp_Vec(0.,0.,100.)); \n\
677 \n\
678 --- Prism a face or a shell -> result is a solid --- \n\
679 \n\
680 gp_Circ c = gp_Circ(gp_Ax2(gp_Pnt(200.,200.,0.gp_Dir(0.,0.,1.)), 80.); \n\
681 TopoDS_Edge Ec = BRepBuilderAPI_MakeEdge(c); \n\
682 TopoDS_Wire Wc = BRepBuilderAPI_MakeWire(Ec); \n\
683 TopoDS_Face F = BRepBuilderAPI_MakeFace(gp::XOY(),Wc); \n\
684 TopoDS_Shape S4 = BRepBuilderAPI_MakePrism(F,gp_Vec(0.,0.,100.)); \n\
685                 \n");
686         PocessTextInDialog("Make a prism", Message);
687 }
688
689 void CModelingDoc::OnRevol() 
690 {
691         AIS_ListOfInteractive aList;
692         myAISContext->DisplayedObjects(aList);
693         AIS_ListIteratorOfListOfInteractive aListIterator;
694         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
695                 myAISContext->Remove (aListIterator.Value(), Standard_False);
696         }
697
698         TopoDS_Vertex V1 = BRepBuilderAPI_MakeVertex(gp_Pnt(-200.,-200.,0.));
699         Handle(AIS_Shape) ais1 = new AIS_Shape(V1);
700         myAISContext->Display(ais1,Standard_False);
701         gp_Ax1 axe = gp_Ax1(gp_Pnt(-170.,-170.,0.),gp_Dir(0.,0.,1.));
702         Handle(Geom_Axis1Placement) Gax1 = new Geom_Axis1Placement(axe);
703         Handle (AIS_Axis) ax1 = new AIS_Axis(Gax1);
704         myAISContext->Display(ax1,Standard_False);
705         TopoDS_Shape S1 = BRepPrimAPI_MakeRevol(V1,axe);
706         Handle(AIS_Shape) ais2 = new AIS_Shape(S1);
707         myAISContext->Display(ais2,Standard_False);
708
709         TopoDS_Edge E = BRepBuilderAPI_MakeEdge(gp_Pnt(-120.,-120,0.), gp_Pnt(-120.,-120,100.));
710         Handle(AIS_Shape) ais3 = new AIS_Shape(E);
711         myAISContext->Display(ais3,Standard_False);
712         axe = gp_Ax1(gp_Pnt(-100.,-100.,0.),gp_Dir(0.,0.,1.));
713         Handle(Geom_Axis1Placement) Gax2 = new Geom_Axis1Placement(axe);
714         Handle (AIS_Axis) ax2 = new AIS_Axis(Gax2);
715         myAISContext->Display(ax2,Standard_False);
716         TopoDS_Shape S2 = BRepPrimAPI_MakeRevol(E,axe);
717         Handle(AIS_Shape) ais4 = new AIS_Shape(S2);
718         myAISContext->SetColor(ais4,Quantity_NOC_YELLOW,Standard_False); 
719         myAISContext->SetMaterial(ais4,Graphic3d_NOM_PLASTIC,Standard_False);    
720         myAISContext->Display(ais4,Standard_False);
721
722         TopoDS_Edge E1 = BRepBuilderAPI_MakeEdge(gp_Pnt(0.,0.,0.), gp_Pnt(50.,0.,0.));
723         TopoDS_Edge E2 = BRepBuilderAPI_MakeEdge(gp_Pnt(50.,0.,0.), gp_Pnt(50.,50.,0.));
724         TopoDS_Edge E3 = BRepBuilderAPI_MakeEdge(gp_Pnt(50.,50.,0.), gp_Pnt(0.,0.,0.));
725         TopoDS_Wire W = BRepBuilderAPI_MakeWire(E1,E2,E3);
726         axe = gp_Ax1(gp_Pnt(0.,0.,30.),gp_Dir(0.,1.,0.));
727         Handle(Geom_Axis1Placement) Gax3 = new Geom_Axis1Placement(axe);
728         Handle (AIS_Axis) ax3 = new AIS_Axis(Gax3);
729         myAISContext->Display(ax3,Standard_False);
730         TopoDS_Shape S3 = BRepPrimAPI_MakeRevol(W,axe, 210.*M_PI/180);
731         Handle(AIS_Shape) ais5 = new AIS_Shape(W);
732         myAISContext->Display(ais5,Standard_False);
733         Handle(AIS_Shape) ais6 = new AIS_Shape(S3);
734         myAISContext->SetColor(ais6,Quantity_NOC_GREEN,Standard_False); 
735         myAISContext->SetMaterial(ais6,Graphic3d_NOM_PLASTIC,Standard_False);    
736         myAISContext->Display(ais6,Standard_False);
737
738         gp_Circ c = gp_Circ(gp_Ax2(gp_Pnt(200.,200.,0.),gp_Dir(0.,0.,1.)), 80.);
739         TopoDS_Edge Ec = BRepBuilderAPI_MakeEdge(c);
740         TopoDS_Wire Wc = BRepBuilderAPI_MakeWire(Ec);
741         TopoDS_Face F = BRepBuilderAPI_MakeFace(gp_Pln(gp::XOY()),Wc);
742         axe = gp_Ax1(gp_Pnt(290,290.,0.),gp_Dir(0.,1,0.));
743         Handle(Geom_Axis1Placement) Gax4 = new Geom_Axis1Placement(axe);
744         Handle (AIS_Axis) ax4 = new AIS_Axis(Gax4);
745         myAISContext->Display(ax4,Standard_False);
746         TopoDS_Shape S4 = BRepPrimAPI_MakeRevol(F,axe, 90.*M_PI/180);
747         Handle(AIS_Shape) ais8 = new AIS_Shape(S4);
748         myAISContext->SetColor(ais8,Quantity_NOC_MATRABLUE,Standard_False); 
749         myAISContext->SetMaterial(ais8,Graphic3d_NOM_PLASTIC,Standard_False);    
750         myAISContext->Display(ais8,Standard_False);
751         Fit();
752
753         TCollection_AsciiString Message ("\
754                 \n\
755 --- Revol of a vertex -> result is an edge --- \n\
756 \n\
757 TopoDS_Vertex V1 = BRepBuilderAPI_MakeVertex(gp_Pnt(-200.,-200.,0.)); \n\
758 gp_Ax1 axe = gp_Ax1(gp_Pnt(-170.,-170.,0.),gp_Dir(0.,0.,1.)); \n\
759 TopoDS_Shape S1 = BRepPrimAPI_MakeRevol(V1,axe); \n\
760 \n\
761 --- Revol of an edge -> result is a face --- \n\
762 \n\
763 TopoDS_Edge E = BRepBuilderAPI_MakeEdge(gp_Pnt(-120.,-120,0.), gp_Pnt(-120.,-120,100.)); \n\
764 axe = gp_Ax1(gp_Pnt(-100.,-100.,0.),gp_Dir(0.,0.,1.)); \n\
765 TopoDS_Shape S2 = BRepPrimAPI_MakeRevol(E,axe); \n\
766 \n\
767 --- Revol of a wire -> result is a shell --- \n\
768 \n\
769 TopoDS_Edge E1 = BRepBuilderAPI_MakeEdge(gp_Pnt(0.,0.,0.), gp_Pnt(50.,0.,0.)); \n\
770 TopoDS_Edge E2 = BRepBuilderAPI_MakeEdge(gp_Pnt(50.,0.,0.), gp_Pnt(50.,50.,0.)); \n\
771 TopoDS_Edge E3 = BRepBuilderAPI_MakeEdge(gp_Pnt(50.,50.,0.), gp_Pnt(0.,0.,0.)); \n\
772 TopoDS_Wire W = BRepBuilderAPI_MakeWire(E1,E2,E3); \n\
773 axe = gp_Ax1(gp_Pnt(0.,0.,30.),gp_Dir(0.,1.,0.)); \n\
774 TopoDS_Shape S3 = BRepPrimAPI_MakeRevol(W,axe, 210.*PI180); \n\
775 \n\
776 --- Revol of a face -> result is a solid --- \n\
777 \n\
778 gp_Circ c = gp_Circ(gp_Ax2(gp_Pnt(200.,200.,0.),gp_Dir(0.,0.,1.)), 80.); \n\
779 TopoDS_Edge Ec = BRepBuilderAPI_MakeEdge(c); \n\
780 TopoDS_Wire Wc = BRepBuilderPI_MakeWire(Ec); \n\
781 TopoDS_Face F = BRepBuilderAPI_MakeFace(gp_Pln(gp::XOY()),Wc); \n\
782 axe = gp_Ax1(gp_Pnt(290,290.,0.),gp_Dir(0.,1,0.)); \n\
783 TopoDS_Shape S4 = BRepPrimAPI_MakeRevol(F,axe, 90.*PI180); \n\
784                 \n");
785   PocessTextInDialog("Make a revol", Message);
786 }
787
788 void CModelingDoc::OnPipe() 
789 {
790         AIS_ListOfInteractive aList;
791         myAISContext->DisplayedObjects(aList);
792         AIS_ListIteratorOfListOfInteractive aListIterator;
793         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
794                 myAISContext->Remove (aListIterator.Value(), Standard_False);
795         }
796
797         TColgp_Array1OfPnt CurvePoles(1,4);
798         gp_Pnt pt = gp_Pnt(0.,0.,0.);
799         CurvePoles(1) = pt;
800         pt = gp_Pnt(20.,50.,0.);
801         CurvePoles(2) = pt;
802         pt = gp_Pnt(60.,100.,0.);
803         CurvePoles(3) = pt;
804         pt = gp_Pnt(150.,0.,0.);
805         CurvePoles(4) = pt;
806         Handle(Geom_BezierCurve) curve = new Geom_BezierCurve(CurvePoles);
807         TopoDS_Edge E = BRepBuilderAPI_MakeEdge(curve);
808         TopoDS_Wire W = BRepBuilderAPI_MakeWire(E);
809         Handle(AIS_Shape) ais1 = new AIS_Shape(W);
810         myAISContext->Display(ais1,Standard_False);
811         Fit();
812         Sleep(500);
813         gp_Circ c = gp_Circ(gp_Ax2(gp_Pnt(0.,0.,0.),gp_Dir(0.,1.,0.)),10.);
814         TopoDS_Edge Ec = BRepBuilderAPI_MakeEdge(c);
815         TopoDS_Wire Wc = BRepBuilderAPI_MakeWire(Ec);
816         Handle(AIS_Shape) ais3 = new AIS_Shape(Wc);
817         myAISContext->Display(ais3,Standard_False);
818         TopoDS_Face F = BRepBuilderAPI_MakeFace(gp_Pln(gp::ZOX()),Wc);
819         TopoDS_Shape S = BRepOffsetAPI_MakePipe(W,F);
820         Handle(AIS_Shape) ais2 = new AIS_Shape(S);
821         myAISContext->SetColor(ais2,Quantity_NOC_MATRABLUE,Standard_False); 
822         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
823         myAISContext->Display(ais2,Standard_False);
824         Fit();
825
826         TCollection_AsciiString Message ("\
827                 \n\
828 TColgp_Array1OfPnt CurvePoles(1,6);\n\
829 gp_Pnt pt = gp_Pnt(0.,0.,0.);\n\
830 CurvePoles(1) = pt;\n\
831 pt = gp_Pnt(20.,50.,0.);\n\
832 CurvePoles(2) = pt;\n\
833 pt = gp_Pnt(60.,100.,0.);\n\
834 CurvePoles(3) = pt;\n\
835 pt = gp_Pnt(150.,0.,0.);\n\
836 CurvePoles(4) = pt;\n\
837 Handle(Geom_BezierCurve) curve = new Geom_BezierCurve(CurvePoles);\n\
838 TopoDS_Edge E = BRepBuilderAPI_MakeEdge(curve);\n\
839 TopoDS_Wire W = BRepBuilderAPI_MakeWire(E);\n\
840 gp_Circ c = gp_Circ(gp_Ax2(gp_Pnt(0.,0.,0.),gp_Dir(0.,1.,0.)),10.);\n\
841 TopoDS_Edge Ec = BRepBuilderAPI_MakeEdge(c);\n\
842 TopoDS_Wire Wc = BRepBuilderAPI_MakeWire(Ec);\n\
843 TopoDS_Face F = BRepBuilderAPI_MakeFace(gp_Pln(gp::ZOX()),Wc);\n\
844 TopoDS_Shape S = BRepBuilderAPI_MakePipe(W,F);\n\
845                 \n");
846   PocessTextInDialog("Make a pipe", Message);
847
848 }
849
850 void CModelingDoc::OnThru() 
851 {
852         AIS_ListOfInteractive aList;
853         myAISContext->DisplayedObjects(aList);
854         AIS_ListIteratorOfListOfInteractive aListIterator;
855         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
856                 myAISContext->Remove (aListIterator.Value(), Standard_False);
857         }
858
859         gp_Circ c1 = gp_Circ(gp_Ax2(gp_Pnt(-100.,0.,-100.),gp_Dir(0.,0.,1.)),40.);
860         TopoDS_Edge E1 = BRepBuilderAPI_MakeEdge(c1);
861         TopoDS_Wire W1 = BRepBuilderAPI_MakeWire(E1);
862         Handle(AIS_Shape) sec1 = new AIS_Shape(W1);
863         myAISContext->Display(sec1,Standard_False);
864         gp_Circ c2 = gp_Circ(gp_Ax2(gp_Pnt(-10.,0.,-0.),gp_Dir(0.,0.,1.)),40.);
865         TopoDS_Edge E2 = BRepBuilderAPI_MakeEdge(c2);
866         TopoDS_Wire W2 = BRepBuilderAPI_MakeWire(E2);
867         Handle(AIS_Shape) sec2 = new AIS_Shape(W2);
868         myAISContext->Display(sec2,Standard_False);     
869         gp_Circ c3 = gp_Circ(gp_Ax2(gp_Pnt(-75.,0.,100.),gp_Dir(0.,0.,1.)),40.);
870         TopoDS_Edge E3 = BRepBuilderAPI_MakeEdge(c3);
871         TopoDS_Wire W3 = BRepBuilderAPI_MakeWire(E3);
872         Handle(AIS_Shape) sec3 = new AIS_Shape(W3);
873         myAISContext->Display(sec3,Standard_False);
874         gp_Circ c4= gp_Circ(gp_Ax2(gp_Pnt(0.,0.,200.),gp_Dir(0.,0.,1.)),40.);
875         TopoDS_Edge E4 = BRepBuilderAPI_MakeEdge(c4);
876         TopoDS_Wire W4 = BRepBuilderAPI_MakeWire(E4);
877         Handle(AIS_Shape) sec4 = new AIS_Shape(W4);
878         myAISContext->Display(sec4,Standard_False);
879         BRepOffsetAPI_ThruSections generator(Standard_False,Standard_True);
880         generator.AddWire(W1);
881         generator.AddWire(W2);
882         generator.AddWire(W3);
883         generator.AddWire(W4);
884         generator.Build();
885         TopoDS_Shape S1 = generator.Shape();
886         Handle(AIS_Shape) ais1 = new AIS_Shape(S1);
887         myAISContext->SetColor(ais1,Quantity_NOC_MATRABLUE,Standard_False); 
888         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
889         myAISContext->Display(ais1,Standard_False);
890
891         gp_Circ c1b = gp_Circ(gp_Ax2(gp_Pnt(100.,0.,-100.),gp_Dir(0.,0.,1.)),40.);
892         TopoDS_Edge E1b = BRepBuilderAPI_MakeEdge(c1b);
893         TopoDS_Wire W1b = BRepBuilderAPI_MakeWire(E1b);
894         Handle(AIS_Shape) sec1b = new AIS_Shape(W1b);
895         myAISContext->Display(sec1b,Standard_False);
896         gp_Circ c2b = gp_Circ(gp_Ax2(gp_Pnt(210.,0.,-0.),gp_Dir(0.,0.,1.)),40.);
897         TopoDS_Edge E2b = BRepBuilderAPI_MakeEdge(c2b);
898         TopoDS_Wire W2b = BRepBuilderAPI_MakeWire(E2b);
899         Handle(AIS_Shape) sec2b = new AIS_Shape(W2b);
900         myAISContext->Display(sec2b,Standard_False);    
901         gp_Circ c3b = gp_Circ(gp_Ax2(gp_Pnt(275.,0.,100.),gp_Dir(0.,0.,1.)),40.);
902         TopoDS_Edge E3b = BRepBuilderAPI_MakeEdge(c3b);
903         TopoDS_Wire W3b = BRepBuilderAPI_MakeWire(E3b);
904         Handle(AIS_Shape) sec3b = new AIS_Shape(W3b);
905         myAISContext->Display(sec3b,Standard_False);
906         gp_Circ c4b= gp_Circ(gp_Ax2(gp_Pnt(200.,0.,200.),gp_Dir(0.,0.,1.)),40.);
907         TopoDS_Edge E4b = BRepBuilderAPI_MakeEdge(c4b);
908         TopoDS_Wire W4b = BRepBuilderAPI_MakeWire(E4b);
909         Handle(AIS_Shape) sec4b = new AIS_Shape(W4b);
910         myAISContext->Display(sec4b,Standard_False);
911         BRepOffsetAPI_ThruSections generatorb(Standard_True,Standard_False);
912         generatorb.AddWire(W1b);
913         generatorb.AddWire(W2b);
914         generatorb.AddWire(W3b);
915         generatorb.AddWire(W4b);
916         generatorb.Build();
917         TopoDS_Shape S2 = generatorb.Shape();
918         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
919         myAISContext->SetColor(ais2,Quantity_NOC_ALICEBLUE,Standard_False); 
920         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
921         myAISContext->Display(ais2,Standard_False);
922         Fit();
923
924         TCollection_AsciiString Message ("\
925                 \n\
926 ---------- ruled -------------- \n\
927 \n\
928 gp_Circ c1 = gp_Circ(gp_Ax2(gp_Pnt(-100.,0.,-100.),gp_Dir(0.,0.,1.)),40.);\n\
929 TopoDS_Edge E1 = BRepBuilderAPI_MakeEdge(c1);\n\
930 TopoDS_Wire W1 = BRepBuilderAPI_MakeWire(E1);\n\
931 gp_Circ c2 = gp_Circ(gp_Ax2(gp_Pnt(-10.,0.,-0.),gp_Dir(0.,0.,1.)),40.);\n\
932 TopoDS_Edge E2 = BRepBuilderAPI_MakeEdge(c2);\n\
933 TopoDS_Wire W2 = BRepBuilderAPI_MakeWire(E2);\n\
934 gp_Circ c3 = gp_Circ(gp_Ax2(gp_Pnt(-75.,0.,100.),gp_Dir(0.,0.,1.)),40.);\n\
935 TopoDS_Edge E3 = BRepBuilderAPI_MakeEdge(c3);\n\
936 TopoDS_Wire W3 = BRepBuilderAPI_MakeWire(E3);\n\
937 gp_Circ c4= gp_Circ(gp_Ax2(gp_Pnt(0.,0.,200.),gp_Dir(0.,0.,1.)),40.);\n\
938 TopoDS_Edge E4 = BRep>BuilderAPI_MakeEdge(c4);\n\
939 TopoDS_Edge E4 = BRepBuilderAPI_MakeEdge(c4);\n\
940 TopoDS_Edge E4 = BRepBuilderAPI_MakeEdge(c4);\n\
941 TopoDS_Wire W4 = BRepBuilderAPI_MakeWire(E4);\n\
942 BRepOffsetAPI_ThruSections generator(Standard_False,Standard_True);\n\
943 generator.AddWire(W1);\n\
944 generator.AddWire(W2);\n\
945 generator.AddWire(W3);\n\
946 generator.AddWire(W4);\n\
947 generator.Build();\n\
948 TopoDS_Shape S1 = generator.Shape();\n\
949 \n\
950 ---------- smooth -------------- \n\
951 \n\
952 gp_Circ c1b = gp_Circ(gp_Ax2(gp_Pnt(100.,0.,-100.),gp_Dir(0.,0.,1.)),40.); \n\
953 TopoDS_Edge E1b = BRepBuilderAPI_MakeEdge(c1b); \n\
954 TopoDS_Wire W1b = BRepBuilderAPI_MakeWire(E1b); \n\
955 gp_Circ c2b = gp_Circ(gp_Ax2(gp_Pnt(210.,0.,-0.),gp_Dir(0.,0.,1.)),40.); \n\
956 TopoDS_Edge E2b = BRepBuilderAPI_MakeEdge(c2b);\n\
957 TopoDS_Wire W2b = BRepBuilderAPI_MakeWire(E2b); \n\
958 gp_Circ c3b = gp_Circ(gp_Ax2(gp_Pnt(275.,0.,100.),gp_Dir(0.,0.,1.)),40.);\n\
959 TopoDS_Edge E3b = BRepBuilderAPI_MakeEdge(c3b);\n\
960 TopoDS_Wire W3b = BRepBuilderAPI_MakeWire(E3b);\n\
961 gp_Circ c4b= gp_Circ(gp_Ax2(gp_Pnt(200.,0.,200.),gp_Dir(0.,0.,1.)),40.);\n\
962 TopoDS_Edge E4b = BRepBuilderAPI_MakeEdge(c4b);\n\
963 TopoDS_Wire W4b = BRepBuilderAPI_MakeWire(E4b);\n\
964 BRepOffsetAPI_ThruSections generatorb(Standard_True,Standard_False);\n\
965 generatorb.AddWire(W1b);\n\
966 generatorb.AddWire(W2b);\n\
967 generatorb.AddWire(W3b);\n\
968 generatorb.AddWire(W4b);\n\
969 generatorb.Build();\n\
970 TopoDS_Shape S2 = generatorb.Shape();\n\
971                 \n");
972   PocessTextInDialog("Make a Thru sections", Message);
973
974 }
975
976 void CModelingDoc::OnEvolved() 
977 {
978         AIS_ListOfInteractive aList;
979         myAISContext->DisplayedObjects(aList);
980         AIS_ListIteratorOfListOfInteractive aListIterator;
981         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
982                 myAISContext->Remove (aListIterator.Value(), Standard_False);
983         }
984
985         BRepBuilderAPI_MakePolygon P;
986         P.Add(gp_Pnt(0.,0.,0.));
987         P.Add(gp_Pnt(200.,0.,0.));
988         P.Add(gp_Pnt(200.,200.,0.));
989         P.Add(gp_Pnt(0.,200.,0.));
990         P.Add(gp_Pnt(0.,0.,0.));
991         TopoDS_Wire W = P.Wire();
992         
993         Handle(AIS_Shape) ais1 = new AIS_Shape(W);
994         myAISContext->Display(ais1,Standard_False);
995         
996         TopoDS_Wire wprof = BRepBuilderAPI_MakePolygon(gp_Pnt(0.,0.,0.),gp_Pnt(-60.,-60.,-200.));
997         
998         Handle(AIS_Shape) ais3 = new AIS_Shape(wprof);
999         myAISContext->Display(ais3,Standard_False);
1000         Fit();
1001         Sleep(500);
1002         TopoDS_Shape S = BRepOffsetAPI_MakeEvolved(W,wprof,GeomAbs_Arc,Standard_True,Standard_False,Standard_True,0.0001);
1003         
1004         Handle(AIS_Shape) ais2 = new AIS_Shape(S);
1005         myAISContext->SetColor(ais2,Quantity_NOC_MATRABLUE,Standard_False); 
1006         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
1007         myAISContext->Display(ais2,Standard_False);
1008         Fit();
1009         
1010         TCollection_AsciiString Message ("\
1011                 \n\
1012 ---------- Evolved shape -------------- \n\
1013 \n\
1014 BRepBuilderAPI_MakePolygon P;\n\
1015 P.Add(gp_Pnt(0.,0.,0.));\n\
1016 P.Add(gp_Pnt(200.,0.,0.));\n\
1017 P.Add(gp_Pnt(200.,200.,0.));\n\
1018 P.Add(gp_Pnt(0.,200.,0.));\n\
1019 P.Add(gp_Pnt(0.,0.,0.));\n\
1020 TopoDS_Wire W = P.Wire();\n\
1021 TopoDS_Wire wprof = BRepBuilderAPI_MakePolygon(gp_Pnt(0.,0.,0.),gp_Pnt(-60.,-60.,-200.));\n\
1022 TopoDS_Shape S = BRepBuilderAPI_MakeEvolved(W,wprof,GeomAbs_Arc,Standard_True,Standard_False,Standard_True,0.0001);\n\
1023                 \n");
1024   PocessTextInDialog("Make an evolved shape", Message);
1025
1026 }
1027
1028 void CModelingDoc::OnDraft() 
1029 {
1030         AIS_ListOfInteractive aList;
1031         myAISContext->DisplayedObjects(aList);
1032         AIS_ListIteratorOfListOfInteractive aListIterator;
1033         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1034                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1035         }
1036
1037   TopoDS_Shape S = BRepPrimAPI_MakeBox(200., 300., 150.).Shape();
1038         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
1039         myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False); 
1040         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
1041         myAISContext->Display(ais1,Standard_False);
1042         Fit();
1043         Sleep(500);
1044         BRepOffsetAPI_DraftAngle adraft(S);
1045         TopExp_Explorer Ex;
1046         for (Ex.Init(S,TopAbs_FACE); Ex.More(); Ex.Next()) {
1047                 TopoDS_Face F = TopoDS::Face(Ex.Current());
1048                 Handle(Geom_Plane) surf = Handle(Geom_Plane)::DownCast(BRep_Tool::Surface(F));
1049                 gp_Pln apln = surf->Pln();
1050                 gp_Dir dirF = apln.Axis().Direction();
1051                 if (dirF.IsNormal(gp_Dir(0.,0.,1.),Precision::Angular()))
1052                         adraft.Add(F, gp_Dir(0.,0.,1.), 15.*M_PI/180, gp_Pln(gp::XOY()));
1053         }
1054         ais1->Set(adraft.Shape());
1055         myAISContext->Redisplay(ais1,Standard_False);
1056         Fit();
1057
1058         TCollection_AsciiString Message ("\
1059                 \n\
1060 ---------- Tapered shape -------------- \n\
1061 \n\
1062 TopoDS_Shape S = BRepPrimAPI_MakeBox(200.,300.,150.);\n\
1063 BRepOffsetAPI_DraftAngle adraft(S);\n\
1064 TopExp_Explorer Ex;\n\
1065 for (Ex.Init(S,TopAbs_FACE); Ex.More(); Ex.Next()) {\n\
1066         TopoDS_Face F = TopoDS::Face(Ex.Current());\n\
1067         Handle(Geom_Plane) surf = Handle(Geom_Plane)::DownCast(BRep_Tool::Surface(F));\n\
1068         gp_Pln apln = surf->Pln();\n\
1069         gp_Dir dirF = apln.Axis().Direction();\n\
1070         if (dirF.IsNormal(gp_Dir(0.,0.,1.),Precision::Angular()))\n\
1071                 adraft.Add(F, gp_Dir(0.,0.,1.), 15.*PI180, gp_Pln(gp::XOY()));\n\
1072 }\n\
1073                 \n");
1074   PocessTextInDialog("Make a tapered shape", Message);
1075
1076 }
1077
1078 /* =================================================================================
1079    ====================   O P E R A T I O N S   ====================================
1080    ================================================================================= */
1081
1082 void CModelingDoc::OnCut() 
1083 {
1084         AIS_ListOfInteractive aList;
1085         myAISContext->DisplayedObjects(aList);
1086         AIS_ListIteratorOfListOfInteractive aListIterator;
1087         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1088                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1089         }
1090
1091   TopoDS_Shape theBox = BRepPrimAPI_MakeBox(200, 60, 60).Shape();
1092
1093 Handle (AIS_Shape)      ais1 = new AIS_Shape(theBox);
1094 myAISContext->SetDisplayMode(ais1,1,Standard_False);
1095 myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False);
1096 myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);
1097 myAISContext->Display(ais1,Standard_False);
1098 const Handle(AIS_InteractiveObject)& anIO1 = ais1;
1099 myAISContext->SetSelected (anIO1, Standard_False);
1100 Fit();
1101 Sleep(1000);
1102
1103
1104 TopoDS_Shape theSphere = BRepPrimAPI_MakeSphere(gp_Pnt(100, 20, 20), 80).Shape();
1105 Handle (AIS_Shape)      ais2 = new AIS_Shape(theSphere);
1106 myAISContext->SetDisplayMode(ais2,1,Standard_False);
1107 myAISContext->SetColor(ais2,Quantity_NOC_YELLOW,Standard_False);
1108 myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);
1109 myAISContext->Display(ais2,Standard_False);
1110 const Handle(AIS_InteractiveObject)& anIO2 = ais2;
1111 myAISContext->SetSelected (anIO2, Standard_False);
1112 Fit();
1113 Sleep(1000);
1114
1115 TopoDS_Shape ShapeCut = BRepAlgoAPI_Cut(theSphere,theBox);
1116
1117 myAISContext->Erase(ais1,Standard_False);
1118 myAISContext->Erase(ais2,Standard_False);
1119
1120 Handle (AIS_Shape)      aSection = new AIS_Shape(ShapeCut);
1121 myAISContext->SetDisplayMode(aSection,1,Standard_False);
1122 myAISContext->SetColor(aSection,Quantity_NOC_RED,Standard_False);
1123 myAISContext->SetMaterial(aSection,Graphic3d_NOM_PLASTIC,Standard_False);
1124 myAISContext->Display(aSection,Standard_False);
1125 const Handle(AIS_InteractiveObject)& anIOSection = aSection;
1126 myAISContext->SetSelected (anIOSection, Standard_False);
1127 Fit();
1128
1129     TCollection_AsciiString Message ("\
1130                 \n\
1131 TopoDS_Shape theBox = BRepPrimAPI_MakeBox(200,40,40); \n\
1132  \n\
1133 TopoDS_Shape theSphere = BRepPrimAPI_MakeSphere(gp_Pnt(100,20,20),80); \n\
1134  \n\
1135 TopoDS_Shape ShapeCut = BRepAlgoAPI_Cut(theSphere,theBox); \n\
1136  \n");
1137         PocessTextInDialog("Cut the sphere with a box", Message);
1138
1139
1140 }
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151 void CModelingDoc::OnFuse() 
1152 {
1153         AIS_ListOfInteractive aList;
1154         myAISContext->DisplayedObjects(aList);
1155         AIS_ListIteratorOfListOfInteractive aListIterator;
1156         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1157                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1158         }
1159
1160 gp_Pnt P(-5,5,-5);
1161 TopoDS_Shape theBox1 = BRepPrimAPI_MakeBox(60, 200, 70).Shape();
1162 Handle (AIS_Shape)      ais1 = new AIS_Shape(theBox1);
1163 myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False);
1164 myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);
1165 myAISContext->Display(ais1,Standard_False);
1166 const Handle(AIS_InteractiveObject)& anIO1 = ais1;
1167 myAISContext->SetSelected (anIO1, Standard_False);
1168 Fit();
1169 Sleep(1000);
1170
1171 TopoDS_Shape theBox2 = BRepPrimAPI_MakeBox(P, 20, 150, 110).Shape();
1172 Handle (AIS_Shape)      ais2 = new AIS_Shape(theBox2);
1173 myAISContext->SetColor(ais2,Quantity_NOC_YELLOW,Standard_False);
1174 myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);
1175 myAISContext->Display(ais2,Standard_False);
1176 const Handle(AIS_InteractiveObject)& anIO2 = ais2;
1177 myAISContext->SetSelected (anIO2, Standard_False);
1178 Fit();
1179 Sleep(1000);
1180
1181 TopoDS_Shape FusedShape = BRepAlgoAPI_Fuse(theBox1,theBox2);
1182
1183 myAISContext->Erase(ais1,Standard_True);
1184 myAISContext->Erase(ais2,Standard_True);
1185
1186 Handle (AIS_Shape)      aFusion = new AIS_Shape(FusedShape);
1187 myAISContext->SetDisplayMode(aFusion,1,Standard_False);
1188 myAISContext->SetColor(aFusion,Quantity_NOC_RED,Standard_False);
1189 myAISContext->SetMaterial(aFusion,Graphic3d_NOM_PLASTIC,Standard_False);
1190 myAISContext->Display(aFusion,Standard_False);
1191 const Handle(AIS_InteractiveObject)& anIOFusion = aFusion;
1192 myAISContext->SetSelected (anIOFusion, Standard_False);
1193 Fit();
1194
1195     TCollection_AsciiString Message ("\
1196                 \n\
1197 TopoDS_Shape theBox1 = BRepPrimAPI_MakeBox(50,200,70); \n\
1198  \n\
1199 TopoDS_Shape theBox2 = BRepPrimAPI_MakeBox(-30,150,70); \n\
1200  \n\
1201 TopoDS_Shape FusedShape = BRepAlgoAPI_Fuse(theBox1,theBox2); \n");
1202         PocessTextInDialog("Fuse the boxes", Message);
1203
1204 }
1205
1206 void CModelingDoc::OnCommon() 
1207 {
1208         AIS_ListOfInteractive aList;
1209         myAISContext->DisplayedObjects(aList);
1210         AIS_ListIteratorOfListOfInteractive aListIterator;
1211         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1212                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1213         }
1214
1215 gp_Ax2 axe(gp_Pnt(10,10,10),gp_Dir(1,2,1));
1216 TopoDS_Shape theBox = BRepPrimAPI_MakeBox(axe, 60, 80, 100).Shape();
1217
1218 Handle(AIS_Shape) aboxshape=new AIS_Shape(theBox);
1219 myAISContext->SetColor(aboxshape,Quantity_NOC_YELLOW,Standard_False);
1220 myAISContext->SetMaterial(aboxshape,Graphic3d_NOM_PLASTIC,Standard_False);    
1221 myAISContext->SetDisplayMode(aboxshape,1,Standard_False);
1222 myAISContext->SetTransparency(aboxshape,0.2,Standard_False);
1223 myAISContext->Display(aboxshape,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 Fit();
1239 Sleep(500);
1240
1241 TopoDS_Shape theCommonSurface = BRepAlgoAPI_Common(theBox,theWedge);
1242
1243 myAISContext->Erase(aboxshape,Standard_True);
1244 myAISContext->Erase(awedge,Standard_True);
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,Standard_False);
1250 const Handle(AIS_InteractiveObject)& anIOCommon = acommon;
1251 myAISContext->SetSelected (anIOCommon, Standard_False);
1252
1253    TCollection_AsciiString Message ("\
1254                 \n\
1255 gp_Ax2 axe(gp_Pnt(10,10,10),gp_Dir(1,2,1)); \n\
1256  \n\
1257 TopoDS_Shape theBox = BRepPrimAPI_MakeBox(axe,60,80,100); \n\
1258  \n\
1259 TopoDS_Shape theWedge = BRepPrimAPI_MakeWedge(60.,100.,80.,20.); \n\
1260  \n\
1261 TopoDS_Shape theCommonSurface = BRepAlgoAPI_Common(theBox,theWedge); \n\
1262  \n");
1263
1264         PocessTextInDialog("Compute the common surface ", Message);
1265
1266 }
1267
1268 void CModelingDoc::OnSection() 
1269 {
1270
1271         AIS_ListOfInteractive aList;
1272         myAISContext->DisplayedObjects(aList);
1273         AIS_ListIteratorOfListOfInteractive aListIterator;
1274         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1275                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1276         }
1277
1278   TopoDS_Shape atorus = BRepPrimAPI_MakeTorus(120, 20).Shape();
1279
1280     Handle(AIS_Shape) ashape=new AIS_Shape(atorus);
1281     myAISContext->SetColor(ashape,Quantity_NOC_RED,Standard_False);
1282     myAISContext->SetMaterial(ashape,Graphic3d_NOM_PLASTIC,Standard_False);    
1283     myAISContext->SetDisplayMode(ashape,1,Standard_False);
1284         myAISContext->SetTransparency(ashape,0.1,Standard_False);
1285     myAISContext->Display(ashape,Standard_False);
1286
1287 gp_Vec V1(1,1,1);
1288 Standard_Real radius = 120;
1289 Standard_Integer i=-3;
1290
1291 for(i;i<=3;i++) {
1292     TopoDS_Shape asphere = BRepPrimAPI_MakeSphere(gp_Pnt(26 * 3 * i, 0, 0), radius).Shape();
1293
1294     Handle (AIS_Shape) theShape=new AIS_Shape (asphere);
1295     myAISContext->SetTransparency(theShape,0.1,Standard_False);
1296     myAISContext->SetColor(theShape,Quantity_NOC_WHITE,Standard_False);
1297     myAISContext->SetDisplayMode(theShape,1,Standard_False);
1298     myAISContext->Display(theShape,Standard_False);
1299         Fit();
1300
1301     Standard_Boolean PerformNow=Standard_False; 
1302
1303     BRepAlgoAPI_Section section(atorus,asphere,PerformNow);
1304     section.ComputePCurveOn1(Standard_True);
1305     section.Approximation(TopOpeBRepTool_APPROX);
1306     section.Build();
1307
1308     Handle(AIS_Shape) asection=new AIS_Shape(section.Shape());
1309     myAISContext->SetDisplayMode (asection, 0, Standard_False);
1310     myAISContext->SetColor (asection, Quantity_NOC_WHITE, Standard_False);
1311     myAISContext->Display (asection, Standard_False);
1312     if(i<3) {
1313     myAISContext->Remove (theShape, Standard_False);
1314         }
1315 }
1316   myAISContext->UpdateCurrentViewer();
1317    TCollection_AsciiString Message ("\
1318                 \n\
1319 TopoDS_Shape atorus = BRepPrimAPI_MakeTorus(120,20); \n\
1320 gp_Vec V1(1,1,1); \n\
1321 Standard_Real radius = 120; \n\
1322 Standard_Integer i=-3; \n\
1323 for(i;i<=3;i++) { \n\
1324     TopoDS_Shape asphere = BRepPrimAPI_MakeSphere(gp_Pnt(78*i,0,0),radius); \n\
1325     Standard_Boolean PerformNow=Standard_False; \n\
1326     BRepAlgoAPI_Section section(atorus,asphere,PerformNow); \n\
1327     section.ComputePCurveOn1(Standard_True); \n\
1328     section.Approximation(TopOpeBRepTool_APPROX); \n\
1329     section.Build(); \n\
1330         \n");
1331
1332         PocessTextInDialog("Compute the sections ", Message);
1333
1334 }
1335
1336 void CModelingDoc::OnPsection() 
1337 {
1338         AIS_ListOfInteractive aList;
1339         myAISContext->DisplayedObjects(aList);
1340         AIS_ListIteratorOfListOfInteractive aListIterator;
1341         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1342                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1343         }
1344
1345 TopoDS_Shape theTorus = BRepPrimAPI_MakeTorus(35, 8).Shape();
1346 Handle(AIS_Shape) atorus = new AIS_Shape(theTorus);
1347 myAISContext->SetColor(atorus,Quantity_NOC_YELLOW,Standard_False); 
1348 myAISContext->SetMaterial(atorus,Graphic3d_NOM_PLASTIC,Standard_False);
1349 myAISContext->SetTransparency(atorus,0.1,Standard_False);
1350 myAISContext->Display(atorus,Standard_False);
1351 const Handle(AIS_InteractiveObject)& anIOTorus = atorus;
1352 myAISContext->SetSelected (anIOTorus, Standard_False);
1353 Fit();
1354 Sleep(500);
1355
1356 gp_Pln aplane(1,0.25,3,4);
1357 Handle (Geom_Plane) thePlane = new Geom_Plane(aplane);
1358 Handle (AIS_Plane) ais1 = new AIS_Plane(thePlane);
1359 myAISContext->Display(ais1,Standard_False);
1360 const Handle(AIS_InteractiveObject)& anIO1 = ais1;
1361 myAISContext->SetSelected (anIO1, Standard_False);
1362 Fit();
1363 Sleep(300);
1364
1365 BRepAlgoAPI_Section section(theTorus,thePlane,Standard_False);
1366 section.ComputePCurveOn1(Standard_True);
1367 section.Approximation(TopOpeBRepTool_APPROX);
1368 section.Build();
1369
1370 Handle(AIS_Shape) asection=new AIS_Shape(section.Shape());
1371 myAISContext->SetDisplayMode(asection ,0,Standard_False);
1372 myAISContext->SetColor(asection,Quantity_NOC_WHITE,Standard_False); 
1373 myAISContext->Display(asection,Standard_False);
1374 Fit();
1375
1376    TCollection_AsciiString Message ("\
1377                 \n\
1378 TopoDS_Shape theTorus = BRepPrimAPI_MakeTorus(60.,20.); \n\
1379  \n\
1380 gp_Pln P(1,2,1,-15); \n\
1381  \n\
1382 TopoDS_Shape Psection = BRepAlgoAPI_Section(theTorus,P);  \n\
1383 \n");
1384
1385         PocessTextInDialog("Compute the plane section ", Message);
1386
1387 }
1388
1389 void CModelingDoc::OnBlend() 
1390 {
1391         AIS_ListOfInteractive aList;
1392         myAISContext->DisplayedObjects(aList);
1393         AIS_ListIteratorOfListOfInteractive aListIterator;
1394         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1395                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1396         }
1397
1398 TopoDS_Shape Box = BRepPrimAPI_MakeBox(gp_Pnt(-400,0,0),200,230,180).Shape();
1399 Handle(AIS_Shape) ais1 = new AIS_Shape(Box);
1400 myAISContext->SetColor(ais1,Quantity_NOC_YELLOW,Standard_False); 
1401 myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False); 
1402 myAISContext->Display(ais1,Standard_False);
1403 const Handle(AIS_InteractiveObject)& anIO1 = ais1;
1404 myAISContext->SetSelected (anIO1, Standard_False);
1405 Fit();
1406 Sleep(500);
1407
1408 BRepFilletAPI_MakeFillet fillet(Box);
1409
1410 for (TopExp_Explorer ex(Box,TopAbs_EDGE); ex.More(); ex.Next()) {
1411         TopoDS_Edge Edge =TopoDS::Edge(ex.Current());
1412         fillet.Add(20,Edge);
1413 }
1414
1415 myAISContext->Remove(ais1,Standard_False);
1416
1417 TopoDS_Shape blendedBox = fillet.Shape();
1418 Handle(AIS_Shape) aBlendbox = new AIS_Shape(blendedBox);
1419 myAISContext->SetColor(aBlendbox,Quantity_NOC_YELLOW,Standard_False); 
1420 myAISContext->SetMaterial(aBlendbox,Graphic3d_NOM_PLASTIC,Standard_False); 
1421 myAISContext->Display(aBlendbox,Standard_False);
1422 const Handle(AIS_InteractiveObject)& anIOBlendBox = aBlendbox;
1423 myAISContext->SetSelected (anIOBlendBox, Standard_False);
1424 Fit();
1425 Sleep(500);
1426
1427
1428 gp_Pnt P1(250,150,75);
1429 TopoDS_Shape S1 = BRepPrimAPI_MakeBox(300, 200, 200).Shape();
1430 TopoDS_Shape S2 = BRepPrimAPI_MakeBox(P1, 120, 180, 70).Shape();
1431
1432 TopoDS_Shape fusedShape = BRepAlgoAPI_Fuse(S1,S2);
1433 Handle(AIS_Shape) ais2 = new AIS_Shape(fusedShape);
1434 myAISContext->SetColor(ais2,Quantity_NOC_RED,Standard_False); 
1435 myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);  
1436 myAISContext->Display(ais2,Standard_False);
1437 const Handle(AIS_InteractiveObject)& anIO2 = ais2;
1438 myAISContext->SetSelected (anIO2, Standard_False);
1439 Fit();
1440
1441 BRepFilletAPI_MakeFillet fill(fusedShape);
1442
1443 for (TopExp_Explorer ex1(fusedShape,TopAbs_EDGE); ex1.More(); ex1.Next()) {
1444         TopoDS_Edge E =TopoDS::Edge(ex1.Current());
1445         fill.Add(E);
1446 }
1447
1448 for (Standard_Integer i = 1;i<=fill.NbContours();i++) {
1449         Standard_Real longueur(fill.Length(i));
1450         Standard_Real Rad(0.15*longueur);
1451         fill.SetRadius(Rad,i, 1);
1452 }
1453
1454 TopoDS_Shape blendedFusedSolids = fill.Shape();
1455
1456 Handle(AIS_Shape) aBlend = new AIS_Shape(blendedFusedSolids);
1457 myAISContext->SetColor(aBlend,Quantity_NOC_RED,Standard_False); 
1458 myAISContext->SetMaterial(aBlend,Graphic3d_NOM_PLASTIC,Standard_False);  
1459 myAISContext->Display(aBlend,Standard_False);
1460
1461 myAISContext->Remove(ais2,Standard_False);
1462 Fit();
1463
1464
1465  TCollection_AsciiString Message ("\
1466                 \n\
1467 //THE YELLOW BOX\n\
1468 TopoDS_Shape Box = BRepPrimAPI_MakeBox(gp_Pnt(-400,0,0),200,230,180);\n\
1469 \n\
1470 BRepPrimAPI_MakeFillet fillet(Box);\n\
1471 \n\
1472 for (TopExp_Explorer ex(Box,TopAbs_EDGE); ex.More(); ex.Next()) {\n\
1473         TopoDS_Edge Edge =TopoDS::Edge(ex.Current());\n\
1474         fillet.Add(20,Edge);\n\
1475 }\n\
1476 TopoDS_Shape blendedBox = fillet.Shape();\n\
1477 \n\
1478 ////////////////////////////////////////////////////////////////////////\n\
1479 \n\
1480 //THE RED SOLID\n\
1481  \n\
1482 //Warning : On the acute angles of the boxes a fillet is created. \n\
1483 On the angles of fusion a blend is created. \n\
1484 \n\
1485 gp_Pnt P1(150,150,75);\n\
1486 TopoDS_Shape S1 = BRepPrimAPI_MakeBox(300,200,200);\n\
1487 TopoDS_Shape S2 = BRepPrimAPI_MakeBox(P1,100,200,70);\n\
1488 \n\
1489 TopoDS_Shape fusedShape = BRepAlgoAPI_Fuse(S1,S2);\n\
1490 BRepPrimAPI_MakeFillet fill(fusedShape);\n\
1491 \n\
1492 for (TopExp_Explorer ex1(fusedShape,TopAbs_EDGE); ex1.More(); ex1.Next()) {\n\
1493         TopoDS_Edge E =TopoDS::Edge(ex1.Current());\n\
1494         fill.Add(E);\n\
1495 }\n\
1496 \n\
1497 for (Standard_Integer i = 1;i<=fill.NbContours();i++) {\n\
1498         Standard_Real longueur(fill.Length(i));\n\
1499         Standard_Real Rad(0.2*longueur);\n\
1500         fill.SetRadius(Rad,i);\n\
1501 }\n\
1502 \n\
1503 TopoDS_Shape blendedFusedSolids = fill.Shape(); \n");
1504
1505         PocessTextInDialog("Compute the blend on the edges ", Message);
1506 }
1507
1508 void CModelingDoc::OnEvolvedblend() 
1509 {
1510
1511         AIS_ListOfInteractive aList;
1512         myAISContext->DisplayedObjects(aList);
1513         AIS_ListIteratorOfListOfInteractive aListIterator;
1514         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1515                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1516         }
1517
1518 TopoDS_Shape theBox = BRepPrimAPI_MakeBox(200, 200, 200).Shape();
1519 Handle(AIS_Shape) ais1 = new AIS_Shape(theBox);
1520 myAISContext->SetColor(ais1,Quantity_NOC_BROWN,Standard_False); 
1521 myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False); 
1522 myAISContext->Display(ais1,Standard_False);
1523 const Handle(AIS_InteractiveObject)& anIO1 = ais1;
1524 myAISContext->SetSelected (anIO1, Standard_False);
1525 Fit();
1526 Sleep(500);
1527
1528 BRepFilletAPI_MakeFillet Rake(theBox);
1529
1530 TopExp_Explorer ex(theBox,TopAbs_EDGE);
1531 ex.Next();
1532 ex.Next();
1533 ex.Next();
1534 ex.Next();
1535 Rake.Add(8,50,TopoDS::Edge(ex.Current()));
1536 Rake.Build();
1537 if (Rake.IsDone() ){
1538         TopoDS_Shape evolvedBox = Rake.Shape();
1539         ais1->Set(evolvedBox);
1540         myAISContext->Redisplay(ais1,Standard_False);
1541         myAISContext->SetSelected(anIO1, Standard_False);
1542         Fit();
1543         Sleep(500);
1544
1545 }
1546
1547 TopoDS_Shape theCylinder = BRepPrimAPI_MakeCylinder(gp_Ax2(gp_Pnt(-300, 0, 0), gp::DZ()), 100, 200).Shape();
1548 Handle(AIS_Shape) ais3 = new AIS_Shape(theCylinder);
1549 myAISContext->SetColor(ais3,Quantity_NOC_GREEN,Standard_False); 
1550 myAISContext->SetMaterial(ais3,Graphic3d_NOM_PLASTIC,Standard_False);    
1551 myAISContext->Display(ais3,Standard_False);
1552 const Handle(AIS_InteractiveObject)& anIO3 = ais3;
1553 myAISContext->SetSelected (anIO3, Standard_False);
1554 Fit();
1555 Sleep(500);
1556
1557 BRepFilletAPI_MakeFillet fillet(theCylinder);
1558
1559 TColgp_Array1OfPnt2d TabPoint2(1,20);
1560
1561 for (Standard_Integer i=0; i<=19; i++) {
1562         gp_Pnt2d Point2d(i*2*M_PI/19,60*cos(i*M_PI/19-M_PI/2)+10);
1563         TabPoint2.SetValue(i+1,Point2d);
1564 }
1565
1566 TopExp_Explorer exp2(theCylinder,TopAbs_EDGE);
1567 fillet.Add(TabPoint2,TopoDS::Edge(exp2.Current()));
1568 fillet.Build();
1569 if (fillet.IsDone() ){
1570         TopoDS_Shape LawEvolvedCylinder = fillet.Shape();
1571         ais3->Set(LawEvolvedCylinder);
1572         myAISContext->Redisplay(ais3,Standard_False);
1573         myAISContext->SetSelected(anIO3,Standard_False);
1574         Fit();
1575         Sleep(500);
1576 }
1577
1578 gp_Pnt P(350,0,0);
1579 TopoDS_Shape theBox2 = BRepPrimAPI_MakeBox(P, 200, 200, 200).Shape();
1580 Handle(AIS_Shape) ais2 = new AIS_Shape(theBox2);
1581 myAISContext->SetColor(ais2,Quantity_NOC_RED,Standard_False); 
1582 myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);    
1583 myAISContext->Display(ais2,Standard_False);
1584 const Handle(AIS_InteractiveObject)& anIO2 = ais2;
1585 myAISContext->SetSelected (anIO2, Standard_False);
1586 Fit();
1587 Sleep(500);
1588
1589
1590 BRepFilletAPI_MakeFillet afillet(theBox2);
1591
1592 TColgp_Array1OfPnt2d TabPoint(1,6);
1593
1594 gp_Pnt2d P1(0.,8.);
1595 gp_Pnt2d P2(0.2,16.);
1596 gp_Pnt2d P3(0.4,25.);
1597 gp_Pnt2d P4(0.6,55.);
1598 gp_Pnt2d P5(0.8,28.);
1599 gp_Pnt2d P6(1.,20.);
1600 TabPoint.SetValue(1,P1);
1601 TabPoint.SetValue(2,P2);
1602 TabPoint.SetValue(3,P3);
1603 TabPoint.SetValue(4,P4);
1604 TabPoint.SetValue(5,P5);
1605 TabPoint.SetValue(6,P6);
1606
1607 TopExp_Explorer exp(theBox2,TopAbs_EDGE);
1608 exp.Next();
1609 exp.Next();
1610 exp.Next();
1611 exp.Next();
1612
1613 afillet.Add(TabPoint, TopoDS::Edge(exp.Current()));
1614
1615 afillet.Build();
1616 if (afillet.IsDone() ){
1617         TopoDS_Shape LawevolvedBox = afillet.Shape();
1618         ais2->Set(LawevolvedBox);
1619         myAISContext->Redisplay(ais2,Standard_False);
1620         myAISContext->SetSelected(anIO2,Standard_False);
1621         Fit();
1622         
1623 }
1624
1625    TCollection_AsciiString Message ("\
1626                 \n\
1627 //THE BROWN BOX \n\
1628 \n\
1629 TopoDS_Shape theBox = BRepPrimAPI_MakeBox(200,200,200); \n\
1630         \n\
1631 BRepPrimAPI_MakeFillet Rake(theBox);    \n\
1632 ChFi3d_FilletShape FSh = ChFi3d_Rational;       \n\
1633 Rake.SetFilletShape(FSh);       \n\
1634         \n\
1635 TopExp_Explorer ex(theBox,TopAbs_EDGE); \n\
1636 ex.Next();   //in order to recover the front edge       \n\
1637 ex.Next();      \n\
1638 ex.Next();      \n\
1639 ex.Next();      \n\
1640 Rake.Add(8,50,TopoDS::Edge(ex.Current()));      \n\
1641         \n\
1642 Rake.Build();  \n\
1643 if (Rake.IsDone() )  \n\
1644         TopoDS_Shape theBrownBox = Rake.Shape();        \n\
1645         \n\
1646 //////////////////////////////////////////////////////////      \n\
1647         \n\
1648 //THE GREEN CYLINDER    \n\
1649         \n\
1650 TopoDS_Shape theCylinder = BRepPrimAPI_MakeCylinder(gp_Ax2(gp_Pnt(-300,0,0),gp_Dir(0,0,1)),100,200);    \n\
1651         \n\
1652 BRepPrimAPI_MakeFillet fillet(theCylinder);     \n\
1653         \n\
1654 TColgp_Array1OfPnt2d TabPoint2(1,20);   \n\
1655         \n\
1656 for (Standard_Integer i=0; i<=19; i++) {        \n\
1657         gp_Pnt2d Point2d(i*2*PI/19,60*cos(i*PI/19-PI/2)+10);    \n\
1658         TabPoint2.SetValue(i+1,Point2d);        \n\
1659 }       \n\
1660         \n\
1661 TopExp_Explorer exp2(theCylinder,TopAbs_EDGE);  \n\
1662 fillet.Add(TabPoint2,TopoDS::Edge(exp2.Current()));     \n\
1663         \n\
1664 fillet.Build();  \n\
1665 if (fillet.IsDone() )  \n\
1666         TopoDS_Shape LawEvolvedCylinder = fillet.Shape();       \n\
1667         \n\
1668 ////////////////////////////////////////////////////////////    \n\
1669         \n\
1670         //THE RED BOX \n\
1671  \n\
1672 gp_Pnt P(350,0,0);      \n\
1673 TopoDS_Shape theBox2 = BRepPrimAPI_MakeBox(P,200,200,200);      \n\
1674         \n\
1675 BRepPrimAPI_MakeFillet fill(theBox2);   \n\
1676         \n\
1677 TColgp_Array1OfPnt2d TabPoint(1,6);     \n\
1678 gp_Pnt2d P1(0,8);       \n\
1679 gp_Pnt2d P2(0.2,16);    \n\
1680 gp_Pnt2d P3(0.4,25);    \n\
1681 gp_Pnt2d P4(0.6,55);    \n\
1682 gp_Pnt2d P5(0.8,28);    \n\
1683 gp_Pnt2d P6(1,20);      \n\
1684 TabPoint.SetValue(1,P1);        \n\
1685 TabPoint.SetValue(2,P2);        \n\
1686 TabPoint.SetValue(3,P3);        \n\
1687 TabPoint.SetValue(4,P4);        \n\
1688 TabPoint.SetValue(5,P5);        \n\
1689 TabPoint.SetValue(6,P6);        \n\
1690         \n\
1691 TopExp_Explorer exp(theBox2,TopAbs_EDGE);       \n\
1692 exp.Next();  //in order to trcover the front edge       \n\
1693 exp.Next();     \n\
1694 exp.Next();     \n\
1695 exp.Next();     \n\
1696 fill.Add(TabPoint,TopoDS::Edge(exp.Current())); \n\
1697         \n\
1698 fill.Build();   \n\
1699 if (fillet.IsDone() )  \n\
1700         TopoDS_Shape theRedBox = fill.Shape();  \n\
1701 \n");
1702
1703         PocessTextInDialog("Compute evolutiv blend on an edge ", Message);
1704
1705 }
1706
1707 void CModelingDoc::OnChamf() 
1708 {
1709         AIS_ListOfInteractive aList;
1710         myAISContext->DisplayedObjects(aList);
1711         AIS_ListIteratorOfListOfInteractive aListIterator;
1712         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1713                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1714         }
1715
1716 TopoDS_Shape theBox = BRepPrimAPI_MakeBox(60,200,70).Shape();
1717 Handle(AIS_Shape) ais1 = new AIS_Shape(theBox);
1718 myAISContext->SetColor(ais1,Quantity_NOC_YELLOW,Standard_False); 
1719 myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);    
1720 myAISContext->Display(ais1,Standard_False);
1721 const Handle(AIS_InteractiveObject)& anIO1 = ais1;
1722 myAISContext->SetSelected (anIO1, Standard_False);
1723 Fit();
1724 Sleep(500);
1725
1726 BRepFilletAPI_MakeChamfer MC(theBox);
1727 // add all the edges to chamfer
1728 TopTools_IndexedDataMapOfShapeListOfShape M;
1729 TopExp::MapShapesAndAncestors(theBox,TopAbs_EDGE,TopAbs_FACE,M);
1730 for (Standard_Integer i = 1;i<=M.Extent();i++) {
1731         TopoDS_Edge E = TopoDS::Edge(M.FindKey(i));
1732         TopoDS_Face F = TopoDS::Face(M.FindFromIndex(i).First());
1733         MC.Add(5,5,E,F);
1734         }
1735
1736 TopoDS_Shape ChanfrenedBox = MC.Shape();
1737 Handle(AIS_Shape) aBlendedBox = new AIS_Shape(ChanfrenedBox);
1738 myAISContext->SetColor(aBlendedBox,Quantity_NOC_YELLOW,Standard_False); 
1739 myAISContext->SetMaterial(aBlendedBox,Graphic3d_NOM_PLASTIC,Standard_False);    
1740 myAISContext->Display(aBlendedBox,Standard_False);
1741 const Handle(AIS_InteractiveObject)& anIOBlendedBox = aBlendedBox;
1742 myAISContext->SetSelected (anIOBlendedBox, Standard_False);
1743 Fit();
1744 Sleep(500);
1745
1746 myAISContext->Erase(ais1,Standard_True);
1747
1748    TCollection_AsciiString Message ("\
1749                 \n\
1750 TopoDS_Shape theBox = BRepPrimAPI_MakeBox(130,200,170); \n\
1751 BRepFilletAPI_MakeChamfer MC(theBox); \n\
1752 TopTools_IndexedDataMapOfShapeListOfShape M; \n\
1753 TopExp::MapShapesAndAncestors(theBox,TopAbs_EDGE,TopAbs_FACE,M); \n\
1754 for (Standar1d_Integer i;i<M.Extent();i++) { \n\
1755         TopoDS_Edge E = TopoDS::Edge(M.FindKey(i)); \n\
1756         TopoDS_Face F = TopoDS::Face(M.FindFromIndex(i).First()); \n\
1757         MC.Add(15,15,E,F); \n\
1758         } \n\
1759 TopoDS_Shape ChanfrenedBox = MC.Shape();  \n");
1760
1761         PocessTextInDialog("Compute the chamfers on all the edges ", Message);
1762 }
1763
1764 /* =================================================================================
1765    ====================   L O C A L   O P E R A T I O N S   ========================
1766    ================================================================================= */
1767
1768 void CModelingDoc::OnPrismLocal() 
1769 {
1770         AIS_ListOfInteractive aList;
1771         myAISContext->DisplayedObjects(aList);
1772         AIS_ListIteratorOfListOfInteractive aListIterator;
1773         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1774                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1775         }
1776   TopoDS_Shape S = BRepPrimAPI_MakeBox(400., 250., 300.).Shape();
1777         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
1778
1779         myAISContext->SetColor(ais1,Quantity_NOC_GREEN,Standard_False); 
1780         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
1781         myAISContext->Display(ais1,Standard_False);
1782         const Handle(AIS_InteractiveObject)& anIO1 = ais1;
1783         myAISContext->SetSelected (anIO1, Standard_False);
1784         Fit();
1785         Sleep(500);
1786
1787         TopExp_Explorer Ex;
1788         Ex.Init(S,TopAbs_FACE);
1789         Ex.Next();
1790         TopoDS_Face F = TopoDS::Face(Ex.Current());
1791         Handle(Geom_Surface) surf = BRep_Tool::Surface(F);
1792         Handle(Geom_Plane) Pl = Handle(Geom_Plane)::DownCast(surf);
1793         gp_Dir D = Pl->Pln().Axis().Direction();
1794 // new in 2.0 ..use the trigonometric orientation to make the extrusion.
1795         D.Reverse();
1796         gp_Pnt2d p1,p2;
1797         Handle(Geom2d_Curve) aline;
1798         BRepBuilderAPI_MakeWire MW;
1799         p1 = gp_Pnt2d(200.,-100.);
1800         p2 = gp_Pnt2d(100.,-100.);
1801         aline = GCE2d_MakeLine(p1,p2).Value();
1802         MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
1803         p1 = p2;
1804         p2 = gp_Pnt2d(100.,-200.);
1805         aline = GCE2d_MakeLine(p1,p2).Value();
1806         MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
1807         p1 = p2;
1808         p2 = gp_Pnt2d(200.,-200.);
1809         aline = GCE2d_MakeLine(p1,p2).Value();
1810         MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
1811         p1 = p2;
1812         p2 = gp_Pnt2d(200.,-100.);
1813         aline = GCE2d_MakeLine(p1,p2).Value();
1814         MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
1815         BRepBuilderAPI_MakeFace MKF;
1816         MKF.Init(surf,Standard_False, Precision::Confusion());
1817         MKF.Add(MW.Wire());
1818         TopoDS_Shape FP = MKF.Face();
1819         BRepLib::BuildCurves3d(FP);
1820         BRepFeat_MakePrism MKP(S,FP,F,D,0,Standard_True);
1821         MKP.Perform(200.);
1822         TopoDS_Shape res1 = MKP.Shape();
1823         ais1->Set(res1);
1824
1825         myAISContext->Redisplay(ais1,Standard_False);
1826         myAISContext->SetSelected(anIO1,Standard_False);
1827         Fit();
1828         Sleep(500);
1829
1830         Ex.Next();
1831         TopoDS_Face F2 = TopoDS::Face(Ex.Current());
1832         surf = BRep_Tool::Surface(F2);
1833         Pl = Handle(Geom_Plane)::DownCast(surf);
1834         D = Pl->Pln().Axis().Direction();
1835         D.Reverse();
1836         BRepBuilderAPI_MakeWire MW2;
1837         p1 = gp_Pnt2d(100.,100.);
1838         p2 = gp_Pnt2d(200.,100.);
1839         aline = GCE2d_MakeLine(p1,p2).Value();
1840         MW2.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
1841         p1 = p2;
1842         p2 = gp_Pnt2d(150.,200.);
1843         aline = GCE2d_MakeLine(p1,p2).Value();
1844         MW2.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
1845         p1 = p2;
1846         p2 = gp_Pnt2d(100.,100.);
1847         aline = GCE2d_MakeLine(p1,p2).Value();
1848         MW2.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
1849         BRepBuilderAPI_MakeFace MKF2;
1850         MKF2.Init(surf,Standard_False, Precision::Confusion());
1851         MKF2.Add(MW2.Wire());
1852         FP = MKF2.Face();
1853         BRepLib::BuildCurves3d(FP);
1854         BRepFeat_MakePrism MKP2(res1,FP,F2,D,1,Standard_True);
1855         MKP2.Perform(100.);
1856         TopoDS_Shape res2 = MKP2.Shape();
1857         ais1->Set(res2);
1858
1859         myAISContext->Redisplay (ais1, Standard_False);
1860         myAISContext->SetSelected (anIO1, Standard_False);
1861         Fit();
1862
1863         TCollection_AsciiString Message ("\
1864         \n\
1865 --- Extrusion ---\n\
1866         \n\
1867 TopoDS_Shape S = BRepPrimAPI_MakeBox(400.,250.,300.);\n\
1868 TopExp_Explorer Ex;\n\
1869 Ex.Init(S,TopAbs_FACE);\n\
1870 Ex.Next();\n\
1871 TopoDS_Face F = TopoDS::Face(Ex.Current());\n\
1872 Handle(Geom_Surface) surf = BRep_Tool::Surface(F);\n\
1873 Handle(Geom_Plane) Pl = Handle(Geom_Plane)::DownCast(surf);\n\
1874 gp_Dir D = Pl->Pln().Axis().Direction();\n\
1875 D.Reverse();\n\
1876 gp_Pnt2d p1,p2;\n\
1877 Handle(Geom2d_Curve) aline;\n\
1878 BRepBuilderAPI_MakeWire MW;\n\
1879 p1 = gp_Pnt2d(200.,-100.);\n\
1880 p2 = gp_Pnt2d(100.,-100.);\n\
1881 aline = GCE2d_MakeLine(p1,p2).Value();\n\
1882 MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
1883 p1 = p2;\n\
1884 p2 = gp_Pnt2d(100.,-200.);\n\
1885 aline = GCE2d_MakeLine(p1,p2).Value();\n\
1886 MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
1887 p1 = p2;\n\
1888 p2 = gp_Pnt2d(200.,-200.);\n\
1889 aline = GCE2d_MakeLine(p1,p2).Value();\n\
1890 MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
1891 p1 = p2;\n\
1892 p2 = gp_Pnt2d(200.,-100.);\n\
1893 aline = GCE2d_MakeLine(p1,p2).Value();\n\
1894 MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
1895 BRepBuilderAPI_MakeFace MKF;\n\
1896 MKF.Init(surf,Standard_False);\n\
1897 MKF.Add(MW.Wire());\n\
1898 TopoDS_Shape FP = MKF.Face();\n\
1899 BRepLib::BuildCurves3d(FP);\n\
1900 BRepFeat_MakePrism MKP(S,FP,F,D,0,Standard_True);\n\
1901 MKP.Perform(200);\n\
1902 TopoDS_Shape res1 = MKP.Shape();\n\
1903         \n");
1904                 Message += "\n\
1905 --- Protrusion --- \n\
1906 \n\
1907 Ex.Next();\n\
1908 TopoDS_Face F2 = TopoDS::Face(Ex.Current());\n\
1909 surf = BRep_Tool::Surface(F2);\n\
1910 Pl = Handle(Geom_Plane)::DownCast(surf);\n\
1911 D = Pl->Pln().Axis().Direction();\n\
1912 D.Reverse();\n\
1913 BRepBuilderAPI_MakeWire MW2;\n\
1914 p1 = gp_Pnt2d(100.,100.);\n\
1915 p2 = gp_Pnt2d(200.,100.);\n\
1916 aline = GCE2d_MakeLine(p1,p2).Value();\n\
1917 MW2.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
1918 p1 = p2;\n\
1919 p2 = gp_Pnt2d(150.,200.);\n\
1920 aline = GCE2d_MakeLine(p1,p2).Value();\n\
1921 MW2.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
1922 p1 = p2;\n\
1923 p2 = gp_Pnt2d(100.,100.);\n\
1924 aline = GCE2d_MakeLine(p1,p2).Value();\n\
1925 MW2.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
1926 BRepBuilderAPI_MakeFace MKF2;\n\
1927 MKF2.Init(surf,Standard_False);\n\
1928 MKF2.Add(MW2.Wire());\n\
1929 FP = MKF2.Face();\n\
1930 BRepLib::BuildCurves3d(FP);\n\
1931 BRepFeat_MakePrism MKP2(res1,FP,F2,D,1,Standard_True);\n\
1932 MKP2.Perform(100.);\n\
1933 TopoDS_Shape res2 = MKP2.Shape();\n\
1934         \n";
1935         PocessTextInDialog("Make an extrusion or a protrusion", Message);
1936 }
1937
1938 //
1939 // BRepFeat_MakeDPrism
1940 //
1941 void CModelingDoc::OnDprismLocal() 
1942 {
1943         AIS_ListOfInteractive aList;
1944         myAISContext->DisplayedObjects(aList);
1945         AIS_ListIteratorOfListOfInteractive aListIterator;
1946         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
1947                 myAISContext->Remove (aListIterator.Value(), Standard_False);
1948         }
1949
1950   TopoDS_Shape S = BRepPrimAPI_MakeBox(400., 250., 300.).Shape();
1951         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
1952
1953         myAISContext->SetColor(ais1,Quantity_NOC_RED,Standard_False); 
1954         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
1955         
1956         TopExp_Explorer Ex;
1957         Ex.Init(S,TopAbs_FACE);
1958         Ex.Next();
1959         Ex.Next();
1960         Ex.Next();
1961         Ex.Next();
1962         Ex.Next();
1963         TopoDS_Face F = TopoDS::Face(Ex.Current());
1964         Handle(Geom_Surface) surf = BRep_Tool::Surface(F);
1965         gp_Circ2d c(gp_Ax2d(gp_Pnt2d(200.,130.),gp_Dir2d(1.,0.)),50.);
1966         BRepBuilderAPI_MakeWire MW;
1967         Handle(Geom2d_Curve) aline = new Geom2d_Circle(c);
1968         MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,M_PI));
1969         MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,M_PI,2.*M_PI));
1970         BRepBuilderAPI_MakeFace MKF;
1971         MKF.Init(surf,Standard_False, Precision::Confusion());
1972         MKF.Add(MW.Wire());
1973         TopoDS_Face FP = MKF.Face();
1974         BRepLib::BuildCurves3d(FP);
1975         BRepFeat_MakeDPrism MKDP(S,FP,F,10*M_PI/180,1,Standard_True);
1976         MKDP.Perform(200);
1977         TopoDS_Shape res1 = MKDP.Shape();
1978
1979         myAISContext->Display(ais1,Standard_False);
1980         const Handle(AIS_InteractiveObject)& anIO1 = ais1;
1981         myAISContext->SetSelected (anIO1, Standard_False);
1982         Fit();
1983         Sleep(500);
1984
1985         ais1->Set(res1);
1986         
1987         myAISContext->Redisplay(ais1,Standard_False);
1988         myAISContext->SetSelected(anIO1,Standard_False);
1989
1990         Fit();
1991
1992         TCollection_AsciiString Message ("\
1993         \n\
1994 --- Protrusion with draft angle --- \n\
1995         \n\
1996 TopoDS_Shape S = BRepPrimAPI_MakeBox(400.,250.,300.);\n\
1997 TopExp_Explorer Ex;\n\
1998 Ex.Init(S,TopAbs_FACE);\n\
1999 Ex.Next();\n\
2000 Ex.Next();\n\
2001 Ex.Next();\n\
2002 Ex.Next();\n\
2003 Ex.Next();\n\
2004 TopoDS_Face F = TopoDS::Face(Ex.Current());\n\
2005 Handle(Geom_Surface) surf = BRep_Tool::Surface(F);\n\
2006 gp_Circ2d c(gp_Ax2d(gp_Pnt2d(200.,130.),gp_Dir2d(1.,0.)),50.);\n\
2007 BRepBuilderAPI_MakeWire MW;\n\
2008 Handle(Geom2d_Curve) aline = new Geom2d_Circle(c);\n\
2009 MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,PI));\n\
2010 MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,PI,2.*PI));\n\
2011 BRepBuilderAPI_MakeFace MKF;\n\
2012 MKF.Init(surf,Standard_False);\n\
2013 MKF.Add(MW.Wire());\n\
2014 TopoDS_Face FP = MKF.Face();\n\
2015 BRepLib::BuildCurves3d(FP);\n\
2016 BRepFeat_MakeDPrism MKDP(S,FP,F,10*PI180,1,Standard_True);\n\
2017 MKDP.Perform(200);\n\
2018 TopoDS_Shape res1 = MKDP.Shape();\n\
2019         \n");
2020         PocessTextInDialog("Make an extrusion or a protrusion with a draft angle", Message);
2021 }
2022
2023 void CModelingDoc::OnRevolLocal() 
2024 {
2025         AIS_ListOfInteractive aList;
2026         myAISContext->DisplayedObjects(aList);
2027         AIS_ListIteratorOfListOfInteractive aListIterator;
2028         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
2029                 myAISContext->Remove (aListIterator.Value(), Standard_False);
2030         }
2031   TopoDS_Shape S = BRepPrimAPI_MakeBox(400., 250., 300.).Shape();
2032
2033         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
2034         
2035         myAISContext->SetColor(ais1,Quantity_NOC_CORAL,Standard_False); 
2036         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
2037         myAISContext->Display(ais1,Standard_False);
2038         const Handle(AIS_InteractiveObject)& anIO1 = ais1;
2039         myAISContext->SetSelected (anIO1, Standard_False);
2040         Fit();
2041         Sleep(500);
2042
2043         TopExp_Explorer Ex;
2044         Ex.Init(S,TopAbs_FACE);
2045         Ex.Next();
2046         Ex.Next();
2047         TopoDS_Face F1 = TopoDS::Face(Ex.Current());
2048         Handle(Geom_Surface) surf = BRep_Tool::Surface(F1);
2049         Handle (Geom_Plane) Pl = Handle(Geom_Plane)::DownCast(surf);
2050         gp_Ax1 D = gp::OX();
2051         BRepBuilderAPI_MakeWire MW1;
2052         gp_Pnt2d p1,p2;
2053         p1 = gp_Pnt2d(100.,100.);
2054         p2 = gp_Pnt2d(200.,100.);
2055         Handle(Geom2d_Line) aline = GCE2d_MakeLine(p1,p2).Value();
2056         MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
2057         p1 = p2;
2058         p2 = gp_Pnt2d(150.,200.);
2059         aline = GCE2d_MakeLine(p1,p2).Value();
2060         MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
2061         p1 = p2;
2062         p2 = gp_Pnt2d(100.,100.);
2063         aline = GCE2d_MakeLine(p1,p2).Value();
2064         MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
2065         BRepBuilderAPI_MakeFace MKF1;
2066         MKF1.Init(surf,Standard_False, Precision::Confusion());
2067         MKF1.Add(MW1.Wire());
2068         TopoDS_Face FP = MKF1.Face();
2069         BRepLib::BuildCurves3d(FP);
2070         BRepFeat_MakeRevol MKrev(S,FP,F1,D,1,Standard_True);
2071         Ex.Next();
2072         Ex.Next();
2073         TopoDS_Face F2 = TopoDS::Face(Ex.Current());
2074         MKrev.Perform(F2);
2075         TopoDS_Shape res1 = MKrev.Shape();
2076
2077
2078         myAISContext->Remove (ais1, Standard_False);
2079         Handle(AIS_Shape) ais2 = new AIS_Shape(res1);
2080         myAISContext->Display(ais2,Standard_False);
2081         const Handle(AIS_InteractiveObject)& anIO2 = ais2;
2082         myAISContext->SetSelected (anIO2, Standard_False);
2083         Fit();
2084
2085         TCollection_AsciiString Message ("\
2086         \n\
2087 TopoDS_Shape S = BRepPrimAPI_MakeBox(400.,250.,300.);\n\
2088 TopExp_Explorer Ex;\n\
2089 Ex.Init(S,TopAbs_FACE);\n\
2090 Ex.Next();\n\
2091 Ex.Next();\n\
2092 TopoDS_Face F1 = TopoDS::Face(Ex.Current());\n\
2093 Handle(Geom_Surface) surf = BRep_Tool::Surface(F1);\n\
2094 Handle (Geom_Plane) Pl = Handle(Geom_Plane)::DownCast(surf);\n\
2095 gp_Ax1 D = gp::OX();\n\
2096 BRepBuilderAPI_MakeWire MW1;\n\
2097 gp_Pnt2d p1,p2;\n\
2098 p1 = gp_Pnt2d(100.,100.);\n\
2099 p2 = gp_Pnt2d(200.,100.);\n\
2100 Handle(Geom2d_Line) aline = GCE2d_MakeLine(p1,p2).Value();\n\
2101 MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
2102 p1 = p2;\n\
2103 p2 = gp_Pnt2d(150.,200.);\n\
2104 aline = GCE2d_MakeLine(p1,p2).Value();\n\
2105 MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
2106 p1 = p2;\n\
2107 p2 = gp_Pnt2d(100.,100.);\n\
2108 aline = GCE2d_MakeLine(p1,p2).Value();\n\
2109 MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
2110 BRepBuilderAPI_MakeFace MKF1;\n\
2111 MKF1.Init(surf,Standard_False);\n\
2112 MKF1.Add(MW1.Wire());\n\
2113 TopoDS_Face FP = MKF1.Face();\n\
2114 BRepLib::BuildCurves3d(FP);\n\
2115 BRepFeat_MakeRevol MKrev(S,FP,F1,D,1,Standard_True);\n\
2116 Ex.Next();\n\
2117 TopoDS_Face F2 = TopoDS::Face(Ex.Current());\n\
2118 MKrev.Perform(F2);\n\
2119 TopoDS_Shape res1 = MKrev.Shape();\n\
2120         \n");
2121   PocessTextInDialog("Make a local revolution", Message);
2122 }
2123
2124 void CModelingDoc::OnGlueLocal() 
2125 {
2126         AIS_ListOfInteractive aList;
2127         myAISContext->DisplayedObjects(aList);
2128         AIS_ListIteratorOfListOfInteractive aListIterator;
2129         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
2130                 myAISContext->Remove (aListIterator.Value(), Standard_False);
2131         }
2132   TopoDS_Shape S1 = BRepPrimAPI_MakeBox(gp_Pnt(-500., -500., 0.), gp_Pnt(-100., -250., 300.)).Shape();
2133
2134         Handle(AIS_Shape) ais1 = new AIS_Shape(S1);
2135         myAISContext->SetColor(ais1,Quantity_NOC_ORANGE,Standard_False); 
2136         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
2137         myAISContext->Display(ais1,Standard_False);
2138         const Handle(AIS_InteractiveObject)& anIO1 = ais1;
2139         myAISContext->SetSelected (anIO1, Standard_False);
2140         Fit();
2141         Sleep(1000);
2142         
2143         TopExp_Explorer Ex1;
2144         Ex1.Init(S1,TopAbs_FACE);
2145         Ex1.Next();
2146         Ex1.Next();
2147         Ex1.Next();
2148         Ex1.Next();
2149         Ex1.Next();
2150         TopoDS_Face F1 = TopoDS::Face(Ex1.Current());
2151   TopoDS_Shape S2 = BRepPrimAPI_MakeBox(gp_Pnt(-400., -400., 300.), gp_Pnt(-200., -300., 500.)).Shape();
2152         Handle(AIS_Shape) ais2 = new AIS_Shape(S2);
2153
2154         myAISContext->SetColor(ais2,Quantity_NOC_AZURE,Standard_False); 
2155         myAISContext->SetMaterial(ais2,Graphic3d_NOM_PLASTIC,Standard_False);   
2156         myAISContext->Display(ais2,Standard_False);
2157         const Handle(AIS_InteractiveObject)& anIO2 = ais2;
2158         myAISContext->SetSelected (anIO2, Standard_False);
2159         Fit();
2160         Sleep(1000);
2161
2162         TopExp_Explorer Ex2;
2163         Ex2.Init(S2,TopAbs_FACE);
2164         Ex2.Next();
2165         Ex2.Next();
2166         Ex2.Next();
2167         Ex2.Next();
2168         TopoDS_Face F2 = TopoDS::Face(Ex2.Current());
2169         BRepFeat_Gluer glue(S2,S1);
2170         glue.Bind(F2,F1);
2171         TopoDS_Shape res1 = glue.Shape();
2172         myAISContext->Erase(ais2,Standard_False);
2173         
2174         ais1->Set(res1);
2175
2176         myAISContext->Redisplay (ais1, Standard_False);
2177         myAISContext->SetSelected(anIO1,Standard_False);
2178         Fit();
2179         Sleep(1000);
2180
2181   TopoDS_Shape S3 = BRepPrimAPI_MakeBox(500., 400., 300.).Shape();
2182
2183         Handle(AIS_Shape) ais3 = new AIS_Shape(S3);
2184         myAISContext->SetColor(ais3,Quantity_NOC_ORANGE,Standard_False); 
2185         myAISContext->SetMaterial(ais3,Graphic3d_NOM_PLASTIC,Standard_False);   
2186         myAISContext->Display(ais3,Standard_False);
2187         const Handle(AIS_InteractiveObject)& anIO3 = ais3;
2188         myAISContext->SetSelected (anIO3, Standard_False);
2189         Fit();
2190         Sleep(1000);
2191
2192         TopExp_Explorer Ex3;
2193         Ex3.Init(S3,TopAbs_FACE);
2194         Ex3.Next();
2195         Ex3.Next();
2196         Ex3.Next();
2197         Ex3.Next();
2198         Ex3.Next();
2199         TopoDS_Face F3 = TopoDS::Face(Ex3.Current());
2200   TopoDS_Shape S4 = BRepPrimAPI_MakeBox(gp_Pnt(0., 0., 300.), gp_Pnt(200., 200., 500.)).Shape();
2201
2202         Handle(AIS_Shape) ais4 = new AIS_Shape(S4);
2203         myAISContext->SetColor(ais4,Quantity_NOC_AZURE,Standard_False); 
2204         myAISContext->SetMaterial(ais4,Graphic3d_NOM_PLASTIC,Standard_False);   
2205         myAISContext->Display(ais4,Standard_False);
2206         const Handle(AIS_InteractiveObject)& anIO4 = ais4;
2207         myAISContext->SetSelected (anIO4, Standard_False);
2208         Fit();
2209         Sleep(1000);
2210
2211         TopExp_Explorer Ex4;
2212         Ex4.Init(S4,TopAbs_FACE);
2213         Ex4.Next();
2214         Ex4.Next();
2215         Ex4.Next();
2216         Ex4.Next();
2217         TopoDS_Face F4 = TopoDS::Face(Ex4.Current());
2218         BRepFeat_Gluer glue2(S4,S3);
2219         glue2.Bind(F4,F3);
2220         LocOpe_FindEdges CommonEdges(F4,F3);
2221         for (CommonEdges.InitIterator(); CommonEdges.More(); CommonEdges.Next()) 
2222                 glue2.Bind(CommonEdges.EdgeFrom(),CommonEdges.EdgeTo());
2223         TopoDS_Shape res2 = glue2.Shape();
2224         myAISContext->Erase(ais3,Standard_False);
2225         
2226         ais4->Set(res2);
2227
2228         myAISContext->Redisplay(ais4,Standard_False);
2229         myAISContext->SetSelected(anIO4,Standard_False);
2230         Fit();
2231         Sleep(1000);
2232
2233         TCollection_AsciiString Message ("\
2234         \n\
2235 --- Without common edges ---\n\
2236         \n\
2237 TopoDS_Shape S1 = BRepPrimAPI_MakeBox(gp_Pnt(-500.,-500.,0.),gp_Pnt(-100.,-250.,300.));\n\
2238 TopExp_Explorer Ex1;\n\
2239 Ex1.Init(S1,TopAbs_FACE);\n\
2240 Ex1.Next();\n\
2241 Ex1.Next();\n\
2242 Ex1.Next();\n\
2243 Ex1.Next();\n\
2244 Ex1.Next();\n\
2245 TopoDS_Face F1 = TopoDS::Face(Ex1.Current());\n\
2246 TopoDS_Shape S2 = BRepPrimAPI_MakeBox(gp_Pnt(-400.,-400.,300.),gp_Pnt(-200.,-300.,500.));\n\
2247 TopExp_Explorer Ex2;\n\
2248 Ex2.Init(S2,TopAbs_FACE);\n\
2249 Ex2.Next();\n\
2250 Ex2.Next();\n\
2251 Ex2.Next();\n\
2252 Ex2.Next();\n\
2253 TopoDS_Face F2 = TopoDS::Face(Ex2.Current());\n\
2254 BRepFeat_Gluer glue(S2,S1);\n\
2255 glue.Bind(F2,F1);\n\
2256 TopoDS_Shape res1 = glue.Shape();\n\
2257 \n\
2258 --- With common edges ---\n\
2259 \n\
2260 TopoDS_Shape S3 = BRepPrimAPI_MakeBox(500.,400.,300.);\n\
2261 TopExp_Explorer Ex3;\n\
2262 Ex3.Init(S3,TopAbs_FACE);\n\
2263 Ex3.Next();\n\
2264 Ex3.Next();\n\
2265 Ex3.Next();\n\
2266 Ex3.Next();\n\
2267 Ex3.Next();\n\
2268 TopoDS_Face F3 = TopoDS::Face(Ex3.Current());\n\
2269 TopoDS_Shape S4 = BRepPrimAPI_MakeBox(gp_Pnt(0.,0.,300.),gp_Pnt(200.,200.,500.));\n\
2270 TopExp_Explorer Ex4;\n\
2271 Ex4.Init(S4,TopAbs_FACE);\n\
2272 Ex4.Next();\n\
2273 Ex4.Next();\n\
2274 Ex4.Next();\n\
2275 Ex4.Next();\n\
2276 TopoDS_Face F4 = TopoDS::Face(Ex4.Current());\n\
2277 BRepFeat_Gluer glue2(S4,S3);\n\
2278 glue2.Bind(F4,F3);\n\
2279 LocOpe_FindEdges CommonEdges(F4,F3);\n\
2280 for (CommonEdges.InitIterator(); CommonEdges.More(); CommonEdges.Next()) \n\
2281         glue2.Bind(CommonEdges.EdgeFrom(),CommonEdges.EdgeTo());\n\
2282 TopoDS_Shape res2 = glue2.Shape();\n\
2283         \n");
2284   PocessTextInDialog("Glue two solids", Message);
2285 }
2286
2287
2288 void CModelingDoc::OnPipeLocal() 
2289 {
2290         AIS_ListOfInteractive aList;
2291         myAISContext->DisplayedObjects(aList);
2292         AIS_ListIteratorOfListOfInteractive aListIterator;
2293         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
2294                 myAISContext->Remove (aListIterator.Value(), Standard_False);
2295         }
2296   TopoDS_Shape S = BRepPrimAPI_MakeBox(400., 250., 300.).Shape();
2297         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
2298
2299         myAISContext->SetColor(ais1,Quantity_NOC_CORAL,Standard_False); 
2300         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
2301         myAISContext->Display(ais1,Standard_False);
2302         const Handle(AIS_InteractiveObject)& anIO1 = ais1;
2303         myAISContext->SetSelected (anIO1, Standard_False);
2304         Fit();
2305         Sleep(500);
2306
2307         TopExp_Explorer Ex;
2308         Ex.Init(S,TopAbs_FACE);
2309         Ex.Next();
2310         Ex.Next();
2311         TopoDS_Face F1 = TopoDS::Face(Ex.Current());
2312         Handle(Geom_Surface) surf = BRep_Tool::Surface(F1);
2313         BRepBuilderAPI_MakeWire MW1;
2314         gp_Pnt2d p1,p2;
2315         p1 = gp_Pnt2d(100.,100.);
2316         p2 = gp_Pnt2d(200.,100.);
2317         Handle(Geom2d_Line) aline = GCE2d_MakeLine(p1,p2).Value();
2318         MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
2319         p1 = p2;
2320         p2 = gp_Pnt2d(150.,200.);
2321         aline = GCE2d_MakeLine(p1,p2).Value();
2322         MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
2323         p1 = p2;
2324         p2 = gp_Pnt2d(100.,100.);
2325         aline = GCE2d_MakeLine(p1,p2).Value();
2326         MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));
2327         BRepBuilderAPI_MakeFace MKF1;
2328         MKF1.Init(surf,Standard_False, Precision::Confusion());
2329         MKF1.Add(MW1.Wire());
2330         TopoDS_Face FP = MKF1.Face();
2331         BRepLib::BuildCurves3d(FP);
2332         TColgp_Array1OfPnt CurvePoles(1,3);
2333         gp_Pnt pt = gp_Pnt(150.,0.,150.);
2334         CurvePoles(1) = pt;
2335         pt = gp_Pnt(200.,-100.,150.);
2336         CurvePoles(2) = pt;
2337         pt = gp_Pnt(150.,-200.,150.);
2338         CurvePoles(3) = pt;
2339         Handle(Geom_BezierCurve) curve = new Geom_BezierCurve(CurvePoles);
2340         TopoDS_Edge E = BRepBuilderAPI_MakeEdge(curve);
2341         TopoDS_Wire W = BRepBuilderAPI_MakeWire(E);
2342         BRepFeat_MakePipe MKPipe(S,FP,F1,W,1,Standard_True);
2343         MKPipe.Perform();
2344         TopoDS_Shape res1 = MKPipe.Shape();
2345         ais1->Set(res1);
2346
2347         myAISContext->Redisplay(ais1,Standard_False); 
2348         myAISContext->SetSelected(anIO1,Standard_False);
2349         Fit();
2350         
2351         TCollection_AsciiString Message ("\
2352         \n\
2353 TopoDS_Shape S = BRepPrimAPI_MakeBox(400.,250.,300.);\n\
2354 TopExp_Explorer Ex;\n\
2355 Ex.Init(S,TopAbs_FACE);\n\
2356 Ex.Next();\n\
2357 Ex.Next();\n\
2358 TopoDS_Face F1 = TopoDS::Face(Ex.Current());\n\
2359 Handle(Geom_Surface) surf = BRep_Tool::Surface(F1);\n\
2360 BRepBuilderAPI_MakeWire MW1;\n\
2361 gp_Pnt2d p1,p2;\n\
2362 p1 = gp_Pnt2d(100.,100.);\n\
2363 p2 = gp_Pnt2d(200.,100.);\n\
2364 Handle(Geom2d_Line) aline = GCE2d_MakeLine(p1,p2).Value();\n\
2365 MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
2366 p1 = p2;\n\
2367 p2 = gp_Pnt2d(150.,200.);\n\
2368 aline = GCE2d_MakeLine(p1,p2).Value();\n\
2369 MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
2370 p1 = p2;\n\
2371 p2 = gp_Pnt2d(100.,100.);\n\
2372 aline = GCE2d_MakeLine(p1,p2).Value();\n\
2373 MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2)));\n\
2374 BRepBuilderAPI_MakeFace MKF1;\n\
2375 MKF1.Init(surf,Standard_False);\n\
2376 TopoDS_Face FP = MKF1.Face();\n\
2377 BRepLib::BuildCurves3d(FP);\n\
2378 TColgp_Array1OfPnt CurvePoles(1,3);\n\
2379 gp_Pnt pt = gp_Pnt(150.,0.,150.);\n\
2380 CurvePoles(1) = pt;\n\
2381 pt = gp_Pnt(200.,-100.,150.);\n\
2382 CurvePoles(2) = pt;\n\
2383 pt = gp_Pnt(150.,-200.,150.);\n\
2384 CurvePoles(3) = pt;\n\
2385 Handle(Geom_BezierCurve) curve = new Geom_BezierCurve(CurvePoles);\n\
2386 TopoDS_Edge E = BRepBuilderAPI_MakeEdge(curve);\n\
2387 TopoDS_Wire W = BRepBuilderAPI_MakeWire(E);\n\
2388 BRepFeat_MakePipe MKPipe(S,FP,F1,W,1,Standard_True);\n\
2389 MKPipe.Perform();\n\
2390 TopoDS_Shape res1 = MKPipe.Shape();\n\
2391         \n");
2392   PocessTextInDialog("Make a local pipe", Message);
2393 }
2394
2395
2396 void CModelingDoc::OnLinearLocal() 
2397 {
2398         AIS_ListOfInteractive aList;
2399         myAISContext->DisplayedObjects(aList);
2400         AIS_ListIteratorOfListOfInteractive aListIterator;
2401         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
2402                 myAISContext->Remove (aListIterator.Value(), Standard_False);
2403         }
2404         BRepBuilderAPI_MakeWire mkw;
2405         gp_Pnt p1 = gp_Pnt(0.,0.,0.);
2406         gp_Pnt p2 = gp_Pnt(200.,0.,0.);
2407         mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));
2408         p1 = p2;
2409         p2 = gp_Pnt(200.,0.,50.);
2410         mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));
2411         p1 = p2;
2412         p2 = gp_Pnt(50.,0.,50.);
2413         mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));
2414         p1 = p2;
2415         p2 = gp_Pnt(50.,0.,200.);
2416         mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));
2417         p1 = p2;
2418         p2 = gp_Pnt(0.,0.,200.);
2419         mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));
2420         p1 = p2;
2421         mkw.Add(BRepBuilderAPI_MakeEdge(p2,gp_Pnt(0.,0.,0.)));
2422         
2423         TopoDS_Shape S = BRepPrimAPI_MakePrism(BRepBuilderAPI_MakeFace(mkw.Wire()), 
2424                                                                            gp_Vec(gp_Pnt(0.,0.,0.),gp_Pnt(0.,100.,0.)));
2425
2426         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
2427         myAISContext->SetColor(ais1,Quantity_NOC_CYAN2,Standard_False); 
2428         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);   
2429         myAISContext->Display(ais1,Standard_False);
2430         const Handle(AIS_InteractiveObject)& anIO1 = ais1;
2431         myAISContext->SetSelected (anIO1, Standard_False);
2432         Fit();
2433         Sleep(500);
2434
2435         TopoDS_Wire W = BRepBuilderAPI_MakeWire(BRepBuilderAPI_MakeEdge(gp_Pnt(50.,45.,100.),
2436                                                                                                           gp_Pnt(100.,45.,50.)));       
2437         Handle(Geom_Plane) aplane = new Geom_Plane(0.,1.,0.,-45.);
2438         BRepFeat_MakeLinearForm aform(S, W, aplane, gp_Vec(0.,10.,0.), gp_Vec(0.,0.,0.),
2439                                                                   1, Standard_True);
2440         aform.Perform(/*10.*/); // new in 2.0
2441
2442         TopoDS_Shape res = aform.Shape();
2443         ais1->Set(res);
2444         myAISContext->Redisplay(ais1,Standard_False);
2445         myAISContext->SetSelected (anIO1, Standard_False);
2446         Fit();
2447
2448         TCollection_AsciiString Message ("\
2449         \n\
2450 BRepBuilderAPI_MakeWire mkw;\n\
2451 gp_Pnt p1 = gp_Pnt(0.,0.,0.);\n\
2452 gp_Pnt p2 = gp_Pnt(200.,0.,0.);\n\
2453 mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));\n\
2454 p1 = p2;\n\
2455 p2 = gp_Pnt(200.,0.,50.);\n\
2456 mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));\n\
2457 p1 = p2;\n\
2458 p2 = gp_Pnt(50.,0.,50.);\n\
2459 mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));\n\
2460 p1 = p2;\n\
2461 p2 = gp_Pnt(50.,0.,200.);\n\
2462 mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));\n\
2463 p1 = p2;\n\
2464 p2 = gp_Pnt(0.,0.,200.);\n\
2465 mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2));\n\
2466 p1 = p2;\n\
2467 mkw.Add(BRepBuilderAPI_MakeEdge(p2,gp_Pnt(0.,0.,0.)));\n\
2468 TopoDS_Shape S = BRepPrimAPI_MakePrism(BRepBuilderAPI_MakeFace(mkw.Wire()), \n\
2469                                                                 gp_Vec(gp_Pnt(0.,0.,0.),gp_Pnt(0.,100.,0.)));\n\
2470 TopoDS_Wire W = BRepBuilderAPI_MakeWire(BRepBuilderAPI_MakeEdge(gp_Pnt(50.,45.,100.),\n\
2471                                                                                                 gp_Pnt(100.,45.,50.)));\n\
2472 Handle(Geom_Plane) aplane = new Geom_Plane(0.,1.,0.,-45.);\n\
2473 BRepFeat_MakeLinearForm aform(S, W, aplane, gp_Dir(0.,10.,0.), gp_Dir(0.,0.,0.),\n\
2474                                                         1, Standard_True);\n\
2475 aform.Perform(10.);\n\
2476 TopoDS_Shape res = aform.Shape();\n\
2477         \n");
2478   PocessTextInDialog("Make a rib", Message);
2479 }
2480
2481
2482 void CModelingDoc::OnSplitLocal() 
2483 {
2484         AIS_ListOfInteractive aList;
2485         myAISContext->DisplayedObjects(aList);
2486         AIS_ListIteratorOfListOfInteractive aListIterator;
2487         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
2488                 myAISContext->Remove (aListIterator.Value(), Standard_False);
2489         }
2490
2491   TopoDS_Shape S = BRepPrimAPI_MakeBox(gp_Pnt(-100, -60, -80), 150, 200, 170).Shape();
2492         
2493         Handle(AIS_Shape) ais1 = new AIS_Shape(S);
2494         myAISContext->SetColor(ais1,Quantity_NOC_RED,Standard_False);
2495         myAISContext->SetMaterial(ais1,Graphic3d_NOM_PLASTIC,Standard_False);
2496         myAISContext->Display(ais1,Standard_False);
2497         const Handle(AIS_InteractiveObject)& anIO1 = ais1;
2498         myAISContext->SetSelected (anIO1, Standard_False);
2499         Fit();
2500         Sleep(500);
2501
2502         BRepAlgoAPI_Section asect(S, gp_Pln(1,2,1,-15),Standard_False);
2503         asect.ComputePCurveOn1(Standard_True);
2504         asect.Approximation(Standard_True);
2505         asect.Build();
2506         TopoDS_Shape R = asect.Shape();
2507         BRepTools::Write(R,"E:\\temp\\R");
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         BRepTools::Write(PinkFace,"E:\\temp\\PinkFace.rle");
3147
3148
3149 /////////////Display
3150         Handle(AIS_Shape) white = new AIS_Shape(WhiteFace);
3151         myAISContext->SetColor(white,Quantity_NOC_WHITE,Standard_False);
3152         myAISContext->SetMaterial(white,Graphic3d_NOM_PLASTIC,Standard_False);    
3153         myAISContext->Display(white,Standard_False);
3154         
3155         Handle(AIS_Shape) red = new AIS_Shape(RedFace);
3156         myAISContext->SetColor(red,Quantity_NOC_RED,Standard_False);
3157         myAISContext->SetMaterial(red,Graphic3d_NOM_PLASTIC,Standard_False);    
3158         myAISContext->Display(red,Standard_False);
3159         
3160         Handle(AIS_Shape) brown = new AIS_Shape(BrownFace);
3161         myAISContext->SetColor(brown,Quantity_NOC_BROWN,Standard_False);
3162         myAISContext->SetMaterial(brown,Graphic3d_NOM_PLASTIC,Standard_False);    
3163         myAISContext->Display(brown,Standard_False);
3164         
3165         Handle(AIS_Shape) pink = new AIS_Shape(PinkFace);
3166         myAISContext->SetColor(pink,Quantity_NOC_HOTPINK,Standard_False);
3167         myAISContext->SetMaterial(pink,Graphic3d_NOM_PLASTIC,Standard_False);    
3168         myAISContext->Display(pink,Standard_False);
3169
3170         Fit();
3171
3172
3173   TCollection_AsciiString Message ("\
3174         \n\
3175 TopoDS_Face WhiteFace, BrownFace, RedFace, PinkFace;    \n\
3176 TopoDS_Edge Edge1, Edge2, Edge3, Edge4, Edge5, Edge6, Edge7;    \n\
3177 TopoDS_Wire Wire1;      \n\
3178 gp_Pnt P1, P2, P3, P4, P5, P6, P7;      \n\
3179 \n\
3180 ////////The white Face \n\
3181 \n\
3182 gp_Sphere sphere (gp_Ax3(gp_Pnt(0,0,0),gp_Dir(1,0,0)),150);     \n\
3183 \n\
3184 WhiteFace = BRepBuilderAPI_MakeFace(sphere,0.1,0.7,0.2,0.9);    \n\
3185 \n\
3186 ////////The red face    \n\
3187 \n\
3188 P1.SetCoord(-15,200,10);        \n\
3189 P2.SetCoord(5,204,0);   \n\
3190 P3.SetCoord(15,200,0);  \n\
3191 P4.SetCoord(-15,20,15); \n\
3192 P5.SetCoord(-5,20,0);   \n\
3193 P6.SetCoord(15,20,35);  \n\
3194 TColgp_Array2OfPnt array(1,3,1,2);      \n\
3195 array.SetValue(1,1,P1); \n\
3196 array.SetValue(2,1,P2); \n\
3197 array.SetValue(3,1,P3);         \n\
3198 array.SetValue(1,2,P4);         \n\
3199 array.SetValue(2,2,P5);         \n\
3200 array.SetValue(3,2,P6); \n\
3201 Handle (Geom_BSplineSurface) curve = GeomAPI_PointsToBSplineSurface(array,3,8,GeomAbs_C2,0.001);        \n\
3202 \n\
3203 RedFace = BRepBuilderAPI_MakeFace(curve);       \n\
3204 \n\
3205 ////////The brown face  \n\
3206 \n\
3207 gp_Circ circle(gp_Ax2(gp_Pnt(0,0,0),gp_Dir(1,0,0)),80); \n\
3208 Edge1 = BRepBuilderAPI_MakeEdge(circle,0,PI);   \n\
3209 \n\
3210 Edge2 = BRepBuilderAPI_MakeEdge(gp_Pnt(0,0,-80),gp_Pnt(0,-10,40));      \n\
3211 Edge3 = BRepBuilderAPI_MakeEdge(gp_Pnt(0,-10,40),gp_Pnt(0,0,80));       \n\
3212 \n\
3213 TopoDS_Wire YellowWire; \n\
3214 BRepBuilderAPI_MakeWire MW1(Edge1,Edge2,Edge3); \n\
3215 if (MW1.IsDone()) {     \n\
3216                 YellowWire = MW1;       \n\
3217 }       \n\
3218 \n\
3219 BrownFace = BRepBuilderAPI_MakeFace(YellowWire);        \n\
3220 \n");
3221 Message +=("\
3222 ////////The pink face   \n\
3223 \n\
3224 P1.SetCoord(35,-200,40);        \n\
3225 P2.SetCoord(50,-204,30);        \n\
3226 P3.SetCoord(65,-200,30);        \n\
3227 P4.SetCoord(35,-20,45); \n\
3228 P5.SetCoord(45,-20,30); \n\
3229 P6.SetCoord(65,-20,65); \n\
3230 TColgp_Array2OfPnt array2(1,3,1,2);     \n\
3231 array2.SetValue(1,1,P1);        \n\
3232 array2.SetValue(2,1,P2);        \n\
3233 array2.SetValue(3,1,P3);        \n\
3234 array2.SetValue(1,2,P4);        \n\
3235 array2.SetValue(2,2,P5);        \n\
3236 array2.SetValue(3,2,P6);        \n\
3237         \n\
3238 Handle (Geom_BSplineSurface) BSplineSurf = GeomAPI_PointsToBSplineSurface(array2,3,8,GeomAbs_C2,0.001); \n\
3239         \n\
3240 TopoDS_Face aFace = BRepBuilderAPI_MakeFace(BSplineSurf);       \n\
3241 \n\
3242 //2d lines      \n\
3243 gp_Pnt2d P12d(0.9,0.1); \n\
3244 gp_Pnt2d P22d(0.2,0.7); \n\
3245 gp_Pnt2d P32d(0.02,0.1);        \n\
3246 \n\
3247 Handle (Geom2d_Line) line1=             \n\
3248         new Geom2d_Line(P12d,gp_Dir2d((0.2-0.9),(0.7-0.1)));    \n\
3249 Handle (Geom2d_Line) line2=             \n\
3250         new Geom2d_Line(P22d,gp_Dir2d((0.02-0.2),(0.1-0.7)));   \n\
3251 Handle (Geom2d_Line) line3=             \n\
3252         new Geom2d_Line(P32d,gp_Dir2d((0.9-0.02),(0.1-0.1)));   \n\
3253                 \n\
3254 //Edges are on the BSpline surface      \n\
3255 Edge1 = BRepBuilderAPI_MakeEdge(line1,BSplineSurf,0,P12d.Distance(P22d));       \n\
3256 Edge2 = BRepBuilderAPI_MakeEdge(line2,BSplineSurf,0,P22d.Distance(P32d));       \n\
3257 Edge3 = BRepBuilderAPI_MakeEdge(line3,BSplineSurf,0,P32d.Distance(P12d));       \n\
3258 \n\
3259 Wire1 = BRepBuilderAPI_MakeWire(Edge1,Edge2,Edge3);     \n\
3260 Wire1.Reverse();        \n\
3261 PinkFace = BRepBuilderAPI_MakeFace(aFace,Wire1);        \n\
3262 BRepLib::BuildCurves3d(PinkFace);       \n\
3263 \n\
3264 \n");
3265
3266 PocessTextInDialog("Make face ", Message);
3267 }
3268
3269 void CModelingDoc::OnShell() 
3270 {
3271         AIS_ListOfInteractive aList;
3272         myAISContext->DisplayedObjects(aList);
3273         AIS_ListIteratorOfListOfInteractive aListIterator;
3274         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
3275                 myAISContext->Remove (aListIterator.Value(), Standard_False);
3276         }
3277
3278         TColgp_Array2OfPnt Poles(1,2,1,4);
3279         Poles.SetValue(1,1,gp_Pnt(0,0,0));
3280         Poles.SetValue(1,2,gp_Pnt(0,10,2));
3281         Poles.SetValue(1,3,gp_Pnt(0,20,10)); 
3282         Poles.SetValue(1,4,gp_Pnt(0,30,0)); 
3283         Poles.SetValue(2,1,gp_Pnt(10,0,5));
3284         Poles.SetValue(2,2,gp_Pnt(10,10,3));
3285         Poles.SetValue(2,3,gp_Pnt(10,20,20));
3286         Poles.SetValue(2,4,gp_Pnt(10,30,0));
3287
3288         TColStd_Array1OfReal UKnots(1,2);
3289         UKnots.SetValue(1,0);
3290         UKnots.SetValue(2,1);
3291
3292         TColStd_Array1OfInteger UMults(1,2);
3293         UMults.SetValue(1,2);
3294         UMults.SetValue(2,2);
3295
3296         TColStd_Array1OfReal VKnots(1,3);
3297         VKnots.SetValue(1,0);
3298         VKnots.SetValue(2,1);
3299         VKnots.SetValue(3,2);
3300
3301         TColStd_Array1OfInteger VMults(1,3);
3302         VMults.SetValue(1,3);
3303         VMults.SetValue(2,1);
3304         VMults.SetValue(3,3);
3305
3306         Standard_Integer UDegree(1);
3307         Standard_Integer VDegree(2);
3308         
3309         Handle (Geom_BSplineSurface) BSpline = new Geom_BSplineSurface(Poles,UKnots,VKnots,UMults,VMults,UDegree,VDegree);
3310         
3311         TopoDS_Face WhiteFace = BRepBuilderAPI_MakeFace(BSpline, Precision::Confusion());
3312
3313         
3314         Handle(AIS_Shape) white = new AIS_Shape(WhiteFace);
3315         myAISContext->SetColor (white, Quantity_NOC_WHITE, Standard_False);
3316         myAISContext->SetMaterial(white,Graphic3d_NOM_PLASTIC,Standard_False);    
3317         myAISContext->SetTransparency (white, 0.7, Standard_False);
3318         myAISContext->Display(white,Standard_False);
3319         
3320
3321         TopoDS_Shell aShell = BRepBuilderAPI_MakeShell(BSpline);
3322         Handle(AIS_Shape) anAISShell = new AIS_Shape(aShell);
3323         myAISContext->SetDisplayMode (anAISShell, 0, Standard_False);
3324         myAISContext->Display(anAISShell,Standard_False);
3325         //myAISContext->SetSelected(anAISShell);
3326
3327         Fit();
3328   
3329         TCollection_AsciiString Message ("\
3330         \n\
3331 TColgp_Array2OfPnt Poles(1,2,1,4);      \n\
3332 Poles.SetValue(1,1,gp_Pnt(0,0,0));      \n\
3333 Poles.SetValue(1,2,gp_Pnt(0,10,2));     \n\
3334 Poles.SetValue(1,3,gp_Pnt(0,20,10));    \n\
3335 Poles.SetValue(1,4,gp_Pnt(0,30,0));     \n\
3336 Poles.SetValue(2,1,gp_Pnt(10,0,5));     \n\
3337 Poles.SetValue(2,2,gp_Pnt(10,10,3));    \n\
3338 Poles.SetValue(2,3,gp_Pnt(10,20,20));   \n\
3339 Poles.SetValue(2,4,gp_Pnt(10,30,0));    \n\
3340 \n\
3341 TColStd_Array1OfReal UKnots(1,2);       \n\
3342 UKnots.SetValue(1,0);   \n\
3343 UKnots.SetValue(2,1);   \n\
3344 \n\
3345 TColStd_Array1OfInteger UMults(1,2);    \n\
3346 UMults.SetValue(1,2);   \n\
3347 UMults.SetValue(2,2);   \n\
3348 \n\
3349 TColStd_Array1OfReal VKnots(1,3);       \n\
3350 VKnots.SetValue(1,0);   \n\
3351 VKnots.SetValue(2,1);   \n\
3352 VKnots.SetValue(3,2);   \n\
3353 \n\
3354 TColStd_Array1OfInteger VMults(1,3);    \n\
3355 VMults.SetValue(1,3);   \n\
3356 VMults.SetValue(2,1);   \n\
3357 VMults.SetValue(3,3);   \n\
3358 \n\
3359 Standard_Integer UDegree(1);    \n\
3360 Standard_Integer VDegree(2);    \n\
3361         \n\
3362 Handle (Geom_BSplineSurface) BSpline = new Geom_BSplineSurface(Poles,UKnots,VKnots,UMults,VMults,UDegree,VDegree);      \n\
3363         \n\
3364 TopoDS_Shell aShell = BRepBuilderAPI_MakeShell(BSpline);        \n\
3365 \n\
3366 \n");
3367
3368   PocessTextInDialog("Make shell", Message);
3369         
3370 }
3371
3372 void CModelingDoc::OnCompound() 
3373 {
3374         AIS_ListOfInteractive aList;
3375         myAISContext->DisplayedObjects(aList);
3376         AIS_ListIteratorOfListOfInteractive aListIterator;
3377         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
3378                 myAISContext->Remove (aListIterator.Value(), Standard_False);
3379         }
3380
3381         BRep_Builder builder;
3382         TopoDS_Compound Comp;
3383         builder.MakeCompound(Comp);
3384
3385         TopoDS_Vertex aVertex = BRepBuilderAPI_MakeVertex(gp_Pnt(-20,10,-30));
3386         builder.Add(Comp,aVertex);
3387         
3388         gp_Lin line(gp_Ax1(gp_Pnt(10,10,10),gp_Dir(1,0,0)));
3389         TopoDS_Edge anEdge = BRepBuilderAPI_MakeEdge(line,-20,10);
3390         builder.Add(Comp,anEdge);
3391
3392         gp_Sphere sphere (gp_Ax3(gp_Pnt(-80,0,0),gp_Dir(1,0,0)),150);
3393         TopoDS_Face aFace = BRepBuilderAPI_MakeFace(sphere,0.1,0.7,0.2,0.9);
3394         builder.Add(Comp,aFace);
3395
3396   TopoDS_Shape aBox = BRepPrimAPI_MakeBox(gp_Pnt(-60, 0, 0), 30, 60, 40).Shape();
3397         builder.Add(Comp,aBox);
3398
3399         Handle(AIS_Shape) white = new AIS_Shape(Comp);
3400         myAISContext->SetDisplayMode (white, 0, Standard_False);
3401         myAISContext->Display(white,Standard_False);
3402
3403         Fit();
3404
3405
3406    TCollection_AsciiString Message ("\
3407                 \n\
3408 BRep_Builder builder;   \n\
3409 TopoDS_Compound Comp;   \n\
3410 builder.MakeCompound(Comp);     \n\
3411 \n\
3412 TopoDS_Vertex aVertex = BRepBuilderAPI_MakeVertex(gp_Pnt(-20,10,-30));  \n\
3413 builder.Add(Comp,aVertex);      \n\
3414         \n\
3415 gp_Lin line(gp_Ax1(gp_Pnt(10,10,10),gp_Dir(1,0,0)));    \n\
3416 TopoDS_Edge anEdge = BRepBuilderAPI_MakeEdge(line,-20,10);      \n\
3417 builder.Add(Comp,anEdge);       \n\
3418         \n\
3419 gp_Sphere sphere (gp_Ax3(gp_Pnt(-80,0,0),gp_Dir(1,0,0)),150);   \n\
3420 TopoDS_Face aFace = BRepBuilderAPI_MakeFace(sphere,0.1,0.7,0.2,0.9);    \n\
3421 builder.Add(Comp,aFace);        \n\
3422         \n\
3423 TopoDS_Shape aBox = BRepPrimAPI_MakeBox(gp_Pnt(-60,0,0),30,60,40);      \n\
3424 builder.Add(Comp,aBox); \n\
3425         \n\
3426 \n");
3427
3428         PocessTextInDialog("Make compound ", Message);
3429
3430 }
3431
3432
3433
3434
3435
3436 void CModelingDoc::OnSewing() 
3437 {
3438         AIS_ListOfInteractive aList;
3439         myAISContext->DisplayedObjects(aList);
3440         AIS_ListIteratorOfListOfInteractive aListIterator;
3441         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
3442                 myAISContext->Remove (aListIterator.Value(), Standard_False);
3443         }
3444
3445         gp_Pnt P(0,0,0);
3446         gp_Vec V(0,0,1);
3447         Handle(Geom_Plane) Pi=new Geom_Plane(P,V);
3448         Handle(Geom_RectangularTrimmedSurface) GeometricSurface=new Geom_RectangularTrimmedSurface(Pi,0.,100.,0.,100.);
3449         TopoDS_Shape FirstShape = BRepBuilderAPI_MakeFace(GeometricSurface, Precision::Confusion());
3450         
3451         Handle(AIS_Shape) white1 = new AIS_Shape(FirstShape);
3452         
3453         myAISContext->SetColor(white1,Quantity_NOC_RED,Standard_False);
3454         myAISContext->SetMaterial(white1,Graphic3d_NOM_PLASTIC,Standard_False); 
3455         myAISContext->SetTransparency(white1,0.4,Standard_False);
3456         myAISContext->Display(white1,Standard_False);
3457         //Sleep(1000);
3458         
3459         gp_Pnt P1(0,0,0);
3460         gp_Pnt P2(50,0,0);
3461         gp_Pnt P3(100,0,0);
3462         gp_Pnt P4(25,12,85);
3463         gp_Pnt P5(100,0,80);
3464         gp_Pnt P6(135,-12,85);
3465
3466         TColgp_Array2OfPnt Array(1,3,1,2);
3467         Array.SetValue(1,1,P1);
3468         Array.SetValue(2,1,P2);
3469         Array.SetValue(3,1,P3);
3470         Array.SetValue(1,2,P4);
3471         Array.SetValue(2,2,P5);
3472         Array.SetValue(3,2,P6);
3473
3474         Handle (Geom_BSplineSurface) aSurf = GeomAPI_PointsToBSplineSurface(Array,3,8,GeomAbs_C2,0.00001);
3475         TopoDS_Shape SecondShape = BRepBuilderAPI_MakeFace(aSurf, Precision::Confusion());
3476         
3477         Handle(AIS_Shape) white2 = new AIS_Shape(SecondShape);
3478         
3479         myAISContext->SetColor(white2,Quantity_NOC_YELLOW,Standard_False);
3480         myAISContext->SetMaterial(white2,Graphic3d_NOM_PLASTIC,Standard_False);  
3481         myAISContext->SetTransparency(white2,0.4,Standard_False);
3482         myAISContext->Display(white2,Standard_False);
3483
3484         //Sleep(1000);
3485         
3486         BRepOffsetAPI_Sewing aMethod;
3487         aMethod.Add(FirstShape);        
3488         aMethod.Add(SecondShape);
3489
3490         aMethod.Perform();
3491
3492         TopoDS_Shape sewedShape = aMethod.SewedShape();
3493
3494         Handle(AIS_Shape) result = new AIS_Shape(sewedShape);
3495         myAISContext->SetDisplayMode(result,0,Standard_False);
3496         myAISContext->Display(result,Standard_False);
3497
3498         Fit();
3499
3500    TCollection_AsciiString Message ("\
3501         \n\
3502 ///////The first shape \n\
3503  \n\
3504 gp_Pnt P(0,0,0);        \n\
3505 gp_Vec V(0,0,1);        \n\
3506 Handle(Geom_Plane) Pi=new Geom_Plane(P,V);      \n\
3507 Handle(Geom_RectangularTrimmedSurface) GeometricSurface=new Geom_RectangularTrimmedSurface(Pi,0.,100.,0.,100.); \n\
3508 TopoDS_Shape FirstShape = BRepBuilderAPI_MakeFace(GeometricSurface);    \n\
3509         \n\
3510 ///////The second shape \n\
3511  \n\
3512 gp_Pnt P1(0,0,0);       \n\
3513 gp_Pnt P2(50,0,0);      \n\
3514 gp_Pnt P3(100,0,0);     \n\
3515 gp_Pnt P4(25,12,85);    \n\
3516 gp_Pnt P5(100,0,80);    \n\
3517 gp_Pnt P6(135,-12,85);  \n\
3518 \n\
3519 TColgp_Array2OfPnt Array(1,3,1,2);      \n\
3520 Array.SetValue(1,1,P1); \n\
3521 Array.SetValue(2,1,P2); \n\
3522 Array.SetValue(3,1,P3); \n\
3523 Array.SetValue(1,2,P4); \n\
3524 Array.SetValue(2,2,P5); \n\
3525 Array.SetValue(3,2,P6); \n\
3526 \n\
3527 Handle (Geom_BSplineSurface) aSurf = GeomAPI_PointsToBSplineSurface(Array,3,8,GeomAbs_C2,0.00001);      \n\
3528 TopoDS_Shape SecondShape = BRepBuilderAPI_MakeFace(aSurf);      \n\
3529         \n\
3530 BRepOffsetAPI_Sewing aMethod;   \n\
3531 aMethod.Add(FirstShape);                \n\
3532 aMethod.Add(SecondShape);       \n\
3533 \n\
3534 aMethod.Perform();      \n\
3535 \n\
3536 TopoDS_Shape sewedShape = aMethod.SewedShape(); \n\
3537         \n\
3538 \n");
3539
3540         PocessTextInDialog("Sew faces ", Message);
3541
3542 }
3543
3544
3545
3546
3547
3548
3549
3550 void CModelingDoc::OnBuilder() 
3551 {
3552         AIS_ListOfInteractive aList;
3553         myAISContext->DisplayedObjects(aList);
3554         AIS_ListIteratorOfListOfInteractive aListIterator;
3555         for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
3556                 myAISContext->Remove (aListIterator.Value(), Standard_False);
3557         }
3558
3559         //The tolerance is the tolerance of confusion
3560         Standard_Real precision = Precision::Confusion();
3561
3562         //The builder
3563         BRep_Builder B;
3564
3565         //Build the vertices
3566         TopoDS_Vertex V000, V001, V010, V011, V100, V101, V110, V111;
3567         B.MakeVertex(V000,gp_Pnt(0,0,0),precision);
3568         B.MakeVertex(V001,gp_Pnt(0,0,100),precision);
3569         B.MakeVertex(V010,gp_Pnt(0,150,0),precision);
3570         B.MakeVertex(V011,gp_Pnt(0,150,100),precision);
3571         B.MakeVertex(V100,gp_Pnt(200,0,0),precision);
3572         B.MakeVertex(V101,gp_Pnt(200,0,100),precision);
3573         B.MakeVertex(V110,gp_Pnt(200,150,0),precision);
3574         B.MakeVertex(V111,gp_Pnt(200,150,100),precision);
3575
3576         //Build the edges
3577         //the edges are oriented as the axis X,Y,Z
3578         TopoDS_Edge EX00, EX01, EX10, EX11;
3579         TopoDS_Edge EY00, EY01, EY10, EY11;
3580         TopoDS_Edge EZ00, EZ01, EZ10, EZ11;
3581         Handle (Geom_Line) L;
3582
3583         //Edge X00
3584         L = new Geom_Line(gp_Pnt(0,0,0),gp_Dir(1,0,0));
3585         B.MakeEdge(EX00,L,precision);
3586         V000.Orientation(TopAbs_FORWARD);
3587         V100.Orientation(TopAbs_REVERSED);
3588         B.Add(EX00,V000);
3589         B.Add(EX00,V100);
3590         //Parameters
3591         B.UpdateVertex(V000,0,EX00,precision);
3592         B.UpdateVertex(V100,200,EX00,precision);
3593
3594         //Edge X10
3595         L = new Geom_Line(gp_Pnt(0,150,0),gp_Dir(1,0,0));
3596         B.MakeEdge(EX10,L,precision);
3597         V010.Orientation(TopAbs_FORWARD);
3598         V110.Orientation(TopAbs_REVERSED);
3599         B.Add(EX10,V010);
3600         B.Add(EX10,V110);
3601         //Parameters
3602         B.UpdateVertex(V010,0,EX10,precision);
3603         B.UpdateVertex(V110,200,EX10,precision);
3604
3605         //Edge Y00
3606         L = new Geom_Line(gp_Pnt(0,0,0),gp_Dir(0,1,0));
3607         B.MakeEdge(EY00,L,precision);
3608         V000.Orientation(TopAbs_FORWARD);
3609         V010.Orientation(TopAbs_REVERSED);
3610         B.Add(EY00,V000);
3611         B.Add(EY00,V010);
3612         //Parameters
3613         B.UpdateVertex(V000,0,EY00,precision);
3614         B.UpdateVertex(V010,150,EY00,precision);
3615
3616         //Edge Y10
3617         L = new Geom_Line(gp_Pnt(200,0,0),gp_Dir(0,1,0));
3618         B.MakeEdge(EY10,L,precision);
3619         V100.Orientation(TopAbs_FORWARD);
3620         V110.Orientation(TopAbs_REVERSED);
3621         B.Add(EY10,V100);
3622         B.Add(EY10,V110);
3623         //Parameters
3624         B.UpdateVertex(V100,0,EY10,precision);
3625         B.UpdateVertex(V110,150,EY10,precision);
3626
3627         //Edge Y01
3628         L = new Geom_Line(gp_Pnt(0,0,100),gp_Dir(0,1,0));
3629         B.MakeEdge(EY01,L,precision);
3630         V001.Orientation(TopAbs_FORWARD);
3631         V011.Orientation(TopAbs_REVERSED);
3632         B.Add(EY01,V001);
3633         B.Add(EY01,V011);
3634         //Parameters
3635         B.UpdateVertex(V001,0,EY01,precision);
3636         B.UpdateVertex(V011,150,EY01,precision);
3637
3638         //Edge Y11
3639         L = new Geom_Line(gp_Pnt(200,0,100),gp_Dir(0,1,0));
3640         B.MakeEdge(EY11,L,precision);
3641         V101.Orientation(TopAbs_FORWARD);
3642         V111.Orientation(TopAbs_REVERSED);
3643         B.Add(EY11,V101);
3644         B.Add(EY11,V111);
3645         //Parameters
3646         B.UpdateVertex(V101,0,EY11,precision);
3647         B.UpdateVertex(V111,150,EY11,precision);
3648
3649         //Edge Z00
3650         L = new Geom_Line(gp_Pnt(0,0,0),gp_Dir(0,0,1));
3651         B.MakeEdge(EZ00,L,precision);
3652         V000.Orientation(TopAbs_FORWARD);
3653         V001.Orientation(TopAbs_REVERSED);
3654         B.Add(EZ00,V000);
3655         B.Add(EZ00,V001);
3656         //Parameters
3657         B.UpdateVertex(V000,0,EZ00,precision);
3658         B.UpdateVertex(V001,100,EZ00,precision);
3659
3660         //Edge Z01
3661         L = new Geom_Line(gp_Pnt(0,150,0),gp_Dir(0,0,1));
3662         B.MakeEdge(EZ01,L,precision);
3663         V010.Orientation(TopAbs_FORWARD);
3664         V011.Orientation(TopAbs_REVERSED);
3665         B.Add(EZ01,V010);
3666         B.Add(EZ01,V011);
3667         //Parameters
3668         B.UpdateVertex(V010,0,EZ01,precision);
3669         B.UpdateVertex(V011,100,EZ01,precision);
3670
3671         //Edge Z10
3672         L = new Geom_Line(gp_Pnt(200,0,0),gp_Dir(0,0,1));
3673         B.MakeEdge(EZ10,L,precision);
3674         V100.Orientation(TopAbs_FORWARD);
3675         V101.Orientation(TopAbs_REVERSED);
3676         B.Add(EZ10,V100);
3677         B.Add(EZ10,V101);
3678         //Parameters
3679         B.UpdateVertex(V100,0,EZ10,precision);
3680         B.UpdateVertex(V101,100,EZ10,precision);
3681
3682         //Edge Z11
3683         L = new Geom_Line(gp_Pnt(200,150,0),gp_Dir(0,0,1));
3684         B.MakeEdge(EZ11,L,precision);
3685         V110.Orientation(TopAbs_FORWARD);
3686         V111.Orientation(TopAbs_REVERSED);
3687         B.Add(EZ11,V110);
3688         B.Add(EZ11,V111);
3689         //Parameters
3690         B.UpdateVertex(V110,0,EZ11,precision);
3691         B.UpdateVertex(V111,100,EZ11,precision);
3692
3693
3694         //Circular Edges
3695         Handle (Geom_Circle) C;
3696         //Standard_Real R = 100;
3697
3698         //Edge EX01
3699         C = new Geom_Circle(gp_Ax2(gp_Pnt(100,0,100),gp_Dir(0,1,0),gp_Dir(-1,0,0)),100);
3700         B.MakeEdge(EX01,C,precision);
3701         V001.Orientation(TopAbs_FORWARD);
3702         V101.Orientation(TopAbs_REVERSED);
3703         B.Add(EX01,V001);
3704         B.Add(EX01,V101);
3705         //Parameters
3706         B.UpdateVertex(V001,0,EX01,precision);
3707         B.UpdateVertex(V101,M_PI,EX01,precision);
3708
3709         //Edge EX11
3710         C = new Geom_Circle(gp_Ax2(gp_Pnt(100,150,100),gp_Dir(0,1,0),gp_Dir(-1,0,0)),100);
3711         B.MakeEdge(EX11,C,precision);
3712         V011.Orientation(TopAbs_FORWARD);
3713         V111.Orientation(TopAbs_REVERSED);
3714         B.Add(EX11,V011);
3715         B.Add(EX11,V111);
3716         //Parameters
3717         B.UpdateVertex(V011,0,EX11,precision);
3718         B.UpdateVertex(V111,M_PI,EX11,precision);
3719
3720         //Build wire and faces
3721         //Faces normals are along the axis X,Y,Z
3722         TopoDS_Face FXMIN, FXMAX, FYMIN, FYMAX, FZMIN, FZMAX;
3723         TopoDS_Wire W;
3724         Handle (Geom_Plane) P;
3725         Handle (Geom2d_Line) L2d;
3726         Handle (Geom2d_Circle) C2d;
3727         Handle (Geom_CylindricalSurface) S;
3728
3729         //Face FXMAX
3730         P = new Geom_Plane(gp_Ax2(gp_Pnt(200,0,0),gp_Dir(1,0,0),gp_Dir(0,1,0)));
3731         B.MakeFace(FXMAX,P,precision);
3732         //the wire and the edges
3733         B.MakeWire (W);
3734
3735         EY10.Orientation(TopAbs_FORWARD);
3736         B.Add(W,EY10);
3737         //pcurve
3738         L2d = new Geom2d_Line(gp_Pnt2d(0,0),gp_Dir2d(1,0));
3739         B.UpdateEdge(EY10,L2d,FXMAX,precision);
3740
3741         EZ11.Orientation(TopAbs_FORWARD);
3742         B.Add(W,EZ11);
3743         //pcurve
3744         L2d = new Geom2d_Line(gp_Pnt2d(150,0),gp_Dir2d(0,1));
3745         B.UpdateEdge(EZ11,L2d,FXMAX,precision);
3746
3747         EY11.Orientation(TopAbs_REVERSED);
3748         B.Add(W,EY11);
3749         //pcurve
3750         L2d = new Geom2d_Line(gp_Pnt2d(0,100),gp_Dir2d(1,0));
3751         B.UpdateEdge(EY11,L2d,FXMAX,precision);
3752
3753         EZ10.Orientation(TopAbs_REVERSED);
3754         B.Add(W,EZ10);
3755         //pcurve
3756         L2d = new Geom2d_Line(gp_Pnt2d(0,0),gp_Dir2d(0,1));
3757         B.UpdateEdge(EZ10,L2d,FXMAX,precision);
3758
3759         B.Add(FXMAX,W);
3760
3761         BRepTools::Write(FXMAX,"E:\\temp\\f1.rle");
3762
3763         //Face FXMIN
3764         P = new Geom_Plane(gp_Ax2(gp_Pnt(0,0,0),gp_Dir(-1,0,0),gp_Dir(0,0,1)));
3765         B.MakeFace(FXMIN,P,precision);
3766         //the wire and the edges
3767         B.MakeWire (W);
3768
3769         EZ00.Orientation(TopAbs_FORWARD);
3770         B.Add(W,EZ00);
3771         //pcurve
3772         L2d = new Geom2d_Line(gp_Pnt2d(0,0),gp_Dir2d(1,0));
3773         B.UpdateEdge(EZ00,L2d,FXMIN,precision);
3774
3775         EY01.Orientation(TopAbs_FORWARD);
3776         B.Add(W,EY01);
3777         //pcurve
3778         L2d = new Geom2d_Line(gp_Pnt2d(100,0),gp_Dir2d(0,1));
3779         B.UpdateEdge(EY01,L2d,FXMIN,precision);
3780
3781         EZ01.Orientation(TopAbs_REVERSED);
3782         B.Add(W,EZ01);
3783         //pcurve
3784         L2d = new Geom2d_Line(gp_Pnt2d(0,150),gp_Dir2d(1,0));
3785         B.UpdateEdge(EZ01,L2d,FXMIN,precision);
3786
3787         EY00.Orientation(TopAbs_REVERSED);
3788         B.Add(W,EY00);
3789         //pcurve
3790         L2d = new Geom2d_Line(gp_Pnt2d(0,0),gp_Dir2d(0,1));
3791         B.UpdateEdge(EY00,L2d,FXMIN,precision);
3792
3793
3794         B.Add(FXMIN,W);
3795         
3796         //Face FYMAX
3797
3798         P = new Geom_Plane(gp_Ax2(gp_Pnt(0,0,0),gp_Dir(0,1,0),gp_Dir(0,0,1)));
3799         B.MakeFace(FYMAX,P,precision);
3800         //the wire and the edges
3801         B.MakeWire (W);
3802
3803         EZ00.Orientation(TopAbs_FORWARD);
3804         B.Add(W,EZ00);
3805         //pcurve
3806         L2d = new Geom2d_Line(gp_Pnt2d(0,0),gp_Dir2d(1,0));
3807         B.UpdateEdge(EZ00,L2d,FYMAX,precision);
3808
3809         EX01.Orientation(TopAbs_FORWARD);
3810         B.Add(W,EX01);
3811         //pcurve
3812         C2d = new Geom2d_Circle(gp_Ax2d(gp_Pnt2d(100,100),gp_Dir2d(0,-1)),100);
3813         B.UpdateEdge(EX01,C2d,FYMAX,precision);
3814         B.UpdateVertex(V001,0,EX01,FYMAX,precision);
3815         B.UpdateVertex(V101,M_PI,EX01,FYMAX,precision);
3816
3817         EZ10.Orientation(TopAbs_REVERSED);
3818         B.Add(W,EZ10);
3819         //pcurve
3820         L2d = new Geom2d_Line(gp_Pnt2d(0,200),gp_Dir2d(1,0));
3821         B.UpdateEdge(EZ10,L2d,FYMAX,precision);
3822
3823         EX00.Orientation(TopAbs_REVERSED);
3824         B.Add(W,EX00);
3825         //pcurve
3826         L2d = new Geom2d_Line(gp_Pnt2d(0,0),gp_Dir2d(0,1));
3827         B.UpdateEdge(EX00,L2d,FYMAX,precision);
3828
3829
3830         B.Add(FYMAX,W);
3831
3832
3833
3834         //Face FYMIN
3835         P = new Geom_Plane(gp_Ax2(gp_Pnt(0,150,0),gp_Dir(0,1,0),gp_Dir(0,0,1)));
3836         B.MakeFace(FYMIN,P,precision);
3837         //the wire and the edges
3838         B.MakeWire (W);
3839
3840         EZ01.Orientation(TopAbs_FORWARD);
3841         B.Add(W,EZ01);
3842         //pcurve
3843         L2d = new Geom2d_Line(gp_Pnt2d(0,0),gp_Dir2d(1,0));
3844         B.UpdateEdge(EZ01,L2d,FYMIN,precision);
3845
3846         EX11.Orientation(TopAbs_FORWARD);
3847         B.Add(W,EX11);
3848         //pcurve
3849         C2d = new Geom2d_Circle(gp_Ax2d(gp_Pnt2d(100,100),gp_Dir2d(0,-1)),100);
3850         B.UpdateEdge(EX11,C2d,FYMIN,precision);
3851         B.UpdateVertex(V011,0,EX11,FYMIN,precision);
3852         B.UpdateVertex(V111,M_PI,EX11,FYMIN,precision);
3853
3854         EZ11.Orientation(TopAbs_REVERSED);
3855         B.Add(W,EZ11);
3856         //pcurve
3857         L2d = new Geom2d_Line(gp_Pnt2d(0,200),gp_Dir2d(1,0));
3858         B.UpdateEdge(EZ11,L2d,FYMIN,precision);
3859
3860         EX10.Orientation(TopAbs_REVERSED);
3861         B.Add(W,EX10);
3862         //pcurve
3863         L2d = new Geom2d_Line(gp_Pnt2d(0,0),gp_Dir2d(0,1));
3864         B.UpdateEdge(EX10,L2d,FYMIN,precision);
3865
3866         B.Add(FYMIN,W);
3867
3868         //Face FZMAX
3869         P = new Geom_Plane(gp_Ax2(gp_Pnt(0,0,0),gp_Dir(0,0,-1),gp_Dir(0,1,0)));
3870         B.MakeFace(FZMAX,P,precision);