X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMGUI%2FGeometryGUI.cxx;h=31bbe17166d21eeee8215a804cab764eef1702c6;hb=a847e2c6495ef248da62fb22dca24e4875d4f16f;hp=e10dae3f847e73c57587f6c182d50d59e3e6ba27;hpb=08f4a1d3d5415c58e5d66d9d20ba66bd04849724;p=modules%2Fgeom.git diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index e10dae3f8..31bbe1716 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2021 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 @@ -87,10 +87,12 @@ #include #include +#include "SALOME_KernelServices.hxx" #include #include +#include // External includes #include @@ -194,7 +196,7 @@ bool GeometryGUI::IsInGeomComponent( _PTR(SObject) sobject ) //======================================================================= SALOMEDS::Study_var GeometryGUI::getStudyServant() { - SALOME_NamingService *aNamingService = SalomeApp_Application::namingService(); + SALOME_NamingService_Abstract *aNamingService = SalomeApp_Application::namingService(); CORBA::Object_var aStudyObject = aNamingService->Resolve("/Study"); SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow(aStudyObject); return aStudy._retn(); @@ -215,14 +217,12 @@ void GeometryGUI::Modified (bool theIsUpdateActions) // function : GeometryGUI::GeometryGUI() // purpose : Constructor //======================================================================= -GeometryGUI::GeometryGUI() : - SalomeApp_Module( "GEOM" ), - myTopLevelIOList() +GeometryGUI::GeometryGUI() : SalomeApp_Module( "GEOM" ) { if ( CORBA::is_nil( myComponentGeom ) ) { - Engines::EngineComponent_var comp = - SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" ); + SALOME_NamingService_Abstract *ns = SalomeApp_Application::namingService(); + Engines::EngineComponent_var comp = SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" ); myComponentGeom = GEOM::GEOM_Gen::_narrow( comp ); } @@ -1562,6 +1562,8 @@ void GeometryGUI::initialize( CAM_Application* app ) QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible"; QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible"; + QString notGEOMShape = "(not ($component={'GEOM'}) and ($displayer={'Geometry'}))"; + QString autoColorPrefix = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer') and type='Shape' and selcount=1"; @@ -1583,7 +1585,7 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->insert( separator(), -1, -1 ); // ----------- //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false"; - QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and isFolder=false and (selcount>0) and isOCC=true"; + QString bringRule = clientOCCorOB + " and ($displayer={'Geometry'}) and isFolder=false and (selcount>0) and isOCC=true"; mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front mgr->setRule(action(GEOMOp::OpBringToFront), bringRule + " and autoBringToFront = false", QtxPopupMgr::VisibleRule ); mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule ); @@ -1592,56 +1594,58 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->insert( separator(), -1, -1 ); // ----------- dispmodeId = mgr->insert( tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu mgr->insert( action( GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe - mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); + //mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule ); mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule ); mgr->insert( action( GEOMOp::OpShading ), dispmodeId, -1 ); // shading - mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); + // mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule ); mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule ); mgr->insert( action( GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges - mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule ); mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule ); mgr->insert( action( GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule ); mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule ); mgr->insert( separator(), dispmodeId, -1 ); mgr->insert( action( GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors - mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule ); mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule ); mgr->insert( action( GEOMOp::OpVertices ), dispmodeId, -1 ); // vertices - mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule ); mgr->setRule( action( GEOMOp::OpVertices ), clientOCCorVTK + " and isVerticesMode", QtxPopupMgr::ToggleRule ); mgr->insert( action( GEOMOp::OpShowName ), dispmodeId, -1 ); // show name - mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule ); mgr->setRule( action( GEOMOp::OpShowName ), clientOCCorVTK + " and isNameMode", QtxPopupMgr::ToggleRule ); mgr->insert( separator(), -1, -1 ); // ----------- mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color - mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($displayer={'Geometry'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule ); mgr->insert( action( GEOMOp::OpTransparency ), -1, -1 ); // transparency - mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule ); mgr->insert( action( GEOMOp::OpIsos ), -1, -1 ); // isos - mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule ); mgr->insert( action( GEOMOp::OpDeflection ), -1, -1 ); // deflection - mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible" + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule ); mgr->insert( action( GEOMOp::OpPointMarker ), -1, -1 ); // point marker - mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and $type in {'Shape' 'Group' 'Field' 'FieldStep'} and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpPointMarker ), clientOCCorOB + " and ($type in {'Shape' 'Group' 'Field' 'FieldStep'} or " + notGEOMShape + ") and selcount>0 and isOCC=true", QtxPopupMgr::VisibleRule ); // material properties mgr->insert( action( GEOMOp::OpMaterialProperties ), -1, -1 ); - mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and matMenu=false", QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'}) and matMenu=false", QtxPopupMgr::VisibleRule ); mgr->insert( action( GEOMOp::OpMaterialMenu ), -1, -1 ); - mgr->setRule( action( GEOMOp::OpMaterialMenu ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and matMenu=true", QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpMaterialMenu ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'}) and matMenu=true", QtxPopupMgr::VisibleRule ); // texture mgr->insert( action( GEOMOp::OpSetTexture ), -1, -1 ); - mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule ); int lineW = mgr->insert( tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu mgr->insert( action( GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width - mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule ); mgr->insert( action( GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width - mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule ); + mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible + " and ($displayer={'Geometry'})", QtxPopupMgr::VisibleRule ); mgr->insert( separator(), -1, -1 ); // ----------- mgr->insert( action( GEOMOp::OpAutoColor ), -1, -1 ); // auto color @@ -1656,9 +1660,14 @@ void GeometryGUI::initialize( CAM_Application* app ) mgr->setRule( action( GEOMOp::OpDeleteAnnotation ), clientOCC + " and annotationsCount>0", QtxPopupMgr::VisibleRule ); mgr->insert( separator(), -1, -1 ); // ----------- - QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ", - onlyComponent = "((type='Component') and selcount=1)", - rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")", + //QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ", + // onlyComponent = "((type='Component') and selcount=1)", + // rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")", + // types = "'Shape' 'Group' 'FieldStep'"; + + QString canDisplay = "($displayer={'Geometry'}) and (selcount>0) and ({true} in $canBeDisplayed) ", + onlyComponent = "((type='Component') and ($component={'GEOM'}) and selcount=1)", + rule = canDisplay + "and ((($type in {%1} or " + notGEOMShape + ") and( %2 )) or " + onlyComponent + ")", types = "'Shape' 'Group' 'FieldStep'"; mgr->insert( action( GEOMOp::OpShow ), -1, -1 ); // display @@ -1840,12 +1849,58 @@ void GeometryGUI::addPluginActions() } } +namespace +{ + QString wrap(const QString& text, const QString& tag) + { return QString("<%1>%2").arg(tag).arg(text).arg(tag);} +} + //======================================================================= // function : GeometryGUI::activateModule() // purpose : Called when GEOM module is activated //======================================================================= bool GeometryGUI::activateModule( SUIT_Study* study ) { + // Fill in: Help Panel + SalomeApp_Application* app = dynamic_cast( application() ); + app->infoPanel()->setTitle(tr("INFO_WELCOME_TO_GEOM")); + + int gb = app->infoPanel()->addGroup(tr("INFO_GRP_CREATE_MODEL")); + QString lab; + QStringList items; + items << wrap(tr("INFO_VERTICES"), "li") + << wrap(tr("INFO_EDGES"), "li") + << wrap(tr("INFO_WIRES"), "li") + << wrap(tr("INFO_FACES"), "li") + << wrap(tr("INFO_SHELLS"), "li") + << wrap(tr("INFO_SOLIDS"), "li"); + lab = tr("INFO_BOTTOM_UP_CONSTRUCTION") + ":" + wrap(items.join(""), "ul"); + items.clear(); + + items << wrap(tr("INFO_BOX"), "li") + << wrap(tr("INFO_CYLINDER"), "li") + << wrap(tr("INFO_CONE"), "li") + << wrap("...", "li"); + lab = lab + tr("INFO_PRIMITIVES") + ":" + wrap(items.join(""), "ul"); + items.clear(); + + lab = lab + tr("INFO_BOOLEANS") + "
"; + lab = lab + tr("INFO_TRANSFORMATIONS"); + + app->infoPanel()->addLabel(lab, gb); + + gb = app->infoPanel()->addGroup(tr("INFO_GRP_IMPORT_MODEL")); + items << wrap("BREP", "li") + << wrap("STEP", "li") + << wrap("IGES", "li") + << wrap("STL", "li") + << wrap("XAO", "li"); + lab = tr("INFO_AVAILABLE_FORMATS") + ":" + wrap(items.join(""), "ul"); + items.clear(); + + app->infoPanel()->addLabel(lab, gb); + // << Help Panel + if ( CORBA::is_nil( myComponentGeom ) ) return false; @@ -1942,6 +1997,7 @@ bool GeometryGUI::activateModule( SUIT_Study* study ) } Py_XDECREF(pluginsmanager); + return true; } @@ -2027,6 +2083,7 @@ void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win ) void GeometryGUI::windows( QMap& mappa ) const { mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea ); + mappa.insert( SalomeApp_Application::WT_InfoPanel, Qt::RightDockWidgetArea ); mappa.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea ); #ifndef DISABLE_PYCONSOLE mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );