]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Improve GEOM_Displayer; required for features 0021391, 0021830 (part 2)
authorvsr <vsr@opencascade.com>
Tue, 29 Jan 2013 05:23:35 +0000 (05:23 +0000)
committervsr <vsr@opencascade.com>
Tue, 29 Jan 2013 05:23:35 +0000 (05:23 +0000)
18 files changed:
src/DisplayGUI/DisplayGUI.cxx
src/GEOMBase/GEOMBase_Helper.cxx
src/GEOMGUI/GEOMGUI_Selection.cxx
src/GEOMGUI/GEOM_Displayer.cxx
src/GEOMGUI/GEOM_Displayer.h
src/GEOMGUI/GeometryGUI.cxx
src/GEOMToolsGUI/GEOMToolsGUI_1.cxx
src/GEOMToolsGUI/GEOMToolsGUI_DeflectionDlg.cxx
src/GEOMToolsGUI/GEOMToolsGUI_MarkerDlg.cxx
src/GEOMToolsGUI/GEOMToolsGUI_MaterialPropertiesDlg.cxx
src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.cxx
src/OBJECT/GEOM_AISShape.cxx
src/OBJECT/GEOM_AISShape.hxx
src/OBJECT/GEOM_Constants.cxx [new file with mode: 0644]
src/OBJECT/GEOM_Constants.h
src/OBJECT/GEOM_TopWireframeShape.cxx
src/OBJECT/GEOM_TopWireframeShape.ixx
src/OBJECT/Makefile.am

index 67665f66e955fdf6141b9baedbc8fb7e66640277..0dc9455d44b575b09a5c7e29172d2e09da504f8e 100644 (file)
@@ -577,10 +577,10 @@ void DisplayGUI::ChangeDisplayMode( const int mode, SUIT_ViewWindow* viewWindow
           }
         }
        if(mode == 0 || mode == 1 || mode == 2) {
-         aStudy->setObjectProperty(mgrId,It.Value()->getEntry(),DISPLAY_MODE_PROP, mode);
+         aStudy->setObjectProperty(mgrId,It.Value()->getEntry(),GEOM::propertyName( GEOM::DisplayMode ), mode);
        }
        else if (mode == 4) {
-         aStudy->setObjectProperty(mgrId, It.Value()->getEntry(),VECTOR_MODE_PROP, vectorMode);        
+         aStudy->setObjectProperty(mgrId, It.Value()->getEntry(),GEOM::propertyName( GEOM::EdgesDirection ), vectorMode);      
        }
       }
     }
@@ -625,10 +625,10 @@ void DisplayGUI::ChangeDisplayMode( const int mode, SUIT_ViewWindow* viewWindow
           }
         }
        if(mode == 0 || mode == 1 || mode == 2 || mode == 3) {
-         aStudy->setObjectProperty(mgrId, It.Value()->getEntry(),DISPLAY_MODE_PROP, mode);
+         aStudy->setObjectProperty(mgrId, It.Value()->getEntry(),GEOM::propertyName( GEOM::DisplayMode ), mode);
        }
        else if (mode == 4) {
-         aStudy->setObjectProperty(mgrId, It.Value()->getEntry(),VECTOR_MODE_PROP, vectorMode);
+         aStudy->setObjectProperty(mgrId, It.Value()->getEntry(),GEOM::propertyName( GEOM::EdgesDirection ), vectorMode);
        }
       }
     }
