]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Fix previous wrong-tag commit
authorana <ana@opencascade.com>
Mon, 16 Apr 2012 12:54:26 +0000 (12:54 +0000)
committerana <ana@opencascade.com>
Mon, 16 Apr 2012 12:54:26 +0000 (12:54 +0000)
src/GEOMGUI/GEOMGUI_Selection.cxx
src/GEOMGUI/GEOMGUI_Selection.h
src/GEOMGUI/GEOM_Displayer.cxx
src/GEOMGUI/GEOM_msg_en.ts
src/GEOMGUI/GeometryGUI.cxx

index 6079aa75e1e45b5f3a3204cc6ddf0a9c113deba1..839321919ea7ba6e3a060b8540b005cc9e055608 100644 (file)
@@ -28,8 +28,6 @@
 #include "GeometryGUI.h"
 #include "GEOM_Displayer.h"
 
-#include "Material_Model.h"
-
 #include <GEOM_Constants.h>
 
 #include <SalomeApp_Application.h>
 #include <GEOMImpl_Types.hxx>
 
 #include <GEOM_AISShape.hxx>
-#include <GEOM_VTKPropertyMaterial.hxx>
 
 // OCCT Includes
 #include <AIS.hxx>
 #include <AIS_InteractiveObject.hxx>
 #include <AIS_ListOfInteractive.hxx>
-#include <AIS_GraphicTool.hxx>
-#include <AIS_Drawer.hxx>
-#include <Prs3d_ShadingAspect.hxx>
-#include<Graphic3d_MaterialAspect.hxx>
 
 // VTK Includes
 #include <vtkActorCollection.h>
@@ -166,8 +159,6 @@ QVariant GEOMGUI_Selection::parameter( const int idx, const QString& p ) const
     v = compoundOfVertices( idx );
   else if ( p == "imported" )
     v = isImported( idx );
-  else if ( p == "isPhysicalMaterial" )
-    v = isPhysicalMaterial(idx);
   else
     v = LightApp_Selection::parameter( idx, p );
 
@@ -322,7 +313,7 @@ QString GEOMGUI_Selection::displayMode( const int index ) const
            }
          }
        }
