diff --git a/doc/salome/examples/viewing_geom_objs_ex01.py b/doc/salome/examples/viewing_geom_objs_ex01.py
index 17387b724..b5935764b 100644
--- a/doc/salome/examples/viewing_geom_objs_ex01.py
+++ b/doc/salome/examples/viewing_geom_objs_ex01.py
@@ -17,3 +17,4 @@ gg.createAndDisplayGO(fuse_id)
gg.setDisplayMode(fuse_id,1)
gg.setVectorsMode(fuse_id, 1)
gg.setVerticesMode(fuse_id, 1)
+gg.setNameMode(fuse_id, 1)
diff --git a/doc/salome/gui/GEOM/input/display_mode.doc b/doc/salome/gui/GEOM/input/display_mode.doc
index f8f2184e7..7ba535184 100644
--- a/doc/salome/gui/GEOM/input/display_mode.doc
+++ b/doc/salome/gui/GEOM/input/display_mode.doc
@@ -40,6 +40,17 @@ functionality for all objects in the current view via the main menu
\n TUI Command:gg.setVerticesMode(ID, Bool)
+\n Moreover user can show the name of the selected
+shape. For this, choose in the context menu of the shape
+Display mode -> Show Name, or apply this
+functionality for all objects in the current view via the main menu
+ View -> Display Mode -> Show/Hide Name.
+
+\image html name_mode.png
+
Name Mode (Show Name)
+
+\n TUI Command:gg.setNameMode(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 05cfca53d..2255329cc 100644
--- a/src/DisplayGUI/DisplayGUI.cxx
+++ b/src/DisplayGUI/DisplayGUI.cxx
@@ -141,6 +141,12 @@ bool DisplayGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent)
( GetVerticesMode() ? tr("MEN_VERTICES_MODE_ON") : tr( "MEN_VERTICES_MODE_OFF" ) );
getGeometryGUI()->menuMgr()->update();
break;
+ case GEOMOp::OpSwitchName: // MENU VIEW - DISPLAY MODE - SHOW/HIDE NAME
+ SetNameMode(!GetNameMode());
+ getGeometryGUI()->action( GEOMOp::OpSwitchName )->setText
+ ( GetNameMode() ? tr("MEN_NAME_MODE_ON") : tr( "MEN_NAME_MODE_OFF" ) );
+ getGeometryGUI()->menuMgr()->update();
+ break;
case GEOMOp::OpWireframe: // POPUP MENU - DISPLAY MODE - WIREFRAME
ChangeDisplayMode( 0 );
break;
@@ -158,6 +164,8 @@ bool DisplayGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent)
break;
case GEOMOp::OpVertices: // POPUP MENU - DISPLAY MODE - SHOW VERTICES
ChangeDisplayMode( 5 );
+ case GEOMOp::OpShowName: // POPUP MENU - DISPLAY MODE - SHOW NAME
+ ChangeDisplayMode( 6 );
break;
default:
app->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID));
@@ -539,6 +547,52 @@ int DisplayGUI::GetVerticesMode( SUIT_ViewWindow* viewWindow )
return viewWindow->property( "VerticesMode" ).toBool();
}
+//=====================================================================================
+// function : DisplayGUI::SetNameMode()
+// purpose : Set name mode for the viewer
+//=====================================================================================
+void DisplayGUI::SetNameMode( 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();
+
+ viewWindow->setProperty( "NameMode", mode );
+
+ GEOM_Displayer displayer( aStudy );
+
+ 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::ShowName ), mode );
+ displayer.Redisplay( io, false );
+ }
+ displayer.UpdateViewer();
+ GeometryGUI::Modified();
+}
+
+//=====================================================================================
+// function : DisplayGUI::GetNameMode()
+// purpose : Get the "show name" mode of the viewer
+//=====================================================================================
+int DisplayGUI::GetNameMode( SUIT_ViewWindow* viewWindow )
+{
+ if ( !viewWindow )
+ viewWindow = getGeometryGUI()->getApp()->desktop()->activeWindow();
+ return viewWindow->property( "NameMode" ).toBool();
+}
+
//=====================================================================================
// function : DisplayGUI::ChangeDisplayMode()
// purpose : Set display mode for selected objects in the viewer given
@@ -572,6 +626,8 @@ void DisplayGUI::ChangeDisplayMode( const int mode, SUIT_ViewWindow* viewWindow
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;
+ v = aStudy->getObjectProperty( mgrId, selected.First()->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
+ bool nameMode = v.isValid() ? !v.toBool() : false;
for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
Handle( SALOME_InteractiveObject ) io = It.Value();
@@ -584,6 +640,9 @@ void DisplayGUI::ChangeDisplayMode( const int mode, SUIT_ViewWindow* viewWindow
else if ( mode == 5 ) {
aStudy->setObjectProperty( mgrId, io->getEntry(), GEOM::propertyName( GEOM::Vertices ), verticesMode );
}
+ else if ( mode == 6 ) {
+ aStudy->setObjectProperty( mgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), nameMode );
+ }
displayer.Redisplay( io, false );
}
displayer.UpdateViewer();
diff --git a/src/DisplayGUI/DisplayGUI.h b/src/DisplayGUI/DisplayGUI.h
index 1e7e3099a..252e8a07c 100644
--- a/src/DisplayGUI/DisplayGUI.h
+++ b/src/DisplayGUI/DisplayGUI.h
@@ -75,6 +75,12 @@ public:
// Get vertices mode of the viewer
int GetVerticesMode( SUIT_ViewWindow* = 0 );
+ // NAME MODE methods
+ // Set name mode for the viewer
+ void SetNameMode( const bool, SUIT_ViewWindow* = 0 );
+ // Get name mode of the viewer
+ int GetNameMode( 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/EntityGUI/EntityGUI_SubShapeDlg.cxx b/src/EntityGUI/EntityGUI_SubShapeDlg.cxx
index a6cf73cfb..9db5fbab0 100644
--- a/src/EntityGUI/EntityGUI_SubShapeDlg.cxx
+++ b/src/EntityGUI/EntityGUI_SubShapeDlg.cxx
@@ -916,6 +916,7 @@ void EntityGUI_SubShapeDlg::ClickOnOkFilter()
( myGreaterFilterCheck->isChecked() && !myLessFilterCheck->isChecked() && isGreater ) ) {
Handle(SALOME_InteractiveObject) io = new SALOME_InteractiveObject();
io->setEntry( anEntry.toLatin1().constData() );
+ io->setName( myObject->GetName() );
toSelect.Append(io);
}
}
diff --git a/src/GEOMGUI/GEOMGUI_Selection.cxx b/src/GEOMGUI/GEOMGUI_Selection.cxx
index f591ecba4..02ab2b0c6 100644
--- a/src/GEOMGUI/GEOMGUI_Selection.cxx
+++ b/src/GEOMGUI/GEOMGUI_Selection.cxx
@@ -172,6 +172,8 @@ QVariant GEOMGUI_Selection::parameter( const int idx, const QString& p ) const
v = isVectorsMode( idx );
else if ( p == "isVerticesMode" )
v = isVerticesMode( idx );
+ else if ( p == "isNameMode" )
+ v = isNameMode( idx );
else if ( p == "topLevel" )
v = topLevel( idx );
else if ( p == "autoBringToFront" )
@@ -476,6 +478,53 @@ bool GEOMGUI_Selection::isVerticesMode( const int index ) const
return res;
}
+bool GEOMGUI_Selection::isNameMode( const int index ) const
+{
+#ifdef USE_VISUAL_PROP_MAP
+ QVariant v = visibleProperty( entry( index ), GEOM::propertyName( GEOM::ShowName ) );
+ 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->isShowName();
+ }
+ }
+ }
+ 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->GetNameMode();
+ }
+ }
+ }
+ }
+ }
+
+ 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 fa3748524..f62f68699 100644
--- a/src/GEOMGUI/GEOMGUI_Selection.h
+++ b/src/GEOMGUI/GEOMGUI_Selection.h
@@ -68,6 +68,7 @@ private:
QString selectionMode() const;
bool isVectorsMode( const int ) const;
bool isVerticesMode( const int ) const;
+ bool isNameMode( 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 e024262fa..cd54ac147 100644
--- a/src/GEOMGUI/GEOM_Displayer.cxx
+++ b/src/GEOMGUI/GEOM_Displayer.cxx
@@ -853,6 +853,10 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap
bool isVerticesMode = propMap.value( GEOM::propertyName( GEOM::Vertices ) ).toBool();
AISShape->SetDisplayVertices( isVerticesMode );
+ // set display name flag
+ bool isNameMode = propMap.value( GEOM::propertyName( GEOM::ShowName ) ).toBool();
+ AISShape->SetDisplayName( isNameMode );
+
// set transparency
if( HasTransparency() ) {
AISShape->SetTransparency( GetTransparency() );
@@ -1141,6 +1145,9 @@ void GEOM_Displayer::updateActorProperties( GEOM_Actor* actor, bool create )
// set display vertices flag
actor->SetVerticesMode( propMap.value( GEOM::propertyName( GEOM::Vertices ) ).toBool() );
+ // set display name flag
+ actor->SetNameMode( propMap.value( GEOM::propertyName( GEOM::ShowName ) ).toBool() );
+
// set display mode
int displayMode = HasDisplayMode() ?
// predefined display mode, manually set to displayer via GEOM_Displayer::SetDisplayMode() function
@@ -1755,6 +1762,7 @@ SALOME_Prs* GEOM_Displayer::buildPresentation( const QString& entry,
if ( !GeomObject->_is_nil() )
{
+ theIO->setName( GeomObject->GetName() );
// finally set shape
setShape( GEOM_Client::get_client().GetShape( GeometryGUI::GetGeomGen(), GeomObject ) );
}
@@ -2550,6 +2558,9 @@ PropMap GEOM_Displayer::getDefaultPropertyMap()
// - show vertices flag (false by default)
propMap.insert( GEOM::propertyName( GEOM::Vertices ), false );
+ // - show name flag (false by default)
+ propMap.insert( GEOM::propertyName( GEOM::ShowName ), 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 d3b0bd8a1..d5bdf3e5f 100644
--- a/src/GEOMGUI/GEOM_msg_en.ts
+++ b/src/GEOMGUI/GEOM_msg_en.ts
@@ -2968,6 +2968,10 @@ Please, select face, shell or solid and try again
MEN_POP_VERTICESShow Vertices
+
+ MEN_POP_SHOW_NAME
+ Show Name
+ MEN_PREFERENCESPreferences
@@ -3156,6 +3160,14 @@ Please, select face, shell or solid and try again
MEN_VERTICES_MODE_OFFHide Vertices
+
+ MEN_NAME_MODE_ON
+ Show Name
+
+
+ MEN_NAME_MODE_OFF
+ Hide Name
+ MEN_WIREFRAMEWireframe
@@ -3864,6 +3876,10 @@ Please, select face, shell or solid and try again
STB_POP_VERTICESShow Vertices
+
+ STB_POP_SHOW_NAME
+ Show Name
+ STB_POP_SETTEXTUREAdd a texture
@@ -3928,6 +3944,10 @@ Please, select face, shell or solid and try again
STB_VECTOR_MODEChange Edge Presentation Mode
+
+ STB_NAME_MODE
+ Show/Hide names of visible shapes
+ STB_SHADING_COLORSet shading color
diff --git a/src/GEOMGUI/GEOM_msg_fr.ts b/src/GEOMGUI/GEOM_msg_fr.ts
index 37f126e6d..0dda5406f 100644
--- a/src/GEOMGUI/GEOM_msg_fr.ts
+++ b/src/GEOMGUI/GEOM_msg_fr.ts
@@ -2968,6 +2968,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau
MEN_POP_VERTICESMontrer les sommets
+
+ MEN_POP_SHOW_NAME
+ Montrer le nom
+ MEN_PREFERENCESPréférences
@@ -3156,6 +3160,14 @@ Choisissez une face, une coque ou un solide et essayez de nouveau
MEN_VERTICES_MODE_OFFCacher les sommets
+
+ MEN_NAME_MODE_ON
+ Montrer le nom
+
+
+ MEN_NAME_MODE_OFF
+ Cacher le nom
+ MEN_WIREFRAMEFilaire
@@ -3864,6 +3876,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau
STB_POP_VERTICESMontrer les sommets
+
+ STB_POP_SHOW_NAME
+ Montrer le nom
+ STB_POP_SETTEXTUREAjoute une texture
@@ -3928,6 +3944,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau
STB_VECTOR_MODEChanger le mode de représentation des arêtes
+
+ STB_NAME_MODE
+ Show/Hide names of visible shapes
+ STB_SHADING_COLORDéfinir la couleur d'ombrage
diff --git a/src/GEOMGUI/GEOM_msg_ja.ts b/src/GEOMGUI/GEOM_msg_ja.ts
index 4f6e96fe9..a73d31a00 100644
--- a/src/GEOMGUI/GEOM_msg_ja.ts
+++ b/src/GEOMGUI/GEOM_msg_ja.ts
@@ -2923,6 +2923,10 @@
MEN_POP_VERTICESShow Vertices
+
+ MEN_POP_SHOW_NAME
+ Show Name
+ MEN_PREFERENCES設定
@@ -3107,6 +3111,14 @@
MEN_VERTICES_MODE_OFFHide Vertices
+
+ MEN_NAME_MODE_ON
+ Show Name
+
+
+ MEN_NAME_MODE_OFF
+ Hide Name
+ MEN_WIREFRAMEワイヤ フレーム
@@ -3807,6 +3819,10 @@
STB_POP_VERTICESShow Vertices
+
+ STB_POP_SHOW_NAME
+ Show Name
+ STB_POP_SETTEXTUREテクスチャを追加します。
@@ -3871,6 +3887,10 @@
STB_VECTOR_MODEエッジの表示モードを変更
+
+ STB_NAME_MODE
+ Show/Hide names of visible shapes
+ STB_SHADING_COLOR網かけの色を設定
diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx
index 314c4fe8f..013b9abc0 100644
--- a/src/GEOMGUI/GeometryGUI.cxx
+++ b/src/GEOMGUI/GeometryGUI.cxx
@@ -513,12 +513,14 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
case GEOMOp::OpShow: // MENU VIEW - DISPLAY
case GEOMOp::OpSwitchVectors: // MENU VIEW - VECTOR MODE
case GEOMOp::OpSwitchVertices: // MENU VIEW - VERTICES MODE
+ case GEOMOp::OpSwitchName: // 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
+ case GEOMOp::OpShowName: // POPUP MENU - SHOW NAME
libName = "DisplayGUI";
break;
case GEOMOp::OpPoint: // MENU BASIC - POINT
@@ -1034,6 +1036,7 @@ void GeometryGUI::initialize( CAM_Application* app )
createGeomAction( GEOMOp::OpShow, "DISPLAY" );
createGeomAction( GEOMOp::OpSwitchVectors, "VECTOR_MODE");
createGeomAction( GEOMOp::OpSwitchVertices, "VERTICES_MODE");
+ createGeomAction( GEOMOp::OpSwitchName, "NAME_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 );
@@ -1056,6 +1059,7 @@ void GeometryGUI::initialize( CAM_Application* app )
createGeomAction( GEOMOp::OpIsosWidth, "ISOS_WIDTH");
createGeomAction( GEOMOp::OpVectors, "POP_VECTORS", "", 0, true );
createGeomAction( GEOMOp::OpVertices, "POP_VERTICES", "", 0, true );
+ createGeomAction( GEOMOp::OpShowName, "POP_SHOW_NAME", "", 0, true );
createGeomAction( GEOMOp::OpDeflection, "POP_DEFLECTION" );
createGeomAction( GEOMOp::OpColor, "POP_COLOR" );
createGeomAction( GEOMOp::OpSetTexture, "POP_SETTEXTURE" );
@@ -1300,6 +1304,7 @@ void GeometryGUI::initialize( CAM_Application* app )
createMenu( separator(), dispmodeId, -1 );
createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
createMenu( GEOMOp::OpSwitchVertices, dispmodeId, -1 );
+ createMenu( GEOMOp::OpSwitchName, dispmodeId, -1 );
createMenu( separator(), viewId, -1 );
createMenu( GEOMOp::OpShowAll, viewId, -1 );
@@ -1497,6 +1502,9 @@ void GeometryGUI::initialize( CAM_Application* app )
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( 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 + " and isNameMode", QtxPopupMgr::ToggleRule );
mgr->insert( separator(), -1, -1 ); // -----------
mgr->insert( action( GEOMOp::OpColor ), -1, -1 ); // color
@@ -2809,6 +2817,11 @@ void GeometryGUI::storeVisualParameters (int savePoint)
ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Vertices )).toString().toStdString());
}
+ if (aProps.contains(GEOM::propertyName( GEOM::ShowName ))) {
+ param = occParam + GEOM::propertyName( GEOM::ShowName );
+ ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::ShowName )).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());
@@ -2981,6 +2994,8 @@ void GeometryGUI::restoreVisualParameters (int savePoint)
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::ShowName )) {
+ aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::ShowName ), 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 )) {
@@ -3029,11 +3044,34 @@ void GeometryGUI::restoreVisualParameters (int savePoint)
}
}
+// Compute current name mode of the viewer
+void UpdateNameMode( SalomeApp_Application* app )
+{
+ bool isMode = false;
+ SalomeApp_Study* aStudy = dynamic_cast< SalomeApp_Study* >( app->activeStudy() );
+ SUIT_ViewWindow* viewWindow = app->desktop()->activeWindow();
+ GEOM_Displayer displayer( aStudy );
+ 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();
+ QVariant v = aStudy->getObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::ShowName ), QVariant() );
+ bool isIONameMode = v.isValid() ? v.toBool() : false;
+ if( isIONameMode )
+ isMode = true;
+ }
+ viewWindow->setProperty( "NameMode", isMode );
+}
+
void GeometryGUI::onViewAboutToShow()
{
SUIT_ViewWindow* window = application()->desktop()->activeWindow();
QAction* a = action( GEOMOp::OpSwitchVectors );
QAction* aVerticesAction = action( GEOMOp::OpSwitchVertices );
+ QAction* aNameAction = action( GEOMOp::OpSwitchName );
if ( window ) {
a->setEnabled(true);
bool vmode = window->property("VectorsMode").toBool();
@@ -3041,11 +3079,17 @@ void GeometryGUI::onViewAboutToShow()
aVerticesAction->setEnabled(true);
vmode = window->property("VerticesMode").toBool();
aVerticesAction->setText ( vmode == 1 ? tr( "MEN_VERTICES_MODE_OFF" ) : tr("MEN_VERTICES_MODE_ON") );
+ UpdateNameMode( getApp() );
+ aNameAction->setEnabled(true);
+ vmode = window->property("NameMode").toBool();
+ aNameAction->setText ( vmode == 1 ? tr( "MEN_NAME_MODE_OFF" ) : tr("MEN_NAME_MODE_ON") );
} else {
a->setText ( tr("MEN_VECTOR_MODE_ON") );
a->setEnabled(false);
aVerticesAction->setText ( tr("MEN_VERTICES_MODE_ON") );
aVerticesAction->setEnabled(false);
+ aNameAction->setText ( tr("MEN_NAME_MODE_ON") );
+ aNameAction->setEnabled(false);
}
}
diff --git a/src/GEOMGUI/GeometryGUI_Operations.h b/src/GEOMGUI/GeometryGUI_Operations.h
index 32e3af191..f7b545c98 100644
--- a/src/GEOMGUI/GeometryGUI_Operations.h
+++ b/src/GEOMGUI/GeometryGUI_Operations.h
@@ -70,6 +70,7 @@ namespace GEOMOp {
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
+ OpSwitchName = 2015, // MENU VIEW - DISPLAY MODE - SHOW/HIDE NAME
OpShow = 2100, // POPUP MENU - SHOW
OpShowOnly = 2101, // POPUP MENU - SHOW ONLY
OpHide = 2102, // POPUP MENU - HIDE
@@ -82,6 +83,7 @@ namespace GEOMOp {
OpBringToFront = 2205, // POPUP MENU - BRING TO FRONT
OpClsBringToFront = 2206,
OpVertices = 2208, // POPUP MENU - DISPLAY MODE - SHOW VERTICES
+ OpShowName = 2209, // POPUP MENU - DISPLAY MODE - SHOW NAME
// BasicGUI --------------------//--------------------------------
OpPoint = 3000, // MENU NEW ENTITY - BASIC - POINT
OpLine = 3001, // MENU NEW ENTITY - BASIC - LINE
diff --git a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx
index 9fb9cbe13..9b688ead6 100644
--- a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx
+++ b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx
@@ -403,6 +403,18 @@ void GEOM_Swig::setVerticesMode( const char* theEntry, bool theOn, bool theUpdat
theOn, theUpdateViewer ) );
}
+/*!
+ \brief Show / hide name of shape for the presentation
+ \param theEntry geometry object's entry
+ \param theOn \c true to show name or \c false otherwise
+ \param theUpdateViewer \c true to update active view's contents
+*/
+void GEOM_Swig::setNameMode( const char* theEntry, bool theOn, bool theUpdateViewer )
+{
+ ProcessVoidEvent( new TSetPropertyEvent( theEntry, GEOM::propertyName( GEOM::ShowName ),
+ 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 c6cb42122..05ce3e413 100644
--- a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h
+++ b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h
@@ -42,6 +42,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 setNameMode( 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 7dc05787a..3afe53588 100644
--- a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i
+++ b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i
@@ -64,6 +64,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 setNameMode( 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 2e2fa2443..926c486a2 100644
--- a/src/OBJECT/GEOM_AISShape.cxx
+++ b/src/OBJECT/GEOM_AISShape.cxx
@@ -28,6 +28,8 @@
#include "GEOM_AISShape.hxx"
#include "GEOM_AISVector.hxx"
+#include
+
#include
// Open CASCADE Includes
@@ -330,6 +332,9 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent
if( anIsTextField )
drawField( aPrs, true );
+ if( isShowName() )
+ drawName( aPrs );
+
// aPrs->ReCompute(); // for hidden line recomputation if necessary...
}
@@ -384,6 +389,11 @@ void GEOM_AISShape::SetDisplayVertices(bool isDisplayed)
myDisplayVertices = isDisplayed;
}
+void GEOM_AISShape::SetDisplayName(bool isDisplayed)
+{
+ myDisplayName = isDisplayed;
+}
+
void GEOM_AISShape::shadingMode(const Handle(PrsMgr_PresentationManager3d)& aPresentationManager,
const Handle(Prs3d_Presentation)& aPrs,
const Standard_Integer aMode)
@@ -611,6 +621,23 @@ void GEOM_AISShape::drawField( const Handle(Prs3d_Presentation)& thePrs,
}
}
+void GEOM_AISShape::drawName( const Handle(Prs3d_Presentation)& thePrs )
+{
+ Handle(Graphic3d_Group) aGroup = Prs3d_Root::NewGroup( thePrs );
+
+ gp_Ax3 anAx3 = GEOMUtils::GetPosition(myshape);
+ gp_Pnt aCenter = anAx3.Location();
+
+ Graphic3d_Vertex aVertex( aCenter.X(), aCenter.Y(), aCenter.Z() );
+
+ Handle(Graphic3d_AspectText3d) anAspectText3d = new Graphic3d_AspectText3d();
+ anAspectText3d->SetStyle( Aspect_TOST_ANNOTATION );
+ aGroup->SetPrimitivesAspect( anAspectText3d );
+
+ const char* aName = getIO()->getName();
+ aGroup->Text( TCollection_ExtendedString( aName ), aVertex, 16 );
+}
+
Standard_Boolean GEOM_AISShape::computeMassCenter( const TopoDS_Shape& theShape,
gp_Pnt& theCenter )
{
diff --git a/src/OBJECT/GEOM_AISShape.hxx b/src/OBJECT/GEOM_AISShape.hxx
index 47c284e77..babd2a0b7 100644
--- a/src/OBJECT/GEOM_AISShape.hxx
+++ b/src/OBJECT/GEOM_AISShape.hxx
@@ -81,6 +81,7 @@ public:
Standard_EXPORT void SetEdgesInShadingColor(const Quantity_Color &aCol);
Standard_EXPORT void SetDisplayVectors(bool isShow);
Standard_EXPORT void SetDisplayVertices(bool isShow);
+ Standard_EXPORT void SetDisplayName(bool isShow);
Standard_EXPORT virtual void Compute(const Handle(PrsMgr_PresentationManager3d)& aPresentationManager,
const Handle(Prs3d_Presentation)& aPresentation,
@@ -88,6 +89,7 @@ public:
Standard_EXPORT virtual bool isShowVectors() { return myDisplayVectors; }
Standard_EXPORT virtual bool isShowVertices() { return myDisplayVertices; }
+ Standard_EXPORT virtual bool isShowName() { return myDisplayName; }
Standard_EXPORT virtual Standard_Boolean switchTopLevel();
Standard_EXPORT virtual Standard_Boolean toActivate();
@@ -125,6 +127,9 @@ protected:
const bool theIsText = false,
const bool theIsHighlight = false );
+ // Displaying the name of shape
+ Standard_EXPORT void drawName( const Handle(Prs3d_Presentation)& thePrs );
+
// Auxiliary method to compute a center of mass for the specified shape
Standard_EXPORT static Standard_Boolean computeMassCenter( const TopoDS_Shape& theShape,
gp_Pnt& theCenter );
@@ -136,6 +141,7 @@ private:
TCollection_AsciiString myName;
bool myDisplayVectors;
bool myDisplayVertices;
+ bool myDisplayName;
Standard_Boolean myTopLevel;
Standard_Integer myPrevDisplayMode;
diff --git a/src/OBJECT/GEOM_Actor.cxx b/src/OBJECT/GEOM_Actor.cxx
index b261ec85a..e7b77aef0 100644
--- a/src/OBJECT/GEOM_Actor.cxx
+++ b/src/OBJECT/GEOM_Actor.cxx
@@ -41,9 +41,12 @@
#include "SVTK_Actor.h"
#include
+#include
#include
#include
+#include
+#include
#include
#include
#include
@@ -84,6 +87,7 @@ GEOM_Actor::GEOM_Actor():
myIsSelected(false),
myVectorMode(false),
myVerticesMode(false),
+ myNameMode(false),
myVertexActor(GEOM_DeviceActor::New(),true),
myVertexSource(GEOM_VertexSource::New(),true),
@@ -115,6 +119,8 @@ GEOM_Actor::GEOM_Actor():
// defined in this class !!!
myPolyDataMapper(GEOM_PainterPolyDataMapper::New(),true),
+ myTextActor( vtkTextActor::New() ),
+
myHighlightProp(vtkProperty::New()),
myPreHighlightProp(vtkProperty::New()),
myShadingFaceProp(vtkProperty::New()),
@@ -202,6 +208,7 @@ GEOM_Actor::GEOM_Actor():
setDisplayMode(0); // WIRE FRAME
SetVectorMode(0); //
SetVerticesMode(0); //
+ SetNameMode(0);
}
@@ -246,6 +253,7 @@ SetModified()
this->mySharedEdgeSource->Modified();
this->myWireframeFaceSource->Modified();
this->myShadingFaceSource->Modified();
+ this->myTextActor->Modified();
}
void
@@ -275,6 +283,8 @@ AddToRender(vtkRenderer* theRenderer)
myVertexActor->AddToRender(theRenderer);
myStandaloneVertexActor->AddToRender(theRenderer);
+
+ theRenderer->AddActor( myTextActor );
}
void
@@ -297,6 +307,7 @@ RemoveFromRender(vtkRenderer* theRenderer)
myVertexActor->RemoveFromRender(theRenderer);
myStandaloneVertexActor->RemoveFromRender(theRenderer);
+ theRenderer->RemoveActor( myTextActor );
SetSelected(false);
SetVisibility(false);
@@ -374,6 +385,8 @@ SetVisibility(int theVisibility)
myVertexActor->SetVisibility(theVisibility && (isOnlyVertex || (myVerticesMode && (!myIsSelected && !myIsPreselected))));// must be added new mode points
myStandaloneVertexActor->SetVisibility(theVisibility);
+
+ myTextActor->SetVisibility( theVisibility && myNameMode );
}
@@ -429,6 +442,38 @@ GEOM_Actor
return myVerticesMode;
}
+void
+GEOM_Actor
+::SetShapeName(const TopoDS_Shape& theShape)
+{
+ gp_Ax3 anAx3 = GEOMUtils::GetPosition(theShape);
+ double center[3] = { anAx3.Location().X(),
+ anAx3.Location().Y(),
+ anAx3.Location().Z() };
+ double* pos = center;
+ myTextActor->GetTextProperty()->SetFontSize( 16 );
+ myTextActor->GetTextProperty()->ShadowOn();
+ myTextActor->GetPositionCoordinate()->SetCoordinateSystemToWorld();
+ myTextActor->GetPositionCoordinate()->SetValue(pos);
+ myTextActor->SetInput( getIO()->getName() );
+}
+
+void
+GEOM_Actor
+::SetNameMode(bool theMode)
+{
+ myNameMode = theMode;
+ myTextActor->SetVisibility(theMode);
+ SetModified();
+}
+
+bool
+GEOM_Actor
+::GetNameMode()
+{
+ return myNameMode;
+}
+
void
GEOM_Actor::
SetDeflection(double theDeflection)
@@ -490,6 +535,8 @@ void GEOM_Actor::SetShape (const TopoDS_Shape& theShape,
myHighlightActor->GetDeviceActor()->SetInfinitive(true);
}
+ SetShapeName( theShape );
+
// 0051777: TC7.2.0: Element could not be selected in Hypothesis Construction
myAppendFilter->Update();
}
diff --git a/src/OBJECT/GEOM_Actor.h b/src/OBJECT/GEOM_Actor.h
index 471d9f061..f2884817d 100644
--- a/src/OBJECT/GEOM_Actor.h
+++ b/src/OBJECT/GEOM_Actor.h
@@ -51,6 +51,7 @@ class GEOM_ShadingFace;
typedef GEOM_SmartPtr PSFaceSource;
class vtkRenderer;
+class vtkTextActor;
class vtkAppendPolyData;
typedef GEOM_SmartPtr PAppendFilter;
@@ -210,10 +211,20 @@ public:
bool
GetVerticesMode();
+ //! Name mode management
+ virtual
+ void
+ SetNameMode(const bool theMode);
+
+ virtual
+ bool
+ GetNameMode();
+
protected:
void SetModified();
void GetMatrix(vtkCamera* theCam, vtkMatrix4x4 *result);
+ void SetShapeName(const TopoDS_Shape& theShape);
GEOM_Actor();
~GEOM_Actor();
@@ -229,6 +240,7 @@ private:
bool myIsSelected;
bool myVectorMode;
bool myVerticesMode;
+ bool myNameMode;
PDeviceActor myVertexActor;
PVertexSource myVertexSource;
@@ -252,6 +264,9 @@ private:
PSFaceSource myShadingFaceSource;
PDeviceActor myHighlightActor;
+
+ vtkTextActor* myTextActor;
+
vtkSmartPointer myHighlightProp;
vtkSmartPointer myPreHighlightProp;
vtkSmartPointer myShadingFaceProp;
diff --git a/src/OBJECT/GEOM_Constants.cxx b/src/OBJECT/GEOM_Constants.cxx
index 1c85b829c..3293fe3f1 100644
--- a/src/OBJECT/GEOM_Constants.cxx
+++ b/src/OBJECT/GEOM_Constants.cxx
@@ -71,6 +71,8 @@ namespace GEOM
"VectorMode", // VECTOR_MODE_PROP
// "show vertices" flag
"VerticesMode", // VERTICES_MODE_PROP
+ // "show name" flag
+ "NameMode", // NAME_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 4cda4e5f6..290b643d6 100644
--- a/src/OBJECT/GEOM_Constants.h
+++ b/src/OBJECT/GEOM_Constants.h
@@ -40,6 +40,7 @@ namespace GEOM
Color,
EdgesDirection,
Vertices,
+ ShowName,
Deflection,
PointMarker,
Material,