From 36036343a0977f7fe7f0f7bcf25c6a603d3c1ec2 Mon Sep 17 00:00:00 2001 From: ana Date: Mon, 16 Apr 2012 12:54:26 +0000 Subject: [PATCH] Fix previous wrong-tag commit --- src/GEOMGUI/GEOMGUI_Selection.cxx | 65 +---------- src/GEOMGUI/GEOMGUI_Selection.h | 1 - src/GEOMGUI/GEOM_Displayer.cxx | 181 +++++++++++++++++++++--------- src/GEOMGUI/GEOM_msg_en.ts | 12 +- src/GEOMGUI/GeometryGUI.cxx | 36 ++++-- 5 files changed, 163 insertions(+), 132 deletions(-) diff --git a/src/GEOMGUI/GEOMGUI_Selection.cxx b/src/GEOMGUI/GEOMGUI_Selection.cxx index 6079aa75e..839321919 100644 --- a/src/GEOMGUI/GEOMGUI_Selection.cxx +++ b/src/GEOMGUI/GEOMGUI_Selection.cxx @@ -28,8 +28,6 @@ #include "GeometryGUI.h" #include "GEOM_Displayer.h" -#include "Material_Model.h" - #include #include @@ -56,16 +54,11 @@ #include #include -#include // OCCT Includes #include #include #include -#include -#include -#include -#include // VTK Includes #include @@ -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( 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() ) { - 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( 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; -} diff --git a/src/GEOMGUI/GEOMGUI_Selection.h b/src/GEOMGUI/GEOMGUI_Selection.h index 79220d649..ed9ed7182 100644 --- a/src/GEOMGUI/GEOMGUI_Selection.h +++ b/src/GEOMGUI/GEOMGUI_Selection.h @@ -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; diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index 281404e97..ea0fbcade 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -41,7 +41,6 @@ #include #include #include -#include #include @@ -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 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 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 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 aProps; - aProps.push_back( (vtkProperty*) aMatPropF ); - aGeomGActor->SetMaterial(aProps); } + std::vector 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); } diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index 51660252e..b43229a40 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -3015,8 +3015,12 @@ Please, select face, shell or solid and try again Default wireframe color - PREF_MATERIAL - Default material + PREF_FRONT_MATERIAL + Default front material + + + PREF_BACK_MATERIAL + Default back material PREF_EDGE_WIDTH @@ -5270,10 +5274,6 @@ Would you like to continue? SHININESS Shininess: - - PHYSICAL - Physical: - CUSTOM_MATERIAL Custom material diff --git a/src/GEOMGUI/GeometryGUI.cxx b/src/GEOMGUI/GeometryGUI.cxx index 6fc3eeb06..b9fa45797 100644 --- a/src/GEOMGUI/GeometryGUI.cxx +++ b/src/GEOMGUI/GeometryGUI.cxx @@ -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 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) { -- 2.39.2