-  else if ( viewType == SVTK_Viewer::Type() ) { // assuming VTK
+        else if ( viewType == SVTK_Viewer::Type() ) { // assuming VTK
          SVTK_Prs* vtkPrs = dynamic_cast<SVTK_Prs*>( prs );
          vtkActorCollection* lst = vtkPrs ? vtkPrs->GetObjects() : 0;
          if ( lst ) {
@@ -560,57 +551,3 @@ bool GEOMGUI_Selection::topLevel( const int index ) const {
   }
   return res;
 }
-
-bool GEOMGUI_Selection::isPhysicalMaterial( const int idx ) const{
-   bool res = false;
-
-#ifdef USE_VISUAL_PROP_MAP
-   bool found = false;
-   QVariant v = visibleProperty( entry( idx ), MATERIAL_PROP );
-   if ( v.canConvert<QString>() ) {
-     Material_Model* aModel = Material_Model::getMaterialModel( v.toString().split(DIGIT_SEPARATOR) );
-     res = aModel->isPhysical();
-     found = true;
-   }
-
-   if ( !found ) {
-#endif
-     SALOME_View* view = GEOM_Displayer::GetActiveView();
-     QString viewType = activeViewType();
-     if ( view ) {
-       SALOME_Prs* prs = view->CreatePrs( entry( idx ).toLatin1().constData() );
-       if ( prs ) {
-         if ( viewType == OCCViewer_Viewer::Type() ) { // assuming OCC
-           SOCC_Prs* occPrs = (SOCC_Prs*) prs;
-           AIS_ListOfInteractive lst;
-           occPrs->GetObjects( lst );
-           if ( lst.Extent() ) {
-             Handle(AIS_InteractiveObject) io = lst.First();
-             if ( !io.IsNull() ) {
-               Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(io);
-               if ( !aSh.IsNull() )
-                 res =(bool) aSh->Attributes()->ShadingAspect()->
-                      Material(Aspect_TypeOfFacingModel::Aspect_TOFM_BOTH_SIDE).MaterialType( Graphic3d_MATERIAL_PHYSIC );
-             }
-           }
-         }
-         else if ( viewType == SVTK_Viewer::Type() ) { // assuming VTK
-               SVTK_Prs* vtkPrs = dynamic_cast<SVTK_Prs*>( prs );
-               vtkActorCollection* lst = vtkPrs ? vtkPrs->GetObjects() : 0;
-               if ( lst ) {
-                 lst->InitTraversal();
-                 vtkActor* actor = lst->GetNextActor();
-                 if ( actor ) {
-              GEOM_Actor* aGeomGActor = GEOM_Actor::SafeDownCast( actor );
-                   if ( aGeomGActor ) {
-                GEOM_VTKPropertyMaterial* mat  = GEOM_VTKPropertyMaterial::SafeDownCast(aGeomGActor->GetProperty());
-                res = mat->GetPhysical();
-                   } // if ( salome actor )
-                 } // if ( actor )
-          } // if ( lst == vtkPrs->GetObjects() )
-         }
-       }
-     }
-   }
-   return res;
-}
index 79220d6494438ec51ddc62fe549d4d01626fe1ac..ed9ed7182a4d0411f86c06187c37f8a51258637f 100644 (file)
@@ -70,7 +70,6 @@ private:
   bool                  hasShownChildren( const int ) const;
   bool                  compoundOfVertices( const int ) const;
   bool                  topLevel( const int ) const;
-  bool                  isPhysicalMaterial( const int ) const;
 
   bool                  isComponent( const int ) const;
   GEOM::GEOM_Object_ptr getObject( const int ) const;
index 281404e9744babd9c3b6ab9848e2e69158b1a8b2..ea0fbcade5092797f0a7eee8352b3e447d006986 100644 (file)
@@ -41,7 +41,6 @@
 #include <GEOM_AISVector.hxx>
 #include <GEOM_AISTrihedron.hxx>
 #include <GEOM_VTKTrihedron.hxx>
-#include <GEOM_VTKPropertyMaterial.hxx>
 
 #include <Material_Model.h>
 
@@ -810,7 +809,7 @@ void GEOM_Displayer::Update( SALOME_OCCPrs* prs )
             anAspect = AISShape->Attributes()->UnFreeBoundaryAspect();
             anAspect->SetColor( aColor );
             AISShape->Attributes()->SetUnFreeBoundaryAspect( anAspect );
-            AISShape->storeBoundaryColors();
+           AISShape->storeBoundaryColors();
 
             // Set free boundaries aspect
             col = aResMgr->colorValue( "Geometry", "free_bound_color", QColor( 0, 255, 0 ) );
@@ -828,10 +827,10 @@ void GEOM_Displayer::Update( SALOME_OCCPrs* prs )
             anAspect->SetColor( aColor );
             AISShape->Attributes()->SetWireAspect( anAspect );
 
-            // Set color for edges in shading
-            col = aResMgr->colorValue( "Geometry", "edges_in_shading_color", QColor( 255, 255, 0 ) );
-            aColor = SalomeApp_Tools::color( col );
-            AISShape->SetEdgesInShadingColor( aColor );
+           // Set color for edges in shading
+           col = aResMgr->colorValue( "Geometry", "edges_in_shading_color", QColor( 255, 255, 0 ) );
+           aColor = SalomeApp_Tools::color( col );
+           AISShape->SetEdgesInShadingColor( aColor );
            
             // bug [SALOME platform 0019868]
             // Set deviation angle. Default one is 12 degrees (Prs3d_Drawer.cxx:18)
@@ -841,8 +840,8 @@ void GEOM_Displayer::Update( SALOME_OCCPrs* prs )
             double aDC = 0;
             if(useStudy) {
               aDC = aPropMap.value(DEFLECTION_COEFF_PROP).toDouble();
-              SetWidth(aPropMap.value(EDGE_WIDTH_PROP).toInt());
-              SetIsosWidth(aPropMap.value(ISOS_WIDTH_PROP).toInt());
+             SetWidth(aPropMap.value(EDGE_WIDTH_PROP).toInt());
+             SetIsosWidth(aPropMap.value(ISOS_WIDTH_PROP).toInt());
             }
             else {
               aDC = aResMgr->doubleValue("Geometry", "deflection_coeff", 0.001);
@@ -961,30 +960,62 @@ void GEOM_Displayer::Update( SALOME_OCCPrs* prs )
 
           // get material properties, set material
           Material_Model* aModelF = 0;
+          Material_Model* aModelB = 0;
           if ( useStudy ) {
-            // Get material property from study and construct material model
-            QString aMaterialF = aPropMap.value(MATERIAL_PROP).toString();
+            // Get front material property from study and construct front material model
+            QString aMaterialF = aPropMap.value(FRONT_MATERIAL_PROP).toString();
             QStringList aProps =  aMaterialF.split(DIGIT_SEPARATOR);
             aModelF = Material_Model::getMaterialModel( aProps );
+
+            // Get back material property from study and construct back material model
+            QString aMaterialB = aPropMap.value(BACK_MATERIAL_PROP).toString();
+            if ( !aMaterialB.isEmpty() ) {
+              QStringList aPropsB =  aMaterialB.split(DIGIT_SEPARATOR);
+              aModelB = Material_Model::getMaterialModel( aPropsB );
+            }
+            else
+              aModelB = aModelF;
+
           } else {
-            // Get material property from study and construct material model
+            // Get front material property from study and construct front material model
             aModelF = new Material_Model();
-            aModelF->fromResources( aResMgr, "Geometry" );
+            aModelF->fromResources( aResMgr, "Geometry", true );
+
+            // Get back material property from study and construct back material model
+            aModelB = new Material_Model();
+            aModelB->fromResources( aResMgr, "Geometry", false );         
           }
 
-          // Set material property
+          // Set front material property
           QString aMaterialPropF = aModelF->getMaterialProperty();
-          aStudy->setObjectProperty( aMgrId, anIO->getEntry(), MATERIAL_PROP, aMaterialPropF );
+          aStudy->setObjectProperty( aMgrId, anIO->getEntry(), FRONT_MATERIAL_PROP, aMaterialPropF );
 
-          // Get material properties from the model
+          // Set back material property
+          QString aMaterialPropB = aModelB->getMaterialProperty();
+          aStudy->setObjectProperty( aMgrId, anIO->getEntry(), BACK_MATERIAL_PROP, aMaterialPropB );
+
+          // Get front material properties from the model
           Graphic3d_MaterialAspect aMatF = aModelF->getMaterialOCCAspect();
 
-          // Set material for the selected shape
-           AISShape->SetMaterial(aMatF);
+          // Get back material properties from the model
+          Graphic3d_MaterialAspect aMatB = aModelB->getMaterialOCCAspect();
+
+          // Set front material for the selected shape
+          AISShape->SetCurrentFacingModel(Aspect_TOFM_FRONT_SIDE);
+          AISShape->SetMaterial(aMatF); 
+
+          // Set back material for the selected shape
+          AISShape->SetCurrentFacingModel(Aspect_TOFM_BACK_SIDE);
+          AISShape->SetMaterial(aMatB);
+
+          // Return to the default facing mode
+          AISShape->SetCurrentFacingModel(Aspect_TOFM_BOTH_SIDE);
 
           // Release memory
           if ( aModelF )
             delete aModelF;
+          if ( aModelB )
+            delete aModelB;
 
          if(HasWidth())
            aStudy->setObjectProperty( aMgrId, anIO->getEntry(), EDGE_WIDTH_PROP, GetWidth() );
@@ -1173,21 +1204,52 @@ void GEOM_Displayer::Update( SALOME_VTKPrs* prs )
           aGeomGActor->setDisplayMode(aDispModeId);
           aGeomGActor->SetDeflection(aPropMap.value(DEFLECTION_COEFF_PROP).toDouble());
 
-         // Get material property of the object stored in the study
-         QString aMaterialF = aPropMap.value(MATERIAL_PROP).toString();
+         // Get front material property of the object stored in the study
+         QString aMaterialF = aPropMap.value(FRONT_MATERIAL_PROP).toString();
          QStringList aPropsF =  aMaterialF.split(DIGIT_SEPARATOR);
-         // Create material model
+         // Create front material model
          Material_Model* aModelF = Material_Model::getMaterialModel( aPropsF );          
-         // Set material properties for the object
+         // Set front material properties for the object
          QString aMaterialPropF = aModelF->getMaterialProperty();
-         aStudy->setObjectProperty( aMgrId, anEntry, MATERIAL_PROP, aMaterialPropF );    
-         // Get material properties from the model
-         GEOM_VTKPropertyMaterial* aMatPropF = aModelF->getMaterialVTKProperty();
-         // Set the same front and back materials for the selected shape
-    std::vector<vtkProperty*> aProps;
-    aProps.push_back( (vtkProperty*) aMatPropF );
-         aGeomGActor->SetMaterial(aProps);
+         aStudy->setObjectProperty( aMgrId, anEntry, FRONT_MATERIAL_PROP, aMaterialPropF );      
+         // Get material properties from the front model
+         vtkProperty* aMatPropF = aModelF->getMaterialVTKProperty();
          
+         // Get back material property of the object stored in the study
+         QString aMaterialB = aPropMap.value(BACK_MATERIAL_PROP).toString();
+         if ( !aMaterialB.isEmpty() ) {
+           QStringList aPropsB =  aMaterialB.split(DIGIT_SEPARATOR);       
+           // Create back material model
+           Material_Model* aModelB = Material_Model::getMaterialModel( aPropsB );
+           // Set back material properties for the object
+           QString aMaterialPropB = aModelB->getMaterialProperty();
+           aStudy->setObjectProperty( aMgrId, anEntry, BACK_MATERIAL_PROP, aMaterialPropB );
+           // Get material properties from the back model
+           vtkProperty* aMatPropB = aModelB->getMaterialVTKProperty();
+
+           // Set front and back materials for the selected shape
+           std::vector<vtkProperty*> aProps;
+           aProps.push_back(aMatPropF);
+           aProps.push_back(aMatPropB);
+           aGeomGActor->SetMaterial(aProps);
+
+           // Release memory
+           delete aModelB;
+
+           if(HasWidth())
+             aStudy->setObjectProperty( aMgrId, anEntry, EDGE_WIDTH_PROP, GetWidth() );
+
+           if(HasIsosWidth())
+             aStudy->setObjectProperty( aMgrId, anEntry, ISOS_WIDTH_PROP, GetIsosWidth() );
+         
+         }
+         else {
+           // Set the same front and back materials for the selected shape
+           std::vector<vtkProperty*> aProps;
+           aProps.push_back(aMatPropF);
+           aGeomGActor->SetMaterial(aProps);
+         }
+
          // Release memory
          delete aModelF;
 
@@ -1221,26 +1283,37 @@ void GEOM_Displayer::Update( SALOME_VTKPrs* prs )
               }
             }
           }
