X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=inline;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=0b0512b689da0df47ccd70716853767a024c8da6;hb=08485b06fa309a40c3769a9113c2b88dd26e103d;hp=46261a995601c9b0fccb6da0dadd92d9343f4788;hpb=64f450dfd133e2dcec792369d3e07a8255633597;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 46261a995..0b0512b68 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2022 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -32,6 +32,8 @@ #include "SMESHGUI.h" #include "SMESHGUI_Add0DElemsOnAllNodesDlg.h" #include "SMESHGUI_AddMeshElementDlg.h" +#include "SMESHGUI_AddNodeOnSegmentDlg.h" +#include "SMESHGUI_AddNodeOnFaceDlg.h" #include "SMESHGUI_AddQuadraticElementDlg.h" #include "SMESHGUI_BuildCompoundDlg.h" #include "SMESHGUI_ClippingDlg.h" @@ -79,6 +81,7 @@ #include "SMESHGUI_Preferences_ScalarBarDlg.h" #include "SMESHGUI_PropertiesDlg.h" #include "SMESHGUI_RemoveElementsDlg.h" +#include "SMESHGUI_RemoveNodeReconnectionDlg.h" #include "SMESHGUI_RemoveNodesDlg.h" #include "SMESHGUI_RenumberingDlg.h" #include "SMESHGUI_ReorientFacesDlg.h" @@ -94,6 +97,8 @@ #include "SMESHGUI_SymmetryDlg.h" #include "SMESHGUI_TranslationDlg.h" #include "SMESHGUI_TransparencyDlg.h" +#include "SMESHGUI_CreateDualMeshDlg.h" +#include "SMESHGUI_CreateDualMeshOp.h" #include "SMESHGUI_Utils.h" #include "SMESHGUI_VTKUtils.h" @@ -106,7 +111,6 @@ #include "SMESH_ControlsDef.hxx" #include "SMESH_ScalarBarActor.h" #include "SMESH_TypeFilter.hxx" -#include "SMESH_Component_Generator.hxx" // SALOME GUI includes #include @@ -2084,20 +2088,20 @@ void SMESHGUI::OnEditDelete() SMESH::RemoveHypothesisOrAlgorithmOnMesh(IObject); aStudyBuilder->RemoveObjectWithChildren( SO ); } - else {// default action: remove SObject from the study - // Find Sub-Meshes and Group and delete corresopning visual objects and actors - _PTR(ChildIterator) it1 = aStudy->NewChildIterator(SO); - for (it1->InitEx(false); it1->More(); it1->Next()) { - _PTR(SObject) SObj = it1->Value(); - if (!SObj) continue; - if (SObj->FindAttribute(anAttr, "AttributeIOR")) { - SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow(SMESH::SObjectToObject(SObj)); - SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow(SMESH::SObjectToObject(SObj)); - if (!aGroup->_is_nil() || !aSubMesh->_is_nil()) { - SMESH::RemoveVisualObjectWithActors(SObj->GetID().c_str(), true); - } - } - } + else {// default action: remove SObject from the study + // Find Sub-Meshes and Group and delete corresopning visual objects and actors + _PTR(ChildIterator) it1 = aStudy->NewChildIterator(SO); + for (it1->InitEx(false); it1->More(); it1->Next()) { + _PTR(SObject) SObj = it1->Value(); + if (!SObj) continue; + if (SObj->FindAttribute(anAttr, "AttributeIOR")) { + SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow(SMESH::SObjectToObject(SObj)); + SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow(SMESH::SObjectToObject(SObj)); + if (!aGroup->_is_nil() || !aSubMesh->_is_nil()) { + SMESH::RemoveVisualObjectWithActors(SObj->GetID().c_str(), true); + } + } + } // san - it's no use opening a transaction here until UNDO/REDO is provided in SMESH //SUIT_Operation *op = new SALOMEGUI_ImportOperation(myActiveStudy); //op->start(); @@ -2139,15 +2143,8 @@ SMESHGUI::SMESHGUI() : SalomeApp_Module( "SMESH" ) if ( CORBA::is_nil( myComponentSMESH ) ) { CORBA::Boolean anIsEmbeddedMode; - SALOME_NamingService_Abstract *ns = SalomeApp_Application::namingService(); - if( dynamic_cast(ns) ) - myComponentSMESH = SMESH_Client::GetSMESHGen(getApp()->orb(),anIsEmbeddedMode); - else - { - Engines::EngineComponent_var comp = RetrieveSMESHInstance(); - myComponentSMESH = SMESH::SMESH_Gen::_narrow(comp); - } - + myComponentSMESH = SMESH_Client::GetSMESHGen(getApp()->orb(),anIsEmbeddedMode); + //MESSAGE("-------------------------------> anIsEmbeddedMode=" << anIsEmbeddedMode); // 0019923: EDF 765 SMESH : default values of hypothesis @@ -3056,6 +3053,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) // Adaptation - end case SMESHOp::OpSplitBiQuadratic: case SMESHOp::OpConvertMeshToQuadratic: + case SMESHOp::OpCreateDualMesh: case SMESHOp::OpCreateBoundaryElements: // create 2D mesh from 3D case SMESHOp::OpReorientFaces: case SMESHOp::OpCreateGeometryGroup: @@ -3556,6 +3554,14 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } + case SMESHOp::OpRemoveNodeWithReconn: + { + if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbidden as geometry modified + startOperation( SMESHOp::OpRemoveNodeWithReconn ); + break; + } case SMESHOp::OpRemoveElements: // REMOVES ELEMENTS { if(isStudyLocked()) break; @@ -3814,6 +3820,24 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) startOperation( SMESHOp::OpMoveNode ); break; + case SMESHOp::OpMoveNodeInteractive: + if ( warnOnGeomModif() ) + break; // action forbidden as geometry modified + startOperation( SMESHOp::OpMoveNodeInteractive ); + break; + + case SMESHOp::OpSplitEdgeInteract: + if ( warnOnGeomModif() ) + break; // action forbidden as geometry modified + startOperation( SMESHOp::OpSplitEdgeInteract ); + break; + + case SMESHOp::OpSplitFaceInteract: + if ( warnOnGeomModif() ) + break; // action forbidden as geometry modified + startOperation( SMESHOp::OpSplitFaceInteract ); + break; + case SMESHOp::OpDuplicateNodes: { if(isStudyLocked()) break; @@ -4221,6 +4245,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpRemoveNodes, "REMOVE_NODES", "ICON_DLG_REM_NODE" ); createSMESHAction( SMESHOp::OpRemoveElements, "REMOVE_ELEMENTS", "ICON_DLG_REM_ELEMENT" ); createSMESHAction( SMESHOp::OpRemoveOrphanNodes, "REMOVE_ORPHAN_NODES", "ICON_DLG_REM_ORPHAN_NODES" ); + createSMESHAction( SMESHOp::OpRemoveNodeWithReconn, "REMOVE_NODE_RECON", "ICON_REM_NODE_RECON" ); createSMESHAction( SMESHOp::OpClearMesh, "CLEAR_MESH", "ICON_CLEAR_MESH" ); //createSMESHAction( SMESHOp::OpRenumberingNodes, "RENUM_NODES", "ICON_DLG_RENUMBERING_NODES" ); @@ -4235,6 +4260,9 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpMergeNodes, "MERGE", "ICON_SMESH_MERGE_NODES" ); createSMESHAction( SMESHOp::OpMergeElements, "MERGE_ELEMENTS", "ICON_DLG_MERGE_ELEMENTS" ); createSMESHAction( SMESHOp::OpMoveNode, "MESH_THROU_POINT","ICON_DLG_MOVE_NODE" ); + createSMESHAction( SMESHOp::OpMoveNodeInteractive, "MOVE_NODE_INTRCT","ICON_DLG_MOVE_NODE_INTERACTIVE" ); + createSMESHAction( SMESHOp::OpSplitEdgeInteract, "SPLIT_DIAG_INTRC","ICON_SPLIT_DIAG_INTERACTIVE" ); + createSMESHAction( SMESHOp::OpSplitFaceInteract, "SPLIT_FACE_INTRC","ICON_SPLIT_FACE_INTERACTIVE" ); createSMESHAction( SMESHOp::OpDuplicateNodes, "DUPLICATE_NODES", "ICON_SMESH_DUPLICATE_NODES" ); createSMESHAction( SMESHOp::OpDiagonalInversion, "INV", "ICON_DLG_MESH_DIAGONAL" ); createSMESHAction( SMESHOp::OpUnionOfTwoTriangle, "UNION2", "ICON_UNION2TRI" ); @@ -4250,6 +4278,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpRevolution, "REVOLUTION", "ICON_REVOLUTION" ); createSMESHAction( SMESHOp::OpPatternMapping, "MAP", "ICON_MAP" ); createSMESHAction( SMESHOp::OpConvertMeshToQuadratic, "CONV_TO_QUAD", "ICON_CONV_TO_QUAD" ); + createSMESHAction( SMESHOp::OpCreateDualMesh, "CREATE_DUAL_MESH","ICON_CREATE_DUAL_MESH" ); createSMESHAction( SMESHOp::OpCreateBoundaryElements, "2D_FROM_3D", "ICON_2D_FROM_3D" ); createSMESHAction( SMESHOp::OpReset, "RESET" ); @@ -4386,6 +4415,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( SMESHOp::OpEditMeshOrSubMesh, meshId, -1 ); createMenu( SMESHOp::OpBuildCompoundMesh, meshId, -1 ); createMenu( SMESHOp::OpCopyMesh, meshId, -1 ); + createMenu( SMESHOp::OpCreateDualMesh, meshId, -1 ); createMenu( separator(), meshId, -1 ); createMenu( SMESHOp::OpCompute, meshId, -1 ); createMenu( SMESHOp::OpPreCompute, meshId, -1 ); @@ -4471,14 +4501,18 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( SMESHOp::OpBiQuadraticPentahedron, addId, -1 ); createMenu( SMESHOp::OpQuadraticHexahedron, addId, -1 ); createMenu( SMESHOp::OpTriQuadraticHexahedron, addId, -1 ); - - createMenu( SMESHOp::OpRemoveNodes, removeId, -1 ); - createMenu( SMESHOp::OpRemoveElements, removeId, -1 ); - createMenu( SMESHOp::OpRemoveOrphanNodes, removeId, -1 ); - createMenu( separator(), removeId, -1 ); - createMenu( SMESHOp::OpDeleteGroup, removeId, -1 ); - createMenu( separator(), removeId, -1 ); - createMenu( SMESHOp::OpClearMesh, removeId, -1 ); + createMenu( separator(), addId, -1 ); + createMenu( SMESHOp::OpSplitEdgeInteract, addId, -1 ); + createMenu( SMESHOp::OpSplitFaceInteract, addId, -1 ); + + createMenu( SMESHOp::OpRemoveNodes, removeId, -1 ); + createMenu( SMESHOp::OpRemoveElements, removeId, -1 ); + createMenu( SMESHOp::OpRemoveOrphanNodes, removeId, -1 ); + createMenu( SMESHOp::OpRemoveNodeWithReconn, removeId, -1 ); + createMenu( separator(), removeId, -1 ); + createMenu( SMESHOp::OpDeleteGroup, removeId, -1 ); + createMenu( separator(), removeId, -1 ); + createMenu( SMESHOp::OpClearMesh, removeId, -1 ); //createMenu( SMESHOp::OpRenumberingNodes, renumId, -1 ); //createMenu( SMESHOp::OpRenumberingElements, renumId, -1 ); @@ -4662,6 +4696,12 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( SMESHOp::OpSmoothing, modifyTb ); createTool( SMESHOp::OpPatternMapping, modifyTb ); + int interactTb = createTool( tr( "TB_INTERACT" ), QString( "SMESHInteractiveToolbar" ) ) ; + createTool( SMESHOp::OpMoveNodeInteractive, interactTb ); + createTool( SMESHOp::OpRemoveNodeWithReconn, interactTb ); + createTool( SMESHOp::OpSplitEdgeInteract, interactTb ); + createTool( SMESHOp::OpSplitFaceInteract, interactTb ); + // Adaptation - begin #if !defined(DISABLE_MG_ADAPT) || !defined(DISABLE_HOMARD_ADAPT) int adaptTb = createTool( tr( "TB_ADAPTATION" ), QString( "SMESHAdaptationToolbar" ) ) ; @@ -5990,6 +6030,9 @@ LightApp_Operation* SMESHGUI::createOperation( const int id ) const case SMESHOp::OpCreateBoundaryElements: // create 2D mesh as boundary on 3D op = new SMESHGUI_Make2DFrom3DOp(); break; + case SMESHOp::OpCreateDualMesh: + op = new SMESHGUI_CreateDualMeshOp(); + break; case SMESHOp::OpReorientFaces: op = new SMESHGUI_ReorientFacesOp(); break; @@ -6029,6 +6072,18 @@ LightApp_Operation* SMESHGUI::createOperation( const int id ) const case SMESHOp::OpMoveNode: // Make mesh pass through point op = new SMESHGUI_MakeNodeAtPointOp(); break; + case SMESHOp::OpMoveNodeInteractive: // Make mesh pass through point / by mouse + op = new SMESHGUI_MakeNodeAtPointOp( 2 ); + break; + case SMESHOp::OpRemoveNodeWithReconn: + op = new SMESHGUI_RemoveNodeReconnectionOp(); + break; + case SMESHOp::OpSplitEdgeInteract: + op = new SMESHGUI_AddNodeOnSegmentOp(); + break; + case SMESHOp::OpSplitFaceInteract: + op = new SMESHGUI_AddNodeOnFaceOp(); + break; case SMESHOp::OpElem0DOnElemNodes: // Create 0D elements on all nodes op = new SMESHGUI_Add0DElemsOnAllNodesOp(); break;