From b23bafd42b1321c54102be5319913ebd2912318c Mon Sep 17 00:00:00 2001 From: akl Date: Wed, 27 Aug 2014 11:03:29 +0400 Subject: [PATCH] Implementation of 0022617: [CEA 1060] In OCC view, add "Show vertices" in the contextual menu. --- doc/salome/examples/viewing_geom_objs_ex01.py | 5 +- doc/salome/gui/GEOM/input/display_mode.doc | 11 ++++ src/DisplayGUI/DisplayGUI.cxx | 60 +++++++++++++++++++ src/DisplayGUI/DisplayGUI.h | 6 ++ src/GEOMGUI/GEOMGUI_Selection.cxx | 49 +++++++++++++++ src/GEOMGUI/GEOMGUI_Selection.h | 1 + src/GEOMGUI/GEOM_Displayer.cxx | 9 +++ src/GEOMGUI/GEOM_msg_en.ts | 16 +++++ src/GEOMGUI/GeometryGUI.cxx | 21 +++++++ src/GEOMGUI/GeometryGUI_Operations.h | 2 + src/GEOM_SWIG/GEOM_example3.py | 1 + src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx | 12 ++++ src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h | 1 + src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i | 1 + src/OBJECT/GEOM_AISShape.cxx | 10 ++++ src/OBJECT/GEOM_AISShape.hxx | 3 + src/OBJECT/GEOM_Actor.cxx | 25 +++++++- src/OBJECT/GEOM_Actor.h | 10 ++++ src/OBJECT/GEOM_Constants.cxx | 2 + src/OBJECT/GEOM_Constants.h | 1 + 20 files changed, 240 insertions(+), 6 deletions(-) diff --git a/doc/salome/examples/viewing_geom_objs_ex01.py b/doc/salome/examples/viewing_geom_objs_ex01.py index 0458d42bf..17387b724 100644 --- a/doc/salome/examples/viewing_geom_objs_ex01.py +++ b/doc/salome/examples/viewing_geom_objs_ex01.py @@ -11,10 +11,9 @@ box2 = geompy.MakeBox(-50,-50,-50, 0,0,0) sphere = geompy.MakeSphere(50,50,50, 30) fuse = geompy.MakeBoolean(box,sphere,3) fuse_id = geompy.addToStudy(fuse,"Fuse") -box_id = geompy.addToStudy(box2, "Box") gg = salome.ImportComponentGUI("GEOM") gg.createAndDisplayGO(fuse_id) gg.setDisplayMode(fuse_id,1) -gg.createAndDisplayGO(box_id) -gg.setVectorsMode(box_id, 1) +gg.setVectorsMode(fuse_id, 1) +gg.setVerticesMode(fuse_id, 1) diff --git a/doc/salome/gui/GEOM/input/display_mode.doc b/doc/salome/gui/GEOM/input/display_mode.doc index f8eaeccf0..f8f2184e7 100644 --- a/doc/salome/gui/GEOM/input/display_mode.doc +++ b/doc/salome/gui/GEOM/input/display_mode.doc @@ -29,6 +29,17 @@ functionality for all objects in the current view via the main menu \n TUI Command: gg.setVectorsMode(ID, Bool) +\n Also it is possible to show the vertices of the selected +shape. For this, choose in the context menu of the shape +Display mode -> Show Vertices, or apply this +functionality for all objects in the current view via the main menu + View -> Display Mode -> Show/Hide Vertices. + +\image html vertices_mode.png +
Vertices Mode (Show Vertices)
+ +\n TUI Command: gg.setVerticesMode(ID, Bool) + Our TUI Scripts provide you with useful examples of \ref tui_change_disp_mode "Changing Display Parameters". diff --git a/src/DisplayGUI/DisplayGUI.cxx b/src/DisplayGUI/DisplayGUI.cxx index fcd23e997..3f407fd34 100644 --- a/src/DisplayGUI/DisplayGUI.cxx +++ b/src/DisplayGUI/DisplayGUI.cxx @@ -136,6 +136,12 @@ bool DisplayGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent) ( GetVectorMode() ? tr("MEN_VECTOR_MODE_ON") : tr( "MEN_VECTOR_MODE_OFF" ) ); getGeometryGUI()->menuMgr()->update(); break; + case GEOMOp::OpSwitchVertices: // MENU VIEW - DISPLAY MODE - SHOW/HIDE VERTICES + SetVerticesMode(!GetVerticesMode()); + getGeometryGUI()->action( GEOMOp::OpSwitchVertices )->setText + ( GetVerticesMode() ? tr("MEN_VERTICES_MODE_ON") : tr( "MEN_VERTICES_MODE_OFF" ) ); + getGeometryGUI()->menuMgr()->update(); + break; case GEOMOp::OpWireframe: // POPUP MENU - DISPLAY MODE - WIREFRAME ChangeDisplayMode( 0 ); break; @@ -151,6 +157,9 @@ bool DisplayGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent) case GEOMOp::OpVectors: // POPUP MENU - DISPLAY MODE - SHOW EDGE DIRECTION ChangeDisplayMode( 4 ); break; + case GEOMOp::OpVertices: // POPUP MENU - DISPLAY MODE - SHOW VERTICES + ChangeDisplayMode( 5 ); + break; default: app->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID)); break; @@ -485,6 +494,52 @@ int DisplayGUI::GetVectorMode( SUIT_ViewWindow* viewWindow ) return viewWindow->property( "VectorsMode" ).toBool(); } +//===================================================================================== +// function : DisplayGUI::SetVerticesMode() +// purpose : Set vertices mode for the viewer +//===================================================================================== +void DisplayGUI::SetVerticesMode( const bool mode, SUIT_ViewWindow* viewWindow ) +{ + SUIT_OverrideCursor(); + + SalomeApp_Application* app = getGeometryGUI()->getApp(); + if ( !app ) return; + + SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() ); + if ( !aStudy ) return; + + if ( !viewWindow ) + viewWindow = app->desktop()->activeWindow(); + + GEOM_Displayer displayer( aStudy ); + + viewWindow->setProperty( "VerticesMode", mode ); + + int aMgrId = viewWindow->getViewManager()->getGlobalId(); + + SALOME_ListIO anIOlst; + displayer.GetActiveView()->GetVisible( anIOlst ); + + for ( SALOME_ListIteratorOfListIO It( anIOlst ); It.More(); It.Next() ) { + Handle( SALOME_InteractiveObject ) io = It.Value(); + aStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::Vertices ), mode ); + displayer.Redisplay( io, false ); + } + displayer.UpdateViewer(); + GeometryGUI::Modified(); +} + +//===================================================================================== +// function : DisplayGUI::GetVerticesMode() +// purpose : Get the "show vertices" mode of the viewer +//===================================================================================== +int DisplayGUI::GetVerticesMode( SUIT_ViewWindow* viewWindow ) +{ + if ( !viewWindow ) + viewWindow = getGeometryGUI()->getApp()->desktop()->activeWindow(); + return viewWindow->property( "VerticesMode" ).toBool(); +} + //===================================================================================== // function : DisplayGUI::ChangeDisplayMode() // purpose : Set display mode for selected objects in the viewer given @@ -516,6 +571,8 @@ void DisplayGUI::ChangeDisplayMode( const int mode, SUIT_ViewWindow* viewWindow QVariant v = aStudy->getObjectProperty( mgrId, selected.First()->getEntry(), GEOM::propertyName( GEOM::EdgesDirection ), QVariant() ); bool vectorMode = v.isValid() ? !v.toBool() : false; + v = aStudy->getObjectProperty( mgrId, selected.First()->getEntry(), GEOM::propertyName( GEOM::Vertices ), QVariant() ); + bool verticesMode = v.isValid() ? !v.toBool() : false; for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { Handle( SALOME_InteractiveObject ) io = It.Value(); @@ -525,6 +582,9 @@ void DisplayGUI::ChangeDisplayMode( const int mode, SUIT_ViewWindow* viewWindow else if ( mode == 4 ) { aStudy->setObjectProperty( mgrId, io->getEntry(), GEOM::propertyName( GEOM::EdgesDirection ), vectorMode ); } + else if ( mode == 5 ) { + aStudy->setObjectProperty( mgrId, io->getEntry(), GEOM::propertyName( GEOM::Vertices ), verticesMode ); + } displayer.Redisplay( io, false ); } displayer.UpdateViewer(); diff --git a/src/DisplayGUI/DisplayGUI.h b/src/DisplayGUI/DisplayGUI.h index 64207c557..5ad5933c7 100644 --- a/src/DisplayGUI/DisplayGUI.h +++ b/src/DisplayGUI/DisplayGUI.h @@ -69,6 +69,12 @@ public: int GetVectorMode( SUIT_ViewWindow* = 0 ); // Invert vector mode ( shadin <-> wireframe ) for the viewer + // VERTICES MODE methods + // Set vertices mode for the viewer + void SetVerticesMode( const bool, SUIT_ViewWindow* = 0 ); + // Get vertices mode of the viewer + int GetVerticesMode( SUIT_ViewWindow* = 0 ); + // Set display mode for selected objects in the viewer given // (current viewer if = 0 ) void ChangeDisplayMode( const int, SUIT_ViewWindow* = 0 ); diff --git a/src/GEOMGUI/GEOMGUI_Selection.cxx b/src/GEOMGUI/GEOMGUI_Selection.cxx index 3e6f31a31..a2ad57d4b 100644 --- a/src/GEOMGUI/GEOMGUI_Selection.cxx +++ b/src/GEOMGUI/GEOMGUI_Selection.cxx @@ -171,6 +171,8 @@ QVariant GEOMGUI_Selection::parameter( const int idx, const QString& p ) const v = isAutoColor( idx ); else if ( p == "isVectorsMode" ) v = isVectorsMode( idx ); + else if ( p == "isVerticesMode" ) + v = isVerticesMode( idx ); else if ( p == "topLevel" ) v = topLevel( idx ); else if ( p == "autoBringToFront" ) @@ -428,6 +430,53 @@ bool GEOMGUI_Selection::isVectorsMode( const int index ) const return res; } +bool GEOMGUI_Selection::isVerticesMode( const int index ) const +{ +#ifdef USE_VISUAL_PROP_MAP + QVariant v = visibleProperty( entry( index ), GEOM::propertyName( GEOM::Vertices ) ); + if ( v.canConvert( QVariant::Bool ) ) + return v.toBool(); +#endif + + bool res = false; + + SALOME_View* view = GEOM_Displayer::GetActiveView(); + QString viewType = activeViewType(); + if ( view && ( viewType == OCCViewer_Viewer::Type() || viewType == SVTK_Viewer::Type() ) ) { + SALOME_Prs* prs = view->CreatePrs( entry( index ).toLatin1().constData() ); + if ( prs ) { + if ( viewType == OCCViewer_Viewer::Type() ) { // assuming OCC + SOCC_Prs* occPrs = (SOCC_Prs*) prs; + AIS_ListOfInteractive lst; + occPrs->GetObjects( lst ); + if ( lst.Extent() ) { + Handle(AIS_InteractiveObject) io = lst.First(); + if ( !io.IsNull() ) { + Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(io); + if ( !aSh.IsNull() ) + res = aSh->isShowVertices(); + } + } + } + else if ( viewType == SVTK_Viewer::Type() ) { // assuming VTK + SVTK_Prs* vtkPrs = dynamic_cast( prs ); + vtkActorCollection* lst = vtkPrs ? vtkPrs->GetObjects() : 0; + if ( lst ) { + lst->InitTraversal(); + vtkActor* actor = lst->GetNextActor(); + if ( actor ) { + GEOM_Actor* aGeomActor = GEOM_Actor::SafeDownCast(actor); + if ( aGeomActor ) + res = aGeomActor->GetVerticesMode(); + } + } + } + } + } + + return res; +} + bool GEOMGUI_Selection::hasChildren( const _PTR(SObject)& obj ) { if ( obj ) { diff --git a/src/GEOMGUI/GEOMGUI_Selection.h b/src/GEOMGUI/GEOMGUI_Selection.h index be21acfb4..d7b692609 100644 --- a/src/GEOMGUI/GEOMGUI_Selection.h +++ b/src/GEOMGUI/GEOMGUI_Selection.h @@ -67,6 +67,7 @@ private: QString displayMode( const int ) const; QString selectionMode() const; bool isVectorsMode( const int ) const; + bool isVerticesMode( const int ) const; bool hasChildren( const int ) const; int nbChildren( const int ) const; bool hasConcealedChildren( const int ) const; diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index 09c3ccf2d..a012c220b 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -871,6 +871,9 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap // set display vectors flag AISShape->SetDisplayVectors( propMap.value( GEOM::propertyName( GEOM::EdgesDirection ) ).toBool() ); + // set display vertices flag + AISShape->SetDisplayVertices( propMap.value( GEOM::propertyName( GEOM::Vertices ) ).toBool() ); + // set transparency if( HasTransparency() ) { AISShape->SetTransparency( GetTransparency() ); @@ -1144,6 +1147,9 @@ void GEOM_Displayer::updateActorProperties( GEOM_Actor* actor, bool create ) // set display vectors flag actor->SetVectorMode( propMap.value( GEOM::propertyName( GEOM::EdgesDirection ) ).toBool() ); + // set display vertices flag + actor->SetVerticesMode( propMap.value( GEOM::propertyName( GEOM::Vertices ) ).toBool() ); + // set display mode int displayMode = HasDisplayMode() ? // predefined display mode, manually set to displayer via GEOM_Displayer::SetDisplayMode() function @@ -2498,6 +2504,9 @@ PropMap GEOM_Displayer::getDefaultPropertyMap() // - show edges direction flag (false by default) propMap.insert( GEOM::propertyName( GEOM::EdgesDirection ), false ); + // - show vertices flag (false by default) + propMap.insert( GEOM::propertyName( GEOM::Vertices ), false ); + // - shading color (take default value from preferences) propMap.insert( GEOM::propertyName( GEOM::ShadingColor ), colorFromResources( "shading_color", QColor( 255, 255, 0 ) ) ); diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index c8a36982d..d19174cc9 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -2900,6 +2900,10 @@ Please, select face, shell or solid and try again MEN_POP_VECTORS Show Edge Direction + + MEN_POP_VERTICES + Show Vertices + MEN_PREFERENCES Preferences @@ -3072,6 +3076,14 @@ Please, select face, shell or solid and try again MEN_VECTOR_MODE_OFF Hide Edge Direction + + MEN_VERTICES_MODE_ON + Show Vertices + + + MEN_VERTICES_MODE_OFF + Hide Vertices + MEN_WIREFRAME Wireframe @@ -3768,6 +3780,10 @@ Please, select face, shell or solid and try again STB_POP_VECTORS Show Edge Direction + + STB_POP_VERTICES + Show Vertices + STB_POP_SETTEXTURE Add a texture diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index 43e865ae9..1df722c35 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -520,11 +520,13 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam ) case GEOMOp::OpHide: // MENU VIEW - ERASE case GEOMOp::OpShow: // MENU VIEW - DISPLAY case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE + case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE case GEOMOp::OpWireframe: // POPUP MENU - WIREFRAME case GEOMOp::OpShading: // POPUP MENU - SHADING case GEOMOp::OpShadingWithEdges: // POPUP MENU - SHADING WITH EDGES case GEOMOp::OpTexture: // POPUP MENU - TEXTURE case GEOMOp::OpVectors: // POPUP MENU - VECTORS + case GEOMOp::OpVertices: // POPUP MENU - VERTICES libName = "DisplayGUI"; break; case GEOMOp::OpPoint: // MENU BASIC - POINT @@ -1043,6 +1045,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" ); createGeomAction( GEOMOp::OpShow, "DISPLAY" ); createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE"); + createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE"); createGeomAction( GEOMOp::OpSelectVertex, "VERTEX_SEL_ONLY" ,"", 0, true ); createGeomAction( GEOMOp::OpSelectEdge, "EDGE_SEL_ONLY", "", 0, true ); createGeomAction( GEOMOp::OpSelectWire, "WIRE_SEL_ONLY", "", 0, true ); @@ -1064,6 +1067,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createGeomAction( GEOMOp::OpEdgeWidth, "EDGE_WIDTH"); createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH"); createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true ); + createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true ); createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" ); createGeomAction( GEOMOp::OpColor, "POP_COLOR" ); createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" ); @@ -1319,6 +1323,7 @@ void GeometryGUI::initialize( CAM_Application* app ) createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 ); createMenu( separator(), dispmodeId, -1 ); createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 ); + createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 ); createMenu( separator(), viewId, -1 ); createMenu( GEOMOp::OpShowAll, viewId, -1 ); @@ -1520,6 +1525,9 @@ void GeometryGUI::initialize( CAM_Application* app ) 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 + " 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 + " and isVerticesMode", QtxPopupMgr::ToggleRule ); mgr->insert( separator(), -1, -1 ); // ----------- mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color @@ -2888,6 +2896,11 @@ void GeometryGUI::storeVisualParameters (int savePoint) ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString()); } + if (aProps.contains(GEOM::propertyName( GEOM::Vertices ))) { + param = occParam + GEOM::propertyName( GEOM::Vertices ); + ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString()); + } + if (aProps.contains(GEOM::propertyName( GEOM::Deflection ))) { param = occParam + GEOM::propertyName( GEOM::Deflection ); ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Deflection )).toString().toStdString()); @@ -3058,6 +3071,8 @@ void GeometryGUI::restoreVisualParameters (int savePoint) aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val ); } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) { aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1"); + } else if (paramNameStr == GEOM::propertyName( GEOM::Vertices )) { + aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Vertices ), val == "true" || val == "1"); } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) { aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble()); } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) { @@ -3111,13 +3126,19 @@ void GeometryGUI::onViewAboutToShow() { SUIT_ViewWindow* window = application()->desktop()->activeWindow(); QAction* a = action( GEOMOp::OpSwitchVectors ); + QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices ); if ( window ) { a->setEnabled(true); bool vmode = window->property("VectorsMode").toBool(); a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") ); + aVerticesAction->setEnabled(true); + vmode = window->property("VerticesMode").toBool(); + aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") ); } else { a->setText ( tr("MEN_VECTOR_MODE_ON") ); a->setEnabled(false); + aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") ); + aVerticesAction->setEnabled(false); } } diff --git a/src/GEOMGUI/GeometryGUI_Operations.h b/src/GEOMGUI/GeometryGUI_Operations.h index 5a33af0dc..4a109372a 100644 --- a/src/GEOMGUI/GeometryGUI_Operations.h +++ b/src/GEOMGUI/GeometryGUI_Operations.h @@ -71,6 +71,7 @@ namespace GEOMOp { OpDMShading = 2011, // MENU VIEW - DISPLAY MODE - SHADING OpDMShadingWithEdges = 2012, // MENU VIEW - DISPLAY MODE - SHADING WITH EDGES OpDMTexture = 2013, // MENU VIEW - DISPLAY MODE - TEXTURE + OpSwitchVertices = 2014, // MENU VIEW - DISPLAY MODE - SHOW/HIDE VERTICES OpShow = 2100, // POPUP MENU - SHOW OpShowOnly = 2101, // POPUP MENU - SHOW ONLY OpHide = 2102, // POPUP MENU - HIDE @@ -82,6 +83,7 @@ namespace GEOMOp { OpTexture = 2204, // POPUP MENU - DISPLAY MODE - TEXTURE OpBringToFront = 2205, // POPUP MENU - BRING TO FRONT OpClsBringToFront = 2206, + OpVertices = 2208, // POPUP MENU - DISPLAY MODE - SHOW VERTICES // BasicGUI --------------------//-------------------------------- OpPoint = 3000, // MENU NEW ENTITY - BASIC - POINT OpLine = 3001, // MENU NEW ENTITY - BASIC - LINE diff --git a/src/GEOM_SWIG/GEOM_example3.py b/src/GEOM_SWIG/GEOM_example3.py index 5f79ccd14..b2432f339 100644 --- a/src/GEOM_SWIG/GEOM_example3.py +++ b/src/GEOM_SWIG/GEOM_example3.py @@ -113,6 +113,7 @@ if not isinstance(gg, type(salome_ComponentGUI)): gg.setDisplayMode(id_torus1,1) gg.setDisplayMode(id_torus2,1) gg.setVectorsMode(id_acyl,1,1) + gg.setVerticesMode(id_acyl,1,1) #gg.setDisplayMode(id_cage,1) gg.setColor(id_torus1,0,0,255) diff --git a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx index 1fa77355d..2b918cc12 100644 --- a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx +++ b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx @@ -391,6 +391,18 @@ void GEOM_Swig::setVectorsMode( const char* theEntry, bool theOn, bool theUpdate theOn, theUpdateViewer ) ); } +/*! + \brief Show / hide vertices for the presentation + \param theEntry geometry object's entry + \param theOn \c true to show vertices or \c false otherwise + \param theUpdateViewer \c true to update active view's contents +*/ +void GEOM_Swig::setVerticesMode( const char* theEntry, bool theOn, bool theUpdateViewer ) +{ + ProcessVoidEvent( new TSetPropertyEvent( theEntry, GEOM::propertyName( GEOM::Vertices ), + theOn, theUpdateViewer ) ); +} + /*! \brief Change color of the presentation \param theEntry geometry object's entry diff --git a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h index 60cb10cfa..1fd1d864e 100644 --- a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h +++ b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h @@ -41,6 +41,7 @@ public: void setDisplayMode( const char* theEntry, int theMode, bool theUpdateViewer = true ); void setVectorsMode( const char* theEntry, bool theOn, bool theUpdateViewer = true ); + void setVerticesMode( const char* theEntry, bool theOn, bool theUpdateViewer = true ); void setColor( const char* theEntry, int theRed, int theGreen, int theBlue, bool theUpdateViewer = true ); void setTransparency( const char* theEntry, float theTransparency, bool theUpdateViewer = true ); void setIsos( const char* theEntry, int theNbU, int theNbV, bool theUpdateViewer = true ); diff --git a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i index 6d1050a98..30f6065c7 100644 --- a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i +++ b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i @@ -63,6 +63,7 @@ class GEOM_Swig void setDisplayMode( const char* theEntry, int theMode, bool theUpdateViewer = true ); void setVectorsMode( const char* theEntry, bool theOn, bool theUpdateViewer = true ); + void setVerticesMode( const char* theEntry, bool theOn, bool theUpdateViewer = true ); void setColor( const char* theEntry, int theRed, int theGreen, int theBlue, bool theUpdateViewer = true ); void setTransparency( const char* theEntry, float theTransparency, bool theUpdateViewer = true ); void setIsos( const char* theEntry, int theNbU, int theNbV, bool theUpdateViewer = true ); diff --git a/src/OBJECT/GEOM_AISShape.cxx b/src/OBJECT/GEOM_AISShape.cxx index 462eed0c2..a6ded99e0 100644 --- a/src/OBJECT/GEOM_AISShape.cxx +++ b/src/OBJECT/GEOM_AISShape.cxx @@ -53,6 +53,7 @@ #include #include #include +#include #include #include @@ -148,6 +149,7 @@ GEOM_AISShape::GEOM_AISShape(const TopoDS_Shape& shape, : SALOME_AISShape(shape), myName(aName), myDisplayVectors(false), + myDisplayVertices(false), myFieldDataType(GEOM::FDT_Double), myFieldDimension(0), myFieldStepRangeMin(0), @@ -215,6 +217,9 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent bool anIsColorField = anIsField && myFieldDataType != GEOM::FDT_String; bool anIsTextField = anIsField && myFieldDataType == GEOM::FDT_String; + if (isShowVertices()) + myDrawer->SetVertexDrawMode(Prs3d_VDM_All); + // StdSelect_DisplayMode d = (StdSelect_DisplayMode) aMode; bool isTopLev = isTopLevel() && switchTopLevel(); switch (aMode) { @@ -359,6 +364,11 @@ void GEOM_AISShape::SetDisplayVectors(bool isDisplayed) myDisplayVectors = isDisplayed; } +void GEOM_AISShape::SetDisplayVertices(bool isDisplayed) +{ + myDisplayVertices = isDisplayed; +} + void GEOM_AISShape::shadingMode(const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPrs, const Standard_Integer aMode) diff --git a/src/OBJECT/GEOM_AISShape.hxx b/src/OBJECT/GEOM_AISShape.hxx index d744a791a..8a60ba952 100644 --- a/src/OBJECT/GEOM_AISShape.hxx +++ b/src/OBJECT/GEOM_AISShape.hxx @@ -124,12 +124,14 @@ public: void SetShadingColor(const Quantity_Color &aCol); void SetEdgesInShadingColor(const Quantity_Color &aCol); void SetDisplayVectors(bool isShow); + void SetDisplayVertices(bool isShow); virtual void Compute(const Handle(PrsMgr_PresentationManager3d)& aPresentationManager, const Handle(Prs3d_Presentation)& aPresentation, const Standard_Integer aMode = 0) ; virtual bool isShowVectors () { return myDisplayVectors; } + virtual bool isShowVertices () { return myDisplayVertices; } virtual Standard_Boolean switchTopLevel(); virtual Standard_Boolean toActivate(); @@ -182,6 +184,7 @@ protected: private: TCollection_AsciiString myName; bool myDisplayVectors; + bool myDisplayVertices; Standard_Boolean myTopLevel; Standard_Integer myPrevDisplayMode; diff --git a/src/OBJECT/GEOM_Actor.cxx b/src/OBJECT/GEOM_Actor.cxx index 47bc66b17..851b83ab1 100644 --- a/src/OBJECT/GEOM_Actor.cxx +++ b/src/OBJECT/GEOM_Actor.cxx @@ -82,6 +82,7 @@ GEOM_Actor::GEOM_Actor(): // myDisplayMode(eWireframe), myIsSelected(false), myVectorMode(false), + myVerticesMode(false), myVertexActor(GEOM_DeviceActor::New(),true), myVertexSource(GEOM_VertexSource::New(),true), @@ -129,13 +130,13 @@ GEOM_Actor::GEOM_Actor(): myHighlightProp->SetAmbientColor(1, 1, 1); myHighlightProp->SetDiffuseColor(1, 1, 1); myHighlightProp->SetSpecularColor(0.5, 0.5, 0.5); - myHighlightProp->SetPointSize(SALOME_POINT_SIZE); + myHighlightProp->SetPointSize(0); myHighlightActor->SetProperty(myHighlightProp.GetPointer()); this->myHighlightActor->SetInput(myAppendFilter->GetOutputPort(),false); myPreHighlightProp->SetColor(0,1,1); - myPreHighlightProp->SetPointSize(SALOME_POINT_SIZE+2); + myPreHighlightProp->SetPointSize(0); myPreHighlightProp->SetLineWidth(SALOME_LINE_WIDTH+1); myPreHighlightProp->SetRepresentationToWireframe(); @@ -189,6 +190,7 @@ GEOM_Actor::GEOM_Actor(): // Toggle display mode setDisplayMode(0); // WIRE FRAME SetVectorMode(0); // + SetVerticesMode(0); // } @@ -355,7 +357,7 @@ SetVisibility(int theVisibility) myOneFaceEdgeActor->SetVisibility(theVisibility && (myDisplayMode == (int)eWireframe || myDisplayMode == (int)eShadingWithEdges) && !myIsSelected); myIsolatedEdgeActor->SetVisibility(theVisibility && !myIsSelected); - myVertexActor->SetVisibility(theVisibility && myDisplayMode == (int)eWireframe && !myIsSelected);// must be added new mode points + myVertexActor->SetVisibility(theVisibility && myVerticesMode && (!myIsSelected && !myIsPreselected));// must be added new mode points } @@ -391,6 +393,23 @@ GEOM_Actor return myVectorMode; } +void +GEOM_Actor +::SetVerticesMode(bool theMode) +{ + myVerticesMode = theMode; + theMode ? myPreHighlightProp->SetPointSize(SALOME_POINT_SIZE+2) : myPreHighlightProp->SetPointSize(0); + theMode ? myHighlightProp->SetPointSize(SALOME_POINT_SIZE) : myHighlightProp->SetPointSize(0); + SetModified(); +} + +bool +GEOM_Actor +::GetVerticesMode() +{ + return myVerticesMode; +} + void GEOM_Actor:: SetDeflection(float theDeflection) diff --git a/src/OBJECT/GEOM_Actor.h b/src/OBJECT/GEOM_Actor.h index fa7193a0f..173f40a0b 100644 --- a/src/OBJECT/GEOM_Actor.h +++ b/src/OBJECT/GEOM_Actor.h @@ -202,6 +202,15 @@ public: bool GetVectorMode(); + //! Vertices mode management + virtual + void + SetVerticesMode(const bool theMode); + + virtual + bool + GetVerticesMode(); + protected: void SetModified(); @@ -220,6 +229,7 @@ private: // EDisplayMode myDisplayMode; bool myIsSelected; bool myVectorMode; + bool myVerticesMode; PDeviceActor myVertexActor; PVertexSource myVertexSource; diff --git a/src/OBJECT/GEOM_Constants.cxx b/src/OBJECT/GEOM_Constants.cxx index 7790adcba..0ccf2ed1c 100644 --- a/src/OBJECT/GEOM_Constants.cxx +++ b/src/OBJECT/GEOM_Constants.cxx @@ -69,6 +69,8 @@ namespace GEOM "Color", // COLOR_PROP // "show edges direction" flag "VectorMode", // VECTOR_MODE_PROP + // "show vertices" flag + "VerticesMode", // VERTICES_MODE_PROP // deflection coefficient "DeflectionCoeff", // DEFLECTION_COEFF_PROP // point marker data diff --git a/src/OBJECT/GEOM_Constants.h b/src/OBJECT/GEOM_Constants.h index 17f65eb36..e314735f8 100644 --- a/src/OBJECT/GEOM_Constants.h +++ b/src/OBJECT/GEOM_Constants.h @@ -39,6 +39,7 @@ namespace GEOM NbIsos, Color, EdgesDirection, + Vertices, Deflection, PointMarker, Material, -- 2.30.2