index 912dd15f6dba9fda9bf953f058a5584d5f3f60c0..856cd6a1ea6d7ef4273abb7f067e44778e4f824e 100755 (executable)
@@ -318,19 +318,16 @@ void GEOMBase_Helper::displayPreview( GEOM::GEOM_Object_ptr object,
                                       const int             displayMode,
                                       const int             color )
 {
+  SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();    
+
   // Set color for preview shape
   getDisplayer()->SetColor( color == -1 ? Quantity_NOC_VIOLET : color );
 
   // set width of displayed shape
-  int lw = lineWidth;
-  if(lw == -1) {
-    SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();    
-    lw = resMgr->integerValue("Geometry", "preview_edge_width", -1);
-  }
-  getDisplayer()->SetWidth( lw );
+  getDisplayer()->SetWidth( lineWidth == -1 ? resMgr->integerValue("Geometry", "preview_edge_width", -1) : lineWidth );
 
   // set display mode of displayed shape
-  int aPrevDispMode = getDisplayer()->SetDisplayMode( displayMode );
+  int aPrevDispMode = getDisplayer()->SetDisplayMode( displayMode == -1 ? resMgr->integerValue( "Geometry", "display_mode", 0 ) : displayMode );
 
   // Disable activation of selection
   getDisplayer()->SetToActivate( activate );
index 0aa1da20ae232d6838bdd125d459acbe79f4c308..e6a016041ec2c0ca8ec3f21febf2a4074f1466d3 100644 (file)
@@ -217,7 +217,7 @@ bool GEOMGUI_Selection::isVisible( const int index ) const
 
 #ifdef USE_VISUAL_PROP_MAP
   bool found = false;
-  QVariant v = visibleProperty( entry( index ), VISIBILITY_PROP );
+  QVariant v = visibleProperty( entry( index ), GEOM::propertyName( GEOM::Visibility ) );
   if ( v.canConvert( QVariant::Bool ) ) {
     res = v.toBool();
     found = true;
@@ -289,7 +289,7 @@ QString GEOMGUI_Selection::displayMode( const int index ) const
   QString res;
   QString viewType = activeViewType();
 #ifdef USE_VISUAL_PROP_MAP
-  QVariant v = visibleProperty( entry( index ), DISPLAY_MODE_PROP );
+  QVariant v = visibleProperty( entry( index ), GEOM::propertyName( GEOM::DisplayMode ) );
   if ( v.canConvert( QVariant::Int ) ) {
     int dm = v.toInt();
     if ( viewType == OCCViewer_Viewer::Type() ) {
@@ -361,7 +361,7 @@ bool GEOMGUI_Selection::isVectorsMode( const int index ) const
 
 #ifdef USE_VISUAL_PROP_MAP
   bool found = false;
-  QVariant v = visibleProperty( entry( index ), VECTOR_MODE_PROP );
+  QVariant v = visibleProperty( entry( index ), GEOM::propertyName( GEOM::EdgesDirection ) );
   if ( v.canConvert( QVariant::Bool ) ) {
     res = v.toBool();
     found = true;
@@ -553,7 +553,7 @@ bool GEOMGUI_Selection::topLevel( const int index ) const {
 
 #ifdef USE_VISUAL_PROP_MAP
   bool found = false;
-  QVariant v = visibleProperty( entry( index ), TOP_LEVEL_PROP );
+  QVariant v = visibleProperty( entry( index ), GEOM::propertyName( GEOM::TopLevel ) );
   if ( v.canConvert<bool>() ) {
     res = v.toBool();
     found = true;
@@ -590,7 +590,7 @@ bool GEOMGUI_Selection::isPhysicalMaterial( const int idx ) const{
 
 #ifdef USE_VISUAL_PROP_MAP
    bool found = false;
-   QVariant v = visibleProperty( entry( idx ), MATERIAL_PROP );
+   QVariant v = visibleProperty( entry( idx ), GEOM::propertyName( GEOM::Material ) );
    if ( v.canConvert<QString>() ) {
      Material_Model material;
      material.fromProperties( v.toString() );
index 873c61f7c000f6bd9d77c74588c977a5dd5bf96d..d1e65bc58778663123ae803ebb62644254d7b958 100644 (file)
 // of auto-color picking up
 #define SIMPLE_AUTOCOLOR
 
+// Hard-coded value of shape deflection coefficient for VTK viewer
+const double VTK_MIN_DEFLECTION = 0.001;
+
 //================================================================
 // Function : getActiveStudy
 // Purpose  : Get active study, returns 0 if no open study frame
@@ -323,6 +326,7 @@ GEOM_Displayer::GEOM_Displayer( SalomeApp_Study* st )
   myShadingColor = SalomeApp_Tools::color( col );
 
   myDisplayMode = resMgr->integerValue("Geometry", "display_mode", 0);
+  myHasDisplayMode = false;
 
   int aType = resMgr->integerValue("Geometry", "type_of_marker", (int)Aspect_TOM_PLUS);
   myWidth = resMgr->integerValue("Geometry", "edge_width", -1);
@@ -393,7 +397,7 @@ void GEOM_Displayer::Display( const Handle(SALOME_InteractiveObject)& theIO,
 
       int aMgrId = getViewManagerId(vf);
       SalomeApp_Study* aStudy = getStudy();
-      aStudy->setObjectProperty(aMgrId, theIO->getEntry(), VISIBILITY_PROP, 1 );
+      aStudy->setObjectProperty(aMgrId, theIO->getEntry(), GEOM::propertyName( GEOM::Visibility ), 1 );
 
       setVisibilityState(theIO->getEntry(), Qtx::ShownState);
 
@@ -449,7 +453,7 @@ void GEOM_Displayer::Erase( const Handle(SALOME_InteractiveObject)& theIO,
 
       int aMgrId = getViewManagerId(vf);
       SalomeApp_Study* aStudy = getStudy();
-      aStudy->setObjectProperty(aMgrId, theIO->getEntry(), VISIBILITY_PROP, 0 );
+      aStudy->setObjectProperty(aMgrId, theIO->getEntry(), GEOM::propertyName( GEOM::Visibility ), 0 );
 
       setVisibilityState(theIO->getEntry(), Qtx::HiddenState);
     }
@@ -546,335 +550,204 @@ QColor GEOM_Displayer::colorFromResources( const QString& property, const QColor
   return SUIT_Session::session()->resourceMgr()->colorValue( "Geometry", property, defColor );
 }
 
-bool GEOM_Displayer::setPointMarker( const Handle(GEOM_AISShape)& AISShape, const QString& markerData, const Quantity_Color color )
-{
-  bool result = true;
-
-  QStringList aList = markerData.split( DIGIT_SEPARATOR );
-  if ( aList.size() == 2 ) {
-    // standard marker string contains "TypeOfMarker:ScaleOfMarker"
-    int aTypeOfMarker = aList[0].toInt();
-    double aScaleOfMarker = aList[1].toDouble();
-    Handle(Prs3d_PointAspect) anAspect = AISShape->Attributes()->PointAspect();
-    anAspect->SetScale( aScaleOfMarker );
-    anAspect->SetTypeOfMarker( (Aspect_TypeOfMarker)( aTypeOfMarker-1 ) );
-    anAspect->SetColor( color );
-    AISShape->Attributes()->SetPointAspect( anAspect );
-  }
-  else if ( aList.size() == 1 ) {
-    // custom marker string contains "IdOfTexture"
-    int textureId = aList[0].toInt();
-    Standard_Integer aWidth, aHeight;
-#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
-    Handle(TColStd_HArray1OfByte) aTexture =
-#else
-      Handle(Graphic3d_HArray1OfBytes) aTexture =
-#endif
-      GeometryGUI::getTexture( getStudy(), textureId, aWidth, aHeight );
-    if ( !aTexture.IsNull() ) {
-      static int TextureId = 0;
-      Handle(Prs3d_PointAspect) aTextureAspect =
-       new Prs3d_PointAspect( color,
-                              ++TextureId,
-                              aWidth, aHeight,
-                              aTexture );
-      AISShape->Attributes()->SetPointAspect( aTextureAspect );
-    }
-    else {
-      // texture is not loaded to GUI
-      result = false;
-    }
-  }
-  else {
-    // wrong point marker data stored
-    result = false;
-  }
-  return result;
-}
-
-void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShape )
+void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShape, bool create )
 {
-  // get study
+  // check that shape is not null
+  if ( AISShape.IsNull() ) return;
+  
+  // check that study is active
   SalomeApp_Study* study = getStudy();
   if ( !study ) return;
 
-  // get resource manager
-  SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
-
   if ( myShape.ShapeType() != TopAbs_VERTEX && // fix pb with not displayed points
        !TopoDS_Iterator(myShape).More() )
     return; // NPAL15983 (Bug when displaying empty groups)
 
+  // set interactive object
+
+  Handle( SALOME_InteractiveObject ) anIO;
+
+  if ( !myIO.IsNull() ) {
+    AISShape->setIO( myIO );
+    AISShape->SetOwner( myIO );
+    anIO = myIO;
+  }
+  else if ( !myName.empty() ) {
+    // workaround to allow selection of temporary objects
+    static int tempId = 0;
+    anIO = new SALOME_InteractiveObject( QString( "TEMP_%1" ).arg( tempId++ ).toLatin1().data(), "GEOM", myName.c_str() );
+    AISShape->setIO( anIO );
+    AISShape->SetOwner( anIO );
+  }
+
   // flag:  only vertex or compound of vertices is processed (specific handling)
-  bool onlyVertex = (myShape.ShapeType() == TopAbs_VERTEX || isCompoundOfVertices( myShape ));
+  bool onlyVertex = myShape.ShapeType() == TopAbs_VERTEX || isCompoundOfVertices( myShape );
   // presentation study entry (empty for temporary objects like preview)
-  QString anEntry = !myIO.IsNull() ? QString( myIO->getEntry() ) : QString();
+  QString entry = !anIO.IsNull() ? QString( anIO->getEntry() ) : QString();
   // flag: temporary object
-  bool isTemporary = anEntry.isEmpty() || anEntry.startsWith( "TEMP_" );
+  bool isTemporary = entry.isEmpty() || entry.startsWith( "TEMP_" );
   // currently active view window's ID (-1 if no active view)
-  int aMgrId = !myIO.IsNull() ? getViewManagerId( myViewFrame ) : -1;
-
-  // stored properties
-  PropMap aPropMap    = study->getObjectPropMap( aMgrId, anEntry );
-  // default properties
-  PropMap aDefPropMap = getDefaultPropertyMap( SOCC_Viewer::Type() );
-
-  // use properties stored in study
-  bool useStudy = !isTemporary && aMgrId != -1; // anEntry.isEmpty()
-  // use GEOM object color (from engine side)
-  bool useObjColor = !aPropMap.contains( COLOR_PROP );
-  // use GEOM object marker (rom engine side)
-  bool useObjMarker = !aPropMap.contains( MARKER_TYPE_PROP );
-
-  MergePropertyMaps( aPropMap, aDefPropMap );
-
-  // default properties
-  double transparency = 0.0;
-  int uIsos = 1;
-  int vIsos = 1;
-  int dispMode = myDisplayMode; // take from resource manager ???
-  Quantity_Color shadingColor = myShadingColor; // take from resource manager ???
-  Standard_Boolean isTopLevel = Standard_False; // bool ???
-  bool isDisplayVectors = false;
-  double deflection = 0.001;
-  Material_Model material;
+  int aMgrId = !anIO.IsNull() ? getViewManagerId( myViewFrame ) : -1;
 
-  if ( useStudy ) {
-    // take proprties from stored properties:
-    // - shading color
-    shadingColor = SalomeApp_Tools::color( aPropMap.value( COLOR_PROP ).value<QColor>() );
-    // - display mode
-    dispMode = aPropMap.value( DISPLAY_MODE_PROP ).toInt();
-    // - nb of isos
-    uIsos = aPropMap.value( ISOS_PROP ).toString().split( DIGIT_SEPARATOR )[0].toInt();
-    vIsos = aPropMap.value( ISOS_PROP ).toString().split( DIGIT_SEPARATOR )[1].toInt();
-    // - transparency
-    transparency = aPropMap.value( TRANSPARENCY_PROP ).toDouble();
-    // - top-level flag
-    isTopLevel = aPropMap.value( TOP_LEVEL_PROP ).value<Standard_Boolean>();
-    // - display vectors flag
-    isDisplayVectors = aPropMap.value( VECTOR_MODE_PROP ).toBool();
-    // - deflection coefficient
-    deflection = aPropMap.value( DEFLECTION_COEFF_PROP ).toDouble();
-    // - line width
-    SetWidth( aPropMap.value( EDGE_WIDTH_PROP ).toInt() );
-    // - isos width
-    SetIsosWidth( aPropMap.value( ISOS_WIDTH_PROP ).toInt() );
-    // - material
-    material.fromProperties( aPropMap.value( MATERIAL_PROP ).toString() );
-  }
-  else {
-    // take nb of isos from resources:
-    // - nb of isos
-    uIsos = aResMgr->integerValue( "Geometry", "iso_number_u", 1 );
-    vIsos = aResMgr->integerValue( "Geometry", "iso_number_v", 1 );
-    // - deflection coefficient
-    deflection = aResMgr->doubleValue( "Geometry", "deflection_coeff", 0.001 );
-    // - material
-    QString mname = aResMgr->stringValue( "Geometry", "material", "Plastic" );
-    material.fromResources( mname );
-  }
+  // get presentation properties
+  PropMap propMap = getObjectProperties( study, entry, myViewFrame );
 
   // Temporary staff: vertex must be infinite for correct visualization
   AISShape->SetInfiniteState( myShape.Infinite() ); // || myShape.ShapeType() == TopAbs_VERTEX // VSR: 05/04/2010: Fix 20668 (Fit All for points & lines)
 
   // set material
+  Material_Model material;
+  material.fromProperties( propMap.value( GEOM::propertyName( GEOM::Material ) ).toString() );
   // - set front material properties
-  AISShape->SetCurrentFacingModel(Aspect_TOFM_FRONT_SIDE);
+  AISShape->SetCurrentFacingModel( Aspect_TOFM_FRONT_SIDE );
   AISShape->SetMaterial( material.getMaterialOCCAspect( true ) );
   // - set back material properties
-  AISShape->SetCurrentFacingModel(Aspect_TOFM_BACK_SIDE);
+  AISShape->SetCurrentFacingModel( Aspect_TOFM_BACK_SIDE );
   AISShape->SetMaterial( material.getMaterialOCCAspect( false ) );
-  // - switch default facing mode
-  AISShape->SetCurrentFacingModel(Aspect_TOFM_BOTH_SIDE);
+  // - switch to default (both sides) facing mode
+  AISShape->SetCurrentFacingModel( Aspect_TOFM_BOTH_SIDE );
+
+  // set colors
 
-  // set shading color
-  if ( !material.isPhysical() )
-    AISShape->SetShadingColor( shadingColor );
+  // - shading color
+  if ( HasColor()  ) {
+    // predefined color, manually set to displayer via GEOM_Displayer::SetColor() function;
+    // we set it to the shape not taking into account material properties
+    AISShape->SetShadingColor( (Quantity_NameOfColor)GetColor() );
+  }
+  else if ( !material.isPhysical() ) {
+    // shading color from properties is used only for non-physical materials
+    AISShape->SetShadingColor( SalomeApp_Tools::color( propMap.value( GEOM::propertyName( GEOM::ShadingColor ) ).value<QColor>() ) );
+  }
+
+  // - wireframe color
+  Handle(Prs3d_LineAspect) anAspect = AISShape->Attributes()->LineAspect();
+  anAspect->SetColor( HasColor() ? (Quantity_NameOfColor)GetColor() : 
+                     SalomeApp_Tools::color( propMap.value( GEOM::propertyName( GEOM::WireframeColor ) ).value<QColor>() ) );
+  AISShape->Attributes()->SetLineAspect( anAspect );
+  
+  // - unfree boundaries color
+  anAspect = AISShape->Attributes()->UnFreeBoundaryAspect();
+  anAspect->SetColor( HasColor() ? (Quantity_NameOfColor)GetColor() : 
+                     SalomeApp_Tools::color( propMap.value( GEOM::propertyName( GEOM::WireframeColor ) ).value<QColor>() ) );
+  AISShape->Attributes()->SetUnFreeBoundaryAspect( anAspect );
+  
+  // - free boundaries color
+  anAspect = AISShape->Attributes()->FreeBoundaryAspect();
+  anAspect->SetColor( HasColor() ? (Quantity_NameOfColor)GetColor() : 
+                     SalomeApp_Tools::color( propMap.value( GEOM::propertyName( GEOM::FreeBndColor ) ).value<QColor>() ) );
+  AISShape->Attributes()->SetFreeBoundaryAspect( anAspect );
+  
+  // - standalone edges color
+  anAspect = AISShape->Attributes()->WireAspect();
+  anAspect->SetColor( HasColor() ? (Quantity_NameOfColor)GetColor() : 
+                     SalomeApp_Tools::color( propMap.value( GEOM::propertyName( GEOM::LineColor ) ).value<QColor>() ) );
+  AISShape->Attributes()->SetWireAspect( anAspect );
+  
+  // - color for edges in shading+edges mode
+  AISShape->SetEdgesInShadingColor( SalomeApp_Tools::color( propMap.value( GEOM::propertyName( GEOM::OutlineColor ) ).value<QColor>() ) );
+  
+  // ???
+  AISShape->storeBoundaryColors();
 
   // set display mode
-  AISShape->SetDisplayMode( dispMode );
+  AISShape->SetDisplayMode( HasDisplayMode() ? 
+                           // predefined display mode, manually set to displayer via GEOM_Displayer::SetDisplayMode() function 
+                           GetDisplayMode() :
+                           // display mode from properties
+                           propMap.value( GEOM::propertyName( GEOM::DisplayMode ) ).toInt() );
+
+  // set display vectors flag
+  AISShape->SetDisplayVectors( propMap.value( GEOM::propertyName( GEOM::EdgesDirection ) ).toBool() );
+
+  // set transparency ????????????????????????????????????????????????????
+  //AISShape->SetTransparency( propMap.value( GEOM::propertyName( GEOM::Transparency ) ).toDouble() );
 
   // set iso properties
+  int uIsos = propMap.value( GEOM::propertyName( GEOM::NbIsos ) ).toString().split( GEOM::subSectionSeparator() )[0].toInt();
+  int vIsos = propMap.value( GEOM::propertyName( GEOM::NbIsos ) ).toString().split( GEOM::subSectionSeparator() )[1].toInt();
+  Quantity_Color isosColor = SalomeApp_Tools::color( propMap.value( GEOM::propertyName( GEOM::IsosColor ) ).value<QColor>() );
+  int isosWidth = propMap.value( GEOM::propertyName( GEOM::IsosWidth ) ).toInt();
   Handle(Prs3d_IsoAspect) uIsoAspect = AISShape->Attributes()->UIsoAspect();
   Handle(Prs3d_IsoAspect) vIsoAspect = AISShape->Attributes()->VIsoAspect();
-  uIsoAspect->SetColor( qColorFromResources( "isos_color", QColor::fromRgbF( 0.5, 0.5, 0.5 ) ) );
-  vIsoAspect->SetColor( qColorFromResources( "isos_color", QColor::fromRgbF( 0.5, 0.5, 0.5 ) ) );
-  if ( HasIsosWidth() ) {
-    uIsoAspect->SetWidth( GetIsosWidth() );
-    vIsoAspect->SetWidth( GetIsosWidth() );
-  }
+  uIsoAspect->SetColor( isosColor );
+  uIsoAspect->SetWidth( isosWidth );
   uIsoAspect->SetNumber( uIsos );
+  vIsoAspect->SetColor( isosColor );
+  vIsoAspect->SetWidth( isosWidth );
   vIsoAspect->SetNumber( vIsos );
   AISShape->Attributes()->SetUIsoAspect( uIsoAspect );
   AISShape->Attributes()->SetVIsoAspect( vIsoAspect );
 
-  // set transparency
-  AISShape->SetTransparency( transparency );
-
-  // set top-level flag
-  AISShape->setTopLevel( isTopLevel );
-
-  // set display vectors flag
-  AISShape->SetDisplayVectors( isDisplayVectors );
-
-  // set point marker (for vertex / compound of vertices only)
-  if ( onlyVertex && !useObjMarker ) {
-    useObjMarker = !setPointMarker( AISShape,
-                                   aPropMap.value( MARKER_TYPE_PROP ).toString(),
-                                   HasColor() ? (Quantity_NameOfColor)GetColor() : qColorFromResources( "point_color", QColor( 255, 255, 0 ) ) );
-  }
-  if ( HasColor() ) {
-    AISShape->SetShadingColor( (Quantity_NameOfColor)GetColor() );
-    AISShape->SetColor( (Quantity_NameOfColor)GetColor() );
-  }
-  else {
-    // Set line aspect
-    Handle(Prs3d_LineAspect) anAspect = AISShape->Attributes()->LineAspect();
-    anAspect->SetColor( qColorFromResources( "wireframe_color", QColor( 255, 255, 0 ) ) );
-    AISShape->Attributes()->SetLineAspect( anAspect );
-
-    // Set unfree boundaries aspect
-    anAspect = AISShape->Attributes()->UnFreeBoundaryAspect();
-    anAspect->SetColor( qColorFromResources( "wireframe_color", QColor( 255, 255, 0 ) ) );
-    AISShape->Attributes()->SetUnFreeBoundaryAspect( anAspect );
-    AISShape->storeBoundaryColors();
-
-    // Set free boundaries aspect
-    anAspect = AISShape->Attributes()->FreeBoundaryAspect();
-    anAspect->SetColor( qColorFromResources( "free_bound_color", QColor( 0, 255, 0 ) ) );
-    AISShape->Attributes()->SetFreeBoundaryAspect( anAspect );
-
-    // Set wire aspect
-    anAspect = AISShape->Attributes()->WireAspect();
-    anAspect->SetColor( qColorFromResources( "line_color", QColor( 255, 0, 0 ) ) );
-    AISShape->Attributes()->SetWireAspect( anAspect );
-
-    // Set color for edges in shading
-    AISShape->SetEdgesInShadingColor( qColorFromResources( "edges_in_shading_color", QColor( 255, 255, 0 ) ) );
-
-    // Set deflection coefficient
-    AISShape->SetOwnDeviationCoefficient( qMax( deflection, DEFLECTION_MIN ) ); // to avoid to small values of the coefficient
-  }
+  // set deflection coefficient
+  // ... to avoid to small values of the coefficient, its lower value is limited 
+  AISShape->SetOwnDeviationCoefficient( qMax( propMap.value( GEOM::propertyName( GEOM::Deflection ) ).toDouble(), GEOM::minDeflection() ) );
 
   // set texture
   if ( HasTexture() ) {
-    AISShape->SetTextureFileName(TCollection_AsciiString(myTexture.c_str()));
+    // predefined display texture, manually set to displayer via GEOM_Displayer::SetTexture() function 
+    AISShape->SetTextureFileName( TCollection_AsciiString( GetTexture().c_str() ) );
     AISShape->SetTextureMapOn();
     AISShape->DisableTextureModulate();
-    AISShape->SetDisplayMode(3);
+    AISShape->SetDisplayMode( 3 );
   }
 
   // set line width
-  if ( HasWidth() )
-    AISShape->SetWidth( GetWidth() );
+  AISShape->SetWidth( HasWidth() ?
+                     // predefined line width, manually set to displayer via GEOM_Displayer::SetLineWidth() function 
+                     GetWidth() :
+                     // libe width from properties
+                     propMap.value( GEOM::propertyName( GEOM::LineWidth ) ).toInt() );
 
-  // set interactive object
-  if ( !myIO.IsNull() ) {
-      AISShape->setIO( myIO );
-      AISShape->SetOwner( myIO );
-  }
-  else if ( !myName.empty() ) {
-    // Workaround to allow selection of temporary objects
-    static int tempId = 0;
-    Handle( SALOME_InteractiveObject ) anObj =
-      new SALOME_InteractiveObject( QString( "TEMP_%1" ).arg( tempId++ ).toLatin1().data(), "GEOM", myName.c_str() );
-    AISShape->setIO( anObj );
-    AISShape->SetOwner( anObj );
-  }
-
-  Handle( SALOME_InteractiveObject ) anIO = AISShape->getIO();
-  if ( !anIO.IsNull() ) {
-    _PTR(SObject) SO ( study->studyDS()->FindObjectID( anIO->getEntry() ) );
-    if ( SO ) {
-      // get CORBA reference to data object
-      CORBA::Object_var object = GeometryGUI::ClientSObjectToObject(SO);
-      if ( !CORBA::is_nil( object ) ) {
-       // downcast to GEOM object
-       GEOM::GEOM_Object_var aGeomObject = GEOM::GEOM_Object::_narrow( object );
-       bool hasColor = false;
-       SALOMEDS::Color aSColor = getColor(aGeomObject,hasColor);
-       if ( hasColor && useObjColor ) {
-         Quantity_Color aQuanColor( aSColor.R, aSColor.G, aSColor.B, Quantity_TOC_RGB );
-         if ( !material.isPhysical() ) {
-           AISShape->SetColor( aQuanColor );
-           AISShape->SetShadingColor( aQuanColor );
-         }
-         if ( onlyVertex ) {
-           Handle(Prs3d_PointAspect) anAspect = AISShape->Attributes()->PointAspect();
-           anAspect->SetColor( aQuanColor );
-           anAspect->SetScale( myScaleOfMarker );
-           anAspect->SetTypeOfMarker( myTypeOfMarker );
-           AISShape->Attributes()->SetPointAspect( anAspect );
-         }
-         study->setObjectProperty( aMgrId, anIO->getEntry(), COLOR_PROP, SalomeApp_Tools::color( aQuanColor ) );
-       }
-       else if ( !hasColor && !isTemporary ) {
-         //In case if color wasn't defined in the property map of the object
-         //and GEOM_Object color also wasn't defined get default color from Resource Mgr.
-         QColor col = aResMgr->colorValue( "Geometry", "shading_color", QColor( 255, 0, 0 ) );
-         Quantity_Color aQuanColor = SalomeApp_Tools::color( col );
-         if ( !material.isPhysical() ) {
-           AISShape->SetShadingColor( aQuanColor );
-         }
-         study->setObjectProperty( aMgrId, anIO->getEntry(), COLOR_PROP, col );
-       }
+  // set top-level flag
+  AISShape->setTopLevel( propMap.value( GEOM::propertyName( GEOM::TopLevel ) ).toBool() );
 
-       // ... marker type
-       if ( useObjMarker ) {
-         GEOM::marker_type aType = aGeomObject->GetMarkerType();
-         GEOM::marker_size aSize = aGeomObject->GetMarkerSize();
-         if ( aType > GEOM::MT_NONE && aType < GEOM::MT_USER && aSize > GEOM::MS_NONE && aSize <= GEOM::MS_70 ) {
-           Aspect_TypeOfMarker aMType = (Aspect_TypeOfMarker)( (int)aType-1 );
-           double aMSize = ((int)aSize+1)*0.5;
-           Handle(Prs3d_PointAspect) anAspect = AISShape->Attributes()->PointAspect();
-           anAspect->SetScale( aMSize );
-           anAspect->SetTypeOfMarker( aMType );
-           Quantity_Color aQuanColor = SalomeApp_Tools::color( aResMgr->colorValue( "Geometry", "point_color", QColor( 255, 255, 0 ) ) );
-           if ( hasColor )
-             aQuanColor = Quantity_Color( aSColor.R, aSColor.G, aSColor.B, Quantity_TOC_RGB );
-           anAspect->SetColor( aQuanColor );
-           AISShape->Attributes()->SetPointAspect( anAspect );
-         }
-         else if ( aType == GEOM::MT_USER ) {
-           int aTextureId = aGeomObject->GetMarkerTexture();
-           Quantity_Color aQuanColor = SalomeApp_Tools::color( aResMgr->colorValue( "Geometry", "point_color", QColor( 255, 255, 0 ) ) );
-           if ( hasColor ) aQuanColor = Quantity_Color( aSColor.R, aSColor.G, aSColor.B, Quantity_TOC_RGB );
-           Standard_Integer aWidth, aHeight;
+  // set point marker (for vertex / compound of vertices only)
+  if ( onlyVertex ) {
+    QStringList aList = propMap.value( GEOM::propertyName( GEOM::PointMarker ) ).toString().split( GEOM::subSectionSeparator() );
+    if ( aList.size() == 2 ) {
+      // standard marker string contains "TypeOfMarker:ScaleOfMarker"
+      int aTypeOfMarker = aList[0].toInt();
+      double aScaleOfMarker = (aList[1].toInt() + 1) * 0.5;
+      Handle(Prs3d_PointAspect) anAspect = AISShape->Attributes()->PointAspect();
+      anAspect->SetScale( aScaleOfMarker );
+      anAspect->SetTypeOfMarker( (Aspect_TypeOfMarker)( aTypeOfMarker-1 ) );
+      anAspect->SetColor( HasColor() ? 
+                         // predefined color, manually set to displayer via GEOM_Displayer::SetColor() function
+                         (Quantity_NameOfColor)GetColor() : 
+                         // color from properties
+                         SalomeApp_Tools::color( propMap.value( GEOM::propertyName( GEOM::PointColor ) ).value<QColor>() ) );
+      AISShape->Attributes()->SetPointAspect( anAspect );
+    }
+    else if ( aList.size() == 1 ) {
+      // custom marker string contains "IdOfTexture"
+      int textureId = aList[0].toInt();
+      Standard_Integer aWidth, aHeight;
 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
-           Handle(TColStd_HArray1OfByte) aTexture =
+      Handle(TColStd_HArray1OfByte) aTexture =
 #else
-             Handle(Graphic3d_HArray1OfBytes) aTexture =
+       Handle(Graphic3d_HArray1OfBytes) aTexture =
 #endif
-             GeometryGUI::getTexture( study, aTextureId, aWidth, aHeight);
-           if (!aTexture.IsNull()) {
-             static int TextureId = 0;
-             Handle(Prs3d_PointAspect) aTextureAspect =
-               new Prs3d_PointAspect(aQuanColor, ++TextureId, aWidth, aHeight, aTexture );
-             AISShape->Attributes()->SetPointAspect( aTextureAspect );
-           }
-         }
-         else { //Use marker from the preferences
-           Handle(Prs3d_PointAspect) anAspect = AISShape->Attributes()->PointAspect();
-           anAspect->SetScale( myScaleOfMarker );
-           anAspect->SetTypeOfMarker( myTypeOfMarker );
-           Quantity_Color aQuanColor = SalomeApp_Tools::color( aResMgr->colorValue( "Geometry", "point_color", QColor( 255, 255, 0 ) ) );
-           if ( hasColor )
-             aQuanColor = Quantity_Color( aSColor.R, aSColor.G, aSColor.B, Quantity_TOC_RGB );
-           anAspect->SetColor( aQuanColor );
-           AISShape->Attributes()->SetPointAspect( anAspect );
-         }
-       }
+       GeometryGUI::getTexture( study, textureId, aWidth, aHeight );
+      if ( !aTexture.IsNull() ) {
+       static int TextureId = 0;
+       Handle(Prs3d_PointAspect) aTextureAspect =
+         new Prs3d_PointAspect( HasColor() ? 
+                                // predefined color, manually set to displayer via GEOM_Displayer::SetColor() function
+                                (Quantity_NameOfColor)GetColor() : 
+                                // color from properties
+                                SalomeApp_Tools::color( propMap.value( GEOM::propertyName( GEOM::PointColor ) ).value<QColor>() ),
+                                ++TextureId,
+                                aWidth, aHeight,
+                                aTexture );
+       AISShape->Attributes()->SetPointAspect( aTextureAspect );
       }
     }
+  }
 
-    if ( !isTemporary )
-      study->setObjectProperty( aMgrId, anIO->getEntry(), MATERIAL_PROP, material.toProperties() );
-
-    if ( HasWidth() )
-      study->setObjectProperty( aMgrId, anIO->getEntry(), EDGE_WIDTH_PROP, GetWidth() );
-    if ( HasIsosWidth() )
-      study->setObjectProperty( aMgrId, anIO->getEntry(), ISOS_WIDTH_PROP, GetIsosWidth() );
+  if ( create && !isTemporary && aMgrId != -1 ) {
+    // set properties to the study
+    study->setObjectPropMap( aMgrId, entry, propMap );
   }
 
   // AISShape->SetName(???); ??? necessary to set name ???
@@ -986,7 +859,7 @@ void GEOM_Displayer::Update( SALOME_OCCPrs* prs )
       Handle(GEOM_AISShape) AISShape = ( myType == GEOM_VECTOR ) ? new GEOM_AISVector( myShape, "" )
                                                                 : new GEOM_AISShape ( myShape, "" );
       // update shape properties
-      updateShapeProperties( AISShape );
+      updateShapeProperties( AISShape, true );
       // add shape to the presentation
       occPrs->AddObject( AISShape );
 
@@ -1023,7 +896,7 @@ void GEOM_Displayer::Update( SALOME_OCCPrs* prs )
        if ( AISShape->Shape() != myShape )
          AISShape->Set( myShape );
        // update shape properties
-       updateShapeProperties( AISShape );
+       updateShapeProperties( AISShape, false );
        // re-set interactive object
        if ( !myIO.IsNull() )
         {
@@ -1091,7 +964,7 @@ void GEOM_Displayer::Update( SALOME_VTKPrs* prs )
     theActors->AddItem( aTrh );
   }
   else {
-    PropMap aDefPropMap = getDefaultPropertyMap(SVTK_Viewer::Type());
+    PropMap aDefPropMap = getDefaultPropertyMap();
 
     if(!myIO.IsNull()) {
       aMgrId = getViewManagerId(myViewFrame);
@@ -1101,13 +974,18 @@ void GEOM_Displayer::Update( SALOME_VTKPrs* prs )
 
     theActors = vtkActorCollection::New();
     GEOM_Actor* aGeomActor = GEOM_Actor::New();
-    aGeomActor->SetShape(myShape,aDefPropMap.value(DEFLECTION_COEFF_PROP).toDouble(),myType == GEOM_VECTOR);
+    /////////////////////////////////////////////////////////////////////////
+    // VSR: for VTK viewer currently deflection coefficient is hardcoded
+    //      due to performance problem
+    // aGeomActor->SetShape(myShape,aDefPropMap.value(GEOM::propertyName( GEOM::Deflection )).toDouble(),myType == GEOM_VECTOR);
+    /////////////////////////////////////////////////////////////////////////
+    aGeomActor->SetShape(myShape, VTK_MIN_DEFLECTION, myType == GEOM_VECTOR);
     theActors->AddItem(aGeomActor);
     aGeomActor->Delete();
 
     if(useStudy) {
       aPropMap = aStudy->getObjectPropMap(aMgrId,anEntry);
-      if(!aPropMap.contains(COLOR_PROP))
+      if(!aPropMap.contains(GEOM::propertyName( GEOM::Color )))
         useObjCol = true;
       MergePropertyMaps(aPropMap, aDefPropMap);
     }
@@ -1160,15 +1038,15 @@ void GEOM_Displayer::Update( SALOME_VTKPrs* prs )
 
       int aIsos[2]= { 1, 1 };
       if(useStudy) {
-        QString anIsos = aPropMap.value(ISOS_PROP).toString();
-        QStringList uv =  anIsos.split(DIGIT_SEPARATOR);
+        QString anIsos = aPropMap.value(GEOM::propertyName( GEOM::NbIsos )).toString();
+        QStringList uv =  anIsos.split( GEOM::subSectionSeparator() );
         aIsos[0] = uv[0].toInt(); aIsos[1] = uv[1].toInt();
         aGeomGActor->SetNbIsos(aIsos);
-        aGeomGActor->SetOpacity(1.0 - aPropMap.value(TRANSPARENCY_PROP).toDouble());
-        SetWidth(aPropMap.value(EDGE_WIDTH_PROP).toInt());
-        SetIsosWidth(aPropMap.value(ISOS_WIDTH_PROP).toInt());
-        aGeomGActor->SetVectorMode(aPropMap.value(VECTOR_MODE_PROP).toBool());
-        int aDispModeId = aPropMap.value(DISPLAY_MODE_PROP).toInt();
+        aGeomGActor->SetOpacity(1.0 - aPropMap.value(GEOM::propertyName( GEOM::Transparency )).toDouble());
+        SetWidth(aPropMap.value(GEOM::propertyName( GEOM::LineWidth )).toInt());
+        SetIsosWidth(aPropMap.value(GEOM::propertyName( GEOM::IsosWidth )).toInt());
+        aGeomGActor->SetVectorMode(aPropMap.value(GEOM::propertyName( GEOM::EdgesDirection )).toBool());
+        int aDispModeId = aPropMap.value(GEOM::propertyName( GEOM::DisplayMode )).toInt();
         // Specially processing of 'Shading with edges' mode from preferences,
         // because there is the following enum in VTK viewer:
         // Points - 0, Wireframe - 1, Surface - 2, Insideframe - 3, SurfaceWithEdges - 4
@@ -1179,13 +1057,18 @@ void GEOM_Displayer::Update( SALOME_VTKPrs* prs )
           // enum in GEOM_Actor (and further to VTKViewer::Representation enum)
           aDispModeId++;
         aGeomGActor->setDisplayMode(aDispModeId);
-        aGeomGActor->SetDeflection(aPropMap.value(DEFLECTION_COEFF_PROP).toDouble());
+       /////////////////////////////////////////////////////////////////////////
+       // VSR: for VTK viewer currently deflection coefficient is hardcoded
+       //      due to performance problem;
+       // aGeomGActor->SetDeflection(aPropMap.value(GEOM::propertyName( GEOM::Deflection )).toDouble());
+       /////////////////////////////////////////////////////////////////////////
+        aGeomGActor->SetDeflection(VTK_MIN_DEFLECTION);
 
         // Create material model
         Material_Model material;
-        material.fromProperties( aPropMap.value(MATERIAL_PROP).toString() );
+        material.fromProperties( aPropMap.value(GEOM::propertyName( GEOM::Material )).toString() );
         // Set material properties for the object
-        aStudy->setObjectProperty( aMgrId, anEntry, MATERIAL_PROP, material.toProperties() );
+        aStudy->setObjectProperty( aMgrId, anEntry, GEOM::propertyName( GEOM::Material ), material.toProperties() );
         // Set the same front and back materials for the selected shape
         std::vector<vtkProperty*> aProps;
         aProps.push_back( material.getMaterialVTKProperty( true ) );
@@ -1214,12 +1097,12 @@ void GEOM_Displayer::Update( SALOME_VTKPrs* prs )
                     aColor[0] = c.red()/255.; aColor[1] = c.green()/255.; aColor[2] = c.blue()/255.;
                   }
                 }
-                aStudy->setObjectProperty( aMgrId, anIO->getEntry(), COLOR_PROP, QColor( aColor[0] *255, aColor[1] * 255, aColor[2]* 255) );
+                aStudy->setObjectProperty( aMgrId, anIO->getEntry(), GEOM::propertyName( GEOM::Color ), QColor( aColor[0] *255, aColor[1] * 255, aColor[2]* 255) );
               }
             }
           }
         } else {
-          QColor c = aPropMap.value(COLOR_PROP).value<QColor>();
+          QColor c = aPropMap.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
           aColor[0] = c.red()/255.; aColor[1] = c.green()/255.; aColor[2] = c.blue()/255.;
         }
 
@@ -1235,7 +1118,7 @@ void GEOM_Displayer::Update( SALOME_VTKPrs* prs )
                 QString mname = aResMgr->stringValue( "Geometry", "material", "Plastic" );
                 material.fromResources( mname );
                 // Set material properties for the object
-                aStudy->setObjectProperty( aMgrId, anEntry, MATERIAL_PROP, material.toProperties() );
+                aStudy->setObjectProperty( aMgrId, anEntry, GEOM::propertyName( GEOM::Material ), material.toProperties() );
                 // Set material for the selected shape
                 std::vector<vtkProperty*> aProps;
                 aProps.push_back( material.getMaterialVTKProperty( true ) );
@@ -1624,8 +1507,8 @@ void GEOM_Displayer::AfterDisplay( SALOME_View* v, const SALOME_OCCPrs* p )
         Handle(SALOME_InteractiveObject) IO = sh->getIO();
         if ( IO.IsNull() ) continue;
         PropMap aPropMap = aStudy->getObjectPropMap( aMgrId, IO->getEntry() );
-        if ( aPropMap.contains( TRANSPARENCY_PROP ) ) {
-          double transparency = aPropMap.value(TRANSPARENCY_PROP).toDouble();
+        if ( aPropMap.contains( GEOM::propertyName( GEOM::Transparency ) ) ) {
+          double transparency = aPropMap.value(GEOM::propertyName( GEOM::Transparency )).toDouble();
           ic->SetTransparency( sh, transparency, true );
         }
       }
@@ -1806,12 +1689,12 @@ bool GEOM_Displayer::canBeDisplayed( const QString& entry, const QString& viewer
 int GEOM_Displayer::SetDisplayMode( const int theMode )
 {
   int aPrevMode = myDisplayMode;
-  if ( theMode != -1 )
+  if ( theMode != -1 ) {
     myDisplayMode = theMode;
-  else
-  {
-    SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
-    myDisplayMode = resMgr->integerValue( "Geometry", "display_mode", 0 );
+    myHasDisplayMode = true;
+  }
+  else {
+    UnsetDisplayMode();
   }
   return aPrevMode;
 }
@@ -1826,9 +1709,15 @@ int GEOM_Displayer::UnsetDisplayMode()
   int aPrevMode = myDisplayMode;
   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
   myDisplayMode = resMgr->integerValue( "Geometry", "display_mode", 0 );
+  myHasDisplayMode = false;
   return aPrevMode;
 }
 
+bool GEOM_Displayer::HasDisplayMode() const
+{
+  return myHasDisplayMode;
+}
+
 SALOMEDS::Color GEOM_Displayer::getPredefinedUniqueColor()
 {
   static QList<QColor> colors;
@@ -1917,121 +1806,228 @@ SALOMEDS::Color GEOM_Displayer::getUniqueColor( const QList<SALOMEDS::Color>& th
   return aSColor;
 }
 
+PropMap GEOM_Displayer::getObjectProperties( SalomeApp_Study* study,
+                                            const QString& entry,
+                                            SALOME_View* view )
+{
+  // get default properties for the explicitly specified default view type
+  PropMap propMap = GEOM_Displayer::getDefaultPropertyMap();
+
+  if ( study && view ) {
+    SUIT_ViewModel* viewModel = dynamic_cast<SUIT_ViewModel*>( view );
+    SUIT_ViewManager* viewMgr = ( viewModel != 0 ) ? viewModel->getViewManager() : 0;
+    int viewId = ( viewMgr != 0 ) ? viewMgr->getGlobalId() : -1;
+  
+    if ( viewModel && viewId != -1 ) {
+      // get properties from the study
+      PropMap storedMap = study->getObjectPropMap( viewId, entry );
+      // overwrite default properties from stored ones (that are specified)
+      for ( int prop = GEOM::Visibility; prop <= GEOM::LastProperty; prop++ ) {
+       if ( storedMap.contains( GEOM::propertyName( (GEOM::Property)prop ) ) )
+         propMap.insert( GEOM::propertyName( (GEOM::Property)prop ), 
+                         storedMap.value( GEOM::propertyName( (GEOM::Property)prop ) ) );
+      }
+      // ... specific processing for color
+      // ... current implementation is to use same stored color for all aspects
+      // ... (TODO) possible future improvements about free boundaries, standalone edges etc colors can be here
+      if ( storedMap.contains( GEOM::propertyName( GEOM::Color ) ) ) {
+       propMap.insert( GEOM::propertyName( GEOM::ShadingColor ),   storedMap.value( GEOM::propertyName( GEOM::Color ) ) );
+       propMap.insert( GEOM::propertyName( GEOM::WireframeColor ), storedMap.value( GEOM::propertyName( GEOM::Color ) ) );
+       propMap.insert( GEOM::propertyName( GEOM::LineColor ),      storedMap.value( GEOM::propertyName( GEOM::Color ) ) );
+       propMap.insert( GEOM::propertyName( GEOM::FreeBndColor ),   storedMap.value( GEOM::propertyName( GEOM::Color ) ) );
+       propMap.insert( GEOM::propertyName( GEOM::PointColor ),     storedMap.value( GEOM::propertyName( GEOM::Color ) ) );
+      }
 
+      if ( !entry.isEmpty() ) {
+       // get CORBA reference to geom object
+       _PTR(SObject) SO( study->studyDS()->FindObjectID( entry.toStdString() ) );
+       if ( SO ) {
+         CORBA::Object_var object = GeometryGUI::ClientSObjectToObject( SO );
+         if ( !CORBA::is_nil( object ) ) {
+           GEOM::GEOM_Object_var geomObject = GEOM::GEOM_Object::_narrow( object );
+           // check that geom object has color properly set
+           bool hasColor = false;
+           SALOMEDS::Color aSColor = getColor( geomObject, hasColor );
+           // set color from geometry object (only once, if it is not yet set in GUI)
+           // current implementation is to use same color for all aspects
+           // (TODO) possible future improvements about free boundaries, standalone edges etc colors can be here
+           if ( hasColor && !storedMap.contains( GEOM::propertyName( GEOM::Color ) ) ) {
+             QColor objColor = QColor::fromRgbF( aSColor.R, aSColor.G, aSColor.B );
+             propMap.insert( GEOM::propertyName( GEOM::ShadingColor ),   objColor );
+             propMap.insert( GEOM::propertyName( GEOM::WireframeColor ), objColor );
+             propMap.insert( GEOM::propertyName( GEOM::LineColor ),      objColor );
+             propMap.insert( GEOM::propertyName( GEOM::FreeBndColor ),   objColor );
+             propMap.insert( GEOM::propertyName( GEOM::PointColor ),     objColor );
+           }
+           // check that object has point marker properly set
+           GEOM::marker_type mType = geomObject->GetMarkerType();
+           GEOM::marker_size mSize = geomObject->GetMarkerSize();
+           int mTextureId = geomObject->GetMarkerTexture();
+           bool hasMarker = ( mType > GEOM::MT_NONE && mType < GEOM::MT_USER && mSize > GEOM::MS_NONE && mSize <= GEOM::MS_70 ) || 
+                            ( mType == GEOM::MT_USER && mTextureId > 0 );
+           // set point marker from geometry object (only once, if it is not yet set in GUI)
+           if ( hasMarker && !storedMap.contains( GEOM::propertyName( GEOM::PointMarker ) ) ) {
+             if ( mType > GEOM::MT_NONE && mType < GEOM::MT_USER ) {
+               // standard type
+               propMap.insert( GEOM::propertyName( GEOM::PointMarker ),
+                               QString( "%1%2%3" ).arg( (int)mType ).arg( GEOM::subSectionSeparator() ).arg( (int)mSize ) );
+             }
+             else if ( mType == GEOM::MT_USER ) {
+               // custom texture
+               propMap.insert( GEOM::propertyName( GEOM::PointMarker ), QString::number( mTextureId ) );
+             }
+           }
+         }
+       }
+      }
+    }
+  }
+  return propMap;
+}
 
-PropMap GEOM_Displayer::getDefaultPropertyMap(const QString& viewer_type)
+PropMap GEOM_Displayer::getDefaultPropertyMap()
 {
-  PropMap aDefaultMap;
-  SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
+  PropMap propMap;
+
+  // get resource manager
+  SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
 
-  //1. Visibility
-  aDefaultMap.insert( VISIBILITY_PROP, 1 );
+  // fill in the properties map with default values
 
-  //2. Nb Isos
-  aDefaultMap.insert( ISOS_PROP,
-                     QString( "%1%2%3" ).
-                     arg( aResMgr->integerValue( "Geometry", "iso_number_u", 1 ) ).
-                     arg( DIGIT_SEPARATOR ).
-                     arg( aResMgr->integerValue( "Geometry", "iso_number_v", 1 ) ) );
+  // - visibility (false by default)
+  propMap.insert( GEOM::propertyName( GEOM::Visibility ), false );
 
-  //3. Transparency
-  aDefaultMap.insert( TRANSPARENCY_PROP, 0.0 );
+  // - nb isos (take default value from preferences)
+  propMap.insert( GEOM::propertyName( GEOM::NbIsos ),
+                 QString( "%1%2%3" ).
+                 arg( resMgr->integerValue( "Geometry", "iso_number_u", 1 ) ).
+                 arg( GEOM::subSectionSeparator() ).
+                 arg( resMgr->integerValue( "Geometry", "iso_number_v", 1 ) ) );
 
-  //4. Display Mode
-  aDefaultMap.insert( DISPLAY_MODE_PROP,
-                     aResMgr->integerValue( "Geometry", "display_mode", 0 ) );
+  // - transparency (opacity = 1-transparency)
+  propMap.insert( GEOM::propertyName( GEOM::Transparency ), 0.0 );
 
-  //5. Vector Mode
-  aDefaultMap.insert( VECTOR_MODE_PROP, false );
+  // - display mode (take default value from preferences)
+  propMap.insert( GEOM::propertyName( GEOM::DisplayMode ),
+                 resMgr->integerValue( "Geometry", "display_mode", 0 ) );
 
-  //6. Color
-  aDefaultMap.insert( COLOR_PROP,
-                     aResMgr->colorValue( "Geometry", "shading_color", QColor( 255, 0, 0 ) ) );
+  // - show edges direction flag (false by default)
+  propMap.insert( GEOM::propertyName( GEOM::EdgesDirection ), false );
 
-  //7. Deflection Coeff
-  if ( viewer_type == SOCC_Viewer::Type() ) {
-    aDefaultMap.insert( DEFLECTION_COEFF_PROP,
-                       aResMgr->doubleValue( "Geometry", "deflection_coeff", 0.001 ) );
-  }
-  else {
-    aDefaultMap.insert( DEFLECTION_COEFF_PROP, 0.001 );
-  }
+  // - shading color (take default value from preferences)
+  propMap.insert( GEOM::propertyName( GEOM::ShadingColor ),
+                 colorFromResources( "shading_color", QColor( 255, 255, 0 ) ) );
+
+  // - wireframe color (take default value from preferences)
+  propMap.insert( GEOM::propertyName( GEOM::WireframeColor ),
+                 colorFromResources( "wireframe_color", QColor( 255, 255, 0 ) ) );
+
+  // - standalone edges color (take default value from preferences)
+  propMap.insert( GEOM::propertyName( GEOM::LineColor ),
+                 colorFromResources( "line_color", QColor( 255, 0, 0 ) ) );
 
-  //8. Material
+  // - free boundaries color (take default value from preferences)
+  propMap.insert( GEOM::propertyName( GEOM::FreeBndColor ),
+                 colorFromResources( "free_bound_color", QColor( 0, 255, 0 ) ) );
+
+  // - points color (take default value from preferences)
+  propMap.insert( GEOM::propertyName( GEOM::PointColor ),
+                 colorFromResources( "point_color", QColor( 255, 255, 0 ) ) );
+
+  // - isos color (take default value from preferences)
+  propMap.insert( GEOM::propertyName( GEOM::IsosColor ),
+                 colorFromResources( "isos_color", QColor( 200, 200, 200 ) ) );
+
+  // - outlines color (take default value from preferences)
+  propMap.insert( GEOM::propertyName( GEOM::OutlineColor ),
+                 colorFromResources( "edges_in_shading_color", QColor( 180, 180, 180 ) ) );
+
+  // - deflection coefficient (take default value from preferences)
+  propMap.insert( GEOM::propertyName( GEOM::Deflection ),
+                 resMgr->doubleValue( "Geometry", "deflection_coeff", 0.001 ) );
+
+  // - material (take default value from preferences)
   Material_Model material;
-  material.fromResources( aResMgr->stringValue( "Geometry", "material", "Plastic" ) );
-  aDefaultMap.insert( MATERIAL_PROP, material.toProperties() );
+  material.fromResources( resMgr->stringValue( "Geometry", "material", "Plastic" ) );
+  propMap.insert( GEOM::propertyName( GEOM::Material ), material.toProperties() );
+
+  // - edge width (take default value from preferences)
+  propMap.insert( GEOM::propertyName( GEOM::LineWidth ),
+                 resMgr->integerValue( "Geometry", "edge_width", 1 ) );
 
-  //9. Width of the edges
-  aDefaultMap.insert( EDGE_WIDTH_PROP,
-                     aResMgr->integerValue( "Geometry", "edge_width", 1 ) );
+  // - isos width (take default value from preferences)
+  propMap.insert( GEOM::propertyName( GEOM::IsosWidth ),
+                 resMgr->integerValue( "Geometry", "isolines_width", 1 ) );
 
-  //10. Width of iso-lines
-  aDefaultMap.insert( ISOS_WIDTH_PROP,
-                     aResMgr->integerValue( "Geometry", "isolines_width", 1 ) );
+  // - point marker (take default value from preferences)
+  propMap.insert( GEOM::propertyName( GEOM::PointMarker ),
+                 QString( "%1%2%3" ).
+                 arg( resMgr->integerValue( "Geometry", "type_of_marker", 1 ) + 1 ).
+                 arg( GEOM::subSectionSeparator() ).
+                 arg( resMgr->integerValue( "Geometry", "marker_scale", 1 ) ) );
 
-  //11. Top-level flag
-  aDefaultMap.insert( TOP_LEVEL_PROP, Standard_False );
+  // - top-level flag (false by default)
+  propMap.insert( GEOM::propertyName( GEOM::TopLevel ), false );
 
-  return aDefaultMap;
+  return propMap;
 }
 
 bool GEOM_Displayer::MergePropertyMaps(PropMap& theOrigin, PropMap& theDefault)
 {
   int nbInserted = 0;
 
-  if(!theOrigin.contains(VISIBILITY_PROP)) {
-    theOrigin.insert(VISIBILITY_PROP, 0);
+  if(!theOrigin.contains(GEOM::propertyName( GEOM::Visibility ))) {
+    theOrigin.insert(GEOM::propertyName( GEOM::Visibility ), 0);
     nbInserted++;
   }
 
-  if(!theOrigin.contains(TRANSPARENCY_PROP)) {
-    theOrigin.insert(TRANSPARENCY_PROP, theDefault.value(TRANSPARENCY_PROP));
+  if(!theOrigin.contains(GEOM::propertyName( GEOM::Transparency ))) {
+    theOrigin.insert(GEOM::propertyName( GEOM::Transparency ), theDefault.value(GEOM::propertyName( GEOM::Transparency )));
     nbInserted++;
   }
 
-  if(!theOrigin.contains(DISPLAY_MODE_PROP)) {
-    theOrigin.insert(DISPLAY_MODE_PROP, theDefault.value(DISPLAY_MODE_PROP));
+  if(!theOrigin.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
+    theOrigin.insert(GEOM::propertyName( GEOM::DisplayMode ), theDefault.value(GEOM::propertyName( GEOM::DisplayMode )));
     nbInserted++;
   }
 
-  if(!theOrigin.contains(ISOS_PROP)) {
-    theOrigin.insert(ISOS_PROP, theDefault.value(ISOS_PROP));
+  if(!theOrigin.contains(GEOM::propertyName( GEOM::NbIsos ))) {
+    theOrigin.insert(GEOM::propertyName( GEOM::NbIsos ), theDefault.value(GEOM::propertyName( GEOM::NbIsos )));
     nbInserted++;
   }
 
-  if(!theOrigin.contains(VECTOR_MODE_PROP)) {
-    theOrigin.insert(VECTOR_MODE_PROP, theDefault.value(VECTOR_MODE_PROP));
+  if(!theOrigin.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
+    theOrigin.insert(GEOM::propertyName( GEOM::EdgesDirection ), theDefault.value(GEOM::propertyName( GEOM::EdgesDirection )));
     nbInserted++;
   }
 
-  if(!theOrigin.contains(DEFLECTION_COEFF_PROP)) {
-    theOrigin.insert(DEFLECTION_COEFF_PROP, theDefault.value(DEFLECTION_COEFF_PROP));
+  if(!theOrigin.contains(GEOM::propertyName( GEOM::Deflection ))) {
+    theOrigin.insert(GEOM::propertyName( GEOM::Deflection ), theDefault.value(GEOM::propertyName( GEOM::Deflection )));
     nbInserted++;
   }
 
-  if(!theOrigin.contains(MATERIAL_PROP)) {
-    theOrigin.insert(MATERIAL_PROP, theDefault.value(MATERIAL_PROP));
+  if(!theOrigin.contains(GEOM::propertyName( GEOM::Material ))) {
+    theOrigin.insert(GEOM::propertyName( GEOM::Material ), theDefault.value(GEOM::propertyName( GEOM::Material )));
     nbInserted++;
   }
 
-  if(!theOrigin.contains(EDGE_WIDTH_PROP)) {
-    theOrigin.insert(EDGE_WIDTH_PROP, theDefault.value(EDGE_WIDTH_PROP));
+  if(!theOrigin.contains(GEOM::propertyName( GEOM::LineWidth ))) {
+    theOrigin.insert(GEOM::propertyName( GEOM::LineWidth ), theDefault.value(GEOM::propertyName( GEOM::LineWidth )));
     nbInserted++;
   }
 
-  if(!theOrigin.contains(ISOS_WIDTH_PROP)) {
-    theOrigin.insert(ISOS_WIDTH_PROP, theDefault.value(ISOS_WIDTH_PROP));
+  if(!theOrigin.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
+    theOrigin.insert(GEOM::propertyName( GEOM::IsosWidth ), theDefault.value(GEOM::propertyName( GEOM::IsosWidth )));
     nbInserted++;
   }
 
-  if(!theOrigin.contains(COLOR_PROP)) {
-    theOrigin.insert(COLOR_PROP, theDefault.value(COLOR_PROP));
+  if(!theOrigin.contains(GEOM::propertyName( GEOM::Color ))) {
+    theOrigin.insert(GEOM::propertyName( GEOM::Color ), theDefault.value(GEOM::propertyName( GEOM::Color )));
     nbInserted++;
   }
 
-  if(!theOrigin.contains(TOP_LEVEL_PROP)) {
-    theOrigin.insert(TOP_LEVEL_PROP, theDefault.value(TOP_LEVEL_PROP));
+  if(!theOrigin.contains(GEOM::propertyName( GEOM::TopLevel ))) {
+    theOrigin.insert(GEOM::propertyName( GEOM::TopLevel ), theDefault.value(GEOM::propertyName( GEOM::TopLevel )));
     nbInserted++;
   }
 
index be3fc0477ee8526ba8b5e91f4dbf373fb48f9cc6..62d98f62e8541a2a3883cb4d2c71babe1844afe5 100644 (file)
@@ -145,7 +145,7 @@ public:
   int           SetDisplayMode( const int );
   int           GetDisplayMode() const;
   int           UnsetDisplayMode();
-
+  bool          HasDisplayMode() const;
 
   /* Sets name - for temporary objects only */
   void          SetName( const char* theName );
@@ -172,10 +172,6 @@ public:
   static SALOMEDS::Color getUniqueColor( const QList<SALOMEDS::Color>& );
   static SALOMEDS::Color getPredefinedUniqueColor();
 
-  static PropMap getDefaultPropertyMap(const QString& viewer_type);
-  
-  static bool MergePropertyMaps(PropMap& theOrigin, PropMap& theDefault);
-  
   /*Get color of the geom object*/
   static SALOMEDS::Color getColor(GEOM::GEOM_Object_var aGeomObject, bool& hasColor);
 
@@ -213,7 +209,13 @@ protected:
   Quantity_Color qColorFromResources( const QString&, const QColor& );
   QColor         colorFromResources( const QString&, const QColor& );
   bool           setPointMarker( const Handle(GEOM_AISShape)&, const QString&, const Quantity_Color );
-  void           updateShapeProperties( const Handle(GEOM_AISShape)& );
+  void           updateShapeProperties( const Handle(GEOM_AISShape)&, bool );
+
+  PropMap getObjectProperties( SalomeApp_Study*, const QString&, SALOME_View* = 0 );
+  PropMap getDefaultPropertyMap();
+  
+  static bool MergePropertyMaps(PropMap& theOrigin, PropMap& theDefault);
+  
 
 protected:
   Handle(SALOME_InteractiveObject) myIO;
@@ -230,6 +232,7 @@ protected:
   int                              myIsosWidth;
   bool                             myToActivate;
   int                              myDisplayMode;
+  bool                             myHasDisplayMode;
   Aspect_TypeOfMarker              myTypeOfMarker;
   double                           myScaleOfMarker;
 
index 73caf9f34e25d7778731008cb9910cda66148240..048e9d3eabc72ea100f84c10de365f5d2a53d432 100644 (file)
@@ -1728,7 +1728,7 @@ void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString&
       if ( anApp && anApp->activeViewManager() ) {
         LightApp_Study* aStudy = dynamic_cast<LightApp_Study*>( anApp->activeStudy() );
         if( aStudy ) {
-          v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), MATERIAL_PROP, QVariant() );
+          v = aStudy->getObjectProperty( anApp->activeViewManager()->getGlobalId(), lst.Last()->getEntry(), GEOM::propertyName( GEOM::Material ), QVariant() );
         }
       }
       QString curModel = "";
@@ -1934,7 +1934,7 @@ void GeometryGUI::createPreferences()
   setPreferenceProperty( step, "precision", 3 );
 
   // Set property for deflection value for spinboxes
-  setPreferenceProperty( defl, "min", DEFLECTION_MIN );
+  setPreferenceProperty( defl, "min", GEOM::minDeflection() );
   setPreferenceProperty( defl, "max", 1.0 );
   setPreferenceProperty( defl, "step", 1.0e-04 );
   setPreferenceProperty( defl, "precision", 6 );
@@ -2083,83 +2083,82 @@ void GeometryGUI::storeVisualParameters (int savePoint)
         if (!obj->FindAttribute(anAttr, "AttributeIOR"))
           continue;
 
-        std::string param,occParam = vType.toLatin1().data();
-        occParam += NAME_SEPARATOR;
-        occParam += QString::number(aMgrId).toLatin1().data();
-        occParam += NAME_SEPARATOR;
+        QString param, occParam = vType;
+        occParam += GEOM::sectionSeparator();
+        occParam += QString::number(aMgrId);
+        occParam += GEOM::sectionSeparator();
 
-        if (aProps.contains(VISIBILITY_PROP)) {
-          param = occParam + VISIBILITY_PROP;
-          ip->setParameter(entry, param, aProps.value(VISIBILITY_PROP).toInt() == 1 ? "On" : "Off");
+        if (aProps.contains(GEOM::propertyName( GEOM::Visibility ))) {
+          param = occParam + GEOM::propertyName( GEOM::Visibility );
+          ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Visibility )).toBool() ? "On" : "Off");
         }
 
-        if (aProps.contains(DISPLAY_MODE_PROP)) {
-          param = occParam + DISPLAY_MODE_PROP;
-          ip->setParameter(entry, param, QString::number(aProps.value(DISPLAY_MODE_PROP).toInt()).toLatin1().data());
+        if (aProps.contains(GEOM::propertyName( GEOM::DisplayMode ))) {
+          param = occParam + GEOM::propertyName( GEOM::DisplayMode );
+          ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::DisplayMode )).toString().toStdString());
         }
 
-        if (aProps.contains(COLOR_PROP)) {
-          QColor c = aProps.value(COLOR_PROP).value<QColor>();
-          QString colorStr = QString::number(c.red()/255.);
-          colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.green()/255.);
-          colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.blue()/255.);
-          param = occParam + COLOR_PROP;
-          ip->setParameter(entry, param, colorStr.toLatin1().data());
+        if (aProps.contains(GEOM::propertyName( GEOM::Color ))) {
+          QColor c = aProps.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
+         QStringList val;
+         val << QString::number(c.redF());
+         val << QString::number(c.greenF());
+         val << QString::number(c.blueF());
+          param = occParam + GEOM::propertyName( GEOM::Color );
+          ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
         }
 
         if (vType == SVTK_Viewer::Type()) {
-          if (aProps.contains(OPACITY_PROP)) {
-            param = occParam + OPACITY_PROP;
-            ip->setParameter(entry, param, QString::number(1. - aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
+          if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
+            param = occParam + GEOM::propertyName( GEOM::Opacity );
+            ip->setParameter(entry, param.toStdString(), QString::number(1. - aProps.value(GEOM::propertyName( GEOM::Transparency )).toDouble()).toStdString());
           }
         } else if (vType == SOCC_Viewer::Type()) {
-          if (aProps.contains(TRANSPARENCY_PROP)) {
-            param = occParam + TRANSPARENCY_PROP;
-            ip->setParameter(entry, param, QString::number(aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
+          if (aProps.contains(GEOM::propertyName( GEOM::Transparency ))) {
+            param = occParam + GEOM::propertyName( GEOM::Transparency );
+            ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Transparency )).toString().toStdString());
           }
 
-          if (aProps.contains(TOP_LEVEL_PROP)) {
-            param = occParam + TOP_LEVEL_PROP;
-            Standard_Boolean val = aProps.value(TOP_LEVEL_PROP).value<Standard_Boolean>();
-            if (val == Standard_True)
-              ip->setParameter(entry, param, "1");
+          if (aProps.contains(GEOM::propertyName( GEOM::TopLevel ))) {
+            param = occParam + GEOM::propertyName( GEOM::TopLevel );
+            ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::TopLevel )).toString().toStdString());
           }
         }
 
-        if (aProps.contains(ISOS_PROP)) {
-          param = occParam + ISOS_PROP;
-          ip->setParameter(entry, param, aProps.value(ISOS_PROP).toString().toLatin1().data());
+        if (aProps.contains(GEOM::propertyName( GEOM::NbIsos ))) {
+          param = occParam + GEOM::propertyName( GEOM::NbIsos );
+          ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::NbIsos )).toString().toStdString());
         }
 
-        if (aProps.contains(VECTOR_MODE_PROP)) {
-          param = occParam + VECTOR_MODE_PROP;
-          ip->setParameter(entry, param, QString::number(aProps.value(VECTOR_MODE_PROP).toInt()).toLatin1().data());
+        if (aProps.contains(GEOM::propertyName( GEOM::EdgesDirection ))) {
+          param = occParam + GEOM::propertyName( GEOM::EdgesDirection );
+          ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::EdgesDirection )).toString().toStdString());
         }
 
-        if (aProps.contains(DEFLECTION_COEFF_PROP)) {
-          param = occParam + DEFLECTION_COEFF_PROP;
-          ip->setParameter(entry, param, QString::number(aProps.value(DEFLECTION_COEFF_PROP).toDouble()).toLatin1().data());
+        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());
         }
 
         //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
-        if (aProps.contains(MARKER_TYPE_PROP)) {
-          param = occParam + MARKER_TYPE_PROP;
-          ip->setParameter(entry, param, aProps.value(MARKER_TYPE_PROP).toString().toLatin1().data());
+        if (aProps.contains(GEOM::propertyName( GEOM::PointMarker ))) {
+          param = occParam + GEOM::propertyName( GEOM::PointMarker );
+          ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::PointMarker )).toString().toStdString());
         }
 
-        if (aProps.contains(MATERIAL_PROP)) {
-          param = occParam + MATERIAL_PROP;
-          ip->setParameter(entry, param, aProps.value(MATERIAL_PROP).toString().toLatin1().data());
+        if (aProps.contains(GEOM::propertyName( GEOM::Material ))) {
+          param = occParam + GEOM::propertyName( GEOM::Material );
+          ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Material )).toString().toStdString());
         }
 
-        if (aProps.contains(EDGE_WIDTH_PROP)) {
-             param = occParam + EDGE_WIDTH_PROP;
-           ip->setParameter(entry, param, aProps.value(EDGE_WIDTH_PROP).toString().toLatin1().data());
+        if (aProps.contains(GEOM::propertyName( GEOM::LineWidth ))) {
+             param = occParam + GEOM::propertyName( GEOM::LineWidth );
+           ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::LineWidth )).toString().toStdString());
         }
 
-        if (aProps.contains(ISOS_WIDTH_PROP)) {
-          param = occParam + ISOS_WIDTH_PROP;
-          ip->setParameter(entry, param, aProps.value(ISOS_WIDTH_PROP).toString().toLatin1().data());
+        if (aProps.contains(GEOM::propertyName( GEOM::IsosWidth ))) {
+          param = occParam + GEOM::propertyName( GEOM::IsosWidth );
+          ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::IsosWidth )).toString().toStdString());
         }
       } // object iterator
     } // for (views)
@@ -2222,7 +2221,7 @@ void GeometryGUI::restoreVisualParameters (int savePoint)
     {
       // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
       // '_' is used as separator and should not be used in viewer type or parameter names.
-      QStringList lst = QString((*namesIt).c_str()).split(NAME_SEPARATOR, QString::SkipEmptyParts);
+      QStringList lst = QString((*namesIt).c_str()).split( GEOM::sectionSeparator(), QString::SkipEmptyParts);
       if (lst.size() != 3)
         continue;
 
@@ -2240,36 +2239,36 @@ void GeometryGUI::restoreVisualParameters (int savePoint)
       }
 
       QString val((*valuesIt).c_str());
-      if (paramNameStr == VISIBILITY_PROP) {
-        aListOfMap[viewIndex].insert(VISIBILITY_PROP, val == "On" ? 1 : 0);
-      } else if (paramNameStr == OPACITY_PROP) {
-        aListOfMap[viewIndex].insert(TRANSPARENCY_PROP, 1. - val.toDouble());
-      } else if (paramNameStr == TRANSPARENCY_PROP) {
-        aListOfMap[viewIndex].insert( TRANSPARENCY_PROP, val.toDouble() );
-      } else if (paramNameStr == TOP_LEVEL_PROP) {
-          aListOfMap[viewIndex].insert( TRANSPARENCY_PROP, val == "1" ? Standard_True : Standard_False );
-      } else if (paramNameStr == DISPLAY_MODE_PROP) {
-        aListOfMap[viewIndex].insert( DISPLAY_MODE_PROP, val.toInt());
-      } else if (paramNameStr == ISOS_PROP) {
-        aListOfMap[viewIndex].insert( ISOS_PROP, val);
-      } else if (paramNameStr == COLOR_PROP) {
-        QStringList rgb = val.split(DIGIT_SEPARATOR);
+      if (paramNameStr == GEOM::propertyName( GEOM::Visibility )) {
+        aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Visibility ), val == "On");
+      } else if (paramNameStr == GEOM::propertyName( GEOM::Opacity )) {
+        aListOfMap[viewIndex].insert(GEOM::propertyName( GEOM::Transparency ), 1. - val.toDouble());
+      } else if (paramNameStr == GEOM::propertyName( GEOM::Transparency )) {
+        aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Transparency ), val.toDouble() );
+      } else if (paramNameStr == GEOM::propertyName( GEOM::TopLevel )) {
+       aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::TopLevel ), val.toInt() ? Standard_True : Standard_False );
+      } else if (paramNameStr == GEOM::propertyName( GEOM::DisplayMode )) {
+        aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::DisplayMode ), val.toInt());
+      } else if (paramNameStr == GEOM::propertyName( GEOM::NbIsos )) {
+        aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::NbIsos ), val);
+      } else if (paramNameStr == GEOM::propertyName( GEOM::Color )) {
+        QStringList rgb = val.split(GEOM::subSectionSeparator());
         if (rgb.count() == 3) {
-          QColor c(int(rgb[0].toDouble()*255), int(rgb[1].toDouble()*255), int(rgb[2].toDouble()*255));
-          aListOfMap[viewIndex].insert( COLOR_PROP, c);
+          QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
+          aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
         }
-      } else if (paramNameStr == VECTOR_MODE_PROP) {
-        aListOfMap[viewIndex].insert( VECTOR_MODE_PROP, val.toInt());
-      } else if (paramNameStr == DEFLECTION_COEFF_PROP) {
-        aListOfMap[viewIndex].insert( DEFLECTION_COEFF_PROP, val.toDouble());
-      } else if (paramNameStr == MARKER_TYPE_PROP) {
-        aListOfMap[viewIndex].insert( MARKER_TYPE_PROP, val);
-      } else if (paramNameStr == MATERIAL_PROP) {
-        aListOfMap[viewIndex].insert( MATERIAL_PROP, val);
-      } else if (paramNameStr == EDGE_WIDTH_PROP) {
-        aListOfMap[viewIndex].insert( EDGE_WIDTH_PROP, val);
-      } else if (paramNameStr == ISOS_WIDTH_PROP) {
-        aListOfMap[viewIndex].insert( ISOS_WIDTH_PROP, val);
+      } else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
+        aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val.toInt());
+      } else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
+        aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Deflection ), val.toDouble());
+      } else if (paramNameStr == GEOM::propertyName( GEOM::PointMarker )) {
+        aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::PointMarker ), val);
+      } else if (paramNameStr == GEOM::propertyName( GEOM::Material )) {
+        aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Material ), val);
+      } else if (paramNameStr == GEOM::propertyName( GEOM::LineWidth )) {
+        aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::LineWidth ), val.toInt());
+      } else if (paramNameStr == GEOM::propertyName( GEOM::IsosWidth )) {
+        aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::IsosWidth ), val.toInt());
       }
     } // for names/parameters iterator
 
