Integration of OCCT 6.5.0 from SVN
[occt.git] / samples / mfc / standard / 05_ImportExport / src / ImportExportDoc.cpp
CommitLineData
7fd59977 1// ImportExportDoc.cpp : implementation of the CImportExportDoc class
2//
3
4
5#include "stdafx.h"
6#include "ImportExportApp.h"
7
8#include "ImportExportDoc.h"
9
10#include <ImportExport/ImportExport.h>
11
12#include <AISDialogs.h>
13#include "res/resource.h"
14
15
16#ifdef _DEBUG
17//#define new DEBUG_NEW // by cascade
18#undef THIS_FILE
19static char THIS_FILE[] = __FILE__;
20#endif
21
22/////////////////////////////////////////////////////////////////////////////
23// CImportExportDoc
24
25IMPLEMENT_DYNCREATE(CImportExportDoc, CDocument)
26
27BEGIN_MESSAGE_MAP(CImportExportDoc, OCC_3dBaseDoc)
28 //{{AFX_MSG_MAP(CImportExportDoc)
29 ON_COMMAND(ID_FILE_IMPORT_BREP, OnFileImportBrep)
30 ON_COMMAND(ID_FILE_IMPORT_CSFDB, OnFileImportCSFDB)
31 ON_COMMAND(ID_FILE_EXPORT_CSFDB, OnFileExportCSFDB)
32 ON_COMMAND(ID_FILE_IMPORT_IGES, OnFileImportIges)
33 ON_COMMAND(ID_FILE_EXPORT_IGES, OnFileExportIges)
34 ON_COMMAND(ID_FILE_IMPORT_STEP, OnFileImportStep)
35 ON_COMMAND(ID_FILE_EXPORT_STEP, OnFileExportStep)
36 ON_COMMAND(ID_FILE_EXPORT_VRML, OnFileExportVrml)
37 ON_COMMAND(ID_FILE_EXPORT_STL, OnFileExportStl)
38 ON_COMMAND(ID_BOX, OnBox)
39 ON_COMMAND(ID_Cylinder, OnCylinder)
40 //}}AFX_MSG_MAP
41
42END_MESSAGE_MAP()
43
44/////////////////////////////////////////////////////////////////////////////
45// CImportExportDoc construction/destruction
46
47CImportExportDoc::CImportExportDoc()
48{
49 /*
50 Handle(Graphic3d_WNTGraphicDevice) theGraphicDevice =
51 ((CImportExportApp*)AfxGetApp())->GetGraphicDevice();
52
53 TCollection_ExtendedString a3DName("Visu3D");
54 myViewer = new V3d_Viewer(theGraphicDevice,a3DName.ToExtString(),"", 1000.0,
55 V3d_XposYnegZpos, Quantity_NOC_GRAY30,
56 V3d_ZBUFFER,V3d_GOURAUD,V3d_WAIT,
57 Standard_True, Standard_False);
58
59 myViewer->SetDefaultLights();
60 myViewer->SetLightOn();
61
62 myAISContext =new AIS_InteractiveContext(myViewer);
63
64 */
65/*
66 // TRIHEDRON
67 Handle(AIS_Trihedron) aTrihedron;
68 Handle(Geom_Axis2Placement) aTrihedronAxis=new Geom_Axis2Placement(gp::XOY());
69 aTrihedron=new AIS_Trihedron(aTrihedronAxis);
70 myAISContext->Display(aTrihedron);
71*/
72
73 m_pcoloredshapeList = new CColoredShapes();
74}
75
76CImportExportDoc::~CImportExportDoc()
77{
78 if( m_pcoloredshapeList ) delete m_pcoloredshapeList;
79}
80
81
82/////////////////////////////////////////////////////////////////////////////
83// CSerializeDoc serialization
84
85void CImportExportDoc::Serialize(CArchive& ar)
86{
87 if (ar.IsStoring())
88 {
89 // Put the curent CColoredShape in the archive
90 ar << m_pcoloredshapeList;
91 }
92 else
93 {
94 // Read from the archive the current CColoredShape
95 ar >> m_pcoloredshapeList;
96
97 // Display the new object
98 m_pcoloredshapeList->Display(myAISContext);
99 }
100}
101
102
103/*
104void CImportExportDoc::OnWindowNew3d()
105{
106 ((CImportExportApp*)AfxGetApp())->CreateView3D(this);
107}
108*/
109
110// nCmdShow could be : ( default is SW_RESTORE )
111// SW_HIDE SW_SHOWNORMAL SW_NORMAL
112// SW_SHOWMINIMIZED SW_SHOWMAXIMIZED
113// SW_MAXIMIZE SW_SHOWNOACTIVATE
114// SW_SHOW SW_MINIMIZE
115// SW_SHOWMINNOACTIVE SW_SHOWNA
116// SW_RESTORE SW_SHOWDEFAULT
117// SW_MAX
118
119// use pViewClass = RUNTIME_CLASS( CImportExportView3D ) for 3D Views
120
121void CImportExportDoc::ActivateFrame(CRuntimeClass* pViewClass,int nCmdShow)
122{
123 POSITION position = GetFirstViewPosition();
124 while (position != (POSITION)NULL)
125 {
126 CView* pCurrentView = (CView*)GetNextView(position);
127 if(pCurrentView->IsKindOf(pViewClass) )
128 {
129 ASSERT_VALID(pCurrentView);
130 CFrameWnd* pParentFrm = pCurrentView->GetParentFrame();
131 ASSERT(pParentFrm != (CFrameWnd *)NULL);
132 // simply make the frame window visible
133 pParentFrm->ActivateFrame(nCmdShow);
134 }
135 }
136
137}
138
139/////////////////////////////////////////////////////////////////////////////
140// CImportExportDoc diagnostics
141
142#ifdef _DEBUG
143void CImportExportDoc::AssertValid() const
144{
145 CDocument::AssertValid();
146}
147
148void CImportExportDoc::Dump(CDumpContext& dc) const
149{
150 CDocument::Dump(dc);
151}
152#endif //_DEBUG
153
154/////////////////////////////////////////////////////////////////////////////
155// CImportExportDoc commands
156
157
158void CImportExportDoc::OnFileImportBrep()
159{
160 Handle(TopTools_HSequenceOfShape) aSeqOfShape = CImportExport::ReadBREP();
161 for(int i=1;i<= aSeqOfShape->Length();i++)
162 {
163 m_pcoloredshapeList->Add(Quantity_NOC_YELLOW, aSeqOfShape->Value(i));
164 m_pcoloredshapeList->Display(myAISContext);
165 }
166 Fit();
167}
168
169void CImportExportDoc::OnFileImportCSFDB()
170{
171 Handle(TopTools_HSequenceOfShape) aSeqOfShape = CImportExport::ReadCSFDB();
172 for(int i=1;i<= aSeqOfShape->Length();i++)
173 {
174 m_pcoloredshapeList->Add(Quantity_NOC_YELLOW, aSeqOfShape->Value(i));
175 m_pcoloredshapeList->Display(myAISContext);
176 }
177 Fit();
178}
179void CImportExportDoc::OnFileExportCSFDB()
180{ CImportExport::SaveCSFDB(myAISContext);}
181
182void CImportExportDoc::OnFileImportIges()
183{
184 Handle(TopTools_HSequenceOfShape) aSeqOfShape = CImportExport::ReadIGES();
185 for(int i=1;i<= aSeqOfShape->Length();i++)
186 {
187 m_pcoloredshapeList->Add(Quantity_NOC_YELLOW, aSeqOfShape->Value(i));
188 m_pcoloredshapeList->Display(myAISContext);
189 }
190 Fit();
191}
192void CImportExportDoc::OnFileExportIges()
193{ CImportExport::SaveIGES(myAISContext);}
194
195void CImportExportDoc::OnFileImportStep()
196{
197 Handle(TopTools_HSequenceOfShape) aSeqOfShape = CImportExport::ReadSTEP();
198 for(int i=1;i<= aSeqOfShape->Length();i++)
199 {
200 m_pcoloredshapeList->Add(Quantity_NOC_YELLOW, aSeqOfShape->Value(i));
201 m_pcoloredshapeList->Display(myAISContext);
202 }
203 Fit();
204}
205void CImportExportDoc::OnFileExportStep()
206{ CImportExport::SaveSTEP(myAISContext);}
207
208
209void CImportExportDoc::OnFileExportVrml()
210{ CImportExport::SaveVRML(myAISContext);}
211
212void CImportExportDoc::OnFileExportStl()
213{ CImportExport::SaveSTL(myAISContext);}
214
215void CImportExportDoc::Popup(const Standard_Integer x,
216 const Standard_Integer y ,
217 const Handle(V3d_View)& aView )
218{
219 Standard_Integer PopupMenuNumber=0;
220 myAISContext->InitCurrent();
221 if (myAISContext->MoreCurrent())
222 PopupMenuNumber=1;
223
224 CMenu menu;
225 VERIFY(menu.LoadMenu(IDR_Popup3D));
226 CMenu* pPopup = menu.GetSubMenu(PopupMenuNumber);
227
228 ASSERT(pPopup != NULL);
229 if (PopupMenuNumber == 1) // more than 1 object.
230 {
231 bool OneOrMoreInShading = false;
232 for (myAISContext->InitCurrent();myAISContext->MoreCurrent ();myAISContext->NextCurrent ())
233 if (myAISContext->IsDisplayed(myAISContext->Current(),1)) OneOrMoreInShading=true;
234 if(!OneOrMoreInShading)
235 pPopup->EnableMenuItem(5, MF_BYPOSITION | MF_DISABLED | MF_GRAYED);
236 }
237
238 POINT winCoord = { x , y };
239 Handle(WNT_Window) aWNTWindow=
240 Handle(WNT_Window)::DownCast(aView->Window());
241 ClientToScreen ( (HWND)(aWNTWindow->HWindow()),&winCoord);
242 pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON , winCoord.x, winCoord.y ,
243 AfxGetMainWnd());
244
245
246}
247
248void CImportExportDoc::OnBox()
249{
250 AIS_ListOfInteractive aList;
251 myAISContext->DisplayedObjects(aList);
252 AIS_ListIteratorOfListOfInteractive aListIterator;
253 for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
254 myAISContext->Remove(aListIterator.Value());
255 }
256
257 BRepPrimAPI_MakeBox B(200.,150.,100.);
258
259 m_pcoloredshapeList->Add(Quantity_NOC_YELLOW, B.Shape());
260
261 m_pcoloredshapeList->Display(myAISContext);
262 Fit();
263
264 // document has been modified
265 SetModifiedFlag(TRUE);
266}
267
268void CImportExportDoc::OnCylinder()
269{
270 AIS_ListOfInteractive aList;
271 myAISContext->DisplayedObjects(aList);
272 AIS_ListIteratorOfListOfInteractive aListIterator;
273 for(aListIterator.Initialize(aList);aListIterator.More();aListIterator.Next()){
274 myAISContext->Remove(aListIterator.Value());
275 }
276
277 BRepPrimAPI_MakeCylinder C(50.,200.);
278
279 m_pcoloredshapeList->Add(Quantity_NOC_GREEN, C.Shape());
280
281 m_pcoloredshapeList->Display(myAISContext);
282 Fit();
283
284 // document has been modified
285 SetModifiedFlag(TRUE);
286}