+ myDisplayVertices = isDisplayed;
+}
+
+void GEOM_AISShape::SetDisplayName(bool isDisplayed)
+{
+ myDisplayName = isDisplayed;
+}
+
+void GEOM_AISShape::shadingMode(const Handle(PrsMgr_PresentationManager3d)& aPresentationManager,
+ const Handle(Prs3d_Presentation)& aPrs,
+ const Standard_Integer aMode)
+{
+ myDrawer->ShadingAspect()->Aspect()->SetDistinguishOn();
+
+ Graphic3d_MaterialAspect aMatAspect(Graphic3d_NOM_PLASTIC);
+ 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 ))
+ myDrawer->ShadingAspect()->SetColor(myShadingColor);
+ else
+ myDrawer->ShadingAspect()->SetColor(myDrawer->ShadingAspect()->Aspect()->FrontMaterial().AmbientColor());
+ }
+
+ bool anIsColorField = !myFieldStepData.isEmpty() && myFieldDataType != GEOM::FDT_String;
+ if( anIsColorField && ( myFieldDimension == 2 || myFieldDimension == 3 || myFieldDimension == -1 ) )
+ {
+ drawField( aPrs );
+ }
+ else
+ {
+ // PAL12113: AIS_Shape::Compute() works correctly with shapes containing no faces
+ //StdPrs_ShadedShape::Add(aPrs,myshape,myDrawer);
+ SALOME_AISShape::Compute(aPresentationManager, aPrs, aMode);
+ }
+}
+
+Standard_Boolean GEOM_AISShape::isTopLevel()
+{
+ return myTopLevel;
+}
+
+void GEOM_AISShape::setTopLevel(Standard_Boolean f)
+{
+ if(f) {
+ if(f != myTopLevel)
+ myPrevDisplayMode = DisplayMode();
+ Standard_Integer dm;
+ switch(topLevelDisplayMode()) {
+ case TopWireFrame : dm = Wireframe; break;
+ case TopShading : dm = Shading; break;
+ case TopShadingWithEdges : dm = ShadingWithEdges; break;
+ default : dm = myPrevDisplayMode; break;
+ }
+ SetDisplayMode(dm);
+ } else {
+ if(f != myTopLevel)
+ SetDisplayMode(myPrevDisplayMode);
+ }
+ myTopLevel = f;
+}
+
+void GEOM_AISShape::setPrevDisplayMode(const Standard_Integer mode)
+{
+ myPrevDisplayMode = mode;
+}
+
+Quantity_Color GEOM_AISShape::topLevelColor()
+{
+ return myTopLevelColor;
+}
+
+void GEOM_AISShape::setTopLevelColor(const Quantity_Color c)
+{
+ myTopLevelColor = c;
+}
+
+GEOM_AISShape::TopLevelDispMode GEOM_AISShape::topLevelDisplayMode()
+{
+ return myTopLevelDm;
+}
+
+void GEOM_AISShape::setTopLevelDisplayMode(const GEOM_AISShape::TopLevelDispMode dm)
+{
+ myTopLevelDm = dm;
+}
+
+Standard_Boolean GEOM_AISShape::switchTopLevel()
+{
+ return myTopLevelDm != TopShowAdditionalWActor;
+}
+
+Standard_Boolean GEOM_AISShape::toActivate()
+{
+ return ( myTopLevel && myTopLevelDm == TopShowAdditionalWActor ) ? false : true;
+}
+
+void GEOM_AISShape::setFieldStepInfo( const GEOM::field_data_type theFieldDataType,
+ const int theFieldDimension,
+ const QList<QVariant>& theFieldStepData,
+ const TCollection_AsciiString& theFieldStepName,
+ const double theFieldStepRangeMin,
+ const double theFieldStepRangeMax )
+{
+ myFieldDataType = theFieldDataType;
+ myFieldDimension = theFieldDimension;
+ myFieldStepData = theFieldStepData;
+ myFieldStepName = theFieldStepName;
+ myFieldStepRangeMin = theFieldStepRangeMin;
+ myFieldStepRangeMax = theFieldStepRangeMax;
+}
+
+void GEOM_AISShape::getFieldStepInfo( GEOM::field_data_type& theFieldDataType,
+ int& theFieldDimension,
+ QList<QVariant>& theFieldStepData,
+ TCollection_AsciiString& theFieldStepName,
+ double& theFieldStepRangeMin,
+ double& theFieldStepRangeMax ) const
+{
+ theFieldDataType = myFieldDataType;
+ theFieldDimension = myFieldDimension;
+ theFieldStepData = myFieldStepData;
+ theFieldStepName = myFieldStepName;
+ theFieldStepRangeMin = myFieldStepRangeMin;
+ theFieldStepRangeMax = myFieldStepRangeMax;
+}
+
+void GEOM_AISShape::drawField( const Handle(Prs3d_Presentation)& thePrs,
+ const bool theIsString,
+ const bool theIsHighlight )
+{
+ if( myFieldStepData.isEmpty() )
+ return;
+
+ QListIterator<QVariant> aFieldStepDataIter( myFieldStepData );
+
+ TopAbs_ShapeEnum aShapeType = TopAbs_SHAPE;
+ switch( myFieldDimension )
+ {
+ case 0: aShapeType = TopAbs_VERTEX; break;
+ case 1: aShapeType = TopAbs_EDGE; break;
+ case 2: aShapeType = TopAbs_FACE; break;
+ case 3: aShapeType = TopAbs_SOLID; break;
+ case -1: aShapeType = TopAbs_VERTEX; break;
+ }
+
+ TopTools_IndexedMapOfShape aShapeMap;
+ TopExp::MapShapes( myshape, aShapeMap );
+
+ TColStd_IndexedMapOfInteger anIndexMap;
+
+ TopExp_Explorer anExp;
+ for( anExp.Init( myshape, aShapeType ); anExp.More(); anExp.Next() )
+ {
+ TopoDS_Shape aSubShape = anExp.Current();
+ if( !aSubShape.IsNull() )