1 // Copyright (C) 2009-2013 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #ifndef _HEXABLOCKGUI_HXX_
21 #define _HEXABLOCKGUI_HXX_
28 #include <QModelIndex>
29 #include <QDockWidget>
32 #include "klinkitemselectionmodel.hxx"
34 #include <OB_Browser.h>
35 #include <SalomeApp_Module.h>
36 #include <SalomeApp_DataObject.h>
38 #include <LightApp_SelectionMgr.h>
39 #include <LightApp_DataModel.h>
41 #include <SALOMEconfig.h>
43 #include "HEXABLOCKGUI_Resource.hxx"
44 #include "HEXABLOCKGUI_OCCSelector.h"
45 #include "hexa_base.hxx"
48 // #include CORBA_CLIENT_HEADER(HEXABLOCK_Gen) // Abu Juin 2013
54 class VtkDocumentGraphicView;
56 class GraphicViewsHandler;
57 class DocumentDelegate;
59 class PatternDataModel;
60 class PatternBuilderModel;
61 class AssociationsModel;
64 class PatternDataSelectionModel;
65 class PatternBuilderSelectionModel;
66 class GroupsSelectionModel;
67 class MeshSelectionModel;
78 class MakeCylinderDialog;
80 class MakeCylindersDialog;
81 class MakePipesDialog;
82 class RemoveHexaDialog;
83 class PrismQuadDialog;
86 class DisconnectDialog;
88 class MakeTransformationDialog;
89 class MakeSymmetryDialog;
90 class PerformTransformationDialog;
91 class PerformSymmetryDialog;
92 typedef class MyBasicGUI_PointDlg VertexAssocDialog;
93 class EdgeAssocDialog;
94 class QuadAssocDialog;
97 class PropagationDialog;
98 class ComputeMeshDialog;
99 class ReplaceHexaDialog;
100 class QuadRevolutionDialog;
101 class MakeHemiSphereDialog;
102 class ModelInfoDialog;
103 class AddShapeDialog;
107 class HEXABLOCKGUI_Resource;//SUIT_ResourceMgr;
108 class SalomeApp_Study;
109 class SalomeApp_Application;
110 class SUIT_ViewWindow;
111 class SVTK_ViewWindow;
112 class OCCViewer_ViewWindow;
113 class LightApp_VTKSelector;
116 class HEXABLOCKGUI : public SalomeApp_Module
120 friend class HEXABLOCKGUI_Resource;
124 virtual ~HEXABLOCKGUI();
132 static SalomeApp_Study* activeStudy();
134 // static HEXABLOCK_ORB::HEXABLOCK_Gen_ptr InitHEXABLOCKGen( SalomeApp_Application* );
135 static LightApp_SelectionMgr* selectionMgr();
136 static SALOMEDS::Study_var ClientStudyToStudy (_PTR(Study) theStudy);
137 static ViewType getActiveViewType();
138 static HEXABLOCKGUI* getInstance();
140 //add an object in the study
141 void addInStudy(QMap<QString, TopoDS_Shape>& topo_shapes,
142 QMap<QString, QString>& docShapesEntry,
143 QMap<QString, QString>& docShapesName);
145 static HEXABLOCK::GUI::VtkDocumentGraphicView* currentDocGView;
146 static HEXABLOCK::GUI::OccGraphicView* currentOccGView;
147 static bool assocInProgress;
148 static SalomeApp_Application* myApplication;
150 virtual void initialize( CAM_Application* app);
152 virtual bool renameAllowed( const QString& ) const;
153 virtual bool renameObject( const QString& entry, const QString& name);
154 virtual void windows( QMap<int, int>& theMap) const;
155 virtual QString engineIOR() const;
157 virtual void viewManagers(QStringList& list) const;
158 virtual void setResource(SUIT_ResourceMgr* r);
159 virtual void createPreferences();
160 virtual void preferencesChanged( const QString& sect, const QString& name );
161 virtual void studyActivated();
163 ///Returns a new HEXA_NS::Document and it's entry in the study
164 std::pair <QString, HEXA_NS::Document*> newHexaDocument();
166 //------------------------------------
167 void createAndFillDockWidget();
168 void createActions();
174 void updateSelectors();
176 void switchModel(HEXABLOCK::GUI::VtkDocumentGraphicView* dgview);
177 void switchOnGraphicView(HEXABLOCK::GUI::VtkDocumentGraphicView* dgview);
178 void switchOffGraphicView(HEXABLOCK::GUI::VtkDocumentGraphicView* dgview,
179 bool saveCurrentDlg = true);
180 void showDockWidgets(bool isVisible);
182 HEXABLOCK::GUI::VtkDocumentGraphicView* getCurrentVtkGraphicView() const { return currentDocGView; }
183 HEXABLOCK::GUI::VtkDocumentGraphicView* getOrCreateDocument(SalomeApp_DataObject* studyObject);
184 HEXABLOCK::GUI::VtkDocumentGraphicView* getDocGViewByEntry(const QString& entry) const
186 return ( (docs.contains(entry) ? docs[entry] : NULL ) );
188 HEXABLOCK::GUI::DocumentModel* getCurrentModel();
189 HEXABLOCK::GUI::HexaBaseDialog* getDlgBox(HEXABLOCK::GUI::VtkDocumentGraphicView* view);
190 QTreeView* getPatternDataTreeView() const { return _patternDataTreeView; }
191 QTreeView* getPatternGeomTreeView() const { return _patternGeomTreeView; }
194 bool deactivateModule( SUIT_Study* theStudy);
195 bool activateModule( SUIT_Study* theStudy);
196 void onObjectBrowserClick(const QModelIndex& index);
198 void showDocumentMenus(bool show);
199 void showPatternMenus(bool show);
200 void showAssociationMenus(bool show);
201 void showGroupsMenus(bool show);
202 void showMeshMenus(bool show);
205 void onWindowActivated( SUIT_ViewWindow* svw);
206 void onWindowClosed( SUIT_ViewWindow* svw);
208 virtual void onViewManagerAdded( SUIT_ViewManager* );
209 virtual void onViewManagerRemoved( SUIT_ViewManager* );
211 void onSelectionChanged( const QItemSelection & selected, const QItemSelection & deselected );
214 void showOnlyActor();
217 bool createSComponent();
218 virtual bool eventFilter(QObject *obj, QEvent *event);
220 void _showDialogBox( HEXABLOCK::GUI::HexaBaseDialog* diag );
221 HEXABLOCK::GUI::HexaBaseDialog* currentDialog;
223 SOCC_Prs* lastOccPrs;
224 HEXABLOCK::GUI::VtkDocumentGraphicView* lastVtkDocGView;
226 HEXABLOCKGUI_Resource* _myresource;
227 static int _oldStudyId;
228 // static HEXABLOCK_ORB::HEXABLOCK_Gen_var _hexaEngine; // Hexa6 TODo
231 void slot_modelChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
233 void treeContextMenu(const QPoint& aPosition);
235 void test_association();
239 void loadDocument( const QString &path = QString() );
254 void makeCylinders();
257 void makeHemiSphere(); // NEW HEXA3
263 void disconnectElts();
265 void makeTransformation();
267 void performTransformation();
268 void performSymmetry();
270 void replaceHexa(); // NEW HEXA3
271 void quadRevolution(); // NEW HEXA3
279 void removeGroup (); //CS_TODO
282 void setPropagation();
285 //show the current model's information (nb vertex, edge, ... and more)
286 void showModelInfo();
288 //associate a shape to a document
291 //Clears associations of a single element (VERTEX, EDGE, QUAD, ...)
292 void clearAssociations();
294 //Clears associations under a tree (VERTEX_TREE, EDGE_TREE, ...)
295 void clearAllAssociations();
297 void showAssociations();
301 QList<HEXABLOCKGUI_OCCSelector*> myOCCSelectors;
302 QList<LightApp_VTKSelector*> myVTKSelectors;
305 QStringList getQuickDirList();
308 SOCC_Prs* getOccPrs(HEXABLOCK::GUI::VtkDocumentGraphicView* docGView)
310 if (docGView == NULL)
312 if (!occPrs.contains(docGView))
313 occPrs[docGView] = new SOCC_Prs();
314 return occPrs[docGView];
317 // -------------------------------------------------------------------------------------------------
318 // MainWindow presentation
319 // -------------------------------------------------------------------------------------------------
320 QDockWidget *_dwPattern; // Hexablock model edition
321 QDockWidget *_dwAssociation; // Hexablock association edition
322 QDockWidget *_dwGroups; // Hexablock groups edition
323 QDockWidget *_dwMesh; // Hexablock meshing edtion
324 QDockWidget *_dwObjectBrowser; // Salome study
325 QDockWidget *_dwInputPanel; // user Input
328 // Dialog Box ( to keep persistent values )
329 HEXABLOCK::GUI::VertexDialog* _vertexDiag;
330 HEXABLOCK::GUI::EdgeDialog* _edgeDiag;
331 HEXABLOCK::GUI::QuadDialog* _quadDiag;
332 HEXABLOCK::GUI::HexaDialog* _hexaDiag;
333 HEXABLOCK::GUI::VectorDialog* _vectorDiag;
334 HEXABLOCK::GUI::CylinderDialog* _cylinderDiag;
335 HEXABLOCK::GUI::PipeDialog* _pipeDiag;
336 HEXABLOCK::GUI::MakeGridDialog* _makeGridDiag;
337 HEXABLOCK::GUI::MakeCylinderDialog* _makeCylinderDiag;
338 HEXABLOCK::GUI::MakePipeDialog* _makePipeDiag;
339 HEXABLOCK::GUI::MakeCylindersDialog* _makeCylindersDiag;
340 HEXABLOCK::GUI::MakePipesDialog* _makePipesDiag;
341 HEXABLOCK::GUI::RemoveHexaDialog* _removeHexaDiag;
342 HEXABLOCK::GUI::PrismQuadDialog* _prismQuadDiag;
343 HEXABLOCK::GUI::JoinQuadDialog* _joinQuadDiag;
344 HEXABLOCK::GUI::MergeDialog* _mergeDiag;
345 HEXABLOCK::GUI::DisconnectDialog* _disconnectDiag;
346 HEXABLOCK::GUI::CutEdgeDialog* _cutEdgeDiag;
347 HEXABLOCK::GUI::MakeTransformationDialog* _makeTransformationDiag;
348 HEXABLOCK::GUI::MakeSymmetryDialog* _makeSymmetryDiag;
349 HEXABLOCK::GUI::PerformTransformationDialog* _performTransformationDiag;
350 HEXABLOCK::GUI::PerformSymmetryDialog* _performSymmetryDiag;
351 HEXABLOCK::GUI::VertexAssocDialog* _vertexAssocDiag;
352 HEXABLOCK::GUI::EdgeAssocDialog* _edgeAssocDiag;
353 HEXABLOCK::GUI::QuadAssocDialog* _quadAssocDiag;
354 HEXABLOCK::GUI::GroupDialog* _groupDiag;
355 HEXABLOCK::GUI::LawDialog* _lawDiag;
356 HEXABLOCK::GUI::PropagationDialog* _propagationDiag;
357 HEXABLOCK::GUI::ComputeMeshDialog* _computeMeshDiag;
358 HEXABLOCK::GUI::ReplaceHexaDialog* _replaceHexaDiag;
359 HEXABLOCK::GUI::QuadRevolutionDialog* _quadRevolutionDiag;
360 HEXABLOCK::GUI::MakeHemiSphereDialog* _makeHemiSphereDiag;
361 HEXABLOCK::GUI::ModelInfoDialog* _modelInfoDiag;
362 HEXABLOCK::GUI::AddShapeDialog* _addShapeDiag;
365 std::set<HEXABLOCK::GUI::HexaBaseDialog*> currentModelDialogs;
382 QAction *_addCylinder;
384 QAction *_makeGrid; //Cartesian, Cylindrical, Spherical
385 QAction *_makeCylinder;
387 QAction *_makeCylinders;
390 QAction *_makeHemiSphere; // NEW HEXA3
393 // Pattern Data Edition
394 QAction *_removeHexa;
397 QAction *_merge;// QAction *_mergeVertices; // QAction *_mergeEdges;
398 QAction *_disconnect;
400 QAction *_makeTransformation; // QAction *_makeTranslation;
401 QAction *_makeSymmetry;
402 QAction *_performTransformation;
403 QAction *_performSymmetry;
405 QAction *_replaceHexa; // NEW HEXA3
406 QAction *_quadRevolution; // NEW HEXA3
408 // Pattern Data Association
409 QAction *_assocVertex;
415 QAction *_removeGroup ; //CS_TODO
422 QAction *_setPropagation;
425 QAction *_computeMesh;
427 QAction* _showModelInfoAct;
429 QAction* _addShapeAct;
432 QAction* _sep1; // tmonin
433 QAction* _sep2; // tmonin
434 QAction* _sep3; // tmonin
435 QAction* _sep4; // ...... tparti
437 // -------------------------------------------------------------------------------------------------
438 // Model/View implementation
439 // -------------------------------------------------------------------------------------------------
441 HEXABLOCK::GUI::AssociationsModel *_associationsModel; // sub-part of DocumentModel
443 // VIEW VIEW VIEW VIEW VIEW VIEW VIEW VIEW VIEW VIEW
444 QTreeView* _patternDataTreeView; // document's pattern : 1 ( only one view )
445 QTreeView* _patternBuilderTreeView; // document's pattern : 1 ( only one view )
446 QTreeView* _patternGeomTreeView; // the geometries' tree view
447 QTreeView* _associationTreeView; // document's association : 1 ( only one view )
448 QTreeView* _groupsTreeView; // document's groups
449 QTreeView* _meshTreeView; // document's mesh property: 1 ( only one view )
451 // DELEGATE DELEGATE DELEGATE DELEGATE DELEGATE DELEGATE DELEGATE
452 HEXABLOCK::GUI::DocumentDelegate *_treeViewDelegate; // specific editor for each item of the tree
454 HEXABLOCK::GUI::GraphicViewsHandler* graphicViewsHandler; //vtk views hanlder (create, close, ...)
456 // SALOME SALOME SALOME SALOME SALOME SALOME SALOME SALOME SALOME SALOME
457 QMap<QString, HEXABLOCK::GUI::VtkDocumentGraphicView*> docs; // key = entry
458 QMap<HEXABLOCK::GUI::VtkDocumentGraphicView*, HEXABLOCK::GUI::HexaBaseDialog*> gViewDlgBox; // key = entry
459 QMap<HEXABLOCK::GUI::VtkDocumentGraphicView*, SOCC_Prs*> occPrs;
462 bool moduleActivatedOnce;
464 QDir* loadDocLastPath;
465 QDir* saveDocLastPath;
468 void test_make_cart_grid();
469 void test_make_elmts_transform();
471 QString addDocInStudy (HEXA_NS::Document* doc); // Hexa6
472 HEXA_NS::Hex* hexa_root; // Hexa6