-          if ( !aMatPropF->GetPhysical() )
-            aGeomGActor->SetColor(aColor[0],aColor[1],aColor[2]);
+          aGeomGActor->SetColor(aColor[0],aColor[1],aColor[2]);
         }
        else {
          SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
          if ( aResMgr ) {
-           // Create material model
+           // Create front material model
            Material_Model aModelF;
-           // Get material name from resources
-           aModelF.fromResources( aResMgr, "Geometry" );
-           // Set material properties for the object
+           // Get front material name from resources
+           aModelF.fromResources( aResMgr, "Geometry", true );
+           // Set front material properties for the object
            QString aMaterialPropF = aModelF.getMaterialProperty();
-           aStudy->setObjectProperty( aMgrId, anEntry, MATERIAL_PROP, aMaterialPropF );            
-           // Get material properties from the model
-           GEOM_VTKPropertyMaterial* aMatPropF = aModelF.getMaterialVTKProperty();
+           aStudy->setObjectProperty( aMgrId, anEntry, FRONT_MATERIAL_PROP, aMaterialPropF );      
+           // Get material properties from the front model
+           vtkProperty* aMatPropF = aModelF.getMaterialVTKProperty();
+
+           // Create back material model
+           Material_Model aModelB;
+           // Get back material name from resources
+           aModelB.fromResources( aResMgr, "Geometry", false );
+           // Set back material properties for the object
+           QString aMaterialPropB = aModelB.getMaterialProperty();
+           aStudy->setObjectProperty( aMgrId, anEntry, BACK_MATERIAL_PROP, aMaterialPropB );
+           // Get material properties from the back model
+           vtkProperty* aMatPropB = aModelB.getMaterialVTKProperty();
 
            // Set material for the selected shape
-      std::vector<vtkProperty*> aProps;
-      aProps.push_back( (vtkProperty*) aMatPropF );
-           aGeomGActor->SetMaterial(aProps);     }
+           std::vector<vtkProperty*> aProps;
+           aProps.push_back(aMatPropF);
+           aProps.push_back(aMatPropB);
+           aGeomGActor->SetMaterial(aProps);
+         }
        }
       }
 
