1 // Copyright (C) 2009-2016 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, or (at your option) any later version.
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_
23 #include "HEXABLOCKGUI_Export.hxx"
30 #include <QModelIndex>
31 #include <QDockWidget>
33 #include "klinkitemselectionmodel.hxx"
35 #include <OB_Browser.h>
36 #include <SalomeApp_Module.h>
37 #include <SalomeApp_DataObject.h>
39 #include <LightApp_SelectionMgr.h>
40 #include <LightApp_DataModel.h>
42 #include <SALOMEconfig.h>
44 #include "HEXABLOCKGUI_Resource.hxx"
45 #include "HEXABLOCKGUI_OCCSelector.h"
46 #include "hexa_base.hxx"
50 // #include CORBA_CLIENT_HEADER(HEXABLOCK_Gen) // Abu Juin 2013
56 class VtkDocumentGraphicView;
58 class GraphicViewsHandler;
59 // class DocumentDelegate;
61 class PatternDataModel;
62 // class PatternBuilderModel;
63 class AssociationsModel;
66 class PatternDataSelectionModel;
67 // class PatternBuilderSelectionModel;
68 class GroupsSelectionModel;
69 class MeshSelectionModel;
80 class MakeCylinderDialog;
82 class MakeCylindersDialog;
83 class MakePipesDialog;
84 class RemoveHexaDialog;
85 class PrismQuadDialog;
88 class DisconnectDialog;
90 class MakeTransformationDialog;
91 class MakeSymmetryDialog;
92 class PerformTransformationDialog;
93 class PerformSymmetryDialog;
94 typedef class MyBasicGUI_PointDlg VertexAssocDialog;
95 class EdgeAssocDialog;
96 class QuadAssocDialog;
99 class PropagationDialog;
100 class ComputeMeshDialog;
101 class ReplaceHexaDialog;
102 class QuadRevolutionDialog;
103 class MakeHemiSphereDialog;
104 class ModelInfoDialog;
105 class AddShapeDialog;
109 class HEXABLOCKGUI_Resource;//SUIT_ResourceMgr;
110 class SalomeApp_Study;
111 class SalomeApp_Application;
112 class SUIT_ViewWindow;
113 class SVTK_ViewWindow;
114 class OCCViewer_ViewWindow;
115 class LightApp_VTKSelector;
118 class HEXABLOCK_EXPORT HEXABLOCKGUI : public SalomeApp_Module
122 friend class HEXABLOCKGUI_Resource;
126 virtual ~HEXABLOCKGUI();
135 static SalomeApp_Study* activeStudy();
137 // static HEXABLOCK_ORB::HEXABLOCK_Gen_ptr InitHEXABLOCKGen( SalomeApp_Application* );
138 static LightApp_SelectionMgr* selectionMgr();
139 static SALOMEDS::Study_var ClientStudyToStudy (_PTR(Study) theStudy);
140 static ViewType getActiveViewType();
141 static HEXABLOCKGUI* getInstance();
143 //add an object in the study
144 void addInStudy(QMap<QString, TopoDS_Shape>& topo_shapes,
145 QMap<QString, QString>& docShapesEntry,
146 QMap<QString, QString>& docShapesName);
148 static HEXABLOCK::GUI::VtkDocumentGraphicView* currentDocGView;
149 static HEXABLOCK::GUI::OccGraphicView* currentOccGView;
150 static bool assocInProgress;
151 static SalomeApp_Application* myApplication;
153 virtual void initialize( CAM_Application* app);
155 virtual bool renameAllowed( const QString& ) const;
156 virtual bool renameObject( const QString& entry, const QString& name);
157 virtual void windows( QMap<int, int>& theMap) const;
158 virtual QString engineIOR() const;
160 virtual void viewManagers(QStringList& list) const;
161 virtual void setResource(SUIT_ResourceMgr* r);
162 virtual void createPreferences();
163 virtual void preferencesChanged( const QString& sect, const QString& name );
164 virtual void studyActivated();
166 ///Returns a new HEXA_NS::Document and it's entry in the study
167 std::pair <QString, HEXA_NS::Document*> newHexaDocument();
169 //------------------------------------
170 void createAndFillDockWidget();
171 void createActions();
177 void setAllMenusEnabled(bool enable);
178 void updateSelectors();
180 void switchModel(HEXABLOCK::GUI::VtkDocumentGraphicView* dgview);
181 void switchOnGraphicView(HEXABLOCK::GUI::VtkDocumentGraphicView* dgview);
182 void switchOffGraphicView(HEXABLOCK::GUI::VtkDocumentGraphicView* dgview,
183 bool saveCurrentDlg = true);
184 void showDockWidgets(bool isVisible);
186 HEXABLOCK::GUI::VtkDocumentGraphicView* getCurrentVtkGraphicView() const { return currentDocGView; }
187 HEXABLOCK::GUI::VtkDocumentGraphicView* getOrCreateDocument(SalomeApp_DataObject* studyObject);
188 HEXABLOCK::GUI::VtkDocumentGraphicView* getDocGViewByEntry(const QString& entry) const
190 return ( (docs.contains(entry) ? docs[entry] : NULL ) );
192 HEXABLOCK::GUI::DocumentModel* getCurrentModel();
193 HEXABLOCK::GUI::HexaBaseDialog* getDlgBox(HEXABLOCK::GUI::VtkDocumentGraphicView* view);
194 QTreeView* getPatternDataTreeView() const { return _patternDataTreeView; }
195 QTreeView* getPatternGeomTreeView() const { return _patternGeomTreeView; }
197 void showVertexInfoDialog(HEXA_NS::Vertex* vertex);
198 void showEdgeInfoDialog(HEXA_NS::Edge* edge);
199 void showQuadInfoDialog(HEXA_NS::Quad* quad);
200 void showHexaInfoDialog(HEXA_NS::Hexa* hexa);
201 void showVectorInfoDialog(HEXA_NS::Vector* vector);
202 void showGroupInfoDialog(HEXA_NS::Group* group);
203 void showLawInfoDialog(HEXA_NS::Law* law);
204 void showPropagationInfoDialog(HEXA_NS::Propagation* propagation);
212 bool deactivateModule( SUIT_Study* theStudy);
213 bool activateModule( SUIT_Study* theStudy);
214 void onObjectBrowserClick(const QModelIndex& index);
216 void showDocumentMenus(bool show);
217 void showPatternMenus(bool show);
218 void showAssociationMenus(bool show);
219 void showGroupsMenus(bool show);
220 void showMeshMenus(bool show);
222 void enableDocumentMenus(bool enable);
223 void enablePatternMenus(bool enable);
224 void enableAssociationMenus(bool enable);
225 void enableGroupsMenus(bool enable);
226 void enableMeshMenus(bool enable);
229 void onWindowActivated( SUIT_ViewWindow* svw);
230 void onWindowClosed( SUIT_ViewWindow* svw);
232 virtual void onViewManagerAdded( SUIT_ViewManager* );
233 virtual void onViewManagerRemoved( SUIT_ViewManager* );
235 void onSelectionChanged( const QItemSelection & selected, const QItemSelection & deselected );
237 void showOnlyActor();
240 bool createSComponent();
241 virtual bool eventFilter(QObject *obj, QEvent *event);
243 void _showDialogBox( HEXABLOCK::GUI::HexaBaseDialog* diag );
244 HEXABLOCK::GUI::HexaBaseDialog* currentDialog;
246 SOCC_Prs* lastOccPrs;
247 HEXABLOCK::GUI::VtkDocumentGraphicView* lastVtkDocGView;
249 HEXABLOCKGUI_Resource* _myresource;
250 static int _oldStudyId;
251 // static HEXABLOCK_ORB::HEXABLOCK_Gen_var _hexaEngine; // Hexa6 TODo
254 void slot_modelChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
256 void treeContextMenu(const QPoint& aPosition);
258 void test_association();
262 void loadDocument( const QString &path = QString() );
272 // void addCylinder();
277 void makeCylinders();
280 void makeHemiSphere(); // NEW HEXA3
286 void disconnectElts();
288 void makeTransformation();
290 void performTransformation();
291 void performSymmetry();
293 void replaceHexa(); // NEW HEXA3
294 void quadRevolution(); // NEW HEXA3
302 void removeGroup (); //CS_TODO
305 void setPropagation();
308 //show the current model's information (nb vertex, edge, ... and more)
309 void showModelInfo();
311 //associate a shape to a document
314 //Clears associations of a single element (VERTEX, EDGE, QUAD, ...)
315 void clearAssociations();
317 //Clears associations under a tree (VERTEX_TREE, EDGE_TREE, ...)
318 void clearAllAssociations();
320 void showAssociations();
324 QList<HEXABLOCKGUI_OCCSelector*> myOCCSelectors;
325 QList<LightApp_VTKSelector*> myVTKSelectors;
328 QStringList getQuickDirList();
331 SOCC_Prs* getOccPrs(HEXABLOCK::GUI::VtkDocumentGraphicView* docGView)
333 if (docGView == NULL)
335 if (!occPrs.contains(docGView))
336 occPrs[docGView] = new SOCC_Prs(0);
337 return occPrs[docGView];
340 // -------------------------------------------------------------------------------------------------
341 // MainWindow presentation
342 // -------------------------------------------------------------------------------------------------
343 QDockWidget *_dwPattern; // Hexablock model edition
344 QDockWidget *_dwAssociation; // Hexablock association edition
345 QDockWidget *_dwGroups; // Hexablock groups edition
346 QDockWidget *_dwMesh; // Hexablock meshing edtion
347 QDockWidget *_dwObjectBrowser; // Salome study
348 QDockWidget *_dwInputPanel; // user Input
351 // ** Elements creation and modification Dialogs **
353 // Dialog Box ( to keep persistent values )
354 HEXABLOCK::GUI::VertexDialog* _vertexDiag;
355 HEXABLOCK::GUI::EdgeDialog* _edgeDiag;
356 HEXABLOCK::GUI::QuadDialog* _quadDiag;
357 HEXABLOCK::GUI::HexaDialog* _hexaDiag;
358 HEXABLOCK::GUI::VectorDialog* _vectorDiag;
359 HEXABLOCK::GUI::CylinderDialog* _cylinderDiag;
360 HEXABLOCK::GUI::PipeDialog* _pipeDiag;
361 HEXABLOCK::GUI::MakeGridDialog* _makeGridDiag;
362 HEXABLOCK::GUI::MakeCylinderDialog* _makeCylinderDiag;
363 HEXABLOCK::GUI::MakePipeDialog* _makePipeDiag;
364 HEXABLOCK::GUI::MakeCylindersDialog* _makeCylindersDiag;
365 HEXABLOCK::GUI::MakePipesDialog* _makePipesDiag;
366 HEXABLOCK::GUI::RemoveHexaDialog* _removeHexaDiag;
367 HEXABLOCK::GUI::PrismQuadDialog* _prismQuadDiag;
368 HEXABLOCK::GUI::JoinQuadDialog* _joinQuadDiag;
369 HEXABLOCK::GUI::MergeDialog* _mergeDiag;
370 HEXABLOCK::GUI::DisconnectDialog* _disconnectDiag;
371 HEXABLOCK::GUI::CutEdgeDialog* _cutEdgeDiag;
372 HEXABLOCK::GUI::MakeTransformationDialog* _makeTransformationDiag;
373 HEXABLOCK::GUI::MakeSymmetryDialog* _makeSymmetryDiag;
374 HEXABLOCK::GUI::PerformTransformationDialog* _performTransformationDiag;
375 HEXABLOCK::GUI::PerformSymmetryDialog* _performSymmetryDiag;
376 HEXABLOCK::GUI::VertexAssocDialog* _vertexAssocDiag;
377 HEXABLOCK::GUI::EdgeAssocDialog* _edgeAssocDiag;
378 HEXABLOCK::GUI::QuadAssocDialog* _quadAssocDiag;
379 HEXABLOCK::GUI::GroupDialog* _groupDiag;
380 HEXABLOCK::GUI::LawDialog* _lawDiag;
381 HEXABLOCK::GUI::PropagationDialog* _propagationDiag;
382 HEXABLOCK::GUI::ComputeMeshDialog* _computeMeshDiag;
383 HEXABLOCK::GUI::ReplaceHexaDialog* _replaceHexaDiag;
384 HEXABLOCK::GUI::QuadRevolutionDialog* _quadRevolutionDiag;
385 HEXABLOCK::GUI::MakeHemiSphereDialog* _makeHemiSphereDiag;
386 HEXABLOCK::GUI::ModelInfoDialog* _modelInfoDiag;
387 HEXABLOCK::GUI::AddShapeDialog* _addShapeDiag;
389 // ** Elements information dialogs **
390 HEXABLOCK::GUI::VertexDialog* _vertexInfoDialog;
391 HEXABLOCK::GUI::EdgeDialog* _edgeInfoDialog;
392 HEXABLOCK::GUI::QuadDialog* _quadInfoDialog;
393 HEXABLOCK::GUI::HexaDialog* _hexaInfoDialog;
394 HEXABLOCK::GUI::VectorDialog* _vectorInfoDialog;
395 HEXABLOCK::GUI::GroupDialog* _groupInfoDialog;
396 HEXABLOCK::GUI::LawDialog* _lawInfoDialog;
397 HEXABLOCK::GUI::PropagationDialog* _propagationInfoDialog;
400 std::set<HEXABLOCK::GUI::HexaBaseDialog*> currentModelDialogs;
417 // QAction *_addCylinder;
418 // QAction *_addPipe;
419 QAction *_makeGrid; //Cartesian, Cylindrical, Spherical
420 QAction *_makeCylinder;
422 QAction *_makeCylinders;
425 QAction *_makeHemiSphere; // NEW HEXA3
428 // Pattern Data Edition
429 QAction *_removeHexa;
432 QAction *_merge;// QAction *_mergeVertices; // QAction *_mergeEdges;
433 QAction *_disconnect;
435 QAction *_makeTransformation; // QAction *_makeTranslation;
436 QAction *_makeSymmetry;
437 QAction *_performTransformation;
438 QAction *_performSymmetry;
440 QAction *_replaceHexa; // NEW HEXA3
441 QAction *_quadRevolution; // NEW HEXA3
443 // Pattern Data Association
444 QAction *_assocVertex;
450 QAction *_removeGroup ; //CS_TODO
457 QAction *_setPropagation;
460 QAction *_computeMesh;
461 QAction* _showModelInfoAct;
462 QAction* _addShapeAct;
465 QAction* _sep1; // tmonin
466 QAction* _sep2; // tmonin
467 QAction* _sep3; // tmonin
468 QAction* _sep4; // ...... tparti
470 // -------------------------------------------------------------------------------------------------
471 // Model/View implementation
472 // -------------------------------------------------------------------------------------------------
474 HEXABLOCK::GUI::AssociationsModel *_associationsModel; // sub-part of DocumentModel
476 // VIEW VIEW VIEW VIEW VIEW VIEW VIEW VIEW VIEW VIEW
477 QTreeView* _patternDataTreeView; // document's pattern : 1 ( only one view )
478 // QTreeView* _patternBuilderTreeView; // document's pattern : 1 ( only one view )
479 QTreeView* _patternGeomTreeView; // the geometries' tree view
480 QTreeView* _associationTreeView; // document's association : 1 ( only one view )
481 QTreeView* _groupsTreeView; // document's groups
482 QTreeView* _meshTreeView; // document's mesh property: 1 ( only one view )
484 // DELEGATE DELEGATE DELEGATE DELEGATE DELEGATE DELEGATE DELEGATE
485 // HEXABLOCK::GUI::DocumentDelegate *_treeViewDelegate; // specific editor for each item of the tree
487 HEXABLOCK::GUI::GraphicViewsHandler* graphicViewsHandler; //vtk views hanlder (create, close, ...)
489 // SALOME SALOME SALOME SALOME SALOME SALOME SALOME SALOME SALOME SALOME
490 QMap<QString, HEXABLOCK::GUI::VtkDocumentGraphicView*> docs; // key = entry
491 QMap<HEXABLOCK::GUI::VtkDocumentGraphicView*, HEXABLOCK::GUI::HexaBaseDialog*> gViewDlgBox; // key = entry
492 QMap<HEXABLOCK::GUI::VtkDocumentGraphicView*, SOCC_Prs*> occPrs;
495 bool moduleActivatedOnce;
498 QDir* loadDocLastPath;
499 QDir* saveDocLastPath;
502 void test_make_cart_grid();
503 void test_make_elmts_transform();
505 QString addDocInStudy (HEXA_NS::Document* doc); // Hexa6
506 HEXA_NS::Hex* hexa_root; // Hexa6