X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMGUI%2FGEOMGUI_Selection.cxx;h=73423426981974a01dcf79fef35cc8fd86196a54;hb=8002d3e86f36d12d97fc60e859d6230884803d75;hp=d7977004b83faaff7ab2e8806fc752856843b98a;hpb=2981cca5dd1ce44999a72fd8d46878518e5093fb;p=modules%2Fgeom.git diff --git a/src/GEOMGUI/GEOMGUI_Selection.cxx b/src/GEOMGUI/GEOMGUI_Selection.cxx index d7977004b..734234269 100644 --- a/src/GEOMGUI/GEOMGUI_Selection.cxx +++ b/src/GEOMGUI/GEOMGUI_Selection.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE +// 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 @@ -28,6 +28,8 @@ #include "GeometryGUI.h" #include "GEOM_Displayer.h" +#include "Material_Model.h" + #include #include @@ -54,11 +56,17 @@ #include #include +#include // OCCT Includes #include #include #include +#include +#include +#include +#include +#include // VTK Includes #include @@ -159,6 +167,8 @@ 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 ); @@ -301,7 +311,13 @@ QString GEOMGUI_Selection::displayMode( const int index ) const if ( lst.Extent() ) { Handle(AIS_InteractiveObject) io = lst.First(); if ( !io.IsNull() ) { - int dm = io->DisplayMode(); + int dm; + Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast(io); + if(!aSh.IsNull()) { + dm = aSh->isTopLevel() ? aSh->prevDisplayMode() : aSh->DisplayMode(); + } else { + dm = io->DisplayMode(); + } OCC_DISPLAY_MODE_TO_STRING( res, dm ); if ( res.isEmpty() ) { // return default display mode of AIS_InteractiveContext OCCViewer_Viewer* occViewer = (OCCViewer_Viewer*)SUIT_Session::session()->activeApplication()-> @@ -313,7 +329,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 ) { @@ -517,7 +533,7 @@ QString GEOMGUI_Selection::selectionMode() const bool GEOMGUI_Selection::topLevel( const int index ) const { bool res = false; - + #ifdef USE_VISUAL_PROP_MAP bool found = false; QVariant v = visibleProperty( entry( index ), TOP_LEVEL_PROP ); @@ -551,3 +567,58 @@ 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 material; + material.fromProperties( v.toString() ); + res = material.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_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; +}