@@ -1936,16 +2009,23 @@ PropMap GEOM_Displayer::getDefaultPropertyMap(const QString& viewer_type) {
   aDefaultMap.insert( DEFLECTION_COEFF_PROP , aDC);
 
   //8. Material
+  //   Front material
   Material_Model aModelF;
-  aModelF.fromResources( aResMgr, "Geometry" );
+  aModelF.fromResources( aResMgr, "Geometry", true );
   QString aMaterialF = aModelF.getMaterialProperty();
-  aDefaultMap.insert( MATERIAL_PROP , aMaterialF );  
+  aDefaultMap.insert( FRONT_MATERIAL_PROP , aMaterialF );  
 
-  //9. Width of the edges
+  //9.  Back material
+  Material_Model aModelB;
+  aModelB.fromResources( aResMgr, "Geometry", false );
+  QString aMaterialB = aModelB.getMaterialProperty();
+  aDefaultMap.insert( BACK_MATERIAL_PROP , aMaterialB );
+
+  //10. Width of the edges
   aDefaultMap.insert( EDGE_WIDTH_PROP , aResMgr->integerValue("Geometry", "edge_width", 1));
 
 
-  //10. Width of iso-lines
+  //11. Width of iso-lines
   aDefaultMap.insert( ISOS_WIDTH_PROP , aResMgr->integerValue("Geometry", "isolines_width", 1));
 
   if(viewer_type == SOCC_Viewer::Type()) {
@@ -1982,8 +2062,12 @@ bool GEOM_Displayer::MergePropertyMaps(PropMap& theOrigin, PropMap& theDefault)
     theOrigin.insert(DEFLECTION_COEFF_PROP, theDefault.value(DEFLECTION_COEFF_PROP));
     nbInserted++;
   }
-  if(!theOrigin.contains(MATERIAL_PROP)) {
-    theOrigin.insert(MATERIAL_PROP, theDefault.value(MATERIAL_PROP));
+  if(!theOrigin.contains(FRONT_MATERIAL_PROP)) {
+    theOrigin.insert(FRONT_MATERIAL_PROP, theDefault.value(FRONT_MATERIAL_PROP));
+    nbInserted++;
+  }
+  if(!theOrigin.contains(BACK_MATERIAL_PROP)) {
+    theOrigin.insert(BACK_MATERIAL_PROP, theDefault.value(BACK_MATERIAL_PROP));
     nbInserted++;
   }
 
@@ -1997,11 +2081,6 @@ bool GEOM_Displayer::MergePropertyMaps(PropMap& theOrigin, PropMap& theDefault)
     nbInserted++;
   }
 
-  if(!theOrigin.contains(COLOR_PROP)) {
-    theOrigin.insert(COLOR_PROP, theDefault.value(COLOR_PROP));
-    nbInserted++;
-  }
-
   return (nbInserted > 0);
 }
 