@@ -2280,7 +2279,7 @@ void GeometryGUI::restoreVisualParameters (int savePoint)
       appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
 
       //Get Visibility property of the current PropMap
-      if (aListOfMap[index].value(VISIBILITY_PROP) == 1) {
+      if (aListOfMap[index].value(GEOM::propertyName( GEOM::Visibility )) == 1) {
         SUIT_ViewManager* vman = lst.at(index);
         SUIT_ViewModel* vmodel = vman->getViewModel();
         displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
index ac3e8f5b4172db297173d2b53e47d90aa92e6806..a7d0252cc8b5a94225d5c2495493e537bf12cdd1 100644 (file)
@@ -301,8 +301,8 @@ void GEOMToolsGUI::SetColor( const QString& entry, const QColor& color, bool upd
   SUIT_ViewWindow* window = app->desktop()->activeWindow();
   if ( !window ) return;
   
-  bool isOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
-  bool isVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
+  bool isOCC = window->getViewManager()->getType() == OCCViewer_Viewer::Type();
+  bool isVTK = window->getViewManager()->getType() == SVTK_Viewer::Type();
 
   // get view id
   int mgrId = window->getViewManager()->getGlobalId();
@@ -357,7 +357,7 @@ void GEOMToolsGUI::OnColor()
   bool isVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
 
   // get view id
-  int mgrId = window->getViewManager()->getGlobalId();
+  int mgrId = window ? window->getViewManager()->getGlobalId() : -1;
 
   if ( isVTK ) {
     SVTK_ViewWindow* vtkVW = dynamic_cast<SVTK_ViewWindow*>( window );
@@ -366,7 +366,7 @@ void GEOMToolsGUI::OnColor()
     // get initial color (use first object from selection)
     SVTK_View* aView = vtkVW->getView();
     QColor color = aView->GetColor( selected.First()  );
-    QVariant v = appStudy->getObjectProperty( mgrId, selected.First()->getEntry(), COLOR_PROP, color );
+    QVariant v = appStudy->getObjectProperty( mgrId, selected.First()->getEntry(), GEOM::propertyName( GEOM::Color ), color );
 
     // show Choose Color dialog box
     color = QColorDialog::getColor( v.value<QColor>(), app->desktop() );
@@ -390,7 +390,7 @@ void GEOMToolsGUI::OnColor()
     QColor color = QColor((int)( aColor.Red()   * 255.0 ),
                          (int)( aColor.Green() * 255.0 ),
                          (int)( aColor.Blue()  * 255.0 ));
-    QVariant v = appStudy->getObjectProperty( mgrId, selected.First()->getEntry(), COLOR_PROP, color );
+    QVariant v = appStudy->getObjectProperty( mgrId, selected.First()->getEntry(), GEOM::propertyName( GEOM::Color ), color );
 
     // show Choose Color dialog box
     color = QColorDialog::getColor( v.value<QColor>(), app->desktop() );
@@ -422,14 +422,14 @@ void GEOMToolsGUI::setVtkColor( SalomeApp_Study* study,                     // s
 {
   // get material property
   QString matProp;
-  matProp = study->getObjectProperty( mgrId, IO->getEntry(), MATERIAL_PROP, matProp ).toString();
+  matProp = study->getObjectProperty( mgrId, IO->getEntry(), GEOM::propertyName( GEOM::Material ), matProp ).toString();
   Material_Model material;
   material.fromProperties( matProp );
 
   // change color only for shapes with not physical type of material
   if ( !material.isPhysical() ) {
     view->SetColor( IO, color );
-    study->setObjectProperty( mgrId, IO->getEntry(), COLOR_PROP, color );
+    study->setObjectProperty( mgrId, IO->getEntry(), GEOM::propertyName( GEOM::Color ), color );
   }
 
   // store color to GEOM_Object
@@ -462,7 +462,7 @@ void GEOMToolsGUI::setOccColor( SalomeApp_Study* study,                     // s
 
   // get material property
   QString matProp;
-  matProp = study->getObjectProperty( mgrId, IO->getEntry(), MATERIAL_PROP, matProp ).toString();
+  matProp = study->getObjectProperty( mgrId, IO->getEntry(), GEOM::propertyName( GEOM::Material ), matProp ).toString();
   Material_Model material;
   material.fromProperties( matProp );
 
@@ -507,7 +507,7 @@ void GEOMToolsGUI::setOccColor( SalomeApp_Study* study,                     // s
 
     io->Redisplay( Standard_True );
 
-    study->setObjectProperty( mgrId, IO->getEntry(), COLOR_PROP, color );
+    study->setObjectProperty( mgrId, IO->getEntry(), GEOM::propertyName( GEOM::Color ), color );
   }    
 
   // store color to GEOM_Object
@@ -664,6 +664,7 @@ void GEOMToolsGUI::OnNbIsos( ActionType actionType )
 
     OCCViewer_Viewer* vm = dynamic_cast<OCCViewer_Viewer*>( window->getViewManager()->getViewModel() );
     Handle (AIS_InteractiveContext) ic = vm->getAISContext();
+    int aMgrId = window->getViewManager()->getGlobalId();
 
     ic->InitCurrent();
     if ( ic->MoreCurrent() ) {
@@ -705,12 +706,11 @@ void GEOMToolsGUI::OnNbIsos( ActionType actionType )
       }
 
       for(; ic->MoreCurrent(); ic->NextCurrent()) {
-        int aMgrId = window->getViewManager()->getGlobalId();
         CurObject = Handle(GEOM_AISShape)::DownCast(ic->Current());
 
         Handle(AIS_Drawer) CurDrawer = CurObject->Attributes();
 
-       QVariant v = aStudy->getObjectProperty( aMgrId, CurObject->getIO()->getEntry(), EDGE_WIDTH_PROP , QVariant() );
+       QVariant v = aStudy->getObjectProperty( aMgrId, CurObject->getIO()->getEntry(), GEOM::propertyName( GEOM::LineWidth ) , QVariant() );
 
        int width = v.isValid() ? v.toInt() : 1;
 
@@ -722,8 +722,8 @@ void GEOMToolsGUI::OnNbIsos( ActionType actionType )
         ic->SetLocalAttributes(CurObject, CurDrawer);
         ic->Redisplay(CurObject);
 
-        QString anIsos("%1%2%3");anIsos = anIsos.arg(newNbUIso);anIsos = anIsos.arg(DIGIT_SEPARATOR);anIsos = anIsos.arg(newNbVIso);
-        aStudy->setObjectProperty(aMgrId ,CurObject->getIO()->getEntry(), ISOS_PROP, anIsos);
+        QString anIsos = QString("%1%2%3").arg(newNbUIso).arg(GEOM::subSectionSeparator()).arg(newNbVIso);
+        aStudy->setObjectProperty(aMgrId ,CurObject->getIO()->getEntry(), GEOM::propertyName( GEOM::NbIsos ), anIsos);
       }
     }
     GeometryGUI::Modified();
@@ -748,6 +748,8 @@ void GEOMToolsGUI::OnNbIsos( ActionType actionType )
     if ( !vtkVW )
       return;
 
+    int aMgrId = window->getViewManager()->getGlobalId();
+
     SALOME_View* view = GEOM_Displayer::GetActiveView();
 
     vtkActorCollection* aCollection = vtkActorCollection::New();
@@ -817,9 +819,8 @@ void GEOMToolsGUI::OnNbIsos( ActionType actionType )
         anActor->SetNbIsos(aIsos);
        anActor->StoreIsoNumbers();
 
-        QString anIsos("%1%2%3");anIsos = anIsos.arg(newNbUIso);anIsos = anIsos.arg(DIGIT_SEPARATOR);anIsos = anIsos.arg(newNbVIso);
-        int aMgrId = window->getViewManager()->getGlobalId();
-        aStudy->setObjectProperty(aMgrId ,anActor->getIO()->getEntry(), ISOS_PROP, anIsos);
+        QString anIsos = QString("%1%2%3").arg(newNbUIso).arg(GEOM::subSectionSeparator()).arg(newNbVIso);
+        aStudy->setObjectProperty(aMgrId ,anActor->getIO()->getEntry(), GEOM::propertyName( GEOM::NbIsos ), anIsos);
       }
       anAct = aCollection->GetNextActor();
     }
@@ -836,7 +837,7 @@ void GEOMToolsGUI::OnDeflection()
 
   bool isOCC = (window && window->getViewManager()->getType() == OCCViewer_Viewer::Type());
   bool isVTK = (window && window->getViewManager()->getType() == SVTK_Viewer::Type());
-  int mgrId = window->getViewManager()->getGlobalId();
+  int mgrId = window ? window->getViewManager()->getGlobalId() : -1;
 
   if (isOCC) { // if is OCCViewer
     OCCViewer_Viewer* vm = dynamic_cast<OCCViewer_Viewer*>(window->getViewManager()->getViewModel());
@@ -866,7 +867,7 @@ void GEOMToolsGUI::OnDeflection()
               CurObject = Handle(GEOM_AISShape)::DownCast(ic->Current());
               ic->SetDeviationCoefficient(CurObject, aNewDC, Standard_True);
               ic->Redisplay(CurObject);
-              appStudy->setObjectProperty(mgrId,CurObject->getIO()->getEntry(), DEFLECTION_COEFF_PROP, aNewDC);
+              appStudy->setObjectProperty(mgrId,CurObject->getIO()->getEntry(), GEOM::propertyName( GEOM::Deflection ), aNewDC);
             }
           }
         }
@@ -935,7 +936,7 @@ void GEOMToolsGUI::OnDeflection()
         if (GEOM_Actor* anActor = GEOM_Actor::SafeDownCast(anAct)) {
           // There are no casting to needed actor.
           anActor->SetDeflection(aDC);
-          appStudy->setObjectProperty(mgrId, anActor->getIO()->getEntry(), DEFLECTION_COEFF_PROP, aDC);
+          appStudy->setObjectProperty(mgrId, anActor->getIO()->getEntry(), GEOM::propertyName( GEOM::Deflection ), aDC);
         }
         anAct = aCollection->GetNextActor();
       }
@@ -1103,7 +1104,7 @@ void GEOMToolsGUI::OnEdgeWidth()
 
   bool isOCC = (window && window->getViewManager()->getType() == OCCViewer_Viewer::Type());
   bool isVTK = (window && window->getViewManager()->getType() == SVTK_Viewer::Type());
-  int mgrId = window->getViewManager()->getGlobalId();
+  int mgrId = window ? window->getViewManager()->getGlobalId() : -1;
 
   if (isOCC) { // if is OCCViewer
     OCCViewer_Viewer* vm = dynamic_cast<OCCViewer_Viewer*>(window->getViewManager()->getViewModel());
@@ -1136,7 +1137,7 @@ void GEOMToolsGUI::OnEdgeWidth()
                                        ic->Redisplay(cur);
                                  }
                                }
