X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FOBJECT%2FSMESH_Actor.cxx;h=ee5c77ac222fcedac398d4a46e4a3342dbbfd5c8;hp=4daba11f8575cdb82ec8ed052654fa09dfb902c5;hb=bd8f1aee7c78f7d2eb82bd4fec5e08c9e3d280ce;hpb=bd4e115a78b52e3fbc016e5e30bb0e19b2a9e7d6 diff --git a/src/OBJECT/SMESH_Actor.cxx b/src/OBJECT/SMESH_Actor.cxx index 4daba11f8..ee5c77ac2 100644 --- a/src/OBJECT/SMESH_Actor.cxx +++ b/src/OBJECT/SMESH_Actor.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2013 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 @@ -24,7 +24,7 @@ // File : SMESH_Actor.cxx // Author : Nicolas REJNERI // Module : SMESH -// + #include "SMESH_ActorDef.h" #include "SMESH_ActorUtils.h" #include "SMESH_DeviceActor.h" @@ -37,6 +37,7 @@ #include "VTKViewer_ExtractUnstructuredGrid.h" #include "VTKViewer_FramedTextActor.h" #include "SALOME_InteractiveObject.hxx" +#include "SMESH_SVTKActor.h" #include "SUIT_Session.h" #include "SUIT_ResourceMgr.h" @@ -98,8 +99,8 @@ SMESH_ActorDef* SMESH_ActorDef::New(){ } -SMESH_Actor* SMESH_Actor::New(TVisualObjPtr theVisualObj, - const char* theEntry, +SMESH_Actor* SMESH_Actor::New(TVisualObjPtr theVisualObj, + const char* theEntry, const char* theName, int theIsClear) { @@ -119,7 +120,7 @@ SMESH_Actor* SMESH_Actor::New(TVisualObjPtr theVisualObj, SMESH_ActorDef::SMESH_ActorDef() { - if(MYDEBUG) MESSAGE("SMESH_ActorDef - "<Delete(); // vtkSmartPointer! + myHighlightActor->Initialize(); + + myPreHighlightActor = SMESH_SVTKActor::New(); + myPreHighlightActor->Delete(); + myPreHighlightActor->Initialize(); + myIsShrinkable = false; myIsShrunk = false; @@ -138,16 +147,53 @@ SMESH_ActorDef::SMESH_ActorDef() if ( mgr && mgr->booleanValue( "SMESH", "use_precision", false ) ) myControlsPrecision = mgr->integerValue( "SMESH", "controls_precision", -1); - vtkFloatingPointType aElem0DSize = SMESH::GetFloat("SMESH:elem0d_size",5); - vtkFloatingPointType aBallElemSize = SMESH::GetFloat("SMESH:ball_elem_size",10); - vtkFloatingPointType aLineWidth = SMESH::GetFloat("SMESH:element_width",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 //----------------------------------------- - vtkFloatingPointType anRGB[3] = {1,1,1}; + double anRGB[3] = {1,1,1}; mySurfaceProp = vtkProperty::New(); QColor ffc, bfc; int delta; @@ -159,10 +205,20 @@ SMESH_ActorDef::SMESH_ActorDef() 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); @@ -201,8 +257,9 @@ SMESH_ActorDef::SMESH_ActorDef() my3DActor->SetStoreGemetryMapping(true); my3DActor->SetUserMatrix(aMatrix); my3DActor->PickableOff(); - my3DActor->SetProperty(mySurfaceProp); - my3DActor->SetBackfaceProperty(myBackSurfaceProp); + 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(); @@ -224,11 +281,19 @@ SMESH_ActorDef::SMESH_ActorDef() 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(my2DExtProp); - my3DExtActor->SetBackfaceProperty(my2DExtProp); + my3DExtActor->SetProperty(my3DExtProp); + my3DExtActor->SetBackfaceProperty(my3DExtProp); my3DExtActor->SetRepresentation(SMESH_DeviceActor::eSurface); my3DExtActor->SetCoincident3DAllowed(true); aFilter = my3DExtActor->GetExtractUnstructuredGrid(); @@ -262,6 +327,7 @@ SMESH_ActorDef::SMESH_ActorDef() 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(); @@ -273,7 +339,7 @@ SMESH_ActorDef::SMESH_ActorDef() my1DProp->DeepCopy(myEdgeProp); my1DProp->SetLineWidth(aLineWidth + aLineWidthInc); my1DProp->SetPointSize(aElem0DSize); - + my1DExtProp = vtkProperty::New(); my1DExtProp->DeepCopy(myEdgeProp); anRGB[0] = 1 - anRGB[0]; @@ -307,6 +373,7 @@ SMESH_ActorDef::SMESH_ActorDef() 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); @@ -314,11 +381,11 @@ SMESH_ActorDef::SMESH_ActorDef() //aFilter->SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::ePoints); 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, 255, 0 ) ); + 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); @@ -326,15 +393,14 @@ SMESH_ActorDef::SMESH_ActorDef() 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); aFilter = myBallActor->GetExtractUnstructuredGrid(); - //aFilter->SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::ePoints); aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding); - aFilter->RegisterCellsWithType(VTK_VERTEX); aFilter->RegisterCellsWithType(VTK_POLY_VERTEX); - + //my0DExtProp = vtkProperty::New(); //my0DExtProp->DeepCopy(my0DProp); //anRGB[0] = 1 - anRGB[0]; @@ -368,11 +434,12 @@ SMESH_ActorDef::SMESH_ActorDef() 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]; @@ -399,7 +466,7 @@ SMESH_ActorDef::SMESH_ActorDef() myBaseActor->SetStoreGemetryMapping(true); myBaseActor->GetProperty()->SetOpacity(0.0); myPickableActor = myBaseActor; - + myHighlightProp = vtkProperty::New(); myHighlightProp->SetAmbient(1.0); myHighlightProp->SetDiffuse(0.0); @@ -410,14 +477,18 @@ SMESH_ActorDef::SMESH_ActorDef() myHighlightProp->SetLineWidth(aLineWidth); myHighlightProp->SetRepresentation(1); + myBallHighlightProp = vtkProperty::New(); + myBallHighlightProp->DeepCopy(myHighlightProp); + myBallHighlightProp->SetPointSize(aBallElemSize); + + 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->SetPointSize(aElem0DSize); // ?? - myOutLineProp->SetLineWidth(aLineWidth); + myOutLineProp->SetLineWidth(aOutlineWidth); myOutLineProp->SetRepresentation(1); myPreselectProp = vtkProperty::New(); @@ -430,6 +501,10 @@ SMESH_ActorDef::SMESH_ActorDef() myPreselectProp->SetLineWidth(aLineWidth); myPreselectProp->SetRepresentation(1); + myBallPreselectProp = vtkProperty::New(); + myBallPreselectProp->DeepCopy(myPreselectProp); + myBallPreselectProp->SetPointSize(aBallElemSize); + myHighlitableActor = SMESH_DeviceActor::New(); myHighlitableActor->SetUserMatrix(aMatrix); myHighlitableActor->PickableOff(); @@ -447,7 +522,7 @@ SMESH_ActorDef::SMESH_ActorDef() //Definition of myScalarBarActor //------------------------------ myLookupTable = vtkLookupTable::New(); - //Fix for Bug PAL5195 - SMESH764: + //Fix for Bug PAL5195 - SMESH764: //Controls - Aspect Ratio: incorrect colors of the best and worst values myLookupTable->SetHueRange(0.667,0.0); @@ -466,11 +541,11 @@ SMESH_ActorDef::SMESH_ActorDef() myEntityMode = eAllEntity; myEntityModeCache = eAllEntity; - + // Clipping planes myImplicitBoolean = vtkImplicitBoolean::New(); myImplicitBoolean->SetOperationTypeToIntersection(); - + //Quadratic 2D elements representation //----------------------------------------------------------------------------- int aQuadratic2DMode = mgr->integerValue( "SMESH", "quadratic_mode", 0); @@ -484,13 +559,13 @@ SMESH_ActorDef::SMESH_ActorDef() 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", "fill_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) ); + 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]); @@ -499,6 +574,8 @@ SMESH_ActorDef::SMESH_ActorDef() my2dHistogram = 0; #endif + SetBallSize(aBallElemSize); + Set0DSize(aElem0DSize); } @@ -506,55 +583,64 @@ SMESH_ActorDef::~SMESH_ActorDef() { if(MYDEBUG) MESSAGE("~SMESH_ActorDef - "<Delete(); myScalarBarActor->Delete(); myLookupTable->Delete(); mySurfaceProp->Delete(); myBackSurfaceProp->Delete(); - myOutLineProp->Delete(); - + myNormalVProp->Delete(); + myReversedVProp->Delete(); myEdgeProp->Delete(); + myNodeProp->Delete(); + + myNodeActor->Delete(); + myBaseActor->Delete(); + //myPickableActor->Delete(); myPickableActor == myBaseActor + myHighlightProp->Delete(); + myOutLineProp->Delete(); myPreselectProp->Delete(); - myNodeProp->Delete(); - myNodeExtProp->Delete(); - - my0DProp->Delete(); - my0DActor->Delete(); - myBallActor->Delete(); + myBallHighlightProp->Delete(); + myBallPreselectProp->Delete(); - //my0DExtProp->Delete(); - //my0DExtActor->Delete(); - - my1DProp->Delete(); - my1DActor->Delete(); - - my1DExtProp->Delete(); - my1DExtActor->Delete(); + myHighlitableActor->Delete(); - my2DActor->Delete(); my2DExtProp->Delete(); + my3DExtProp->Delete(); + my2DActor->Delete(); my2DExtActor->Delete(); my3DActor->Delete(); my3DExtActor->Delete(); + // myControlActor->Delete(); myControlActor == my2DActor - myNodeActor->Delete(); - myBaseActor->Delete(); + myNodeExtProp->Delete(); + myNodeExtActor->Delete(); - myNodeExtActor->Delete(); - myHighlitableActor->Delete(); + my1DProp->Delete(); + my1DActor->Delete(); + my1DExtProp->Delete(); + my1DExtActor->Delete(); + + my0DProp->Delete(); + my0DActor->Delete(); + myBallProp->Delete(); + myBallActor->Delete(); + //my0DExtProp->Delete(); + //my0DExtActor->Delete(); myImplicitBoolean->Delete(); - myTimeStamp->Delete(); +#ifndef DISABLE_PLOT2DVIEWER + if(my2dHistogram) { + SMESH::ProcessIn2DViewers(this,SMESH::RemoveFrom2dViewer); + delete my2dHistogram; + } +#endif } void SMESH_ActorDef::Delete() @@ -570,7 +656,7 @@ void SMESH_ActorDef::Delete() } void SMESH_ActorDef::SetPointsLabeled( bool theIsPointsLabeled ) -{ +{ if(myNodeActor) { myNodeActor->SetPointsLabeled(theIsPointsLabeled); SetRepresentation(GetRepresentation()); @@ -578,6 +664,48 @@ void SMESH_ActorDef::SetPointsLabeled( bool theIsPointsLabeled ) } } +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 ); + SetRepresentation( GetRepresentation() ); + myTimeStamp->Modified(); + } + 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(); } @@ -595,10 +723,10 @@ void SMESH_ActorDef::SetCellsLabeled(bool theIsCellsLabeled) if(my0DActor) my0DActor->SetCellsLabeled(theIsCellsLabeled); - + if(myBallActor) myBallActor->SetCellsLabeled(theIsCellsLabeled); - + myTimeStamp->Modified(); } @@ -639,24 +767,24 @@ bool SMESH_ActorDef::GetFacesOriented() return myIsFacesOriented; } -void SMESH_ActorDef::SetFacesOrientationColor(vtkFloatingPointType theColor[3]) +void SMESH_ActorDef::SetFacesOrientationColor(double r,double g,double b) { - my2DActor->SetFacesOrientationColor( theColor ); - my3DActor->SetFacesOrientationColor( theColor ); + my2DActor->SetFacesOrientationColor( r, g, b ); + my3DActor->SetFacesOrientationColor( r, g, b ); } -void SMESH_ActorDef::GetFacesOrientationColor(vtkFloatingPointType theColor[3]) +void SMESH_ActorDef::GetFacesOrientationColor(double& r,double& g,double& b) { - my3DActor->GetFacesOrientationColor( theColor ); + my3DActor->GetFacesOrientationColor( r, g, b ); } -void SMESH_ActorDef::SetFacesOrientationScale(vtkFloatingPointType theScale) +void SMESH_ActorDef::SetFacesOrientationScale(double theScale) { my2DActor->SetFacesOrientationScale( theScale ); my3DActor->SetFacesOrientationScale( theScale ); } -vtkFloatingPointType SMESH_ActorDef::GetFacesOrientationScale() +double SMESH_ActorDef::GetFacesOrientationScale() { return my3DActor->GetFacesOrientationScale(); } @@ -673,7 +801,7 @@ bool SMESH_ActorDef::GetFacesOrientation3DVectors() } -void +void SMESH_ActorDef:: SetControlMode(eControl theMode) { @@ -681,12 +809,16 @@ SetControlMode(eControl theMode) } -void +void SMESH_ActorDef:: SetControlMode(eControl theMode, bool theCheckEntityMode) { - SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr(); + vtkLookupTable* lookupTable = static_cast(myScalarBarActor->GetLookupTable()); + bool isLogarithmic = lookupTable->GetScale() == VTK_SCALE_LOG10; + lookupTable->SetScale(VTK_SCALE_LINEAR); + + SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr(); if( !mgr ) return; @@ -908,7 +1040,7 @@ SetControlMode(eControl theMode, if (!myIsEntityModeCache){ myEntityModeCache = GetEntityMode(); myIsEntityModeCache=true; - } + } SetEntityMode(eEdges); } else if(myControlActor == my2DActor) { @@ -920,7 +1052,7 @@ SetControlMode(eControl theMode, if (!myIsEntityModeCache){ myEntityModeCache = GetEntityMode(); myIsEntityModeCache=true; - } + } SetEntityMode(eFaces); break; default: @@ -934,7 +1066,7 @@ SetControlMode(eControl theMode, if (!myIsEntityModeCache){ myEntityModeCache = GetEntityMode(); myIsEntityModeCache=true; - } + } SetEntityMode(eVolumes); } } @@ -952,12 +1084,22 @@ SetControlMode(eControl theMode, myTimeStamp->Modified(); Modified(); + + lookupTable = static_cast(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); + + //myHighlightActor->AddToRender(theRenderer); + + theRenderer->AddActor(myBaseActor); theRenderer->AddActor(myNodeExtActor); theRenderer->AddActor(my1DExtActor); @@ -972,7 +1114,7 @@ void SMESH_ActorDef::AddToRender(vtkRenderer* theRenderer){ //theRenderer->AddActor(my0DExtActor); theRenderer->AddActor(myHighlitableActor); - + theRenderer->AddActor2D(myScalarBarActor); // the superclass' method should be called at the end @@ -1006,8 +1148,8 @@ void SMESH_ActorDef::RemoveFromRender(vtkRenderer* theRenderer){ } -bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj, - const char* theEntry, +bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj, + const char* theEntry, const char* theName, int theIsClear) { @@ -1024,23 +1166,23 @@ bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj, 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); @@ -1049,10 +1191,11 @@ bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj, my3DActor->GetMapper()->SetLookupTable(myLookupTable); my3DExtActor->GetMapper()->SetLookupTable(myLookupTable); - vtkFloatingPointType aFactor, aUnits; + 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 ) @@ -1065,7 +1208,7 @@ bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj, int aMode = mgr->integerValue( "SMESH", "display_mode" ); SetRepresentation(-1); - + if(aMode == 0){ SetRepresentation(eEdge); }else if(aMode == 1){ @@ -1073,7 +1216,7 @@ bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj, }else if(aMode == 2){ SetRepresentation(ePoint); } - + if(aMode == 3){ SetShrink(); } @@ -1091,7 +1234,7 @@ bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj, } -vtkFloatingPointType* SMESH_ActorDef::GetBounds(){ +double* SMESH_ActorDef::GetBounds(){ return myNodeActor->GetBounds(); } @@ -1106,7 +1249,7 @@ void SMESH_ActorDef::SetTransform(VTKViewer_Transform* theTransform){ myNodeActor->SetTransform(theTransform); myBaseActor->SetTransform(theTransform); - + myHighlitableActor->SetTransform(theTransform); myNodeExtActor->SetTransform(theTransform); @@ -1142,16 +1285,15 @@ vtkMapper* SMESH_ActorDef::GetMapper(){ } -vtkUnstructuredGrid* SMESH_ActorDef::GetUnstructuredGrid(){ +vtkUnstructuredGrid* SMESH_ActorDef::GetUnstructuredGrid(){ return myVisualObj->GetUnstructuredGrid(); } bool SMESH_ActorDef::IsInfinitive(){ vtkDataSet *aDataSet = myPickableActor->GetUnstructuredGrid(); - aDataSet->Update(); myIsInfinite = aDataSet->GetNumberOfCells() == 0 || - ( aDataSet->GetNumberOfCells() == 1 && + ( aDataSet->GetNumberOfCells() == 1 && aDataSet->GetCell(0)->GetCellType() == VTK_VERTEX ); return SALOME_Actor::IsInfinitive(); } @@ -1164,11 +1306,11 @@ void SMESH_ActorDef::SetIsShrunkable(bool theShrunkable){ Modified(); } -vtkFloatingPointType SMESH_ActorDef::GetShrinkFactor(){ +double SMESH_ActorDef::GetShrinkFactor(){ return myBaseActor->GetShrinkFactor(); } -void SMESH_ActorDef::SetShrinkFactor(vtkFloatingPointType theValue){ +void SMESH_ActorDef::SetShrinkFactor(double theValue){ myBaseActor->SetShrinkFactor(theValue); my1DActor->SetShrinkFactor(theValue); @@ -1225,7 +1367,7 @@ int SMESH_ActorDef::GetNodeObjId(int theVtkID){ return myPickableActor->GetNodeObjId(theVtkID); } -vtkFloatingPointType* SMESH_ActorDef::GetNodeCoord(int theObjID){ +double* SMESH_ActorDef::GetNodeCoord(int theObjID){ return myPickableActor->GetNodeCoord(theObjID); } @@ -1249,7 +1391,7 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){ myNodeActor->VisibilityOff(); myBaseActor->VisibilityOff(); - + myNodeExtActor->VisibilityOff(); my0DActor->VisibilityOff(); @@ -1258,18 +1400,18 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){ 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: @@ -1307,44 +1449,44 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){ myNodeActor->VisibilityOn(); } - if(myEntityMode & e0DElements){ + if(myEntityMode & e0DElements && GetRepresentation() != ePoint ){ my0DActor->VisibilityOn(); } - if(myEntityMode & eBallElem){ + if(myEntityMode & eBallElem && GetRepresentation() != ePoint ){ myBallActor->VisibilityOn(); } if(myEntityMode & eEdges && GetRepresentation() != ePoint){ my1DActor->VisibilityOn(); } - + if(myEntityMode & eFaces && GetRepresentation() != ePoint){ my2DActor->VisibilityOn(); } - + if(myEntityMode & eVolumes && GetRepresentation() != ePoint){ my3DActor->VisibilityOn(); } - - if(myNodeActor->GetPointsLabeled()){ + + if(myNodeActor->GetPointsLabeled()){ myNodeActor->VisibilityOn(); } if(my0DActor) my0DActor->UpdateLabels(); - + if(myBallActor) myBallActor->UpdateLabels(); - + if(my1DActor) my1DActor->UpdateLabels(); - + if(my2DActor) my2DActor->UpdateLabels(); - + if(my3DActor) - my3DActor->UpdateLabels(); - } + my3DActor->UpdateLabels(); + } #ifndef DISABLE_PLOT2DVIEWER else SMESH::ProcessIn2DViewers(this,SMESH::RemoveFrom2dViewer); @@ -1465,7 +1607,7 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode) //#ifdef VTK_HAVE_POLYHEDRON aFilter->RegisterCellsWithType(VTK_POLYHEDRON); //#endif - + aHightFilter->RegisterCellsWithType(VTK_TETRA); aHightFilter->RegisterCellsWithType(VTK_VOXEL); aHightFilter->RegisterCellsWithType(VTK_HEXAHEDRON); @@ -1488,10 +1630,12 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode) } void SMESH_ActorDef::SetRepresentation (int theMode) -{ +{ int aNbEdges = myVisualObj->GetNbEntities(SMDSAbs_Edge); int aNbFaces = myVisualObj->GetNbEntities(SMDSAbs_Face); int aNbVolumes = myVisualObj->GetNbEntities(SMDSAbs_Volume); + int aNb0Ds = myVisualObj->GetNbEntities(SMDSAbs_0DElement); + int aNbBalls = myVisualObj->GetNbEntities(SMDSAbs_Ball); if (theMode < 0) { myRepresentation = eSurface; @@ -1503,12 +1647,12 @@ void SMESH_ActorDef::SetRepresentation (int theMode) } else { switch (theMode) { case eEdge: - if (!aNbFaces && !aNbVolumes && !aNbEdges) return; + if (!aNbFaces && !aNbVolumes && !aNbEdges && !aNb0Ds && !aNbBalls) return; break; case eSurface: - if (!aNbFaces && !aNbVolumes) return; + if (!aNbFaces && !aNbVolumes && !aNb0Ds && !aNbBalls) return; break; - } + } myRepresentation = theMode; } @@ -1521,13 +1665,14 @@ void SMESH_ActorDef::SetRepresentation (int theMode) myIsShrunk = true; } else { SetShrink(); - } + } } myPickableActor = myBaseActor; myNodeActor->SetVisibility(false); myNodeExtActor->SetVisibility(false); vtkProperty *aProp = NULL, *aBackProp = NULL; + vtkProperty *aPropVN = NULL, *aPropVR = NULL; SMESH_DeviceActor::EReperesent aReperesent = SMESH_DeviceActor::EReperesent(-1); SMESH_Actor::EQuadratic2DRepresentation aQuadraticMode = GetQuadratic2DRepresentation(); switch (myRepresentation) { @@ -1535,16 +1680,18 @@ void SMESH_ActorDef::SetRepresentation (int theMode) myPickableActor = myNodeActor; myNodeActor->SetVisibility(true); aQuadraticMode = SMESH_Actor::eLines; - aProp = aBackProp = myNodeProp; + aProp = aBackProp = aPropVN = aPropVR = myNodeProp; aReperesent = SMESH_DeviceActor::ePoint; break; case eEdge: - aProp = aBackProp = myEdgeProp; + aProp = aBackProp = aPropVN = aPropVR = myEdgeProp; aReperesent = SMESH_DeviceActor::eInsideframe; break; case eSurface: aProp = mySurfaceProp; aBackProp = myBackSurfaceProp; + aPropVN = myNormalVProp; + aPropVR = myReversedVProp; aReperesent = SMESH_DeviceActor::eSurface; break; } @@ -1559,9 +1706,9 @@ void SMESH_ActorDef::SetRepresentation (int theMode) my2DActor->SetQuadraticArcMode(true); my2DExtActor->SetRepresentation(aReperesent); - - my3DActor->SetProperty(aProp); - my3DActor->SetBackfaceProperty(aBackProp); + + my3DActor->SetProperty(aPropVN); + my3DActor->SetBackfaceProperty(aPropVR); my3DActor->SetRepresentation(aReperesent); //my0DExtActor->SetVisibility(false); @@ -1584,7 +1731,7 @@ void SMESH_ActorDef::SetRepresentation (int theMode) aReperesent = SMESH_DeviceActor::eInsideframe; break; } - + if(aQuadraticMode == SMESH_Actor::eLines) my1DActor->SetQuadraticArcMode(false); else if(aQuadraticMode == SMESH_Actor::eArcs) @@ -1616,7 +1763,7 @@ void SMESH_ActorDef::SetPointRepresentation(bool theIsPointsVisible){ SetRepresentation(GetRepresentation()); } -bool SMESH_ActorDef::GetPointRepresentation(){ +bool SMESH_ActorDef::GetPointRepresentation(){ return myIsPointsVisible || myNodeActor->GetPointsLabeled(); } @@ -1633,10 +1780,13 @@ void SMESH_ActorDef::UpdateHighlight(){ { if(myIsHighlighted) { myHighlitableActor->SetProperty(myHighlightProp); + myBallActor->SetProperty(myBallHighlightProp); }else if(myIsPreselected){ myHighlitableActor->SetProperty(myPreselectProp); + myBallActor->SetProperty(myBallPreselectProp); } else if(anIsVisible){ - (myRepresentation == eSurface) ? + myBallActor->SetProperty(myBallProp); + (myRepresentation == eSurface) ? myHighlitableActor->SetProperty(myOutLineProp) : myHighlitableActor->SetProperty(myEdgeProp); } if(GetUnstructuredGrid()->GetNumberOfCells()) { @@ -1673,10 +1823,10 @@ void SMESH_ActorDef::highlight(bool theHighlight){ } -void SMESH_ActorDef::SetPreSelected(bool thePreselect){ +void SMESH_ActorDef::SetPreSelected(bool thePreselect){ if ( myIsPreselected == thePreselect ) return; - myIsPreselected = thePreselect; + myIsPreselected = thePreselect; UpdateHighlight(); } @@ -1730,30 +1880,30 @@ void SMESH_ActorDef::Update(){ if(my0DActor) my0DActor->UpdateLabels(); - + if(myBallActor) myBallActor->UpdateLabels(); - + if(my1DActor) my1DActor->UpdateLabels(); - + if(my2DActor) my2DActor->UpdateLabels(); if(my3DActor) my3DActor->UpdateLabels(); - + if(myIsFacesOriented){ SetFacesOriented(myIsFacesOriented); } - + if(myVisualObj->GetEntitiesFlag()) { myEntityMode |= myVisualObj->GetEntitiesState(); } - + SetEntityMode(GetEntityMode()); SetVisibility(GetVisibility()); - + myTimeStamp->Modified(); Modified(); } @@ -1766,49 +1916,71 @@ void SMESH_ActorDef::ReleaseGraphicsResources(vtkWindow *renWin){ } -static void GetColor(vtkProperty *theProperty, vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){ - vtkFloatingPointType* aColor = theProperty->GetColor(); +static void GetColor(vtkProperty *theProperty, double& r,double& g,double& b){ + double* aColor = theProperty->GetColor(); r = aColor[0]; g = aColor[1]; b = aColor[2]; } -void SMESH_ActorDef::SetOpacity(vtkFloatingPointType theValue){ +void SMESH_ActorDef::SetOpacity(double theValue){ mySurfaceProp->SetOpacity(theValue); myBackSurfaceProp->SetOpacity(theValue); + myNormalVProp->SetOpacity(theValue); + myReversedVProp->SetOpacity(theValue); myEdgeProp->SetOpacity(theValue); + myOutLineProp->SetOpacity(theValue); myNodeProp->SetOpacity(theValue); my1DProp->SetOpacity(theValue); + my0DProp->SetOpacity(theValue); + myBallProp->SetOpacity(theValue); } -vtkFloatingPointType SMESH_ActorDef::GetOpacity(){ +double SMESH_ActorDef::GetOpacity(){ return mySurfaceProp->GetOpacity(); } -void SMESH_ActorDef::SetSufaceColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b, int delta){ +void SMESH_ActorDef::SetSufaceColor(double r,double g,double b, int delta){ mySurfaceProp->SetColor(r,g,b); + my2DExtProp->SetColor(1.0-r,1.0-g,1.0-b); if( SMESH_GroupObj* aGroupObj = dynamic_cast( myVisualObj.get() ) ) - if( aGroupObj->GetElementType() == SMDSAbs_Face || - aGroupObj->GetElementType() == SMDSAbs_Volume ) + if( aGroupObj->GetElementType() == SMDSAbs_Face ) myNameActor->SetBackgroundColor(r,g,b); - + myDeltaBrightness = delta; QColor bfc = Qtx::mainColorToSecondary(QColor(int(r*255),int(g*255),int(b*255)), delta); myBackSurfaceProp->SetColor( bfc.red() / 255. , bfc.green() / 255. , bfc.blue() / 255. ); Modified(); } -void SMESH_ActorDef::GetSufaceColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b, int& delta){ +void SMESH_ActorDef::GetSufaceColor(double& r,double& g,double& b, int& delta){ ::GetColor(mySurfaceProp,r,g,b); - my2DExtProp->SetColor(1.0-r,1.0-g,1.0-b); delta = myDeltaBrightness; } -void SMESH_ActorDef::SetEdgeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){ +void SMESH_ActorDef::SetVolumeColor(double r,double g,double b, int delta){ + myNormalVProp->SetColor(r,g,b); + my3DExtProp->SetColor(1.0-r,1.0-g,1.0-b); + if( SMESH_GroupObj* aGroupObj = dynamic_cast( myVisualObj.get() ) ) + if( aGroupObj->GetElementType() == SMDSAbs_Volume ) + myNameActor->SetBackgroundColor(r,g,b); + + myDeltaVBrightness = delta; + QColor bfc = Qtx::mainColorToSecondary(QColor(int(r*255),int(g*255),int(b*255)), delta); + myReversedVProp->SetColor( bfc.red() / 255. , bfc.green() / 255. , bfc.blue() / 255. ); + Modified(); +} + +void SMESH_ActorDef::GetVolumeColor(double& r,double& g,double& b, int& delta){ + ::GetColor(myNormalVProp,r,g,b); + delta = myDeltaVBrightness; +} + +void SMESH_ActorDef::SetEdgeColor(double r,double g,double b){ myEdgeProp->SetColor(r,g,b); my1DProp->SetColor(r,g,b); my1DExtProp->SetColor(1.0-r,1.0-g,1.0-b); @@ -1818,21 +1990,21 @@ void SMESH_ActorDef::SetEdgeColor(vtkFloatingPointType r,vtkFloatingPointType g, Modified(); } -void SMESH_ActorDef::GetEdgeColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){ +void SMESH_ActorDef::GetEdgeColor(double& r,double& g,double& b){ ::GetColor(myEdgeProp,r,g,b); } -void SMESH_ActorDef::SetOutlineColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){ +void SMESH_ActorDef::SetOutlineColor(double r,double g,double b){ myOutLineProp->SetColor(r,g,b); Modified(); } -void SMESH_ActorDef::GetOutlineColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){ +void SMESH_ActorDef::GetOutlineColor(double& r,double& g,double& b){ ::GetColor(myOutLineProp,r,g,b); } -void SMESH_ActorDef::SetNodeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){ +void SMESH_ActorDef::SetNodeColor(double r,double g,double b){ myNodeProp->SetColor(r,g,b); myNodeExtProp->SetColor(1.0-r,1.0-g,1.0-b); if( SMESH_GroupObj* aGroupObj = dynamic_cast( myVisualObj.get() ) ) @@ -1841,11 +2013,11 @@ void SMESH_ActorDef::SetNodeColor(vtkFloatingPointType r,vtkFloatingPointType g, Modified(); } -void SMESH_ActorDef::GetNodeColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){ +void SMESH_ActorDef::GetNodeColor(double& r,double& g,double& b){ ::GetColor(myNodeProp,r,g,b); } -void SMESH_ActorDef::Set0DColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){ +void SMESH_ActorDef::Set0DColor(double r,double g,double b){ my0DProp->SetColor(r,g,b); if( SMESH_GroupObj* aGroupObj = dynamic_cast( myVisualObj.get() ) ) if( aGroupObj->GetElementType() == SMDSAbs_0DElement ) @@ -1853,11 +2025,11 @@ void SMESH_ActorDef::Set0DColor(vtkFloatingPointType r,vtkFloatingPointType g,vt Modified(); } -void SMESH_ActorDef::Get0DColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){ +void SMESH_ActorDef::Get0DColor(double& r,double& g,double& b){ ::GetColor(my0DProp,r,g,b); } -void SMESH_ActorDef::SetBallColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){ +void SMESH_ActorDef::SetBallColor(double r,double g,double b){ myBallProp->SetColor(r,g,b); if( SMESH_GroupObj* aGroupObj = dynamic_cast( myVisualObj.get() ) ) if( aGroupObj->GetElementType() == SMDSAbs_Ball ) @@ -1865,62 +2037,94 @@ void SMESH_ActorDef::SetBallColor(vtkFloatingPointType r,vtkFloatingPointType g, Modified(); } -void SMESH_ActorDef::GetBallColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){ +void SMESH_ActorDef::GetBallColor(double& r,double& g,double& b){ ::GetColor(myBallProp,r,g,b); } -void SMESH_ActorDef::SetHighlightColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){ +void SMESH_ActorDef::SetHighlightColor(double r,double g,double b){ myHighlightProp->SetColor(r,g,b); + myBallHighlightProp->SetColor(r,g,b); Modified(); } -void SMESH_ActorDef::GetHighlightColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){ +void SMESH_ActorDef::GetHighlightColor(double& r,double& g,double& b){ ::GetColor(myHighlightProp,r,g,b); } -void SMESH_ActorDef::SetPreHighlightColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){ +void SMESH_ActorDef::SetPreHighlightColor(double r,double g,double b){ myPreselectProp->SetColor(r,g,b); + myBallPreselectProp->SetColor(r,g,b); Modified(); } -void SMESH_ActorDef::GetPreHighlightColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){ +void SMESH_ActorDef::GetPreHighlightColor(double& r,double& g,double& b){ ::GetColor(myPreselectProp,r,g,b); } -vtkFloatingPointType SMESH_ActorDef::GetLineWidth(){ +double SMESH_ActorDef::GetLineWidth(){ return myEdgeProp->GetLineWidth(); } -void SMESH_ActorDef::SetLineWidth(vtkFloatingPointType theVal){ +void SMESH_ActorDef::SetLineWidth(double theVal){ myEdgeProp->SetLineWidth(theVal); my1DProp->SetLineWidth(theVal + aLineWidthInc); - my1DExtProp->SetLineWidth(theVal + aLineWidthInc); + my1DExtProp->SetLineWidth(theVal + aLineWidthInc); my2DExtProp->SetLineWidth(theVal + aLineWidthInc); + my3DExtProp->SetLineWidth(theVal + aLineWidthInc); myOutLineProp->SetLineWidth(theVal); myHighlightProp->SetLineWidth(theVal); myPreselectProp->SetLineWidth(theVal); Modified(); } +double SMESH_ActorDef::GetOutlineWidth() +{ + return myOutLineProp->GetLineWidth(); +} -void SMESH_ActorDef::Set0DSize(vtkFloatingPointType theVal){ +void SMESH_ActorDef::SetOutlineWidth(double theVal) +{ + myOutLineProp->SetLineWidth(theVal); + Modified(); +} + +void SMESH_ActorDef::Set0DSize(double theVal){ my0DProp->SetPointSize(theVal); + myHighlightProp->SetPointSize(theVal); + myPreselectProp->SetPointSize(theVal); + + if(SMESH_SVTKActor* aCustom = SMESH_SVTKActor::SafeDownCast( myHighlightActor )) { + aCustom->Set0DSize(theVal); + } + if(SMESH_SVTKActor* aCustom = SMESH_SVTKActor::SafeDownCast( myPreHighlightActor )) { + aCustom->Set0DSize(theVal); + } + Modified(); } -vtkFloatingPointType SMESH_ActorDef::Get0DSize(){ +double SMESH_ActorDef::Get0DSize(){ return my0DProp->GetPointSize(); } -void SMESH_ActorDef::SetBallSize(vtkFloatingPointType theVal){ +void SMESH_ActorDef::SetBallSize(double theVal){ myBallProp->SetPointSize(theVal); + myBallHighlightProp->SetPointSize(theVal); + myBallPreselectProp->SetPointSize(theVal); + if(SMESH_SVTKActor* aCustom = SMESH_SVTKActor::SafeDownCast( myHighlightActor )) { + aCustom->SetBallSize(theVal); + } + if(SMESH_SVTKActor* aCustom = SMESH_SVTKActor::SafeDownCast( myPreHighlightActor )) { + aCustom->SetBallSize(theVal); + } + Modified(); } -vtkFloatingPointType SMESH_ActorDef::GetBallSize(){ +double SMESH_ActorDef::GetBallSize(){ return myBallProp->GetPointSize(); } @@ -1959,7 +2163,7 @@ SMESH_ActorDef::SetImplicitFunctionUsed(bool theIsImplicitFunctionUsed) my3DExtActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed); } -vtkIdType +vtkIdType SMESH_ActorDef::AddClippingPlane(vtkPlane* thePlane) { if(thePlane){ @@ -1990,7 +2194,7 @@ GetNumberOfClippingPlanes() return myCippingPlaneCont.size(); } -vtkPlane* +vtkPlane* SMESH_ActorDef:: GetClippingPlane(vtkIdType theID) { @@ -2084,21 +2288,21 @@ void SMESH_ActorDef::UpdateScalarBar() myScalarBarActor->SetOrientationToVertical(); - vtkFloatingPointType aXVal = horiz ? 0.20 : 0.01; + double aXVal = horiz ? 0.20 : 0.01; if( mgr->hasValue( "SMESH", name + "x" ) ) aXVal = mgr->doubleValue( "SMESH", name + "x", aXVal ); - vtkFloatingPointType aYVal = horiz ? 0.01 : 0.1; + double aYVal = horiz ? 0.01 : 0.1; if( mgr->hasValue( "SMESH", name + "y" ) ) aYVal = mgr->doubleValue( "SMESH", name + "y", aYVal ); myScalarBarActor->SetPosition( aXVal, aYVal ); - vtkFloatingPointType aWVal = horiz ? 0.60 : 0.10; + double aWVal = horiz ? 0.60 : 0.10; if( mgr->hasValue( "SMESH", name + "width" ) ) aWVal = mgr->doubleValue( "SMESH", name + "width", aWVal ); myScalarBarActor->SetWidth( aWVal ); - vtkFloatingPointType aHVal = horiz ? 0.12 : 0.80; + double aHVal = horiz ? 0.12 : 0.80; if( mgr->hasValue( "SMESH", name + "height" ) ) aHVal = mgr->doubleValue( "SMESH", name + "height", aHVal ); myScalarBarActor->SetHeight( aHVal ); @@ -2118,7 +2322,7 @@ void SMESH_ActorDef::UpdateScalarBar() int coloringType = mgr->integerValue("SMESH", "distribution_coloring_type", 0); myScalarBarActor->SetDistributionColoringType(coloringType); - + QColor distributionColor = mgr->colorValue("SMESH", "distribution_color", QColor(255, 255, 255)); double rgb[3]; @@ -2127,7 +2331,7 @@ void SMESH_ActorDef::UpdateScalarBar() rgb[2]= distributionColor.blue()/255.; myScalarBarActor->SetDistributionColor(rgb); - + } void SMESH_ActorDef::UpdateDistribution() @@ -2146,7 +2350,8 @@ void SMESH_ActorDef::UpdateDistribution() elemIds.push_back( (*e)->GetID()); vtkLookupTable* lookupTable = static_cast(myScalarBarActor->GetLookupTable()); double * range = lookupTable->GetRange(); - fun->GetHistogram(nbIntervals, nbEvents, funValues, elemIds, range); + bool isLogarithmic = lookupTable->GetScale() == VTK_SCALE_LOG10; + fun->GetHistogram(nbIntervals, nbEvents, funValues, elemIds, range, isLogarithmic); myScalarBarActor->SetDistribution(nbEvents); } } @@ -2200,17 +2405,17 @@ SPlot2d_Histogram* SMESH_ActorDef::UpdatePlot2Histogram() { if(my2dHistogram) my2dHistogram->clearAllPoints(); - + if(SMESH::Controls::NumericalFunctor* fun = dynamic_cast(myFunctor.get())) { - + if(!my2dHistogram) { my2dHistogram = new SPlot2d_Histogram(); Handle(SALOME_InteractiveObject) anIO = new SALOME_InteractiveObject(getIO()->getEntry(),"SMESH",getName()); my2dHistogram->setIO(anIO); } - + int nbIntervals = myScalarBarActor->GetMaximumNumberOfColors(); std::vector nbEvents; std::vector funValues; @@ -2218,22 +2423,23 @@ SPlot2d_Histogram* SMESH_ActorDef::UpdatePlot2Histogram() { if ( ! dynamic_cast(myVisualObj.get())) dynamic_cast(myVisualObj.get())->GetEntities( fun->GetType(), elems ); std::vector elemIds; - + for ( SMESH_VisualObjDef::TEntityList::iterator e = elems.begin(); e != elems.end(); ++e) elemIds.push_back( (*e)->GetID()); vtkLookupTable* lookupTable = static_cast(myScalarBarActor->GetLookupTable()); double * range = lookupTable->GetRange(); - fun->GetHistogram(nbIntervals, nbEvents, funValues, elemIds, range); + bool isLogarithmic = lookupTable->GetScale() == VTK_SCALE_LOG10; + fun->GetHistogram(nbIntervals, nbEvents, funValues, elemIds, range, isLogarithmic); - for ( int i = 0; i < std::min( nbEvents.size(), funValues.size() -1 ); i++ ) + for ( int i = 0; i < std::min( nbEvents.size(), funValues.size() -1 ); i++ ) my2dHistogram->addPoint(funValues[i] + (funValues[i+1] - funValues[i])/2.0, static_cast(nbEvents[i])); if(funValues.size() >= 2) my2dHistogram->setWidth((funValues[1] - funValues[0]) * 0.8) ; } - + //Color of the histogram if(myScalarBarActor->GetDistributionColoringType() == SMESH_MULTICOLOR_TYPE) my2dHistogram->setAutoAssign(true); @@ -2244,7 +2450,7 @@ SPlot2d_Histogram* SMESH_ActorDef::UpdatePlot2Histogram() { my2dHistogram->setColor(aColor); } - + return my2dHistogram; } #endif