index 51660252e9324b611164825d976fd6bb7265f930..b43229a40dda5262a714968129772bd53d648f2c 100644 (file)
@@ -3015,8 +3015,12 @@ Please, select face, shell or solid and try again</translation>
         <translation>Default wireframe color</translation>
     </message>
     <message>
-        <source>PREF_MATERIAL</source>
-        <translation>Default material</translation>
+        <source>PREF_FRONT_MATERIAL</source>
+        <translation>Default front material</translation>
+    </message>
+    <message>
+        <source>PREF_BACK_MATERIAL</source>
+        <translation>Default back material</translation>
     </message>
     <message>
         <source>PREF_EDGE_WIDTH</source>
@@ -5270,10 +5274,6 @@ Would you like to continue?</translation>
         <source>SHININESS</source>
         <translation>Shininess:</translation>
     </message>
-    <message>
-        <source>PHYSICAL</source>
-        <translation>Physical:</translation>
-    </message>
     <message>
         <source>CUSTOM_MATERIAL</source>
         <translation>Custom material</translation>
index 6fc3eeb06db5fdd8be8dd5fb78552ea86f0f32c1..b9fa4579775046ba18a6c74489c4b56ef41f6b56 100644 (file)
@@ -591,7 +591,10 @@ void GeometryGUI::OnGUIEvent( int id )
       if ( pref ) {
        Material_ResourceMgr aMatResMgr;
        QStringList aPerfMatNames = aMatResMgr.getPreferenceMaterialsNames();
-       setPreferenceProperty( pref->rootItem()->findItem( tr( "PREF_MATERIAL" ), true )->id(),
+       setPreferenceProperty( pref->rootItem()->findItem( tr( "PREF_FRONT_MATERIAL" ), true )->id(),
+                              "strings",
+                              aPerfMatNames );
+       setPreferenceProperty( pref->rootItem()->findItem( tr( "PREF_BACK_MATERIAL" ), true )->id(),
                               "strings",
                               aPerfMatNames );
       }
@@ -1247,7 +1250,7 @@ void GeometryGUI::initialize( CAM_Application* app )
   mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
   mgr->insert( separator(), -1, -1 );     // -----------
   mgr->insert( action(  GEOMOp::OpColor ), -1, -1 ); // color
-  mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})" + "and isPhysicalMaterial=false", QtxPopupMgr::VisibleRule );
+  mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
   mgr->insert( action(  GEOMOp::OpTransparency ), -1, -1 ); // transparency
   mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
   mgr->insert( action(  GEOMOp::OpIsos ), -1, -1 ); // isos
