+#ifdef _DEBUG_
+static int MYDEBUG = 1;
+#else
+static int MYDEBUG = 1;
+#endif
+
+static int aLineWidthInc = 2;
+
+
+SMESH_ActorDef* SMESH_ActorDef::New(){
+ return new SMESH_ActorDef();
+}
+
+
+SMESH_Actor* SMESH_Actor::New(TVisualObjPtr theVisualObj,
+ const char* theEntry,
+ const char* theName,
+ int theIsClear)
+{
+ SMESH_ActorDef* anActor = NULL;
+ if(theVisualObj->IsValid() ) {
+ anActor = SMESH_ActorDef::New();
+ if(!anActor->Init(theVisualObj,theEntry,theName,theIsClear)){
+ anActor->Delete();
+ anActor = NULL;
+ }
+ if( anActor )
+ anActor->UpdateScalarBar();
+ }
+ return anActor;
+}
+
+
+SMESH_ActorDef::SMESH_ActorDef()
+{
+ if(MYDEBUG) MESSAGE("SMESH_ActorDef - "<<this);
+ myBaseActor = SMESH_DeviceActor::New();
+
+ myTimeStamp = vtkTimeStamp::New();
+
+ myIsPointsVisible = false;
+ myIsEntityModeCache = false;
+
+ myHighlightActor = SMESH_SVTKActor::New();
+ myHighlightActor->Delete(); // vtkSmartPointer!
+ myHighlightActor->Initialize();
+
+ myPreHighlightActor = SMESH_SVTKActor::New();
+ myPreHighlightActor->Delete();
+ myPreHighlightActor->Initialize();
+
+ myIsShrinkable = false;
+ myIsShrunk = false;
+
+ myIsFacesOriented = false;
+
+ myControlsPrecision = -1;
+ SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr();
+
+ if ( mgr && mgr->booleanValue( "SMESH", "use_precision", false ) )
+ myControlsPrecision = mgr->integerValue( "SMESH", "controls_precision", -1);
+
+ double aElem0DSize = SMESH::GetFloat("SMESH:elem0d_size",5);
+ double aBallElemSize = SMESH::GetFloat("SMESH:ball_elem_size",10);
+ double aLineWidth = SMESH::GetFloat("SMESH:element_width",1);
+ double aOutlineWidth = SMESH::GetFloat("SMESH:outline_width",1);
+
+ SMESH::LabelFont aFamilyNd = SMESH::FntTimes;
+ bool aBoldNd = true;
+ bool anItalicNd = false;
+ bool aShadowNd = false;
+ int aSizeNd = 10;
+ if ( mgr->hasValue( "SMESH", "numbering_node_font" ) ) {
+ QFont f = mgr->fontValue( "SMESH", "numbering_node_font" );
+ if ( f.family() == "Arial" ) aFamilyNd = SMESH::FntArial;
+ else if ( f.family() == "Courier" ) aFamilyNd = SMESH::FntCourier;
+ else if ( f.family() == "Times" ) aFamilyNd = SMESH::FntTimes;
+ aBoldNd = f.bold();
+ anItalicNd = f.italic();
+ aShadowNd = f.overline();
+ aSizeNd = f.pointSize();
+ }
+ double anRGBNd[3] = {1,1,1};
+ SMESH::GetColor( "SMESH", "numbering_node_color", anRGBNd[0], anRGBNd[1], anRGBNd[2], QColor( 255, 255, 255 ) );
+
+ SMESH::LabelFont aFamilyEl = SMESH::FntTimes;
+ bool aBoldEl = true;
+ bool anItalicEl = false;
+ bool aShadowEl = false;
+ int aSizeEl = 12;
+ if ( mgr->hasValue( "SMESH", "numbering_elem_font" ) ) {
+ QFont f = mgr->fontValue( "SMESH", "numbering_elem_font" );
+ if ( f.family() == "Arial" ) aFamilyEl = SMESH::FntArial;
+ else if ( f.family() == "Courier" ) aFamilyEl = SMESH::FntCourier;
+ else if ( f.family() == "Times" ) aFamilyEl = SMESH::FntTimes;
+ aBoldEl = f.bold();
+ anItalicEl = f.italic();
+ aShadowEl = f.overline();
+ aSizeEl = f.pointSize();
+ }
+ double anRGBEl[3] = {0,1,0};
+ SMESH::GetColor( "SMESH", "numbering_elem_color", anRGBEl[0], anRGBEl[1], anRGBEl[2], QColor( 0, 255, 0 ) );
+
+ vtkMatrix4x4 *aMatrix = vtkMatrix4x4::New();
+ VTKViewer_ExtractUnstructuredGrid* aFilter = NULL;
+
+ //Definition 2D and 3D devices of the actor
+ //-----------------------------------------
+ double anRGB[3] = {1,1,1};
+ mySurfaceProp = vtkProperty::New();
+ QColor ffc, bfc;
+ int delta;
+ SMESH::GetColor( "SMESH", "fill_color", ffc, delta, "0,170,255|-100" ) ;
+ mySurfaceProp->SetColor( ffc.red() / 255. , ffc.green() / 255. , ffc.blue() / 255. );
+ myDeltaBrightness = delta;
+
+ myBackSurfaceProp = vtkProperty::New();
+ bfc = Qtx::mainColorToSecondary(ffc, delta);
+ myBackSurfaceProp->SetColor( bfc.red() / 255. , bfc.green() / 255. , bfc.blue() / 255. );
+
+ myNormalVProp = vtkProperty::New();
+ SMESH::GetColor( "SMESH", "volume_color", ffc, delta, "255,0,170|-100" );
+ myNormalVProp->SetColor( ffc.redF(), ffc.greenF(), ffc.blueF() );
+ myDeltaVBrightness = delta;
+
+ myReversedVProp = vtkProperty::New();
+ bfc = Qtx::mainColorToSecondary(ffc, delta);
+ myReversedVProp->SetColor( bfc.red() / 255. , bfc.green() / 255. , bfc.blue() / 255. );
+
+ my2DActor = SMESH_CellLabelActor::New();
+ my2DActor->SetStoreGemetryMapping(true);
+ my2DActor->SetUserMatrix(aMatrix);
+ my2DActor->PickableOff();
+ my2DActor->SetFontProperties( aFamilyEl, aSizeEl, aBoldEl, anItalicEl, aShadowEl, anRGBEl[0], anRGBEl[1], anRGBEl[2] );
+ my2DActor->SetProperty(mySurfaceProp);
+ my2DActor->SetBackfaceProperty(myBackSurfaceProp);
+ my2DActor->SetRepresentation(SMESH_DeviceActor::eSurface);
+ aFilter = my2DActor->GetExtractUnstructuredGrid();
+ aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
+ aFilter->RegisterCellsWithType(VTK_TRIANGLE);
+ aFilter->RegisterCellsWithType(VTK_POLYGON);
+ aFilter->RegisterCellsWithType(VTK_QUAD);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_TRIANGLE);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_QUAD);
+ aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUAD);
+ aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_TRIANGLE);
+
+ my2DExtProp = vtkProperty::New();
+ my2DExtProp->DeepCopy(mySurfaceProp);
+ SMESH::GetColor( "SMESH", "fill_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) );
+ anRGB[0] = 1 - anRGB[0];
+ anRGB[1] = 1 - anRGB[1];
+ anRGB[2] = 1 - anRGB[2];
+ my2DExtProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
+
+ my2DExtActor = SMESH_DeviceActor::New();
+ my2DExtActor->SetUserMatrix(aMatrix);
+ my2DExtActor->PickableOff();
+ my2DExtActor->SetProperty(my2DExtProp);
+ my2DExtActor->SetBackfaceProperty(my2DExtProp);
+ my2DExtActor->SetRepresentation(SMESH_DeviceActor::eInsideframe);
+ aFilter = my2DExtActor->GetExtractUnstructuredGrid();
+ aFilter->RegisterCellsWithType(VTK_TRIANGLE);
+ aFilter->RegisterCellsWithType(VTK_POLYGON);
+ aFilter->RegisterCellsWithType(VTK_QUAD);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_TRIANGLE);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_QUAD);
+ aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUAD);
+ aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_TRIANGLE);
+
+ my3DActor = SMESH_CellLabelActor::New();
+ my3DActor->SetStoreGemetryMapping(true);
+ my3DActor->SetUserMatrix(aMatrix);
+ my3DActor->PickableOff();
+ my3DActor->SetFontProperties( aFamilyEl, aSizeEl, aBoldEl, anItalicEl, aShadowEl, anRGBEl[0], anRGBEl[1], anRGBEl[2] );
+ my3DActor->SetProperty(myNormalVProp);
+ my3DActor->SetBackfaceProperty(myReversedVProp);
+ my3DActor->SetRepresentation(SMESH_DeviceActor::eSurface);
+ my3DActor->SetCoincident3DAllowed(true);
+ aFilter = my3DActor->GetExtractUnstructuredGrid();
+ aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
+ aFilter->RegisterCellsWithType(VTK_TETRA);
+ aFilter->RegisterCellsWithType(VTK_VOXEL);
+ aFilter->RegisterCellsWithType(VTK_HEXAHEDRON);
+ aFilter->RegisterCellsWithType(VTK_WEDGE);
+ aFilter->RegisterCellsWithType(VTK_PYRAMID);
+ aFilter->RegisterCellsWithType(VTK_HEXAGONAL_PRISM);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_TETRA);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_HEXAHEDRON);
+ aFilter->RegisterCellsWithType(VTK_TRIQUADRATIC_HEXAHEDRON);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_WEDGE);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_PYRAMID);
+ aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET);
+//#ifdef VTK_HAVE_POLYHEDRON
+ MESSAGE("RegisterCellsWithType(VTK_POLYHEDRON)");
+ aFilter->RegisterCellsWithType(VTK_POLYHEDRON);
+//#endif
+
+ my3DExtProp = vtkProperty::New();
+ my3DExtProp->DeepCopy(myNormalVProp);
+ SMESH::GetColor( "SMESH", "volume_color", anRGB[0], anRGB[1], anRGB[2], QColor( 255, 0, 170 ) );
+ anRGB[0] = 1 - anRGB[0];
+ anRGB[1] = 1 - anRGB[1];
+ anRGB[2] = 1 - anRGB[2];
+ my3DExtProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
+
+ my3DExtActor = SMESH_DeviceActor::New();
+ my3DExtActor->SetUserMatrix(aMatrix);
+ my3DExtActor->PickableOff();
+ my3DExtActor->SetProperty(my3DExtProp);
+ my3DExtActor->SetBackfaceProperty(my3DExtProp);
+ my3DExtActor->SetRepresentation(SMESH_DeviceActor::eSurface);
+ my3DExtActor->SetCoincident3DAllowed(true);
+ aFilter = my3DExtActor->GetExtractUnstructuredGrid();
+ aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
+ aFilter->RegisterCellsWithType(VTK_TETRA);
+ aFilter->RegisterCellsWithType(VTK_VOXEL);
+ aFilter->RegisterCellsWithType(VTK_HEXAHEDRON);
+ aFilter->RegisterCellsWithType(VTK_WEDGE);
+ aFilter->RegisterCellsWithType(VTK_PYRAMID);
+ aFilter->RegisterCellsWithType(VTK_HEXAGONAL_PRISM);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_TETRA);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_HEXAHEDRON);
+ aFilter->RegisterCellsWithType(VTK_TRIQUADRATIC_HEXAHEDRON);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_WEDGE);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_PYRAMID);
+ aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET);
+ aFilter->RegisterCellsWithType(VTK_POLYHEDRON);
+
+ //Definition 1D device of the actor
+ //---------------------------------
+ myEdgeProp = vtkProperty::New();
+ myEdgeProp->SetAmbient(1.0);
+ myEdgeProp->SetDiffuse(0.0);
+ myEdgeProp->SetSpecular(0.0);
+ SMESH::GetColor( "SMESH", "wireframe_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) );
+ myEdgeProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
+ myEdgeProp->SetLineWidth(aLineWidth);
+
+ my1DActor = SMESH_CellLabelActor::New();
+ my1DActor->SetStoreGemetryMapping(true);
+ my1DActor->SetUserMatrix(aMatrix);
+ my1DActor->PickableOff();
+ my1DActor->SetHighlited(true);
+ my1DActor->SetFontProperties( aFamilyEl, aSizeEl, aBoldEl, anItalicEl, aShadowEl, anRGBEl[0], anRGBEl[1], anRGBEl[2] );
+ my1DActor->SetProperty(myEdgeProp);
+ my1DActor->SetRepresentation(SMESH_DeviceActor::eSurface);
+ aFilter = my1DActor->GetExtractUnstructuredGrid();
+ aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
+ aFilter->RegisterCellsWithType(VTK_LINE);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_EDGE);
+
+ my1DProp = vtkProperty::New();
+ my1DProp->DeepCopy(myEdgeProp);
+ my1DProp->SetLineWidth(aLineWidth + aLineWidthInc);
+ my1DProp->SetPointSize(aElem0DSize);
+
+ my1DExtProp = vtkProperty::New();
+ my1DExtProp->DeepCopy(myEdgeProp);
+ anRGB[0] = 1 - anRGB[0];
+ anRGB[1] = 1 - anRGB[1];
+ anRGB[2] = 1 - anRGB[2];
+ my1DExtProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
+ my1DExtProp->SetLineWidth(aLineWidth + aLineWidthInc);
+ my1DExtProp->SetPointSize(aElem0DSize);
+
+ my1DExtActor = SMESH_DeviceActor::New();
+ my1DExtActor->SetUserMatrix(aMatrix);
+ my1DExtActor->PickableOff();
+ my1DExtActor->SetHighlited(true);
+ my1DExtActor->SetVisibility(false);
+ my1DExtActor->SetProperty(my1DExtProp);
+ my1DExtActor->SetRepresentation(SMESH_DeviceActor::eInsideframe);
+ aFilter = my1DExtActor->GetExtractUnstructuredGrid();
+ aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
+ aFilter->RegisterCellsWithType(VTK_LINE);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_EDGE);
+
+
+ //Definition 0D device of the actor (0d elements)
+ //-----------------------------------------------
+ my0DProp = vtkProperty::New();
+ SMESH::GetColor( "SMESH", "elem0d_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 255, 0 ) );
+ my0DProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
+ my0DProp->SetPointSize(aElem0DSize);
+
+ my0DActor = SMESH_CellLabelActor::New();
+ my0DActor->SetUserMatrix(aMatrix);
+ my0DActor->SetStoreGemetryMapping(true);
+ my0DActor->PickableOff();
+ my0DActor->SetFontProperties( aFamilyEl, aSizeEl, aBoldEl, anItalicEl, aShadowEl, anRGBEl[0], anRGBEl[1], anRGBEl[2] );
+ my0DActor->SetVisibility(false);
+ my0DActor->SetProperty(my0DProp);
+ my0DActor->SetRepresentation(SMESH_DeviceActor::eSurface);
+ aFilter = my0DActor->GetExtractUnstructuredGrid();
+ aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
+ aFilter->RegisterCellsWithType(VTK_VERTEX);
+
+ //Definition 0D device of the actor (ball elements)
+ //-----------------------------------------------
+ myBallProp = vtkProperty::New();
+ SMESH::GetColor( "SMESH", "ball_elem_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 85, 255 ) );
+ myBallProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
+ myBallProp->SetPointSize(aBallElemSize);
+
+ myBallActor = SMESH_CellLabelActor::New();
+ myBallActor->SetUserMatrix(aMatrix);
+ myBallActor->SetStoreGemetryMapping(true);
+ myBallActor->PickableOff();
+ myBallActor->SetFontProperties( aFamilyEl, aSizeEl, aBoldEl, anItalicEl, aShadowEl, anRGBEl[0], anRGBEl[1], anRGBEl[2] );
+ myBallActor->SetVisibility(false);
+ myBallActor->SetProperty(myBallProp);
+ myBallActor->SetRepresentation(SMESH_DeviceActor::eSurface);
+ myBallActor->SetBallEnabled(true);
+ aFilter = myBallActor->GetExtractUnstructuredGrid();
+ aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
+ aFilter->RegisterCellsWithType(VTK_POLY_VERTEX);
+
+ //my0DExtProp = vtkProperty::New();
+ //my0DExtProp->DeepCopy(my0DProp);
+ //anRGB[0] = 1 - anRGB[0];
+ //anRGB[1] = 1 - anRGB[1];
+ //anRGB[2] = 1 - anRGB[2];
+ //my0DExtProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
+ //my0DExtProp->SetPointSize(aElem0DSize);
+ //
+ //my0DExtActor = SMESH_DeviceActor::New();
+ //my0DExtActor->SetUserMatrix(aMatrix);
+ //my0DExtActor->SetStoreClippingMapping(true);
+ //my0DExtActor->PickableOff();
+ //my0DExtActor->SetHighlited(true);
+ //my0DExtActor->SetVisibility(false);
+ //my0DExtActor->SetProperty(my0DExtProp);
+ //my0DExtActor->SetRepresentation(SMESH_DeviceActor::eInsideframe);
+ //aFilter = my0DExtActor->GetExtractUnstructuredGrid();
+ ////aFilter->SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::ePoints);
+ //aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
+ //aFilter->RegisterCellsWithType(VTK_VERTEX);
+
+
+ //Definition 0D device of the actor (nodes)
+ //-----------------------------------------
+ myNodeProp = vtkProperty::New();
+ SMESH::GetColor( "SMESH", "node_color", anRGB[0], anRGB[1], anRGB[2], QColor( 255, 0, 0 ) );
+ myNodeProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
+
+ myNodeActor = SMESH_NodeLabelActor::New();
+ myNodeActor->SetUserMatrix(aMatrix);
+ myNodeActor->SetStoreClippingMapping(true);
+ myNodeActor->PickableOff();
+ myNodeActor->SetVisibility(false);
+ myNodeActor->SetFontProperties( aFamilyNd, aSizeNd, aBoldNd, anItalicNd, aShadowNd, anRGBNd[0], anRGBNd[1], anRGBNd[2] );
+ myNodeActor->SetProperty(myNodeProp);
+ myNodeActor->SetRepresentation(SMESH_DeviceActor::ePoint);
+ aFilter = myNodeActor->GetExtractUnstructuredGrid();
+ aFilter->SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::ePoints);
+
+ myNodeExtProp = vtkProperty::New();
+ myNodeExtProp->DeepCopy(myNodeProp);
+ anRGB[0] = 1 - anRGB[0];
+ anRGB[1] = 1 - anRGB[1];
+ anRGB[2] = 1 - anRGB[2];
+ myNodeExtProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
+
+ myNodeExtActor = SMESH_DeviceActor::New();
+ myNodeExtActor->SetUserMatrix(aMatrix);
+ myNodeExtActor->SetStoreClippingMapping(true);
+ myNodeExtActor->PickableOff();
+ myNodeExtActor->SetHighlited(true);
+ myNodeExtActor->SetVisibility(false);
+ myNodeExtActor->SetProperty(myNodeExtProp);
+ myNodeExtActor->SetRepresentation(SMESH_DeviceActor::ePoint);
+ aFilter = myNodeExtActor->GetExtractUnstructuredGrid();
+ aFilter->SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::ePoints);
+ aFilter->RegisterCellsWithType(VTK_VERTEX);
+
+ //Definition of Pickable and Highlitable engines
+ //----------------------------------------------
+
+ myBaseActor->SetUserMatrix(aMatrix);
+ myBaseActor->SetStoreGemetryMapping(true);
+ myBaseActor->GetProperty()->SetOpacity(0.0);
+ myPickableActor = myBaseActor;
+
+ myHighlightProp = vtkProperty::New();
+ myHighlightProp->SetAmbient(1.0);
+ myHighlightProp->SetDiffuse(0.0);
+ myHighlightProp->SetSpecular(0.0);
+ SMESH::GetColor( "SMESH", "selection_object_color", anRGB[0], anRGB[1], anRGB[2], QColor( 255, 255, 255 ) );
+ myHighlightProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
+ myHighlightProp->SetPointSize(aElem0DSize); // ??
+ myHighlightProp->SetLineWidth(aLineWidth);
+ myHighlightProp->SetRepresentation(1);
+
+ myOutLineProp = vtkProperty::New();
+ myOutLineProp->SetAmbient(1.0);
+ myOutLineProp->SetDiffuse(0.0);
+ myOutLineProp->SetSpecular(0.0);
+ SMESH::GetColor( "SMESH", "outline_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 70, 0 ) );
+ myOutLineProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
+ myOutLineProp->SetLineWidth(aOutlineWidth);
+ myOutLineProp->SetRepresentation(1);
+
+ myPreselectProp = vtkProperty::New();
+ myPreselectProp->SetAmbient(1.0);
+ myPreselectProp->SetDiffuse(0.0);
+ myPreselectProp->SetSpecular(0.0);
+ SMESH::GetColor( "SMESH", "highlight_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 255, 255 ) );
+ myPreselectProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
+ myPreselectProp->SetPointSize(aElem0DSize); // ??
+ myPreselectProp->SetLineWidth(aLineWidth);
+ myPreselectProp->SetRepresentation(1);
+
+ myHighlitableActor = SMESH_DeviceActor::New();
+ myHighlitableActor->SetUserMatrix(aMatrix);
+ myHighlitableActor->PickableOff();
+ myHighlitableActor->SetRepresentation(SMESH_DeviceActor::eWireframe);
+ myHighlitableActor->SetCoincident3DAllowed(true);
+
+ aMatrix->Delete();
+
+ myName = "";
+ myIO = NULL;
+
+ myControlMode = eNone;
+ myControlActor = my2DActor;
+
+ //Definition of myScalarBarActor
+ //------------------------------
+ myLookupTable = vtkLookupTable::New();
+ //Fix for Bug PAL5195 - SMESH764:
+ //Controls - Aspect Ratio: incorrect colors of the best and worst values
+ myLookupTable->SetHueRange(0.667,0.0);
+
+ myScalarBarActor = SMESH_ScalarBarActor::New();
+ myScalarBarActor->SetVisibility(false);
+ myScalarBarActor->SetLookupTable(myLookupTable);
+
+ //Fix for Bug 13314:
+ //Incorrect "Min value" in Scalar Bar in Mesh:
+ // myScalarBarActor->SetLabelFormat("%.4g");
+ // changes was commented because of regression bug IPAL 19981
+
+ mgr = SUIT_Session::session()->resourceMgr();
+ if( !mgr )
+ return;
+
+ myEntityMode = eAllEntity;
+ myEntityModeCache = eAllEntity;
+
+ // Clipping planes
+ myImplicitBoolean = vtkImplicitBoolean::New();
+ myImplicitBoolean->SetOperationTypeToIntersection();
+
+ myPlaneCollection = vtkPlaneCollection::New();
+
+ //Quadratic 2D elements representation
+ //-----------------------------------------------------------------------------
+ int aQuadratic2DMode = mgr->integerValue( "SMESH", "quadratic_mode", 0);
+ if(aQuadratic2DMode == 0){
+ myHighlitableActor->SetQuadraticArcMode(false);
+ my2DActor->SetQuadraticArcMode(false);
+ my1DActor->SetQuadraticArcMode(false);
+ }
+ else if(aQuadratic2DMode == 1){
+ myHighlitableActor->SetQuadraticArcMode(true);
+ my2DActor->SetQuadraticArcMode(true);
+ my1DActor->SetQuadraticArcMode(true);
+ }
+
+ int aQuadraticAngle = mgr->integerValue( "SMESH", "max_angle", 2);
+ myHighlitableActor->SetQuadraticArcAngle(aQuadraticAngle);
+ my2DActor->SetQuadraticArcAngle(aQuadraticAngle);
+
+ // Set colors of the name actor
+ SMESH::GetColor( "SMESH", "default_grp_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) );
+ myNameActor->SetBackgroundColor(anRGB[0], anRGB[1], anRGB[2]);
+ SMESH::GetColor( "SMESH", "group_name_color", anRGB[0], anRGB[1], anRGB[2], QColor( 255, 255, 255 ) );
+ myNameActor->SetForegroundColor(anRGB[0], anRGB[1], anRGB[2]);
+
+#ifndef DISABLE_PLOT2DVIEWER
+ my2dHistogram = 0;
+#endif
+
+ SetBallSize(aBallElemSize);
+ Set0DSize(aElem0DSize);
+}
+
+
+SMESH_ActorDef::~SMESH_ActorDef()
+{
+ if(MYDEBUG) MESSAGE("~SMESH_ActorDef - "<<this);
+
+ // Please keep the order same as one in the header file
+
+ myTimeStamp->Delete();
+
+ myScalarBarActor->Delete();
+ myLookupTable->Delete();
+
+ mySurfaceProp->Delete();
+ myBackSurfaceProp->Delete();
+ myNormalVProp->Delete();
+ myReversedVProp->Delete();
+ myEdgeProp->Delete();
+ myNodeProp->Delete();
+
+ myNodeActor->Delete();
+ myBaseActor->Delete();
+ //myPickableActor->Delete(); myPickableActor == myBaseActor
+
+ myHighlightProp->Delete();
+ myOutLineProp->Delete();
+ myPreselectProp->Delete();
+
+ myHighlitableActor->Delete();
+
+ my2DExtProp->Delete();
+ my3DExtProp->Delete();
+ my2DActor->Delete();
+ my2DExtActor->Delete();
+ my3DActor->Delete();
+ my3DExtActor->Delete();
+ // myControlActor->Delete(); myControlActor == my2DActor
+
+ myNodeExtProp->Delete();
+ myNodeExtActor->Delete();
+
+ my1DProp->Delete();
+ my1DActor->Delete();
+ my1DExtProp->Delete();
+ my1DExtActor->Delete();
+
+ my0DProp->Delete();
+ my0DActor->Delete();
+ myBallProp->Delete();
+ myBallActor->Delete();
+ //my0DExtProp->Delete();
+ //my0DExtActor->Delete();
+
+ myImplicitBoolean->Delete();
+ myPlaneCollection->Delete();
+
+#ifndef DISABLE_PLOT2DVIEWER
+ if(my2dHistogram) {
+ SMESH::ProcessIn2DViewers(this,SMESH::RemoveFrom2dViewer);
+ delete my2dHistogram;
+ }
+#endif
+}
+
+void SMESH_ActorDef::Delete()
+{
+ // This is just to guarantee that the DeleteActorEvent (which was previously invoked
+ // from the actor's destructor) will be thrown before removing the actor's observers,
+ // that is done inside the Superclass::Delete() method but before the destructor itself
+ // (see the issue 0021562: EDF SMESH: clipping and delete mesh clipped leads to crash).
+ // The event is caught by SMESHGUI::ProcessEvents() static method.
+ this->InvokeEvent( SMESH::DeleteActorEvent, NULL );
+
+ Superclass::Delete();
+}
+
+void SMESH_ActorDef::SetPointsLabeled( bool theIsPointsLabeled )
+{
+ if(myNodeActor) {
+ myNodeActor->SetPointsLabeled(theIsPointsLabeled);
+ SetRepresentation(GetRepresentation());
+ myTimeStamp->Modified();
+ }
+}
+
+void SMESH_ActorDef::SetPointsFontProperties( SMESH::LabelFont theFamily, int theSize,
+ bool theBold, bool theItalic, bool theShadow,
+ double r, double g, double b )
+{
+ if(myNodeActor) {
+ myNodeActor->SetFontProperties( theFamily, theSize, theBold, theItalic, theShadow, r, g, b );
+ SetRepresentation( GetRepresentation() );
+ myTimeStamp->Modified();
+ }
+}
+
+void SMESH_ActorDef::SetCellsFontProperties( SMESH::LabelFont theFamily, int theSize,
+ bool theBold, bool theItalic, bool theShadow,
+ double r, double g, double b )
+{
+ if(my3DActor) {
+ my3DActor->SetFontProperties( theFamily, theSize, theBold, theItalic, theShadow, r, g, b );
+ }
+ if(my2DActor) {
+ my2DActor->SetFontProperties( theFamily, theSize, theBold, theItalic, theShadow, r, g, b );
+ SetRepresentation( GetRepresentation() );
+ myTimeStamp->Modified();
+ }
+ if(my1DActor) {
+ my1DActor->SetFontProperties( theFamily, theSize, theBold, theItalic, theShadow, r, g, b );
+ SetRepresentation( GetRepresentation() );
+ myTimeStamp->Modified();
+ }
+ if(my0DActor) {
+ my0DActor->SetFontProperties( theFamily, theSize, theBold, theItalic, theShadow, r, g, b );
+ SetRepresentation( GetRepresentation() );
+ myTimeStamp->Modified();
+ }
+ if(myBallActor) {
+ myBallActor->SetFontProperties( theFamily, theSize, theBold, theItalic, theShadow, r, g, b );
+ SetRepresentation( GetRepresentation() );
+ myTimeStamp->Modified();
+ }
+}
+
+bool SMESH_ActorDef::GetPointsLabeled() {
+ return myNodeActor && myNodeActor->GetPointsLabeled();
+}
+
+void SMESH_ActorDef::SetCellsLabeled(bool theIsCellsLabeled)
+{
+ if(my3DActor)
+ my3DActor->SetCellsLabeled(theIsCellsLabeled);
+
+ if(my2DActor)
+ my2DActor->SetCellsLabeled(theIsCellsLabeled);
+
+ if(my1DActor)
+ my1DActor->SetCellsLabeled(theIsCellsLabeled);
+
+ if(my0DActor)
+ my0DActor->SetCellsLabeled(theIsCellsLabeled);
+
+ if(myBallActor)
+ myBallActor->SetCellsLabeled(theIsCellsLabeled);
+
+ myTimeStamp->Modified();
+}
+
+
+bool SMESH_ActorDef::GetCellsLabeled() {
+ bool result = false;
+ if(my3DActor)
+ result = result || my3DActor->GetCellsLabeled();
+
+ if(my2DActor)
+ result = result || my2DActor->GetCellsLabeled();
+
+ if(my1DActor)
+ result = result || my1DActor->GetCellsLabeled();
+
+ if(my0DActor)
+ result = result || my0DActor->GetCellsLabeled();
+
+ if(myBallActor)
+ result = result || myBallActor->GetCellsLabeled();
+
+ return result;
+}
+
+
+void SMESH_ActorDef::SetFacesOriented(bool theIsFacesOriented)
+{
+ myIsFacesOriented = theIsFacesOriented;
+
+ my2DActor->SetFacesOriented(theIsFacesOriented);
+ my3DActor->SetFacesOriented(theIsFacesOriented);
+
+ myTimeStamp->Modified();
+}
+
+bool SMESH_ActorDef::GetFacesOriented()
+{
+ return myIsFacesOriented;
+}
+
+void SMESH_ActorDef::SetFacesOrientationColor(double r,double g,double b)
+{
+ my2DActor->SetFacesOrientationColor( r, g, b );
+ my3DActor->SetFacesOrientationColor( r, g, b );
+}
+
+void SMESH_ActorDef::GetFacesOrientationColor(double& r,double& g,double& b)
+{
+ my3DActor->GetFacesOrientationColor( r, g, b );
+}
+
+void SMESH_ActorDef::SetFacesOrientationScale(double theScale)
+{
+ my2DActor->SetFacesOrientationScale( theScale );
+ my3DActor->SetFacesOrientationScale( theScale );
+}
+
+double SMESH_ActorDef::GetFacesOrientationScale()
+{
+ return my3DActor->GetFacesOrientationScale();
+}
+
+void SMESH_ActorDef::SetFacesOrientation3DVectors(bool theState)
+{
+ my2DActor->SetFacesOrientation3DVectors( theState );
+ my3DActor->SetFacesOrientation3DVectors( theState );
+}
+
+bool SMESH_ActorDef::GetFacesOrientation3DVectors()
+{
+ return my3DActor->GetFacesOrientation3DVectors();
+}
+
+
+void
+SMESH_ActorDef::
+SetControlMode(eControl theMode)
+{
+ SetControlMode(theMode,true);
+}
+
+
+void
+SMESH_ActorDef::
+SetControlMode(eControl theMode,
+ bool theCheckEntityMode)
+{
+ vtkLookupTable* lookupTable = static_cast<vtkLookupTable*>(myScalarBarActor->GetLookupTable());
+ bool isLogarithmic = lookupTable->GetScale() == VTK_SCALE_LOG10;
+ lookupTable->SetScale(VTK_SCALE_LINEAR);
+
+ SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr();
+ if( !mgr )
+ return;
+
+ myControlMode = eNone;
+ theCheckEntityMode &= mgr->booleanValue( "SMESH", "display_entity", false );
+
+ my0DActor->GetMapper()->SetScalarVisibility(false);
+ my1DActor->GetMapper()->SetScalarVisibility(false);
+ my2DActor->GetMapper()->SetScalarVisibility(false);
+ my3DActor->GetMapper()->SetScalarVisibility(false);
+ myBallActor->GetMapper()->SetScalarVisibility(false);
+ myScalarBarActor->SetVisibility(false);
+
+ bool anIsScalarVisible = theMode > eNone;
+
+ if(anIsScalarVisible) {
+ switch(theMode) {
+ case eLength:
+ {
+ SMESH::Controls::Length* aControl = new SMESH::Controls::Length();
+ aControl->SetPrecision( myControlsPrecision );
+ myFunctor.reset( aControl );
+ myControlActor = my1DActor;
+ break;
+ }
+ case eLength2D:
+ {
+ myFunctor.reset(new SMESH::Controls::Length2D());
+ myControlActor = my2DActor;
+ break;
+ }
+ case eFreeBorders:
+ myFunctor.reset(new SMESH::Controls::FreeBorders());
+ myControlActor = my1DActor;
+ break;
+ case eFreeEdges:
+ myFunctor.reset(new SMESH::Controls::FreeEdges());
+ myControlActor = my2DActor;
+ break;
+ case eFreeNodes:
+ myFunctor.reset(new SMESH::Controls::FreeNodes());
+ myControlActor = myNodeActor;
+ break;
+ case eFreeFaces:
+ myFunctor.reset(new SMESH::Controls::FreeFaces());
+ myControlActor = my2DActor;
+ break;
+ case eCoincidentNodes:
+ {
+ SMESH::Controls::CoincidentNodes* cn = new SMESH::Controls::CoincidentNodes();
+ double tol = mgr->doubleValue( "SMESH", "equal_nodes_tolerance", 1e-7 );
+ cn->SetTolerance( tol );
+ myFunctor.reset(cn);
+ myControlActor = myNodeActor;
+ break;
+ }
+ case eCoincidentElems1D:
+ myFunctor.reset(new SMESH::Controls::CoincidentElements1D());
+ myControlActor = my1DActor;
+ break;
+ case eCoincidentElems2D:
+ myFunctor.reset(new SMESH::Controls::CoincidentElements2D());
+ myControlActor = my2DActor;
+ break;
+ case eCoincidentElems3D:
+ myFunctor.reset(new SMESH::Controls::CoincidentElements3D());
+ myControlActor = my3DActor;
+ break;
+ case eBareBorderFace:
+ myFunctor.reset(new SMESH::Controls::BareBorderFace());
+ myControlActor = my2DActor;
+ break;
+ case eOverConstrainedFace:
+ myFunctor.reset(new SMESH::Controls::OverConstrainedFace());
+ myControlActor = my2DActor;
+ break;
+ case eMultiConnection:
+ myFunctor.reset(new SMESH::Controls::MultiConnection());
+ myControlActor = my1DActor;
+ break;
+ case eMultiConnection2D:
+ myFunctor.reset(new SMESH::Controls::MultiConnection2D());
+ myControlActor = my2DActor;
+ break;
+ case eArea:
+ {
+ SMESH::Controls::Area* aControl = new SMESH::Controls::Area();
+ aControl->SetPrecision( myControlsPrecision );
+ myFunctor.reset( aControl );
+ myControlActor = my2DActor;
+ break;
+ }
+ case eTaper:
+ {
+ SMESH::Controls::Taper* aControl = new SMESH::Controls::Taper();
+ aControl->SetPrecision( myControlsPrecision );
+ myFunctor.reset( aControl );
+ myControlActor = my2DActor;
+ break;
+ }
+ case eAspectRatio:
+ {
+ SMESH::Controls::AspectRatio* aControl = new SMESH::Controls::AspectRatio();
+ aControl->SetPrecision( myControlsPrecision );
+ myFunctor.reset( aControl );
+ myControlActor = my2DActor;
+ break;
+ }
+ case eAspectRatio3D:
+ {
+ SMESH::Controls::AspectRatio3D* aControl = new SMESH::Controls::AspectRatio3D();
+ aControl->SetPrecision( myControlsPrecision );
+ myFunctor.reset( aControl );
+ myControlActor = my3DActor;
+ break;
+ }
+ case eVolume3D:
+ {
+ SMESH::Controls::Volume* aControl = new SMESH::Controls::Volume();
+ aControl->SetPrecision( myControlsPrecision );
+ myFunctor.reset( aControl );
+ myControlActor = my3DActor;
+ break;
+ }
+ case eMaxElementLength2D:
+ {
+ SMESH::Controls::MaxElementLength2D* aControl = new SMESH::Controls::MaxElementLength2D();
+ aControl->SetPrecision( myControlsPrecision );
+ myFunctor.reset( aControl );
+ myControlActor = my2DActor;
+ break;
+ }
+ case eMaxElementLength3D:
+ {
+ SMESH::Controls::MaxElementLength3D* aControl = new SMESH::Controls::MaxElementLength3D();
+ aControl->SetPrecision( myControlsPrecision );
+ myFunctor.reset( aControl );
+ myControlActor = my3DActor;
+ break;
+ }
+ case eBareBorderVolume:
+ {
+ myFunctor.reset(new SMESH::Controls::BareBorderVolume());
+ myControlActor = my3DActor;
+ break;
+ }
+ case eOverConstrainedVolume:
+ {
+ myFunctor.reset(new SMESH::Controls::OverConstrainedVolume());
+ myControlActor = my3DActor;
+ break;
+ }
+ case eMinimumAngle:
+ {
+ SMESH::Controls::MinimumAngle* aControl = new SMESH::Controls::MinimumAngle();
+ aControl->SetPrecision( myControlsPrecision );
+ myFunctor.reset( aControl );
+ myControlActor = my2DActor;
+ break;
+ }
+ case eWarping:
+ {
+ SMESH::Controls::Warping* aControl = new SMESH::Controls::Warping();
+ aControl->SetPrecision( myControlsPrecision );
+ myFunctor.reset( aControl );
+ myControlActor = my2DActor;
+ break;
+ }
+ case eSkew:
+ {
+ SMESH::Controls::Skew* aControl = new SMESH::Controls::Skew();
+ aControl->SetPrecision( myControlsPrecision );
+ myFunctor.reset( aControl );
+ myControlActor = my2DActor;
+ break;
+ }
+ default:
+ return;
+ }
+
+ vtkUnstructuredGrid* aGrid = myControlActor->GetUnstructuredGrid();
+ vtkIdType aNbCells = aGrid->GetNumberOfCells();
+ if(aNbCells){
+ myControlMode = theMode;
+ switch(myControlMode){
+ case eFreeNodes:
+ case eCoincidentNodes:
+ myNodeExtActor->SetExtControlMode(myFunctor);
+ break;
+ case eFreeEdges:
+ case eFreeBorders:
+ case eCoincidentElems1D:
+ my1DExtActor->SetExtControlMode(myFunctor);
+ break;
+ case eFreeFaces:
+ case eBareBorderFace:
+ case eOverConstrainedFace:
+ case eCoincidentElems2D:
+ my2DExtActor->SetExtControlMode(myFunctor);
+ break;
+ case eBareBorderVolume:
+ case eOverConstrainedVolume:
+ case eCoincidentElems3D:
+ my3DExtActor->SetExtControlMode(myFunctor);
+ break;
+ case eLength2D:
+ case eMultiConnection2D:
+ my1DExtActor->SetExtControlMode(myFunctor,myScalarBarActor,myLookupTable);
+ UpdateDistribution();
+ break;
+ default:
+ myControlActor->SetControlMode(myFunctor,myScalarBarActor,myLookupTable);
+ UpdateDistribution();
+ }
+ }
+
+ if(theCheckEntityMode) {
+ if(myControlActor == my1DActor) {
+ if (!myIsEntityModeCache){
+ myEntityModeCache = GetEntityMode();
+ myIsEntityModeCache=true;
+ }
+ SetEntityMode(eEdges);
+ }
+ else if(myControlActor == my2DActor) {
+ switch(myControlMode) {
+ case eLength2D:
+ case eFreeEdges:
+ case eFreeFaces:
+ case eMultiConnection2D:
+ if (!myIsEntityModeCache){
+ myEntityModeCache = GetEntityMode();
+ myIsEntityModeCache=true;
+ }
+ SetEntityMode(eFaces);
+ break;
+ default:
+ if (!myIsEntityModeCache){
+ myEntityModeCache = GetEntityMode();
+ myIsEntityModeCache=true;
+ }
+ SetEntityMode(eFaces);
+ }
+ }else if(myControlActor == my3DActor) {
+ if (!myIsEntityModeCache){
+ myEntityModeCache = GetEntityMode();
+ myIsEntityModeCache=true;
+ }
+ SetEntityMode(eVolumes);
+ }
+ }
+
+ }
+ else {
+ if(theCheckEntityMode){
+ myEntityMode = myEntityModeCache;
+ myIsEntityModeCache = false;
+ }
+ myFunctor.reset();
+ }
+
+ SetRepresentation(GetRepresentation());
+
+ myTimeStamp->Modified();
+ Modified();
+
+ lookupTable = static_cast<vtkLookupTable*>(myScalarBarActor->GetLookupTable());
+ double * range = lookupTable->GetRange();
+
+ if (isLogarithmic && range[0] > 1e-07 && range[1] > 1e-07)
+ lookupTable->SetScale(VTK_SCALE_LOG10);
+
+ Update();
+}
+
+
+void SMESH_ActorDef::AddToRender(vtkRenderer* theRenderer){
+
+ theRenderer->AddActor(myBaseActor);
+ theRenderer->AddActor(myNodeExtActor);
+ theRenderer->AddActor(my1DExtActor);
+
+ my3DActor ->AddToRender(theRenderer);
+ my3DExtActor->AddToRender(theRenderer);
+ my2DActor ->AddToRender(theRenderer);
+ my2DExtActor->AddToRender(theRenderer);
+ myNodeActor ->AddToRender(theRenderer);
+ my1DActor ->AddToRender(theRenderer);
+ my0DActor ->AddToRender(theRenderer);
+ myBallActor ->AddToRender(theRenderer);
+
+ theRenderer->AddActor(myHighlitableActor);
+
+ theRenderer->AddActor2D(myScalarBarActor);
+
+ // the superclass' method should be called at the end
+ // (in particular, for correct work of selection)
+ SALOME_Actor::AddToRender(theRenderer);
+}
+
+void SMESH_ActorDef::RemoveFromRender(vtkRenderer* theRenderer){
+ SALOME_Actor::RemoveFromRender(theRenderer);
+
+ theRenderer->RemoveActor(myBaseActor);
+
+ theRenderer->RemoveActor(myNodeExtActor);
+
+ theRenderer->RemoveActor(myHighlitableActor);
+
+ //theRenderer->RemoveActor(my0DExtActor);
+
+ theRenderer->RemoveActor(my1DExtActor);
+
+ my2DActor->RemoveFromRender(theRenderer);
+ my2DExtActor->RemoveFromRender(theRenderer);
+ my3DActor->RemoveFromRender(theRenderer);
+ my3DExtActor->RemoveFromRender(theRenderer);
+ myNodeActor->RemoveFromRender(theRenderer);
+ my0DActor->RemoveFromRender(theRenderer);
+ myBallActor->RemoveFromRender(theRenderer);
+ my1DActor->RemoveFromRender(theRenderer);
+
+ theRenderer->RemoveActor(myScalarBarActor);
+}
+
+
+bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj,
+ const char* theEntry,
+ const char* theName,
+ int theIsClear)
+{
+ Handle(SALOME_InteractiveObject) anIO = new SALOME_InteractiveObject(theEntry,"SMESH",theName);
+ setIO(anIO);
+ setName(theName);
+
+ myVisualObj = theVisualObj;
+ myVisualObj->Update(theIsClear);
+
+ SMESH_SVTKActor::SafeDownCast(myHighlightActor)->SetVisualObject(myVisualObj);
+ SMESH_SVTKActor::SafeDownCast(myPreHighlightActor)->SetVisualObject(myVisualObj);
+
+ myNodeActor->Init(myVisualObj,myImplicitBoolean);
+ myBaseActor->Init(myVisualObj,myImplicitBoolean);
+
+ myHighlitableActor->Init(myVisualObj,myImplicitBoolean);
+
+ myNodeExtActor->Init(myVisualObj,myImplicitBoolean);
+
+ my0DActor->Init(myVisualObj,myImplicitBoolean);
+ myBallActor->Init(myVisualObj,myImplicitBoolean);
+ //my0DExtActor->Init(myVisualObj,myImplicitBoolean);
+
+ my1DActor->Init(myVisualObj,myImplicitBoolean);
+ my1DExtActor->Init(myVisualObj,myImplicitBoolean);
+
+ my2DActor->Init(myVisualObj,myImplicitBoolean);
+ my2DExtActor->Init(myVisualObj,myImplicitBoolean);
+ my3DActor->Init(myVisualObj,myImplicitBoolean);
+ my3DExtActor->Init(myVisualObj,myImplicitBoolean);
+
+ my0DActor->GetMapper()->SetLookupTable(myLookupTable);
+ myBallActor->GetMapper()->SetLookupTable(myLookupTable);
+ //my0DExtActor->GetMapper()->SetLookupTable(myLookupTable);
+
+ my1DActor->GetMapper()->SetLookupTable(myLookupTable);
+ my1DExtActor->GetMapper()->SetLookupTable(myLookupTable);
+
+ my2DActor->GetMapper()->SetLookupTable(myLookupTable);
+ my2DExtActor->GetMapper()->SetLookupTable(myLookupTable);
+ my3DActor->GetMapper()->SetLookupTable(myLookupTable);
+ my3DExtActor->GetMapper()->SetLookupTable(myLookupTable);
+
+ double aFactor, aUnits;
+ my2DActor->GetPolygonOffsetParameters(aFactor,aUnits);
+ my2DActor->SetPolygonOffsetParameters(aFactor,aUnits*0.75);
+ my2DExtActor->SetPolygonOffsetParameters(aFactor,aUnits*0.5);
+ my3DActor->SetPolygonOffsetParameters(2*aFactor,aUnits);
+
+ SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr();
+ if( !mgr )
+ return false;
+
+ //SetIsShrunkable(theGrid->GetNumberOfCells() > 10);
+ SetIsShrunkable(true);
+
+ SetShrinkFactor( SMESH::GetFloat( "SMESH:shrink_coeff", 75 ) / 100. );
+
+ int aMode = mgr->integerValue( "SMESH", "display_mode" );
+ SetRepresentation(-1);
+
+ if(aMode == 0){
+ SetRepresentation(eEdge);
+ }else if(aMode == 1){
+ SetRepresentation(eSurface);
+ }else if(aMode == 2){
+ SetRepresentation(ePoint);
+ }
+
+ if(aMode == 3){
+ SetShrink();
+ }
+
+ if( dynamic_cast<SMESH_GroupObj*>( myVisualObj.get() ) )
+ SetIsDisplayNameActor( true );
+
+ int aMarkerType = mgr->integerValue( "SMESH", "type_of_marker", 1 ); // dot
+ int aMarkerScale = mgr->integerValue( "SMESH", "marker_scale", 9 ); // 5 pixels
+ SetMarkerStd( (VTK::MarkerType)aMarkerType, (VTK::MarkerScale)aMarkerScale );
+
+ myTimeStamp->Modified();
+ Modified();
+ return true;
+}
+
+
+double* SMESH_ActorDef::GetBounds(){
+ return myNodeActor->GetBounds();
+}
+
+
+vtkDataSet* SMESH_ActorDef::GetInput(){
+ return GetUnstructuredGrid();
+}
+
+
+void SMESH_ActorDef::SetTransform(VTKViewer_Transform* theTransform){
+ Superclass::SetTransform(theTransform);
+
+ myNodeActor->SetTransform(theTransform);
+ myBaseActor->SetTransform(theTransform);
+
+ myHighlitableActor->SetTransform(theTransform);
+
+ myNodeExtActor->SetTransform(theTransform);
+
+ my0DActor->SetTransform(theTransform);
+ myBallActor->SetTransform(theTransform);
+ //my0DExtActor->SetTransform(theTransform);
+
+ my1DActor->SetTransform(theTransform);
+ my1DExtActor->SetTransform(theTransform);
+
+ my2DActor->SetTransform(theTransform);
+ my2DExtActor->SetTransform(theTransform);
+ my3DActor->SetTransform(theTransform);
+ my3DExtActor->SetTransform(theTransform);
+
+ Modified();
+}
+
+
+void SMESH_ActorDef::SetMapper(vtkMapper* theMapper){
+ vtkLODActor::SetMapper(theMapper);
+}
+
+
+void SMESH_ActorDef::ShallowCopy(vtkProp *prop){
+ SALOME_Actor::ShallowCopy(prop);
+}
+
+
+vtkMapper* SMESH_ActorDef::GetMapper(){
+ return myPickableActor->GetMapper();
+}
+
+
+vtkUnstructuredGrid* SMESH_ActorDef::GetUnstructuredGrid(){
+ return myVisualObj->GetUnstructuredGrid();
+}
+
+
+bool SMESH_ActorDef::IsInfinitive(){
+ vtkDataSet *aDataSet = myPickableActor->GetUnstructuredGrid();
+ myIsInfinite = aDataSet->GetNumberOfCells() == 0 ||
+ ( aDataSet->GetNumberOfCells() == 1 &&
+ aDataSet->GetCell(0)->GetCellType() == VTK_VERTEX );
+ return SALOME_Actor::IsInfinitive();
+}
+
+
+void SMESH_ActorDef::SetIsShrunkable(bool theShrunkable){
+ if ( myIsShrinkable == theShrunkable )
+ return;
+ myIsShrinkable = theShrunkable;
+ Modified();
+}
+
+double SMESH_ActorDef::GetShrinkFactor(){
+ return myBaseActor->GetShrinkFactor();
+}
+
+void SMESH_ActorDef::SetShrinkFactor(double theValue){
+ myBaseActor->SetShrinkFactor(theValue);
+
+ my1DActor->SetShrinkFactor(theValue);
+ my1DExtActor->SetShrinkFactor(theValue);
+
+ my2DActor->SetShrinkFactor(theValue);
+ my2DExtActor->SetShrinkFactor(theValue);
+ my3DActor->SetShrinkFactor(theValue);
+ my3DExtActor->SetShrinkFactor(theValue);
+ my3DExtActor->SetShrinkFactor(theValue);
+ myHighlitableActor->SetShrinkFactor(theValue);
+
+ Modified();
+}
+
+void SMESH_ActorDef::SetShrink(){
+ if(!myIsShrinkable) return;
+
+ myBaseActor->SetShrink();
+
+ my1DActor->SetShrink();
+ my1DExtActor->SetShrink();
+
+ my2DActor->SetShrink();
+ my2DExtActor->SetShrink();
+ my3DActor->SetShrink();
+ my3DExtActor->SetShrink();
+ myHighlitableActor->SetShrink();
+
+ myIsShrunk = true;
+ Modified();
+}
+
+void SMESH_ActorDef::UnShrink(){
+ if(!myIsShrunk) return;
+
+ myBaseActor->UnShrink();
+
+ my1DActor->UnShrink();
+ my1DExtActor->UnShrink();
+
+ my2DActor->UnShrink();
+ my2DExtActor->UnShrink();
+ my3DActor->UnShrink();
+ my3DExtActor->UnShrink();
+ myHighlitableActor->UnShrink();
+
+ myIsShrunk = false;
+ Modified();
+}
+
+
+int SMESH_ActorDef::GetNodeObjId(int theVtkID){
+ return myPickableActor->GetNodeObjId(theVtkID);
+}
+
+double* SMESH_ActorDef::GetNodeCoord(int theObjID){
+ return myPickableActor->GetNodeCoord(theObjID);
+}
+
+
+int SMESH_ActorDef::GetElemObjId(int theVtkID){
+ return myPickableActor->GetElemObjId(theVtkID);
+}
+
+vtkCell* SMESH_ActorDef::GetElemCell(int theObjID){
+ return myPickableActor->GetElemCell(theObjID);
+}
+
+
+void SMESH_ActorDef::SetVisibility(int theMode){
+ SetVisibility(theMode,true);
+}
+
+
+void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){
+ SALOME_Actor::SetVisibility(theMode);
+
+ myNodeActor->VisibilityOff();
+ myBaseActor->VisibilityOff();
+
+ myNodeExtActor->VisibilityOff();
+
+ my0DActor->VisibilityOff();
+ myBallActor->VisibilityOff();
+ //my0DExtActor->VisibilityOff();
+
+ my1DActor->VisibilityOff();
+ my1DExtActor->VisibilityOff();
+
+ my2DActor->VisibilityOff();
+ my2DExtActor->VisibilityOff();
+ my3DActor->VisibilityOff();
+ my3DExtActor->VisibilityOff();
+
+ myScalarBarActor->VisibilityOff();
+
+ if(GetVisibility()){
+ if(theIsUpdateRepersentation)
+ SetRepresentation(GetRepresentation());
+
+ if(myControlMode != eNone){
+ switch(myControlMode){
+ case eFreeNodes:
+ case eCoincidentNodes:
+ myNodeExtActor->VisibilityOn();
+ break;
+ case eFreeEdges:
+ case eFreeBorders:
+ case eCoincidentElems1D:
+ my1DExtActor->VisibilityOn();
+ break;
+ case eFreeFaces:
+ case eBareBorderFace:
+ case eOverConstrainedFace:
+ case eCoincidentElems2D:
+ my2DExtActor->VisibilityOn();
+ break;
+ case eBareBorderVolume:
+ case eOverConstrainedVolume:
+ case eCoincidentElems3D:
+ my3DExtActor->VisibilityOn();
+ break;
+ case eLength2D:
+ case eMultiConnection2D:
+ my1DExtActor->VisibilityOn();
+ default:
+ if(myControlActor->GetUnstructuredGrid()->GetNumberOfCells())
+ myScalarBarActor->VisibilityOn();
+ }
+ }
+
+ if(myRepresentation != ePoint)
+ myPickableActor->VisibilityOn();
+ else {
+ myNodeActor->VisibilityOn();
+ }
+
+ if(myEntityMode & e0DElements && GetRepresentation() != ePoint ){
+ my0DActor->VisibilityOn();
+ }
+ if(myEntityMode & eBallElem && GetRepresentation() != ePoint ){
+ myBallActor->VisibilityOn();
+ }
+
+ if(myEntityMode & eEdges && GetRepresentation() != ePoint){
+ my1DActor->VisibilityOn();
+ }
+
+ if(myEntityMode & eFaces && GetRepresentation() != ePoint){
+ my2DActor->VisibilityOn();
+ }