X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=6271fe8570a99a698d10945294a6dcfabc680713;hb=38f832b912a159ca9d43b5bd031344fd7108a6d8;hp=b781cba0087d0de6c640f63a28da683b8621b94f;hpb=4850129bdbdfa930a5fc0c2bd9b35331c4bbd600;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index b781cba00..6271fe857 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -82,6 +82,7 @@ #include "SMESHGUI_TranslationDlg.h" #include "SMESHGUI_TransparencyDlg.h" #include "SMESHGUI_DisplayEntitiesDlg.h" +#include "SMESHGUI_SplitBiQuad.h" #include "SMESHGUI_FilterUtils.h" #include "SMESHGUI_GEOMGenUtils.h" @@ -120,8 +121,6 @@ #include -#include - #include #include #include @@ -426,17 +425,16 @@ namespace const bool isMED = ( theCommandID == SMESHOp::OpExportMED || theCommandID == SMESHOp::OpPopupExportMED ); const bool isUNV = ( theCommandID == SMESHOp::OpExportUNV || theCommandID == SMESHOp::OpPopupExportUNV ); const bool isSTL = ( theCommandID == SMESHOp::OpExportSTL || theCommandID == SMESHOp::OpPopupExportSTL ); - #ifdef WITH_CGNS +#ifdef WITH_CGNS const bool isCGNS= ( theCommandID == SMESHOp::OpExportCGNS || theCommandID == SMESHOp::OpPopupExportCGNS ); - #else +#else const bool isCGNS= false; - #endif +#endif const bool isSAUV= ( theCommandID == SMESHOp::OpExportSAUV || theCommandID == SMESHOp::OpPopupExportSAUV ); const bool isGMF = ( theCommandID == SMESHOp::OpExportGMF || theCommandID == SMESHOp::OpPopupExportGMF ); - // actually, the following condition can't be met (added for insurance) - if( selected.Extent() == 0 || - ( selected.Extent() > 1 && !isMED && !isSTL )) + const bool multiMeshSupported = ( isMED || isCGNS ); // file can hold several meshes + if ( selected.Extent() == 0 || ( selected.Extent() > 1 && !multiMeshSupported )) return; // get mesh object from selection and check duplication of their names @@ -535,7 +533,6 @@ namespace { format = "CGNS"; notSupportedElemTypes.push_back( SMESH::Entity_Ball ); - notSupportedElemTypes.push_back( SMESH::Entity_BiQuad_Triangle ); } else if ( isSAUV ) { @@ -546,6 +543,7 @@ namespace notSupportedElemTypes.push_back( SMESH::Entity_TriQuad_Hexa ); notSupportedElemTypes.push_back( SMESH::Entity_Hexagonal_Prism ); notSupportedElemTypes.push_back( SMESH::Entity_Polygon ); + notSupportedElemTypes.push_back( SMESH::Entity_Quad_Polygon ); notSupportedElemTypes.push_back( SMESH::Entity_Polyhedra ); } else if ( isGMF ) @@ -2082,7 +2080,7 @@ bool SMESHGUI::automaticUpdate( SMESH::SMESH_IDSource_ptr theMesh, long nbEdges = info[SMDSEntity_Edge] + info[SMDSEntity_Quad_Edge]; long nbFaces = info[SMDSEntity_Triangle] + info[SMDSEntity_Quad_Triangle] + info[SMDSEntity_BiQuad_Triangle] + info[SMDSEntity_Quadrangle] + info[SMDSEntity_Quad_Quadrangle] + info[SMDSEntity_BiQuad_Quadrangle] + - info[SMDSEntity_Polygon]; + info[SMDSEntity_Polygon] + info[SMDSEntity_Quad_Polygon]; long nbVolumes = info[SMDSEntity_Tetra] + info[SMDSEntity_Quad_Tetra] + info[SMDSEntity_Hexa] + info[SMDSEntity_Quad_Hexa] + info[SMDSEntity_TriQuad_Hexa] + info[SMDSEntity_Pyramid] + info[SMDSEntity_Quad_Pyramid] + @@ -2265,6 +2263,26 @@ void SMESHGUI::EmitSignalVisibilityChanged() emit SignalVisibilityChanged(); } +//============================================================================= +/*! + * + */ +//============================================================================= +void SMESHGUI::EmitSignalCloseView() +{ + emit SignalCloseView(); +} + +//============================================================================= +/*! + * + */ +//============================================================================= +void SMESHGUI::EmitSignalActivatedViewManager() +{ + emit SignalActivatedViewManager(); +} + //============================================================================= /*! * @@ -2836,6 +2854,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } + case SMESHOp::OpSplitBiQuadratic: case SMESHOp::OpConvertMeshToQuadratic: case SMESHOp::OpCreateBoundaryElements: // create 2D mesh from 3D case SMESHOp::OpReorientFaces: @@ -3257,6 +3276,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpBiQuadraticTriangle: case SMESHOp::OpQuadraticQuadrangle: case SMESHOp::OpBiQuadraticQuadrangle: + case SMESHOp::OpQuadraticPolygon: case SMESHOp::OpQuadraticTetrahedron: case SMESHOp::OpQuadraticPyramid: case SMESHOp::OpQuadraticPentahedron: @@ -3269,15 +3289,16 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) SMDSAbs_EntityType type = SMDSEntity_Last; switch (theCommandID) { - case SMESHOp::OpQuadraticEdge: type = SMDSEntity_Quad_Edge; break; - case SMESHOp::OpQuadraticTriangle: type = SMDSEntity_Quad_Triangle; break; - case SMESHOp::OpBiQuadraticTriangle: type = SMDSEntity_BiQuad_Triangle; break; - case SMESHOp::OpQuadraticQuadrangle: type = SMDSEntity_Quad_Quadrangle; break; - case SMESHOp::OpBiQuadraticQuadrangle: type = SMDSEntity_BiQuad_Quadrangle; break; - case SMESHOp::OpQuadraticTetrahedron: type = SMDSEntity_Quad_Tetra; break; - case SMESHOp::OpQuadraticPyramid: type = SMDSEntity_Quad_Pyramid; break; - case SMESHOp::OpQuadraticPentahedron: type = SMDSEntity_Quad_Penta; break; - case SMESHOp::OpQuadraticHexahedron: type = SMDSEntity_Quad_Hexa; break; + case SMESHOp::OpQuadraticEdge: type = SMDSEntity_Quad_Edge; break; + case SMESHOp::OpQuadraticTriangle: type = SMDSEntity_Quad_Triangle; break; + case SMESHOp::OpBiQuadraticTriangle: type = SMDSEntity_BiQuad_Triangle; break; + case SMESHOp::OpQuadraticQuadrangle: type = SMDSEntity_Quad_Quadrangle; break; + case SMESHOp::OpBiQuadraticQuadrangle: type = SMDSEntity_BiQuad_Quadrangle; break; + case SMESHOp::OpQuadraticPolygon: type = SMDSEntity_Quad_Polygon; break; + case SMESHOp::OpQuadraticTetrahedron: type = SMDSEntity_Quad_Tetra; break; + case SMESHOp::OpQuadraticPyramid: type = SMDSEntity_Quad_Pyramid; break; + case SMESHOp::OpQuadraticPentahedron: type = SMDSEntity_Quad_Penta; break; + case SMESHOp::OpQuadraticHexahedron: type = SMDSEntity_Quad_Hexa; break; case SMESHOp::OpTriQuadraticHexahedron: type = SMDSEntity_TriQuad_Hexa; break; default: break; } @@ -3892,6 +3913,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpBiQuadraticTriangle, "BIQUADRATIC_TRIANGLE", "ICON_DLG_BIQUADRATIC_TRIANGLE" ); createSMESHAction( SMESHOp::OpQuadraticQuadrangle, "QUADRATIC_QUADRANGLE", "ICON_DLG_QUADRATIC_QUADRANGLE" ); createSMESHAction( SMESHOp::OpBiQuadraticQuadrangle, "BIQUADRATIC_QUADRANGLE", "ICON_DLG_BIQUADRATIC_QUADRANGLE" ); + createSMESHAction( SMESHOp::OpQuadraticPolygon, "QUADRATIC_POLYGON", "ICON_DLG_QUADRATIC_POLYGON" ); createSMESHAction( SMESHOp::OpQuadraticTetrahedron, "QUADRATIC_TETRAHEDRON", "ICON_DLG_QUADRATIC_TETRAHEDRON" ); createSMESHAction( SMESHOp::OpQuadraticPyramid, "QUADRATIC_PYRAMID", "ICON_DLG_QUADRATIC_PYRAMID" ); createSMESHAction( SMESHOp::OpQuadraticPentahedron, "QUADRATIC_PENTAHEDRON", "ICON_DLG_QUADRATIC_PENTAHEDRON" ); @@ -3922,6 +3944,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpUnionOfTriangles, "UNION", "ICON_UNIONTRI" ); createSMESHAction( SMESHOp::OpCuttingOfQuadrangles, "CUT", "ICON_CUTQUAD" ); createSMESHAction( SMESHOp::OpSplitVolumes, "SPLIT_TO_TETRA", "ICON_SPLIT_TO_TETRA" ); + createSMESHAction( SMESHOp::OpSplitBiQuadratic, "SPLIT_BIQUAD", "ICON_SPLIT_BIQUAD" ); createSMESHAction( SMESHOp::OpSmoothing, "SMOOTH", "ICON_DLG_SMOOTHING" ); createSMESHAction( SMESHOp::OpExtrusion, "EXTRUSION", "ICON_EXTRUSION" ); createSMESHAction( SMESHOp::OpExtrusionAlongAPath, "EXTRUSION_ALONG", "ICON_EXTRUSION_ALONG" ); @@ -4122,6 +4145,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( SMESHOp::OpBiQuadraticTriangle , addId, -1 ); createMenu( SMESHOp::OpQuadraticQuadrangle, addId, -1 ); createMenu( SMESHOp::OpBiQuadraticQuadrangle, addId, -1 ); + createMenu( SMESHOp::OpQuadraticPolygon, addId, -1 ); createMenu( SMESHOp::OpQuadraticTetrahedron, addId, -1 ); createMenu( SMESHOp::OpQuadraticPyramid, addId, -1 ); createMenu( SMESHOp::OpQuadraticPentahedron, addId, -1 ); @@ -4156,6 +4180,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( SMESHOp::OpUnionOfTriangles, modifyId, -1 ); createMenu( SMESHOp::OpCuttingOfQuadrangles, modifyId, -1 ); createMenu( SMESHOp::OpSplitVolumes, modifyId, -1 ); + createMenu( SMESHOp::OpSplitBiQuadratic, modifyId, -1 ); createMenu( SMESHOp::OpSmoothing, modifyId, -1 ); createMenu( SMESHOp::OpExtrusion, modifyId, -1 ); createMenu( SMESHOp::OpExtrusionAlongAPath , modifyId, -1 ); @@ -4259,6 +4284,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( SMESHOp::OpBiQuadraticTriangle, addNonElemTb ); createTool( SMESHOp::OpQuadraticQuadrangle, addNonElemTb ); createTool( SMESHOp::OpBiQuadraticQuadrangle, addNonElemTb ); + createTool( SMESHOp::OpQuadraticPolygon, addNonElemTb ); createTool( SMESHOp::OpQuadraticTetrahedron, addNonElemTb ); createTool( SMESHOp::OpQuadraticPyramid, addNonElemTb ); createTool( SMESHOp::OpQuadraticPentahedron, addNonElemTb ); @@ -4290,6 +4316,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( SMESHOp::OpUnionOfTriangles, modifyTb ); createTool( SMESHOp::OpCuttingOfQuadrangles, modifyTb ); createTool( SMESHOp::OpSplitVolumes, modifyTb ); + createTool( SMESHOp::OpSplitBiQuadratic, modifyTb ); createTool( SMESHOp::OpSmoothing, modifyTb ); createTool( SMESHOp::OpExtrusion, modifyTb ); createTool( SMESHOp::OpExtrusionAlongAPath, modifyTb ); @@ -4383,9 +4410,9 @@ void SMESHGUI::initialize( CAM_Application* app ) #ifdef WITH_CGNS createPopupItem( SMESHOp::OpPopupExportCGNS, OB, mesh_group, multiple_non_empty, anId ); #endif - createPopupItem( SMESHOp::OpPopupExportSAUV, OB, mesh_group, multiple_non_empty, anId ); - createPopupItem( SMESHOp::OpPopupExportGMF, OB, mesh_group, multiple_non_empty, anId ); - createPopupItem( SMESHOp::OpPopupExportDAT, OB, mesh_group, multiple_non_empty, anId ); + createPopupItem( SMESHOp::OpPopupExportSAUV, OB, mesh_group, only_one_non_empty, anId ); + createPopupItem( SMESHOp::OpPopupExportGMF, OB, mesh_group, only_one_non_empty, anId ); + createPopupItem( SMESHOp::OpPopupExportDAT, OB, mesh_group, only_one_non_empty, anId ); createPopupItem( SMESHOp::OpDelete, OB, mesh_part + " " + hyp_alg ); createPopupItem( SMESHOp::OpDeleteGroup, OB, group ); popupMgr()->insert( separator(), -1, 0 ); @@ -4749,14 +4776,15 @@ bool SMESHGUI::activateModule( SUIT_Study* study ) // import Python module that manages SMESH plugins (need to be here because SalomePyQt API uses active module) PyGILState_STATE gstate = PyGILState_Ensure(); - PyObjWrapper pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager"); + PyObject* pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager"); if ( !pluginsmanager ) { PyErr_Print(); } else { - PyObjWrapper result = PyObject_CallMethod( pluginsmanager, (char*)"initialize", (char*)"isss",1,"smesh",tr("MEN_MESH").toUtf8().data(),tr("SMESH_PLUGINS_OTHER").toUtf8().data()); + PyObject* result = PyObject_CallMethod( pluginsmanager, (char*)"initialize", (char*)"isss",1,"smesh",tr("MEN_MESH").toUtf8().data(),tr("SMESH_PLUGINS_OTHER").toUtf8().data()); if ( !result ) PyErr_Print(); + Py_XDECREF(result); } PyGILState_Release(gstate); // end of SMESH plugins loading @@ -4766,11 +4794,10 @@ bool SMESHGUI::activateModule( SUIT_Study* study ) // 0020210. Make SMESH_Gen update meshes at switching GEOM->SMESH GetSMESHGen()->SetCurrentStudy(SALOMEDS::Study::_nil()); - if ( SalomeApp_Study* s = dynamic_cast( study )) - if ( _PTR(Study) aStudy = s->studyDS()) { + if ( SalomeApp_Study* s = dynamic_cast( study )) { + if ( _PTR(Study) aStudy = s->studyDS() ) GetSMESHGen()->SetCurrentStudy( _CAST(Study,aStudy)->GetStudy() ); - updateObjBrowser(); // objects can be removed - } + } // get all view currently opened in the study and connect their signals to // the corresponding slots of the class. @@ -4782,6 +4809,7 @@ bool SMESHGUI::activateModule( SUIT_Study* study ) connectView( wnd ); } + Py_XDECREF(pluginsmanager); return res; } @@ -4866,7 +4894,9 @@ void SMESHGUI::windows( QMap& aMap ) const { aMap.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea ); aMap.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea ); +#ifndef DISABLE_PYCONSOLE aMap.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea ); +#endif } void SMESHGUI::viewManagers( QStringList& list ) const @@ -4884,6 +4914,7 @@ void SMESHGUI::onViewManagerActivated( SUIT_ViewManager* mgr ) SUIT_ViewWindow *sf = aViews[i]; connectView( sf ); } + EmitSignalActivatedViewManager(); } } @@ -5454,6 +5485,9 @@ LightApp_Operation* SMESHGUI::createOperation( const int id ) const // to do : create operation here switch( id ) { + case SMESHOp::OpSplitBiQuadratic: + op = new SMESHGUI_SplitBiQuadOp(); + break; case SMESHOp::OpConvertMeshToQuadratic: op = new SMESHGUI_ConvToQuadOp(); break; @@ -6824,6 +6858,7 @@ void SMESHGUI::onViewClosed( SUIT_ViewWindow* pview ) { //Crear all Plot2d Viewers if need. SMESH::ClearPlot2Viewers(pview); #endif + EmitSignalCloseView(); } void SMESHGUI::message( const QString& msg )