@@ -1716,10 +1719,14 @@ void GeometryGUI::createPreferences()
   int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
                             LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
 
-  int material = addPreference( tr( "PREF_MATERIAL" ), genGroup,
+  int front_material = addPreference( tr( "PREF_FRONT_MATERIAL" ), genGroup,
                                      LightApp_Preferences::Selector,
-                                     "Geometry", "material" );
+                                     "Geometry", "front_material" );
   
+  int back_material = addPreference( tr( "PREF_BACK_MATERIAL" ), genGroup,
+                                    LightApp_Preferences::Selector,
+                                    "Geometry", "back_material" );
+
   const int nb = 4;
   int wd[nb];
   int iter=0;
@@ -1809,7 +1816,8 @@ void GeometryGUI::createPreferences()
   // Set property for default material
   Material_ResourceMgr aMatResMgr;
   QStringList aPrefMatNames = aMatResMgr.getPreferenceMaterialsNames();
-  setPreferenceProperty( material, "strings", aPrefMatNames );
+  setPreferenceProperty( front_material, "strings", aPrefMatNames );
+  setPreferenceProperty( back_material, "strings", aPrefMatNames );
 
   // Set property vertex marker type
   QList<QVariant> aMarkerTypeIndicesList;
@@ -2006,11 +2014,17 @@ void GeometryGUI::storeVisualParameters (int savePoint)
           ip->setParameter(entry, param, aProps.value(MARKER_TYPE_PROP).toString().toLatin1().data());
         }
 
-       if(aProps.contains(MATERIAL_PROP)) {
-          param = occParam + MATERIAL_PROP;
-          ip->setParameter(entry, param, aProps.value(MATERIAL_PROP).toString().toLatin1().data());
+       if(aProps.contains(FRONT_MATERIAL_PROP)) {
+          param = occParam + FRONT_MATERIAL_PROP;
+          ip->setParameter(entry, param, aProps.value(FRONT_MATERIAL_PROP).toString().toLatin1().data());
         }
 
+       if(aProps.contains(BACK_MATERIAL_PROP)) {
+          param = occParam + BACK_MATERIAL_PROP;
+          ip->setParameter(entry, param, aProps.value(BACK_MATERIAL_PROP).toString().toLatin1().data());
+         
+       }
+
        if(aProps.contains( EDGE_WIDTH_PROP )) {
              param = occParam + EDGE_WIDTH_PROP;
            ip->setParameter(entry, param, aProps.value(EDGE_WIDTH_PROP).toString().toLatin1().data());                              
@@ -2130,8 +2144,10 @@ void GeometryGUI::restoreVisualParameters (int savePoint)
         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 == FRONT_MATERIAL_PROP) {
+        aListOfMap[viewIndex].insert( FRONT_MATERIAL_PROP, val);
+      } else if(paramNameStr == BACK_MATERIAL_PROP) {
+        aListOfMap[viewIndex].insert( BACK_MATERIAL_PROP, val);
       }  else if(paramNameStr == EDGE_WIDTH_PROP) {
        aListOfMap[viewIndex].insert( EDGE_WIDTH_PROP , val);
       }  else if(paramNameStr == ISOS_WIDTH_PROP) {