-                       appStudy->setObjectProperty(mgrId, CurObject->getIO()->getEntry(), EDGE_WIDTH_PROP, aNewWidth);
+                       appStudy->setObjectProperty(mgrId, CurObject->getIO()->getEntry(), GEOM::propertyName( GEOM::LineWidth ), aNewWidth);
                  }
                }
          }
@@ -1205,7 +1206,7 @@ void GEOMToolsGUI::OnEdgeWidth()
         if (GEOM_Actor* anActor = GEOM_Actor::SafeDownCast(anAct)) {
           // There are no casting to needed actor.
           anActor->SetWidth(aWidth);
-          appStudy->setObjectProperty(mgrId, anActor->getIO()->getEntry(), EDGE_WIDTH_PROP, aWidth);
+          appStudy->setObjectProperty(mgrId, anActor->getIO()->getEntry(), GEOM::propertyName( GEOM::LineWidth ), aWidth);
         }
         anAct = aCollection->GetNextActor();
       }
@@ -1228,6 +1229,7 @@ void GEOMToolsGUI::OnIsosWidth() {
 
     OCCViewer_Viewer* vm = dynamic_cast<OCCViewer_Viewer*>( window->getViewManager()->getViewModel() );
     Handle (AIS_InteractiveContext) ic = vm->getAISContext();
+    int aMgrId = window->getViewManager()->getGlobalId();
 
     ic->InitCurrent();
     if ( ic->MoreCurrent() ) {
@@ -1256,7 +1258,6 @@ void GEOMToolsGUI::OnIsosWidth() {
        return;
       
       for(; ic->MoreCurrent(); ic->NextCurrent()) {
-       int aMgrId = window->getViewManager()->getGlobalId();
        CurObject = Handle(GEOM_AISShape)::DownCast(ic->Current());
        
        Handle(AIS_Drawer) CurDrawer = CurObject->Attributes();
@@ -1266,7 +1267,7 @@ void GEOMToolsGUI::OnIsosWidth() {
        
        ic->Redisplay(CurObject);
        
-       aStudy->setObjectProperty(aMgrId ,CurObject->getIO()->getEntry(), ISOS_WIDTH_PROP, aWidth);
+       aStudy->setObjectProperty(aMgrId ,CurObject->getIO()->getEntry(), GEOM::propertyName( GEOM::IsosWidth ), aWidth);
       }
       GeometryGUI::Modified();
     }
@@ -1291,6 +1292,8 @@ void GEOMToolsGUI::OnIsosWidth() {
     if ( !vtkVW )
       return;
 
+    int aMgrId = window->getViewManager()->getGlobalId();
+
     SALOME_View* view = GEOM_Displayer::GetActiveView();
 
     vtkActorCollection* aCollection = vtkActorCollection::New();
@@ -1335,8 +1338,7 @@ void GEOMToolsGUI::OnIsosWidth() {
       if(GEOM_Actor* anActor = GEOM_Actor::SafeDownCast(anAct)) {
         // There are no casting to needed actor.
        anActor->SetIsosWidth(aWidth);
-       int aMgrId = window->getViewManager()->getGlobalId();
-        aStudy->setObjectProperty(aMgrId ,anActor->getIO()->getEntry(), ISOS_WIDTH_PROP, aWidth);
+        aStudy->setObjectProperty(aMgrId ,anActor->getIO()->getEntry(), GEOM::propertyName( GEOM::IsosWidth ), aWidth);
       }
       anAct = aCollection->GetNextActor();
     }
@@ -1387,15 +1389,15 @@ void GEOMToolsGUI::OnBringToFront() {
   if ( isOCC ) {
     GEOMBase* gb = new GEOMBase();
     Handle(GEOM_AISShape) aisShape;
+    int aMgrId = window->getViewManager()->getGlobalId();
    
     Handle(AIS_InteractiveContext) ic = vm->getAISContext();
     SALOME_ListIO anIOlst;
     for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
       aisShape = gb->ConvertIOinGEOMAISShape( It.Value(), true );
       if ( !aisShape.IsNull() ) {
+       appStudy->setObjectProperty( aMgrId, aisShape->getIO()->getEntry(), GEOM::propertyName( GEOM::TopLevel ), checked );
        aisShape->setTopLevel(checked);
-       int aMgrId = window->getViewManager()->getGlobalId();
-       appStudy->setObjectProperty( aMgrId, aisShape->getIO()->getEntry(), TOP_LEVEL_PROP, checked );
        anIOlst.Append(aisShape->getIO());
       }
     } // for...
@@ -1432,6 +1434,7 @@ void GEOMToolsGUI::OnClsBringToFront() {
     
     OCCViewer_Viewer* vm = dynamic_cast<OCCViewer_Viewer*>( window->getViewManager()->getViewModel() );
     Handle (AIS_InteractiveContext) ic = vm->getAISContext();
+    int aMgrId = window->getViewManager()->getGlobalId();
     
     SALOME_ListIO anIOlst;
     AIS_ListOfInteractive aList;
@@ -1443,10 +1446,8 @@ void GEOMToolsGUI::OnClsBringToFront() {
       if(CurObject.IsNull())
        continue;
       
+      appStudy->setObjectProperty( aMgrId, QString(CurObject->getIO()->getEntry()), GEOM::propertyName( GEOM::TopLevel ), Standard_False );
       CurObject->setTopLevel(Standard_False);
-      
-      int aMgrId = window->getViewManager()->getGlobalId();
-      appStudy->setObjectProperty( aMgrId, QString(CurObject->getIO()->getEntry()), TOP_LEVEL_PROP, Standard_False );
       anIOlst.Append(CurObject->getIO());
     }
     disp->Redisplay(anIOlst);
@@ -1476,7 +1477,7 @@ void GEOMToolsGUI::OnSetMaterial( const QVariant& theParam )
   if ( selected.IsEmpty() )
     return;
     SUIT_ViewWindow* window = app->desktop()->activeWindow();
-  int mgrId = window->getViewManager()->getGlobalId();
+    int mgrId = window ? window->getViewManager()->getGlobalId() : -1;
 
   // convert needed material properties to the string representation
   Material_Model aModel;
@@ -1501,7 +1502,7 @@ void GEOMToolsGUI::OnSetMaterial( const QVariant& theParam )
       // set material property to the presentation
       aView->SetMaterial( It.Value(), vtkPropF, vtkPropB );
       // store chosen material in the property map
-      study->setObjectProperty( mgrId, It.Value()->getEntry(), MATERIAL_PROP, prop );
+      study->setObjectProperty( mgrId, It.Value()->getEntry(), GEOM::propertyName( GEOM::Material ), prop );
       // set correct color for the non-physical material
     }
     aView->Repaint();
@@ -1533,7 +1534,7 @@ void GEOMToolsGUI::OnSetMaterial( const QVariant& theParam )
              // Return to the default facing mode
              aisShape->SetCurrentFacingModel(Aspect_TOFM_BOTH_SIDE);
         // store chosen material in the property map
-             study->setObjectProperty( mgrId, It.Value()->getEntry(), MATERIAL_PROP, prop );
+             study->setObjectProperty( mgrId, It.Value()->getEntry(), GEOM::propertyName( GEOM::Material ), prop );
              //if ( aisShape->DisplayMode() != AIS_Shaded)
              ic->Redisplay( aisShape, Standard_False );
       }
index 428c91c47a398332a3f129a4d517a8aac6242641..48cfb2b0b2640265edb1d5595e599102bd67f48c 100644 (file)
@@ -78,7 +78,7 @@ GEOMToolsGUI_DeflectionDlg::GEOMToolsGUI_DeflectionDlg (QWidget* parent)
   SpinBox->setAcceptNames( false );
   SpinBox->setPrecision( aPrecision );
   SpinBox->setDecimals( aPrecision );
-  SpinBox->setRange( DEFLECTION_MIN, 1.0 );
+  SpinBox->setRange( GEOM::minDeflection(), 1.0 );
   SpinBox->setSingleStep( 1.0e-04 );
   // Add a hint for the user saying how to tune precision
   QString userPropName = QObject::tr( QString( "GEOM_PREF_%1" ).arg( quantity ).toLatin1().constData() );
index 4ba147b787100ca8a7d9ba29be122d251e6991ab..7a1952ad6ccb7c4ed94b14f371b34ea74eb98c4d 100644 (file)
@@ -228,13 +228,13 @@ void GEOMToolsGUI_MarkerDlg::accept()
                 anObject->SetMarkerStd( getMarkerType(), getStandardMarkerScale() );
                 QString aMarker = "%1%2%3";
                 aMarker = aMarker.arg(getMarkerType());
-                aMarker = aMarker.arg(DIGIT_SEPARATOR);
+                aMarker = aMarker.arg(GEOM::subSectionSeparator());
                 aMarker = aMarker.arg(getStandardMarkerScale());
-                getStudy()->setObjectProperty(mgrId ,it.Value()->getEntry(),MARKER_TYPE_PROP, aMarker);
+                getStudy()->setObjectProperty(mgrId ,it.Value()->getEntry(),GEOM::propertyName( GEOM::PointMarker ), aMarker);
               }
               else if ( getCustomMarkerID() > 0 ) {
                 anObject->SetMarkerTexture( getCustomMarkerID() );
-                getStudy()->setObjectProperty(mgrId ,it.Value()->getEntry(),MARKER_TYPE_PROP, QString::number(getCustomMarkerID()));
+                getStudy()->setObjectProperty(mgrId ,it.Value()->getEntry(),GEOM::propertyName( GEOM::PointMarker ), QString::number(getCustomMarkerID()));
               }
             }
           }
index dc00889c895262262d372e5b3f606d213e9f074e..61c7c763d4936d5ed1ff09bc9202c0da4dd569df 100644 (file)
@@ -329,10 +329,10 @@ GEOMToolsGUI_MaterialPropertiesDlg::GEOMToolsGUI_MaterialPropertiesDlg( QWidget*
         if ( window ) {
           int mgrId = window->getViewManager()->getGlobalId();
           PropMap propMap = study->getObjectPropMap( mgrId, io->getEntry() );
-          QString matProp = propMap.value(MATERIAL_PROP).toString();       
+          QString matProp = propMap.value(GEOM::propertyName( GEOM::Material )).toString();        
           if ( !matProp.isEmpty() )
             myCurrentModel.fromProperties( matProp );
-          QColor c = propMap.value(COLOR_PROP).value<QColor>();
+          QColor c = propMap.value(GEOM::propertyName( GEOM::Color )).value<QColor>();
           if ( c.isValid() )
             myColor->setColor( c );
         }
@@ -500,11 +500,11 @@ void GEOMToolsGUI_MaterialPropertiesDlg::onApply()
       // set material property to the presentation
       aView->SetMaterial( It.Value(), vtkPropF, vtkPropB );
       // store chosen material in the property map
-      study->setObjectProperty( mgrId, It.Value()->getEntry(), MATERIAL_PROP, prop );
+      study->setObjectProperty( mgrId, It.Value()->getEntry(), GEOM::propertyName( GEOM::Material ), prop );
       // set correct color for the non-physical material
       if ( !myCurrentModel.isPhysical() ) {
         aView->SetColor( It.Value(), myColor->color() );
-        study->setObjectProperty( mgrId, It.Value()->getEntry(), COLOR_PROP, myColor->color() );
+        study->setObjectProperty( mgrId, It.Value()->getEntry(), GEOM::propertyName( GEOM::Color ), myColor->color() );
       }
     }
     aView->Repaint();
@@ -536,11 +536,11 @@ void GEOMToolsGUI_MaterialPropertiesDlg::onApply()
         // Return to the default facing mode
         aisShape->SetCurrentFacingModel(Aspect_TOFM_BOTH_SIDE);
         // store chosen material in the property map
-        study->setObjectProperty( mgrId, It.Value()->getEntry(), MATERIAL_PROP, prop );
+        study->setObjectProperty( mgrId, It.Value()->getEntry(), GEOM::propertyName( GEOM::Material ), prop );
         // set correct color for the non-physical material
         if ( !myCurrentModel.isPhysical() ) {
           aisShape->SetShadingColor( SalomeApp_Tools::color( myColor->color() ) );
-          study->setObjectProperty( mgrId, It.Value()->getEntry(), COLOR_PROP, myColor->color() );
+          study->setObjectProperty( mgrId, It.Value()->getEntry(), GEOM::propertyName( GEOM::Color ), myColor->color() );
           ic->RecomputePrsOnly( aisShape, Standard_False );
         }
         //if ( aisShape->DisplayMode() != AIS_Shaded/*aisShape->DisplayMode() == GEOM_AISShape::ShadingWithEdges*/)
index 3bcbc16ea13b77699977b6c658675872b2f330ce..55f7c92d25b9227f63cb29ae107a1d177770f77c 100644 (file)
@@ -286,7 +286,7 @@ void GEOMToolsGUI_TransparencyDlg::SetTransparency()
     SUIT_OverrideCursor();
     for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
       aView->SetTransparency( It.Value(), newValue );
-      aStudy->setObjectProperty( aMgrId , It.Value()->getEntry(), TRANSPARENCY_PROP , newValue );
+      aStudy->setObjectProperty( aMgrId , It.Value()->getEntry(), GEOM::propertyName( GEOM::Transparency ) , newValue );
     }
     GeometryGUI::Modified();
     aView->Repaint();
