0023551: Move data models contained in samples subfolder of OCCT repository to common...
[occt.git] / samples / mfc / standard / 03_Viewer2d / src / Viewer2dDoc.cpp
1 // Viewer2dDoc.cpp : implementation of the CViewer2dDoc class
2 //
3
4 #include "stdafx.h"
5 #include "Viewer2dDoc.h"
6 #include "OCC_App.h"
7 #include "Primitive\Sample2D_Markers.h"
8 #include "Primitive\Sample2D_Face.h"
9 #include "Primitive\Sample2D_Image.h"
10
11 /////////////////////////////////////////////////////////////////////////////
12 // CViewer2dDoc
13
14 IMPLEMENT_DYNCREATE(CViewer2dDoc, CDocument)
15
16 BEGIN_MESSAGE_MAP(CViewer2dDoc, CDocument)
17         //{{AFX_MSG_MAP(CViewer2dDoc)
18         ON_COMMAND(ID_BUTTON_Test_Text, OnBUTTONTestText)
19         ON_COMMAND(ID_BUTTON_Test_Markers, OnBUTTONTestMarkers)
20         ON_COMMAND(ID_BUTTON_Test_Line, OnBUTTONTestLine)
21         ON_COMMAND(ID_BUTTON_Erase, OnBUTTONErase)
22         ON_COMMAND(ID_BUTTON_Test_Face, OnBUTTONTestFace)
23         ON_COMMAND(ID_BUTTON_Test_Rect, OnBUTTONTestRect)
24         ON_COMMAND(ID_BUTTON_Test_Curve, OnBUTTONTestCurve)
25         ON_COMMAND(ID_BUTTON32793, OnBUTTONTestImage) // test image
26         ON_COMMAND(ID_BUTTON_Test_MultiImages, OnBUTTONMultipleImage)
27
28         //}}AFX_MSG_MAP
29 END_MESSAGE_MAP()
30
31 /////////////////////////////////////////////////////////////////////////////
32 // CViewer2dDoc construction/destruction
33
34 CViewer2dDoc::CViewer2dDoc()
35 {
36 }
37
38 CViewer2dDoc::~CViewer2dDoc()
39 {
40 }
41
42 #ifdef _DEBUG
43 void CViewer2dDoc::AssertValid() const
44 {
45         CDocument::AssertValid();
46 }
47
48 void CViewer2dDoc::Dump(CDumpContext& dc) const
49 {
50         CDocument::Dump(dc);
51 }
52 #endif //_DEBUG
53
54 /////////////////////////////////////////////////////////////////////////////
55 // CViewer2dDoc commands
56
57 void CViewer2dDoc::OnBUTTONErase() 
58 {
59   myAISContext->EraseAll (Standard_True);
60 }
61
62 void CViewer2dDoc::OnBUTTONTestText() 
63 {
64   int aColor = Quantity_NOC_MATRABLUE;
65   for (Standard_Real j = 15; j <= 20; j++)
66   {
67     Handle(AIS_TextLabel) aText = new AIS_TextLabel();
68     aText->SetText (TCollection_AsciiString ("font 0 scale ") + (j / 20.0));
69     aText->SetPosition (gp_Pnt (0.0, 15.0 * (j - 15.0), 0.0));
70     aText->SetAngle (30.0 * M_PI / 180.0);
71     aText->SetColor (Quantity_NameOfColor(aColor++));
72     aText->SetFontAspect (Font_FA_Regular);
73     aText->SetFont ("Courier");
74     aText->SetHeight (j);
75     aText->SetHJustification (Graphic3d_HTA_LEFT);
76     aText->SetVJustification (Graphic3d_VTA_BOTTOM);
77     aText->SetZoomable (Standard_False);
78     myAISContext->Display(aText, Standard_False);
79   }
80
81   for (Standard_Real j = 10; j <= 15; j++)
82   {
83     Handle(AIS_TextLabel) aText = new AIS_TextLabel();
84     aText->SetText (TCollection_AsciiString ("font 1 scale ") + (j / 10.0));
85     aText->SetPosition (gp_Pnt (80.0, 15.0 * (j - 10.0), 0.0));
86     aText->SetAngle (0.0);
87     aText->SetColor (Quantity_NameOfColor(aColor++));
88     aText->SetFontAspect (Font_FA_BoldItalic);
89     aText->SetFont ("Cambria");
90     aText->SetHeight (j * 2);
91     aText->SetHJustification (Graphic3d_HTA_LEFT);
92     aText->SetVJustification (Graphic3d_VTA_BOTTOM);
93     aText->SetZoomable (Standard_False);
94     myAISContext->Display(aText, Standard_False);
95   }
96
97   aColor = Quantity_NOC_MATRABLUE;
98   for (Standard_Real j = 5; j <= 10; j++)
99   {
100     Handle(AIS_TextLabel) aText = new AIS_TextLabel();
101     aText->SetText (TCollection_AsciiString ("font 2 scale ") + (j / 10.0));
102     aText->SetPosition (gp_Pnt (140.0, 15.0 * (j - 5.0), 0.0));
103     aText->SetAngle (0.0);
104     aText->SetColor (Quantity_NameOfColor(aColor++));
105     aText->SetFontAspect (Font_FA_Bold);
106     aText->SetFont ("Arial");
107     aText->SetHeight (j * 2);
108     aText->SetHJustification (Graphic3d_HTA_LEFT);
109     aText->SetVJustification (Graphic3d_VTA_BOTTOM);
110     aText->SetZoomable (Standard_False);
111     myAISContext->Display(aText, Standard_False);
112   }
113   for (Standard_Real j = 10; j <= 15; j++)
114   {
115     Handle(AIS_TextLabel) aText = new AIS_TextLabel();
116     aText->SetText (TCollection_AsciiString ("font 3 scale ") + (j / 10.0));
117     aText->SetPosition (gp_Pnt (200.0, 15.0 * (j - 10.0), 0.0));
118     aText->SetAngle (0.0);
119     aText->SetColor (Quantity_NameOfColor(aColor++));
120     aText->SetFontAspect (Font_FA_Italic);
121     aText->SetFont ("Georgia");
122     aText->SetHeight (j * 2);
123     aText->SetHJustification (Graphic3d_HTA_LEFT);
124     aText->SetVJustification (Graphic3d_VTA_BOTTOM);
125     aText->SetZoomable (Standard_False);
126     myAISContext->Display(aText, Standard_False);
127   }
128
129   FitAll2DViews(Standard_True); // Update Viewer
130 }
131
132
133 void CViewer2dDoc::OnBUTTONTestMarkers() 
134 {
135   // generic Markers
136   Standard_Integer aColor = 20;
137   for (int i=1;i<=2;i++)
138   {
139     Handle (Sample2D_Markers) aMarker  = 
140       new Sample2D_Markers(10+5,5*i,Aspect_TOM_POINT,Quantity_NOC_YELLOW,2.0);
141     myAISContext->Display(aMarker, Standard_False);
142   }
143   for (int i=1;i<=2;i++)
144   {
145     Handle (Sample2D_Markers) aMarker  = 
146       new Sample2D_Markers(10+10,5*i,Aspect_TOM_O,(Quantity_NameOfColor)(aColor++));
147     myAISContext->Display(aMarker, Standard_False);
148   }
149   for (int i=1;i<=2;i++)
150   {
151     Handle (Sample2D_Markers) aMarker  = 
152       new Sample2D_Markers(10+15,5*i,Aspect_TOM_O_PLUS,(Quantity_NameOfColor)(aColor++));
153     myAISContext->Display(aMarker, Standard_False);
154   }
155   for (int i=1;i<=2;i++)
156   {
157     Handle (Sample2D_Markers) aMarker  = 
158       new Sample2D_Markers(10+20,5*i,Aspect_TOM_RING1,(Quantity_NameOfColor)(aColor++));
159     myAISContext->Display(aMarker, Standard_False);
160   }
161   for (int i=1;i<=2;i++)
162   {
163
164     Handle (Sample2D_Markers) aMarker  = 
165       new Sample2D_Markers(10+25,5*i,Aspect_TOM_STAR,(Quantity_NameOfColor)(aColor++));
166     myAISContext->Display(aMarker, Standard_False);
167   }
168   for (int i=1;i<=2;i++)
169   {
170     Handle (Sample2D_Markers) aMarker  = 
171       new Sample2D_Markers(10+30,5*i,Aspect_TOM_O_X,(Quantity_NameOfColor)(aColor++));
172     myAISContext->Display(aMarker, Standard_False);
173   }
174
175   FitAll2DViews(Standard_False); // Update Viewer
176 }
177 void CViewer2dDoc::OnBUTTONTestLine() 
178 {
179   for (int i=0;i<=13;++i)
180    for (int j=0;j<=5;++j)
181    {
182       //set of rectangles here
183       TopoDS_Edge E1 = BRepBuilderAPI_MakeEdge(gp_Pnt(10*i,10*j,0.), gp_Pnt(10*i+7,10*j,0.));
184       TopoDS_Edge E2 = BRepBuilderAPI_MakeEdge(gp_Pnt(10*i+7,10*j,0.), gp_Pnt(10*i+7,10*j+5,0.));
185       TopoDS_Edge E3 = BRepBuilderAPI_MakeEdge(gp_Pnt(10*i+7,10*j+5,0.), gp_Pnt(10*i,10*j+5,0.));
186       TopoDS_Edge E4 = BRepBuilderAPI_MakeEdge(gp_Pnt(10*i,10*j+5,0.), gp_Pnt(10*i,10*j,0.));
187       TopoDS_Wire W = BRepBuilderAPI_MakeWire(E1,E2,E3,E4);
188       TopoDS_Face F = BRepBuilderAPI_MakeFace(W);
189       Handle(AIS_Shape) aRect = new AIS_Shape(F);
190       //set attributes of boundaries
191       Handle(Prs3d_Drawer) aDrawer = new Prs3d_Drawer();
192       Handle(Prs3d_LineAspect) aLineAttrib = 
193         new Prs3d_LineAspect(Quantity_NOC_YELLOW,
194         (Aspect_TypeOfLine)(Aspect_TOL_SOLID+j),1);
195       aDrawer->SetFaceBoundaryAspect(aLineAttrib);
196       aDrawer->SetFaceBoundaryDraw(Standard_True);
197       aRect->SetAttributes(aDrawer);
198       
199       myAISContext->SetDisplayMode (aRect, 1, Standard_False);
200       myAISContext->SetColor(aRect,(Quantity_NameOfColor)(Quantity_NOC_CADETBLUE+2*i),Standard_False);
201             myAISContext->SetMaterial(aRect,Graphic3d_NOM_PLASTIC,Standard_False);
202       myAISContext->Display(aRect, Standard_False);
203
204    }
205    this->FitAll2DViews(Standard_True);
206 }
207
208
209 #include <AIS_Trihedron.hxx>
210 #include <Geom_Axis2Placement.hxx>
211
212 void CViewer2dDoc::OnBUTTONTestFace()
213 {
214   //erase all
215   myAISContext->EraseAll (Standard_True);
216
217   CFileDialog dlg(TRUE,
218     NULL,
219     NULL,
220     OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
221     L"BRep Files (*.brep)|*.brep; ||",
222     NULL );
223
224   CString initdir;
225   initdir.GetEnvironmentVariable (L"CSF_OCCTDataPath");
226   initdir += L"\\occ";
227
228   dlg.m_ofn.lpstrInitialDir = initdir;
229
230   if (dlg.DoModal() == IDOK) 
231   {
232     SetCursor(AfxGetApp()->LoadStandardCursor(IDC_WAIT));
233
234     std::filebuf aFileBuf;
235     std::istream aStream (&aFileBuf);
236     if (!aFileBuf.open (dlg.GetPathName(), ios::in))
237     {
238       AfxMessageBox (L"The shape must be not a null Face");
239       return;
240     }
241
242     TopoDS_Shape aFaceShape;
243     BRep_Builder aBuilder;
244     BRepTools::Read (aFaceShape, aStream, aBuilder);
245     if(aFaceShape.IsNull() || aFaceShape.ShapeType() != TopAbs_FACE) 
246     {
247       AfxMessageBox (L"The shape must be not a null Face");
248       return;
249     }
250
251     TopoDS_Face aFace = TopoDS::Face(aFaceShape);
252     Handle(Sample2D_Face) anAISFace = new Sample2D_Face(aFaceShape);
253     myAISContext->Display(anAISFace,Standard_True);
254     //activate selection mode for edges selection
255     myAISContext->Activate(anAISFace,2);
256
257     FitAll2DViews(Standard_False);
258
259   }
260 }
261
262
263
264 void CViewer2dDoc::OnBUTTONTestRect()
265 {
266   //First rectangle
267   TopoDS_Edge E11 = BRepBuilderAPI_MakeEdge(gp_Pnt(40.,0.,0.), gp_Pnt(82.5,25.,0.));
268         TopoDS_Edge E12 = BRepBuilderAPI_MakeEdge(gp_Pnt(82.5,25.,0.), gp_Pnt(42.5,93.,0.));
269         TopoDS_Edge E13 = BRepBuilderAPI_MakeEdge(gp_Pnt(42.5,93.,0.), gp_Pnt(0.,68.,0.));
270   TopoDS_Edge E14 = BRepBuilderAPI_MakeEdge(gp_Pnt(0.,68.,0.), gp_Pnt(40.,0.,0.));
271         TopoDS_Wire W1 = BRepBuilderAPI_MakeWire(E11,E12,E13,E14);
272   Handle(AIS_Shape) aRect1 = new AIS_Shape(W1); 
273   myAISContext->Display (aRect1, Standard_False);
274   myAISContext->SetColor (aRect1, Quantity_NOC_YELLOW, Standard_False);
275   
276   //Second rectangle
277   TopoDS_Edge E21 = BRepBuilderAPI_MakeEdge(gp_Pnt(110.,0.,0.), gp_Pnt(152.5,25.,0.));
278         TopoDS_Edge E22 = BRepBuilderAPI_MakeEdge(gp_Pnt(152.5,25.,0.), gp_Pnt(112.5,93.,0.));
279         TopoDS_Edge E23 = BRepBuilderAPI_MakeEdge(gp_Pnt(112.5,93.,0.), gp_Pnt(70.,68.,0.));
280   TopoDS_Edge E24 = BRepBuilderAPI_MakeEdge(gp_Pnt(70.,68.,0.), gp_Pnt(110.,0.,0.));
281         TopoDS_Wire W2 = BRepBuilderAPI_MakeWire(E21,E22,E23,E24);
282   Handle(AIS_Shape) aRect2 = new AIS_Shape(W2); 
283   myAISContext->Display (aRect2, Standard_False);
284   myAISContext->SetColor (aRect2, Quantity_NOC_YELLOW, Standard_False);
285   myAISContext->Activate(aRect2,2);
286
287   FitAll2DViews(Standard_True); // Update Viewer
288 }
289
290 void CViewer2dDoc::OnBUTTONTestCurve()
291 {
292   for(int i=0;i<=5;++i)
293     for(int j=0;j<=5;++j)
294     {
295       Handle(Geom_Point) aStart = new Geom_CartesianPoint(gp_Pnt(10*i,10*j,0.));
296       Handle(Geom_Point) anEnd = new Geom_CartesianPoint(gp_Pnt(10*i+5,10*j+10,0.));
297       Handle(AIS_Line) aLine = new AIS_Line(aStart,anEnd);
298       Handle(Prs3d_LineAspect) aLineAttrib = 
299         new Prs3d_LineAspect((Quantity_NameOfColor)(Quantity_NOC_CADETBLUE+2*i+2*j),
300         (Aspect_TypeOfLine)((Aspect_TOL_DASH+i+j)%5),2+i+j);
301       aLine->Attributes()->SetLineAspect(aLineAttrib);
302       myAISContext->Display(aLine,Standard_False);   
303     }
304    FitAll2DViews(Standard_True);
305 }
306
307 void CViewer2dDoc::OnBUTTONTestImage()
308 {
309   CFileDialog anOpenImageDlg (TRUE,
310                               NULL,
311                               NULL,
312                               OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
313                               SupportedImageFormats() + L"| all files (*.*)|*.*;||",
314                               NULL);
315
316   CString anInitDir;
317   anInitDir.GetEnvironmentVariable (L"CASROOT");
318   anInitDir += L"\\data\\images";
319
320   anOpenImageDlg.m_ofn.lpstrInitialDir = anInitDir;
321   if(anOpenImageDlg.DoModal() == IDOK)
322   {
323     SetCursor(AfxGetApp()->LoadStandardCursor (IDC_WAIT));
324     CString aFilePath = anOpenImageDlg.GetPathName();
325     TCollection_AsciiString aFileName ((const wchar_t* )aFilePath);
326
327     //erase viewer
328     myAISContext->EraseAll (Standard_False);
329
330     Handle(Sample2D_Image) anImage = new Sample2D_Image (aFileName);
331     anImage->SetCoord (40,50) ;
332     anImage->SetScale (1.0);
333     myAISContext->Display (anImage, Standard_False);
334     myAISContext->SetDisplayMode (anImage,3,Standard_False);
335     FitAll2DViews (Standard_True);
336   }
337 }
338
339 void CViewer2dDoc::OnBUTTONMultipleImage()
340 {
341   CFileDialog anOpenImageDlg (TRUE,
342                               NULL,
343                               NULL,
344                               OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
345                               SupportedImageFormats() + L"| all files (*.*)|*.*;||",
346                               NULL);
347
348   CString anInitDir;
349   anInitDir.GetEnvironmentVariable (L"CASROOT");
350   anInitDir += L"\\data\\images";
351
352   anOpenImageDlg.m_ofn.lpstrInitialDir = anInitDir;
353
354   if (anOpenImageDlg.DoModal() == IDOK) 
355   {
356     SetCursor(AfxGetApp()->LoadStandardCursor (IDC_WAIT));
357     CString aFilePath = anOpenImageDlg.GetPathName();
358     TCollection_AsciiString aFileName ((const wchar_t* )aFilePath);
359
360     //erase viewer
361     myAISContext->EraseAll (Standard_False);
362
363     //create images
364     {  // 1
365     Handle(Sample2D_Image) anImage = new Sample2D_Image (aFileName);
366     anImage->SetCoord (40, 50);
367     anImage->SetScale (0.5);
368     myAISContext->Display (anImage, Standard_False);
369     myAISContext->SetDisplayMode (anImage, 3, Standard_False);
370     }
371     {  // 2
372     Handle(Sample2D_Image) anImage = new Sample2D_Image (aFileName);
373     anImage->SetCoord (100, 50);
374     anImage->SetScale (0.9);
375     myAISContext->Display (anImage, Standard_False);
376     myAISContext->SetDisplayMode (anImage, 3, Standard_False);
377     }
378     {  // 3
379     Handle(Sample2D_Image) anImage = new Sample2D_Image (aFileName);
380     anImage->SetCoord (40, 40);
381     anImage->SetScale (0.3);
382     myAISContext->Display (anImage, Standard_False);
383     myAISContext->SetDisplayMode (anImage, 3, Standard_False);
384     }
385     {  // 4
386     Handle(Sample2D_Image) anImage = new Sample2D_Image (aFileName);
387     anImage->SetCoord (50, 40);
388     myAISContext->Display (anImage, Standard_False);
389     myAISContext->SetDisplayMode (anImage, 3, Standard_False);
390     }
391     {  // 5
392     Handle(Sample2D_Image) anImage = new Sample2D_Image (aFileName);
393     anImage->SetCoord (80, 45);
394     anImage->SetScale (2);
395     myAISContext->Display (anImage, Standard_False);
396     myAISContext->SetDisplayMode (anImage, 3, Standard_False);
397     }
398     {  // 6
399     Handle(Sample2D_Image) anImage = new Sample2D_Image (aFileName);
400     anImage->SetCoord (20, -20);
401     myAISContext->Display (anImage, Standard_False);
402     myAISContext->SetDisplayMode (anImage, 3, Standard_False);
403     }
404     {  // 7
405     Handle(Sample2D_Image) anImage = new Sample2D_Image (aFileName);
406     anImage->SetCoord (0, 0);
407     anImage->SetScale (0.5);
408     myAISContext->Display (anImage, Standard_False);
409     myAISContext->SetDisplayMode (anImage, 3, Standard_False);
410     }
411     FitAll2DViews (Standard_True); // Update Viewer
412   }
413 }