#include "SMESH_ActorUtils.h"
#include "SMESH_DeviceActor.h"
#include "SMESH_ControlsDef.hxx"
-#include <VTKViewer_ExtractUnstructuredGrid.h>
+#include "VTKViewer_ExtractUnstructuredGrid.h"
#include "SUIT_Session.h"
#include "SUIT_ResourceMgr.h"
#include <qstringlist.h>
+#include <vtkProperty.h>
#include <vtkTimeStamp.h>
#include <vtkObjectFactory.h>
#include <vtkShrinkPolyData.h>
anActor->Delete();
anActor = NULL;
}
+ if( anActor )
+ anActor->UpdateScalarBar();
return anActor;
}
myIsShrinkable = false;
myIsShrunk = false;
- myControlsPrecision = (long)SMESH::GetFloat( "SMESH:controls_precision", -1 );
+ myControlsPrecision = -1;
+ SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr();
+ if ( mgr && mgr->booleanValue( "SMESH", "use_precision", false ) )
+ myControlsPrecision = (long)SMESH::GetFloat( "SMESH", "controls_precision", -1 );
float aPointSize = SMESH::GetFloat("SMESH:node_size",3);
float aLineWidth = SMESH::GetFloat("SMESH:element_width",1);
aFilter->RegisterCellsWithType(VTK_TRIANGLE);
aFilter->RegisterCellsWithType(VTK_POLYGON);
aFilter->RegisterCellsWithType(VTK_QUAD);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_TRIANGLE);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_QUAD);
my3DActor = SMESH_DeviceActor::New();
my3DActor->SetUserMatrix(aMatrix);
aFilter->RegisterCellsWithType(VTK_HEXAHEDRON);
aFilter->RegisterCellsWithType(VTK_WEDGE);
aFilter->RegisterCellsWithType(VTK_PYRAMID);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_TETRA);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_HEXAHEDRON);
aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET);
//Definition 1D divice of the actor
aFilter = my1DActor->GetExtractUnstructuredGrid();
aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
aFilter->RegisterCellsWithType(VTK_LINE);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_EDGE);
my1DProp = vtkProperty::New();
my1DProp->DeepCopy(myEdgeProp);
aFilter = my1DExtActor->GetExtractUnstructuredGrid();
aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
aFilter->RegisterCellsWithType(VTK_LINE);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_EDGE);
//Definition 0D divice of the actor
myHighlitableActor->PickableOff();
myHighlitableActor->SetRepresentation(SMESH_DeviceActor::eWireframe);
- SetShrinkFactor( SMESH::GetFloat( "SMESH", "shrink_coeff", 0.75 ) );
-
myName = "";
myIO = NULL;
myScalarBarActor->SetVisibility(false);
myScalarBarActor->SetLookupTable(myLookupTable);
- vtkTextProperty* aScalarBarTitleProp = vtkTextProperty::New();
-
- SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr();
+ mgr = SUIT_Session::session()->resourceMgr();
if( !mgr )
return;
- QColor aTColor = mgr->colorValue( "SMESH", "scalar_bar_title_color", QColor( 255, 255, 255 ) );
- aScalarBarTitleProp->SetColor( aTColor.red()/255., aTColor.green()/255., aTColor.blue()/255. );
-
- aScalarBarTitleProp->SetFontFamilyToArial();
-
- if ( mgr->hasValue( "SMESH", "scalar_bar_title_font" ) )
- {
- QFont f = mgr->fontValue( "SMESH", "scalar_bar_title_font" );
- if ( f.family() == "Arial" )
- aScalarBarTitleProp->SetFontFamilyToArial();
- else if ( f.family() == "Courier" )
- aScalarBarTitleProp->SetFontFamilyToCourier();
- else if ( f.family() == "Times" )
- aScalarBarTitleProp->SetFontFamilyToTimes();
-
- if ( f.bold() )
- aScalarBarTitleProp->BoldOn();
- else
- aScalarBarTitleProp->BoldOff();
-
- if ( f.italic() )
- aScalarBarTitleProp->ItalicOn();
- else
- aScalarBarTitleProp->ItalicOff();
-
- if ( f.underline() )
- aScalarBarTitleProp->ShadowOn();
- else
- aScalarBarTitleProp->ShadowOff();
- }
-
- myScalarBarActor->SetTitleTextProperty( aScalarBarTitleProp );
- aScalarBarTitleProp->Delete();
-
- vtkTextProperty* aScalarBarLabelProp = vtkTextProperty::New();
-
- aTColor = mgr->colorValue( "SMESH", "scalar_bar_label_color", QColor( 255, 255, 255 ) );
- aScalarBarLabelProp->SetColor( aTColor.red()/255., aTColor.green()/255., aTColor.blue()/255. );
-
- aScalarBarLabelProp->SetFontFamilyToArial();
- if( mgr->hasValue( "SMESH", "scalar_bar_label_font" ) )
- {
- QFont f = mgr->stringValue( "SMESH", "scalar_bar_label_font" );
- if( f.family() == "Arial" )
- aScalarBarLabelProp->SetFontFamilyToArial();
- else if( f.family() == "Courier" )
- aScalarBarLabelProp->SetFontFamilyToCourier();
- else if( f.family() == "Times" )
- aScalarBarLabelProp->SetFontFamilyToTimes();
-
- if ( f.bold() )
- aScalarBarLabelProp->BoldOn();
- else
- aScalarBarLabelProp->BoldOff();
-
- if ( f.italic() )
- aScalarBarLabelProp->ItalicOn();
- else
- aScalarBarLabelProp->ItalicOff();
-
- if( f.underline() )
- aScalarBarLabelProp->ShadowOn();
- else
- aScalarBarLabelProp->ShadowOff();
- }
-
- myScalarBarActor->SetLabelTextProperty( aScalarBarLabelProp );
- aScalarBarLabelProp->Delete();
-
- bool horiz = ( mgr->integerValue( "SMESH", "scalar_bar_orientation" ) == 1 );
- QString name = QString( "scalar_bar_%1_" ).arg( horiz ? "horizontal" : "vertical" );
- if( horiz )
- myScalarBarActor->SetOrientationToHorizontal();
- else
- myScalarBarActor->SetOrientationToVertical();
-
-
- float aXVal = horiz ? 0.20 : 0.01;
- if( mgr->hasValue( "SMESH", name + "x" ) )
- aXVal = mgr->doubleValue( "SMESH", name + "x", aXVal );
-
- float aYVal = horiz ? 0.01 : 0.1;
- if( mgr->hasValue( "SMESH", name + "y" ) )
- aYVal = mgr->doubleValue( "SMESH", name + "y", aYVal );
- myScalarBarActor->SetPosition( aXVal, aYVal );
-
- float aWVal = horiz ? 0.60 : 0.10;
- if( mgr->hasValue( "SMESH", name + "width" ) )
- aWVal = mgr->doubleValue( "SMESH", name + "width", aWVal );
- myScalarBarActor->SetWidth( aWVal );
-
- float aHVal = horiz ? 0.12 : 0.80;
- if( mgr->hasValue( "SMESH", name + "height" ) )
- aHVal = mgr->doubleValue( "SMESH", name + "height", aHVal );
- myScalarBarActor->SetHeight( aHVal );
-
- int anIntVal = 5;
- if( mgr->hasValue( "SMESH", "scalar_bar_num_labels" ) )
- anIntVal = mgr->integerValue( "SMESH", "scalar_bar_num_labels", anIntVal );
- myScalarBarActor->SetNumberOfLabels( anIntVal == 0 ? 5: anIntVal );
-
- anIntVal = 64;
- if( mgr->hasValue( "SMESH", "scalar_bar_num_colors" ) )
- anIntVal = mgr->integerValue( "SMESH", "scalar_bar_num_colors", anIntVal );
- myScalarBarActor->SetMaximumNumberOfColors( anIntVal == 0 ? 64 : anIntVal );
-
-
//Definition of points numbering pipeline
//---------------------------------------
myPointsNumDataSet = vtkUnstructuredGrid::New();
myControlActor = my3DActor;
break;
}
+ case eVolume3D:
+ {
+ SMESH::Controls::Volume* aControl = new SMESH::Controls::Volume();
+ aControl->SetPrecision( myControlsPrecision );
+ aFunctor.reset( aControl );
+ myControlActor = my3DActor;
+ break;
+ }
case eMinimumAngle:
{
SMESH::Controls::MinimumAngle* aControl = new SMESH::Controls::MinimumAngle();
my2DActor->GetPolygonOffsetParameters(aFactor,aUnits);
my2DActor->SetPolygonOffsetParameters(aFactor,aUnits*0.75);
- //SetIsShrunkable(theGrid->GetNumberOfCells() > 10);
- SetIsShrunkable(true);
-
SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr();
if( !mgr )
return false;
- QString aMode = mgr->stringValue( "DisplayMode", "SMESH" );
+ //SetIsShrunkable(theGrid->GetNumberOfCells() > 10);
+ SetIsShrunkable(true);
+
+ SetShrinkFactor( SMESH::GetFloat( "SMESH:shrink_coeff", 0.75 ) );
+
+ int aMode = mgr->integerValue( "SMESH", "display_mode" );
SetRepresentation(-1);
- if(aMode.compare("Wireframe") == 0){
+ if(aMode == 0){
SetRepresentation(eEdge);
- }else if(aMode.compare("Shading") == 0){
+ }else if(aMode == 1){
SetRepresentation(eSurface);
- }else if(aMode.compare("Nodes") == 0){
+ }else if(aMode == 2){
SetRepresentation(ePoint);
}
- aMode = mgr->stringValue( "Shrink", "SMESH" );
- if(aMode == "yes"){
+ if(aMode == 3){
SetShrink();
}
void SMESH_ActorDef::SetTransform(VTKViewer_Transform* theTransform){
+ Superclass::SetTransform(theTransform);
+
myNodeActor->SetTransform(theTransform);
myBaseActor->SetTransform(theTransform);
void SMESH_ActorDef::SetIsShrunkable(bool theShrunkable){
+ if ( myIsShrinkable == theShrunkable )
+ return;
myIsShrinkable = theShrunkable;
Modified();
}
if(myEntityMode & eEdges){
if (MYDEBUG) MESSAGE("EDGES");
aFilter->RegisterCellsWithType(VTK_LINE);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_EDGE);
}
if(myEntityMode & eFaces){
aFilter->RegisterCellsWithType(VTK_TRIANGLE);
aFilter->RegisterCellsWithType(VTK_POLYGON);
aFilter->RegisterCellsWithType(VTK_QUAD);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_TRIANGLE);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_QUAD);
}
if(myEntityMode & eVolumes){
aFilter->RegisterCellsWithType(VTK_HEXAHEDRON);
aFilter->RegisterCellsWithType(VTK_WEDGE);
aFilter->RegisterCellsWithType(VTK_PYRAMID);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_TETRA);
+ aFilter->RegisterCellsWithType(VTK_QUADRATIC_HEXAHEDRON);
aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET);
}
aFilter->Update();
void SMESH_ActorDef::SetPointRepresentation(bool theIsPointsVisible){
+ if ( myIsPointsVisible == theIsPointsVisible )
+ return;
myIsPointsVisible = theIsPointsVisible;
SetRepresentation(GetRepresentation());
}
void SMESH_ActorDef::highlight(bool theHighlight){
+ if ( myIsHighlighted == theHighlight )
+ return;
myIsHighlighted = theHighlight;
UpdateHighlight();
}
void SMESH_ActorDef::SetPreSelected(bool thePreselect){
+ if ( myIsPreselected == thePreselect )
+ return;
myIsPreselected = thePreselect;
UpdateHighlight();
}
thePlane->GetOrigin(anOrigin);
::PositionToDistance(GetUnstructuredGrid(),theDir,anOrigin,theDist);
}
+
+void SMESH_ActorDef::UpdateScalarBar()
+{
+ SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr();
+ if( !mgr )
+ return;
+
+ vtkTextProperty* aScalarBarTitleProp = vtkTextProperty::New();
+
+ QColor aTColor = mgr->colorValue( "SMESH", "scalar_bar_title_color", QColor( 255, 255, 255 ) );
+ aScalarBarTitleProp->SetColor( aTColor.red()/255., aTColor.green()/255., aTColor.blue()/255. );
+
+ aScalarBarTitleProp->SetFontFamilyToArial();
+
+ if ( mgr->hasValue( "SMESH", "scalar_bar_title_font" ) )
+ {
+ QFont f = mgr->fontValue( "SMESH", "scalar_bar_title_font" );
+ if ( f.family() == "Arial" )
+ aScalarBarTitleProp->SetFontFamilyToArial();
+ else if ( f.family() == "Courier" )
+ aScalarBarTitleProp->SetFontFamilyToCourier();
+ else if ( f.family() == "Times" )
+ aScalarBarTitleProp->SetFontFamilyToTimes();
+
+ if ( f.bold() )
+ aScalarBarTitleProp->BoldOn();
+ else
+ aScalarBarTitleProp->BoldOff();
+
+ if ( f.italic() )
+ aScalarBarTitleProp->ItalicOn();
+ else
+ aScalarBarTitleProp->ItalicOff();
+
+ if ( f.underline() )
+ aScalarBarTitleProp->ShadowOn();
+ else
+ aScalarBarTitleProp->ShadowOff();
+ }
+
+ myScalarBarActor->SetTitleTextProperty( aScalarBarTitleProp );
+ aScalarBarTitleProp->Delete();
+
+ vtkTextProperty* aScalarBarLabelProp = vtkTextProperty::New();
+
+ aTColor = mgr->colorValue( "SMESH", "scalar_bar_label_color", QColor( 255, 255, 255 ) );
+ aScalarBarLabelProp->SetColor( aTColor.red()/255., aTColor.green()/255., aTColor.blue()/255. );
+
+ aScalarBarLabelProp->SetFontFamilyToArial();
+ if( mgr->hasValue( "SMESH", "scalar_bar_label_font" ) )
+ {
+ QFont f = mgr->stringValue( "SMESH", "scalar_bar_label_font" );
+ if( f.family() == "Arial" )
+ aScalarBarLabelProp->SetFontFamilyToArial();
+ else if( f.family() == "Courier" )
+ aScalarBarLabelProp->SetFontFamilyToCourier();
+ else if( f.family() == "Times" )
+ aScalarBarLabelProp->SetFontFamilyToTimes();
+
+ if ( f.bold() )
+ aScalarBarLabelProp->BoldOn();
+ else
+ aScalarBarLabelProp->BoldOff();
+
+ if ( f.italic() )
+ aScalarBarLabelProp->ItalicOn();
+ else
+ aScalarBarLabelProp->ItalicOff();
+
+ if( f.underline() )
+ aScalarBarLabelProp->ShadowOn();
+ else
+ aScalarBarLabelProp->ShadowOff();
+ }
+
+ myScalarBarActor->SetLabelTextProperty( aScalarBarLabelProp );
+ aScalarBarLabelProp->Delete();
+
+ bool horiz = ( mgr->integerValue( "SMESH", "scalar_bar_orientation" ) == 1 );
+ QString name = QString( "scalar_bar_%1_" ).arg( horiz ? "horizontal" : "vertical" );
+ if( horiz )
+ myScalarBarActor->SetOrientationToHorizontal();
+ else
+ myScalarBarActor->SetOrientationToVertical();
+
+
+ float aXVal = horiz ? 0.20 : 0.01;
+ if( mgr->hasValue( "SMESH", name + "x" ) )
+ aXVal = mgr->doubleValue( "SMESH", name + "x", aXVal );
+
+ float aYVal = horiz ? 0.01 : 0.1;
+ if( mgr->hasValue( "SMESH", name + "y" ) )
+ aYVal = mgr->doubleValue( "SMESH", name + "y", aYVal );
+ myScalarBarActor->SetPosition( aXVal, aYVal );
+
+ float aWVal = horiz ? 0.60 : 0.10;
+ if( mgr->hasValue( "SMESH", name + "width" ) )
+ aWVal = mgr->doubleValue( "SMESH", name + "width", aWVal );
+ myScalarBarActor->SetWidth( aWVal );
+
+ float aHVal = horiz ? 0.12 : 0.80;
+ if( mgr->hasValue( "SMESH", name + "height" ) )
+ aHVal = mgr->doubleValue( "SMESH", name + "height", aHVal );
+ myScalarBarActor->SetHeight( aHVal );
+
+ int anIntVal = 5;
+ if( mgr->hasValue( "SMESH", "scalar_bar_num_labels" ) )
+ anIntVal = mgr->integerValue( "SMESH", "scalar_bar_num_labels", anIntVal );
+ myScalarBarActor->SetNumberOfLabels( anIntVal == 0 ? 5: anIntVal );
+
+ anIntVal = 64;
+ if( mgr->hasValue( "SMESH", "scalar_bar_num_colors" ) )
+ anIntVal = mgr->integerValue( "SMESH", "scalar_bar_num_colors", anIntVal );
+ myScalarBarActor->SetMaximumNumberOfColors( anIntVal == 0 ? 64 : anIntVal );
+
+}