@@ -317,7 +317,7 @@ void GEOMToolsGUI_TransparencyDlg::SetTransparency()
       if ( !aisShape.IsNull() ) {
         ic->SetTransparency( aisShape, newValue, false );
         ic->Redisplay( aisShape, Standard_False, Standard_True );
-       aStudy->setObjectProperty( aMgrId , It.Value()->getEntry(), TRANSPARENCY_PROP , newValue );
+       aStudy->setObjectProperty( aMgrId , It.Value()->getEntry(), GEOM::propertyName( GEOM::Transparency ) , newValue );
       }
     } // for...
     ic->UpdateCurrentViewer();
index 6e731d256efb948a901561bd29a95cecf1c1030f..63e8d187b812eeb0d0e35a1abdcc357f73e3a2e5 100644 (file)
@@ -166,8 +166,6 @@ GEOM_AISShape::GEOM_AISShape(const TopoDS_Shape& shape,
        myDrawer->ShadingAspect()->Aspect()->SetFrontMaterial(aMatAspect);
        myDrawer->ShadingAspect()->Aspect()->SetBackMaterial(aMatAspect);
   }
-  myCurrentFrontMaterial = myDrawer->ShadingAspect()->Aspect()->FrontMaterial();  
-  myCurrentBackMaterial = myDrawer->ShadingAspect()->Aspect()->BackMaterial();  
 }
 
 void GEOM_AISShape::setIO(const Handle(SALOME_InteractiveObject)& io){
@@ -207,7 +205,7 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent
   Handle(AIS_InteractiveContext) anIC = GetContext();
  
   //   StdSelect_DisplayMode d = (StdSelect_DisplayMode) aMode;
-  bool isTopLev = (isTopLevel() && topLevelDisplayMode() != TopShowAdditionalWActor);
+  bool isTopLev = isTopLevel() && switchTopLevel();
   switch (aMode) {
     case 0://StdSelect_DM_Wireframe: 
     {
@@ -317,26 +315,6 @@ void GEOM_AISShape::Compute(const Handle(PrsMgr_PresentationManager3d)& aPresent
   //  aPrs->ReCompute(); // for hidden line recomputation if necessary...
 }
 
-void GEOM_AISShape::SetTransparency(const Standard_Real aValue)
-{
-  if(aValue<0.0 || aValue>1.0) return;
-  
-  if(aValue<=0.05) 
-    {
-      UnsetTransparency();
-      return;
-    }
-
-  Graphic3d_MaterialAspect FMat = myDrawer->ShadingAspect()->Aspect()->FrontMaterial();
-  Graphic3d_MaterialAspect BMat = myDrawer->ShadingAspect()->Aspect()->BackMaterial();
-  FMat.SetTransparency(aValue);
-  myDrawer->ShadingAspect()->Aspect()->SetFrontMaterial(FMat);
-  myDrawer->ShadingAspect()->Aspect()->SetBackMaterial(BMat);
-  myCurrentFrontMaterial = FMat;
-  myCurrentBackMaterial = BMat;
-  myTransparency = aValue;
-}
-
 void GEOM_AISShape::SetShadingColor(const Quantity_Color &aCol)
 {
   myShadingColor = aCol;
@@ -390,17 +368,13 @@ void GEOM_AISShape::shadingMode(const Handle(PrsMgr_PresentationManager3d)& aPre
   myDrawer->ShadingAspect()->Aspect()->SetDistinguishOn();
 
   Graphic3d_MaterialAspect aMatAspect(Graphic3d_NOM_PLASTIC);
-  aMatAspect.SetTransparency(myTransparency);
-  myCurrentFrontMaterial = myDrawer->ShadingAspect()->Aspect()->FrontMaterial();
-  myCurrentBackMaterial = myDrawer->ShadingAspect()->Aspect()->BackMaterial();
-  myDrawer->ShadingAspect()->Aspect()->SetFrontMaterial( isTopLevel() ? aMatAspect : myCurrentFrontMaterial );
-  myDrawer->ShadingAspect()->Aspect()->SetBackMaterial( isTopLevel() ? aMatAspect : myCurrentBackMaterial );
-
-      //Handle(Graphic3d_AspectFillArea3d) a4bis = myDrawer->ShadingAspect()->Aspect();
-      //       P->SetPrimitivesAspect(a4bis);
-      //        G->SetGroupPrimitivesAspect(a4bis);
-      //a4bis->SetInteriorColor(myShadingColor);
-  if( isTopLevel() && topLevelDisplayMode() != TopShowAdditionalWActor )
+  aMatAspect.SetTransparency(Transparency());
+  Graphic3d_MaterialAspect currentFrontMaterial = myDrawer->ShadingAspect()->Aspect()->FrontMaterial();
+  Graphic3d_MaterialAspect currentBackMaterial  = myDrawer->ShadingAspect()->Aspect()->BackMaterial();
+  myDrawer->ShadingAspect()->Aspect()->SetFrontMaterial( isTopLevel() ? aMatAspect : currentFrontMaterial );
+  myDrawer->ShadingAspect()->Aspect()->SetBackMaterial ( isTopLevel() ? aMatAspect : currentBackMaterial  );
+
+  if( isTopLevel() && switchTopLevel() )
     myDrawer->ShadingAspect()->SetColor( topLevelColor() );
   else { 
     if(myDrawer->ShadingAspect()->Aspect()->FrontMaterial().MaterialType( Graphic3d_MATERIAL_ASPECT ))
index 437193822cd5b102b839a941e7d680ec166fc2f4..5bd38ac77ad992b33a7a0091fa35795a551e669c 100644 (file)
@@ -116,7 +116,6 @@ public:
         void highlightSubShapes(const TColStd_IndexedMapOfInteger& aIndexMap, const Standard_Boolean aHighlight );
         ~GEOM_AISShape();
 
-        void SetTransparency(const Standard_Real aValue);
         void SetShadingColor(const Quantity_Color &aCol);
         void SetEdgesInShadingColor(const Quantity_Color &aCol);
         void SetDisplayVectors(bool isShow);
@@ -172,8 +171,6 @@ private:
   TCollection_AsciiString  myName;
   bool                     myDisplayVectors;
   Standard_Boolean         myTopLevel;
-  Graphic3d_MaterialAspect myCurrentFrontMaterial;
-  Graphic3d_MaterialAspect myCurrentBackMaterial;
   Standard_Integer         myPrevDisplayMode;
 
   static TopLevelDispMode myTopLevelDm;
diff --git a/src/OBJECT/GEOM_Constants.cxx b/src/OBJECT/GEOM_Constants.cxx
new file mode 100644 (file)
index 0000000..aa1b7ec
--- /dev/null
@@ -0,0 +1,102 @@
+// Copyright (C) 2007-2012  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
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+//  File   : GEOM_Constants.cxx
+//  Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
+
+#include "GEOM_Constants.h"
+
+namespace GEOM
+{
+
+  /*!
+    \brief Get minimal allowed value for deflection coefficient
+  */
+  double minDeflection()
+  {
+    return 1e-06; // DEFLECTION_MIN
+  }
+
+  /*!
+    \brief Get character used to separate parameter names
+  */
+  QString sectionSeparator()
+  {
+    return "_"; // NAME_SEPARATOR
+  }
+
+  /*!
+    \brief Get character used to separate numeric parameter values (color = r:g:b)
+  */
+  QString subSectionSeparator()
+  {
+    return ":"; // DIGIT_SEPARATOR
+  }
+  
+  QString propertyName( Property type )
+  {
+    static const char* names[] = {
+      // visibility 
+      "Visibility",      // VISIBILITY_PROP
+      // transparency
+      "Transparency",    // TRANSPARENCY_PROP
+      // display mode
+      "DisplayMode",     // DISPLAY_MODE_PROP
+      // number of the iso lines (along u and v directions)
+      "Isos",            // ISOS_PROP
+      // main / shading color
+      "Color",           // COLOR_PROP
+      // "show edges direction" flag
+      "VectorMode",      // VECTOR_MODE_PROP
+      // deflection coefficient
+      "DeflectionCoeff", // DEFLECTION_COEFF_PROP
+      // point marker data
+      "MarkerType",      // MARKER_TYPE_PROP
+      // material
+      "Material",        // MATERIAL_PROP
+      // general line width
+      "EdgeWidth",       // EDGE_WIDTH_PROP
+      // isos width
+      "IsosWidth",       // ISOS_WIDTH_PROP
+      // top-level flag
+      "TopLevelFlag",    // TOP_LEVEL_PROP
+      // opacity
+      "Opacity",         // OPACITY_PROP
+      // shading color
+      "ShadingColor",    // -
+      // wireframe color
+      "WireframeColor",  // -
+      // standalone edges color
+      "LineColor",       // -
+      // free boundaries color
+      "FreeBndColor",    // -
+      // points color
+      "PointColor",      // -
+      // isos color
+      "IsosColor",       // -
+      // outlines color
+      "OutlineColor",    // -
+    };
+    return ( type >= GEOM::Visibility && type <= GEOM::LastProperty ) ? names[type] : QString();
+  }
+
+} // namespace GEOM
index b890379e39599b3f1d21ae22dbe285cc8842abb0..178ea2bfecc943fb7228920ade75162db194ba38 100644 (file)
 //
 
 //  File   : GEOM_Constants.h
-//  Author : Margarita KARPUNINA
-//  Module : GEOM
-//
+//  Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
+
 #ifndef GEOM_CONSTANTS_H
 #define GEOM_CONSTANTS_H
 
-// minimum allowed value for deflection coefficient
-#define DEFLECTION_MIN 1e-06
+#include <QString>
+
+namespace GEOM
+{
+  enum Property {
+    Visibility,
+    Transparency,
+    DisplayMode,
+    NbIsos,
+    Color,
+    EdgesDirection,
+    Deflection,
+    PointMarker,
+    Material,
+    LineWidth,
+    IsosWidth,
+    TopLevel,
+    LastStudyProperty = TopLevel,
+    Opacity,
+    ShadingColor,
+    WireframeColor,
+    LineColor,
+    FreeBndColor,
+    PointColor,
+    IsosColor,
+    OutlineColor,
+    LastProperty = OutlineColor,
+  };
 
-//Define separators
-#define NAME_SEPARATOR  '_' // character used to separate parameter names
-#define DIGIT_SEPARATOR ':' // character used to separate numeric parameter values (color = r:g:b)
+  double minDeflection();
+  
+  QString sectionSeparator();
+  QString subSectionSeparator();
 
-#define VISIBILITY_PROP       "Visibility"      //Object visibility property
-#define OPACITY_PROP          "Opacity"         //Object opacity property
-#define TRANSPARENCY_PROP     "Transparency"    //Object transparency property
-#define DISPLAY_MODE_PROP     "DisplayMode"     //Object display mode property
-#define ISOS_PROP             "Isos"            //Number of the Isos property of the object
-#define COLOR_PROP            "Color"           //Color of the object 
-#define VECTOR_MODE_PROP      "VectorMode"      //Vector mode property
-#define DEFLECTION_COEFF_PROP "DeflectionCoeff" //Deflection coeff property
-#define MARKER_TYPE_PROP      "MarkerType"      //Marker type property
-#define MATERIAL_PROP         "Material"        //Object material property
-#define EDGE_WIDTH_PROP       "EdgeWidth"       //Width of the edge
-#define ISOS_WIDTH_PROP       "IsosWidth"       //Width of the iso-lines
-#define TOP_LEVEL_PROP        "TopLevelFlag"    //Top level flag
+  QString propertyName( Property );
+}
 
+  
 #endif //GEOM_CONSTANTS_H
index f22b3197fbd3a8b9b5a4b3e26a2021bf466b41e8..4729ecfdaf9a2fbd174d96ab3820f2113dfb4467 100755 (executable)
@@ -56,6 +56,10 @@ GEOM_TopWireframeShape::GEOM_TopWireframeShape(const TopoDS_Shape& shape)
       SetColor(GEOM_AISShape::topLevelColor());
 }
 
+GEOM_TopWireframeShape::~GEOM_TopWireframeShape()
+{
+}
+
 Handle(SALOME_InteractiveObject) GEOM_TopWireframeShape::getIO(){
   Handle(SALOME_InteractiveObject) IO;
   if ( !GetOwner().IsNull() )
index 1fd89196757bfd0f9f3d34b33667eaa2add7e13e..a4f1408d6d9ad6c142c6652abf2701e6b914e0a1 100755 (executable)
@@ -30,8 +30,6 @@
 #include <Standard_TypeMismatch.hxx>
 #endif
 
-GEOM_TopWireframeShape::~GEOM_TopWireframeShape() {}
-
 Standard_EXPORT Handle_Standard_Type& GEOM_TopWireframeShape_Type_()
 {
 
index ae48a97f88ca0fef0cb6ddafe86dadb891513dfa..b59d9891498f7812309203afd05ff0b6c8024a4d 100644 (file)
@@ -65,7 +65,8 @@ dist_libGEOMObject_la_SOURCES =               \
        GEOM_VTKPropertyMaterial.cxx    \
        GEOM_AISVector.cxx              \
        GEOM_PainterPolyDataMapper.cxx  \
-       GEOM_DeviceActor.cxx
+       GEOM_DeviceActor.cxx            \
+       GEOM_Constants.cxx
 
 
 libGEOMObject_la_CPPFLAGS =    \