-// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
//
-// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// SMESH OBJECT : interactive object for SMESH visualization
#include "SMESH_ActorDef.h"
#include "SMESH_ActorUtils.h"
#include "SMESH_DeviceActor.h"
+#include "SMESH_NodeLabelActor.h"
+#include "SMESH_CellLabelActor.h"
#include "SMESH_ObjectDef.h"
#include "SMESH_ControlsDef.hxx"
#include "SMDS_UnstructuredGrid.hxx"
#include "SMESH_ScalarBarActor.h"
-#include "VTKViewer_CellCenters.h"
#include "VTKViewer_ExtractUnstructuredGrid.h"
#include "VTKViewer_FramedTextActor.h"
#include "SALOME_InteractiveObject.hxx"
+#include "SMESH_SVTKActor.h"
#include "SUIT_Session.h"
#include "SUIT_ResourceMgr.h"
+#include <Qtx.h>
+
#ifndef DISABLE_PLOT2DVIEWER
#include <SPlot2d_Histogram.h>
#endif
#include <vtkActor2D.h>
#include <vtkProperty2D.h>
#include <vtkPolyData.h>
-#include <vtkMaskPoints.h>
#include <vtkTextProperty.h>
-#include <vtkLabeledDataMapper.h>
-#include <vtkSelectVisiblePoints.h>
#include <vtkLookupTable.h>
const char* theName,
int theIsClear)
{
- SMESH_ActorDef* anActor = SMESH_ActorDef::New();
- if(!anActor->Init(theVisualObj,theEntry,theName,theIsClear)){
- anActor->Delete();
- anActor = NULL;
+ 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();
}
- if( anActor )
- anActor->UpdateScalarBar();
return anActor;
}
SMESH_ActorDef::SMESH_ActorDef()
{
- if(MYDEBUG) MESSAGE("SMESH_ActorDef - "<<this);
+ if(MYDEBUG) MESSAGE("SMESH_ActorDef - "<<this);
+ myBaseActor = SMESH_DeviceActor::New();
myTimeStamp = vtkTimeStamp::New();
myIsPointsVisible = false;
+ myIsEntityModeCache = false;
+
+ myHighlightActor = SMESH_SVTKActor::New();
+ myHighlightActor->Initialize();
+
+ myPreHighlightActor = SMESH_SVTKActor::New();
+ myPreHighlightActor->Initialize();
myIsShrinkable = false;
myIsShrunk = false;
if ( mgr && mgr->booleanValue( "SMESH", "use_precision", false ) )
myControlsPrecision = mgr->integerValue( "SMESH", "controls_precision", -1);
- vtkFloatingPointType aElem0DSize = SMESH::GetFloat("SMESH:elem0d_size",5);
- vtkFloatingPointType aLineWidth = SMESH::GetFloat("SMESH:element_width",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);
+ vtkFloatingPointType aOutlineWidth = SMESH::GetFloat("SMESH:outline_width",1);
vtkMatrix4x4 *aMatrix = vtkMatrix4x4::New();
VTKViewer_ExtractUnstructuredGrid* aFilter = NULL;
//-----------------------------------------
vtkFloatingPointType anRGB[3] = {1,1,1};
mySurfaceProp = vtkProperty::New();
- SMESH::GetColor( "SMESH", "fill_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) );
- mySurfaceProp->SetColor( anRGB[0], anRGB[1], anRGB[2] );
+ 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();
- SMESH::GetColor( "SMESH", "backface_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 0, 255 ) );
- myBackSurfaceProp->SetColor( anRGB[0], anRGB[1], anRGB[2] );
+ bfc = Qtx::mainColorToSecondary(ffc, delta);
+ myBackSurfaceProp->SetColor( bfc.red() / 255. , bfc.green() / 255. , bfc.blue() / 255. );
- my2DActor = SMESH_DeviceActor::New();
+ 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->SetProperty(mySurfaceProp);
aFilter->RegisterCellsWithType(VTK_QUAD);
aFilter->RegisterCellsWithType(VTK_QUADRATIC_TRIANGLE);
aFilter->RegisterCellsWithType(VTK_QUADRATIC_QUAD);
+ aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUAD);
my2DExtProp = vtkProperty::New();
my2DExtProp->DeepCopy(mySurfaceProp);
aFilter->RegisterCellsWithType(VTK_QUAD);
aFilter->RegisterCellsWithType(VTK_QUADRATIC_TRIANGLE);
aFilter->RegisterCellsWithType(VTK_QUADRATIC_QUAD);
+ aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUAD);
- my3DActor = SMESH_DeviceActor::New();
+ my3DActor = SMESH_CellLabelActor::New();
+ my3DActor->SetStoreGemetryMapping(true);
my3DActor->SetUserMatrix(aMatrix);
my3DActor->PickableOff();
- my3DActor->SetProperty(mySurfaceProp);
- my3DActor->SetBackfaceProperty(myBackSurfaceProp);
+ 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_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);
//#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();
aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
aFilter->RegisterCellsWithType(VTK_TETRA);
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->SetAmbient(1.0);
myEdgeProp->SetDiffuse(0.0);
myEdgeProp->SetSpecular(0.0);
- SMESH::GetColor( "SMESH", "outline_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) );
+ 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_DeviceActor::New();
+ my1DActor = SMESH_CellLabelActor::New();
+ my1DActor->SetStoreGemetryMapping(true);
my1DActor->SetUserMatrix(aMatrix);
my1DActor->PickableOff();
my1DActor->SetHighlited(true);
my0DProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
my0DProp->SetPointSize(aElem0DSize);
- my0DActor = SMESH_DeviceActor::New();
+ my0DActor = SMESH_CellLabelActor::New();
my0DActor->SetUserMatrix(aMatrix);
- my0DActor->SetStoreClippingMapping(true);
+ my0DActor->SetStoreGemetryMapping(true);
my0DActor->PickableOff();
my0DActor->SetVisibility(false);
my0DActor->SetProperty(my0DProp);
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->SetVisibility(false);
+ myBallActor->SetProperty(myBallProp);
+ myBallActor->SetRepresentation(SMESH_DeviceActor::eSurface);
+ aFilter = myBallActor->GetExtractUnstructuredGrid();
+ aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
+ aFilter->RegisterCellsWithType(VTK_POLY_VERTEX);
+
//my0DExtProp = vtkProperty::New();
//my0DExtProp->DeepCopy(my0DProp);
//anRGB[0] = 1 - anRGB[0];
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_DeviceActor::New();
+ myNodeActor = SMESH_NodeLabelActor::New();
myNodeActor->SetUserMatrix(aMatrix);
myNodeActor->SetStoreClippingMapping(true);
myNodeActor->PickableOff();
//Definition of Pickable and Highlitable engines
//----------------------------------------------
- myBaseActor = SMESH_DeviceActor::New();
myBaseActor->SetUserMatrix(aMatrix);
myBaseActor->SetStoreGemetryMapping(true);
myBaseActor->GetProperty()->SetOpacity(0.0);
-
myPickableActor = myBaseActor;
-
+
myHighlightProp = vtkProperty::New();
myHighlightProp->SetAmbient(1.0);
myHighlightProp->SetDiffuse(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);
+ 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->SetLineWidth(aOutlineWidth);
+ myOutLineProp->SetRepresentation(1);
+
myPreselectProp = vtkProperty::New();
myPreselectProp->SetAmbient(1.0);
myPreselectProp->SetDiffuse(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);
+ myBallPreselectProp = vtkProperty::New();
+ myBallPreselectProp->DeepCopy(myPreselectProp);
+ myBallPreselectProp->SetPointSize(aBallElemSize);
+
myHighlitableActor = SMESH_DeviceActor::New();
myHighlitableActor->SetUserMatrix(aMatrix);
myHighlitableActor->PickableOff();
myHighlitableActor->SetRepresentation(SMESH_DeviceActor::eWireframe);
+ myHighlitableActor->SetCoincident3DAllowed(true);
aMatrix->Delete();
if( !mgr )
return;
- //Definition of points numbering pipeline
- //---------------------------------------
- myPointsNumDataSet = vtkUnstructuredGrid::New();
-
- myPtsMaskPoints = vtkMaskPoints::New();
- myPtsMaskPoints->SetInput(myPointsNumDataSet);
- myPtsMaskPoints->SetOnRatio(1);
-
- myPtsSelectVisiblePoints = vtkSelectVisiblePoints::New();
- myPtsSelectVisiblePoints->SetInput(myPtsMaskPoints->GetOutput());
- myPtsSelectVisiblePoints->SelectInvisibleOff();
- myPtsSelectVisiblePoints->SetTolerance(0.1);
-
- myPtsLabeledDataMapper = vtkLabeledDataMapper::New();
- myPtsLabeledDataMapper->SetInput(myPtsSelectVisiblePoints->GetOutput());
-#if (VTK_XVERSION < 0x050200)
- myPtsLabeledDataMapper->SetLabelFormat("%g");
-#endif
- myPtsLabeledDataMapper->SetLabelModeToLabelScalars();
-
- vtkTextProperty* aPtsTextProp = vtkTextProperty::New();
- aPtsTextProp->SetFontFamilyToTimes();
- static int aPointsFontSize = 10;
- aPtsTextProp->SetFontSize(aPointsFontSize);
- aPtsTextProp->SetBold(1);
- aPtsTextProp->SetItalic(0);
- aPtsTextProp->SetShadow(0);
- myPtsLabeledDataMapper->SetLabelTextProperty(aPtsTextProp);
- aPtsTextProp->Delete();
-
myEntityMode = eAllEntity;
-
- myIsPointsLabeled = false;
-
- myPointLabels = vtkActor2D::New();
- myPointLabels->SetMapper(myPtsLabeledDataMapper);
- myPointLabels->GetProperty()->SetColor(1,1,1);
- myPointLabels->SetVisibility(myIsPointsLabeled);
-
-
- //Definition of cells numbering pipeline
- //---------------------------------------
- myCellsNumDataSet = vtkUnstructuredGrid::New();
-
- myCellCenters = VTKViewer_CellCenters::New();
- myCellCenters->SetInput(myCellsNumDataSet);
-
- myClsMaskPoints = vtkMaskPoints::New();
- myClsMaskPoints->SetInput(myCellCenters->GetOutput());
- myClsMaskPoints->SetOnRatio(1);
-
- myClsSelectVisiblePoints = vtkSelectVisiblePoints::New();
- myClsSelectVisiblePoints->SetInput(myClsMaskPoints->GetOutput());
- myClsSelectVisiblePoints->SelectInvisibleOff();
- myClsSelectVisiblePoints->SetTolerance(0.1);
-
- myClsLabeledDataMapper = vtkLabeledDataMapper::New();
- myClsLabeledDataMapper->SetInput(myClsSelectVisiblePoints->GetOutput());
-#if (VTK_XVERSION < 0x050200)
- myClsLabeledDataMapper->SetLabelFormat("%g");
-#endif
- myClsLabeledDataMapper->SetLabelModeToLabelScalars();
-
- vtkTextProperty* aClsTextProp = vtkTextProperty::New();
- aClsTextProp->SetFontFamilyToTimes();
- static int aCellsFontSize = 12;
- aClsTextProp->SetFontSize(aCellsFontSize);
- aClsTextProp->SetBold(1);
- aClsTextProp->SetItalic(0);
- aClsTextProp->SetShadow(0);
- myClsLabeledDataMapper->SetLabelTextProperty(aClsTextProp);
- aClsTextProp->Delete();
-
- myIsCellsLabeled = false;
-
- myCellsLabels = vtkActor2D::New();
- myCellsLabels->SetMapper(myClsLabeledDataMapper);
- myCellsLabels->GetProperty()->SetColor(0,1,0);
- myCellsLabels->SetVisibility(myIsCellsLabeled);
-
+ myEntityModeCache = eAllEntity;
+
// Clipping planes
myImplicitBoolean = vtkImplicitBoolean::New();
myImplicitBoolean->SetOperationTypeToIntersection();
-
-
//Quadratic 2D elements representation
//-----------------------------------------------------------------------------
int aQuadratic2DMode = mgr->integerValue( "SMESH", "quadratic_mode", 0);
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]);
my2dHistogram = 0;
#endif
+ SetBallSize(aBallElemSize);
+ Set0DSize(aElem0DSize);
}
}
#endif
- // caught by SMESHGUI::ProcessEvents() static method
- this->InvokeEvent( SMESH::DeleteActorEvent, NULL );
-
myScalarBarActor->Delete();
myLookupTable->Delete();
mySurfaceProp->Delete();
myBackSurfaceProp->Delete();
+ myNormalVProp->Delete();
+ myReversedVProp->Delete();
+ myOutLineProp->Delete();
myEdgeProp->Delete();
myHighlightProp->Delete();
my0DProp->Delete();
my0DActor->Delete();
+ myBallActor->Delete();
//my0DExtProp->Delete();
//my0DExtActor->Delete();
my2DExtProp->Delete();
my2DExtActor->Delete();
my3DActor->Delete();
+ my3DExtProp->Delete();
my3DExtActor->Delete();
myNodeActor->Delete();
myBaseActor->Delete();
- myNodeExtActor->Delete();
-
+ myNodeExtActor->Delete();
myHighlitableActor->Delete();
- //Deleting of points numbering pipeline
- //---------------------------------------
- myPointsNumDataSet->Delete();
+ myImplicitBoolean->Delete();
- // commented: porting to vtk 5.0
- // myPtsLabeledDataMapper->RemoveAllInputs();
- myPtsLabeledDataMapper->Delete();
+ myTimeStamp->Delete();
+ myBallHighlightProp->Delete();
+ myBallPreselectProp->Delete();
+
+}
- // commented: porting to vtk 5.0
- // myPtsSelectVisiblePoints->UnRegisterAllOutputs();
- myPtsSelectVisiblePoints->Delete();
+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 );
- // commented: porting to vtk 5.0
- // myPtsMaskPoints->UnRegisterAllOutputs();
- myPtsMaskPoints->Delete();
+ Superclass::Delete();
+}
- myPointLabels->Delete();
+void SMESH_ActorDef::SetPointsLabeled( bool theIsPointsLabeled )
+{
+ if(myNodeActor) {
+ myNodeActor->SetPointsLabeled(theIsPointsLabeled);
+ SetRepresentation(GetRepresentation());
+ myTimeStamp->Modified();
+ }
+}
+bool SMESH_ActorDef::GetPointsLabeled() {
+ return myNodeActor && myNodeActor->GetPointsLabeled();
+}
- //Deleting of cells numbering pipeline
- //---------------------------------------
- myCellsNumDataSet->Delete();
+void SMESH_ActorDef::SetCellsLabeled(bool theIsCellsLabeled)
+{
+ if(my3DActor)
+ my3DActor->SetCellsLabeled(theIsCellsLabeled);
- myClsLabeledDataMapper->RemoveAllInputs();
- myClsLabeledDataMapper->Delete();
+ if(my2DActor)
+ my2DActor->SetCellsLabeled(theIsCellsLabeled);
- // commented: porting to vtk 5.0
- // myClsSelectVisiblePoints->UnRegisterAllOutputs();
- myClsSelectVisiblePoints->Delete();
+ if(my1DActor)
+ my1DActor->SetCellsLabeled(theIsCellsLabeled);
- // commented: porting to vtk 5.0
- // myClsMaskPoints->UnRegisterAllOutputs();
- myClsMaskPoints->Delete();
+ if(my0DActor)
+ my0DActor->SetCellsLabeled(theIsCellsLabeled);
+
+ if(myBallActor)
+ myBallActor->SetCellsLabeled(theIsCellsLabeled);
+
+ myTimeStamp->Modified();
+}
- // commented: porting to vtk 5.0
- // myCellCenters->UnRegisterAllOutputs();
- myCellCenters->Delete();
- myCellsLabels->Delete();
+bool SMESH_ActorDef::GetCellsLabeled() {
+ bool result = false;
+ if(my3DActor)
+ result = result || my3DActor->GetCellsLabeled();
- myImplicitBoolean->Delete();
+ if(my2DActor)
+ result = result || my2DActor->GetCellsLabeled();
- myTimeStamp->Delete();
-}
+ if(my1DActor)
+ result = result || my1DActor->GetCellsLabeled();
+ if(my0DActor)
+ result = result || my0DActor->GetCellsLabeled();
-void SMESH_ActorDef::SetPointsLabeled( bool theIsPointsLabeled )
-{
- vtkUnstructuredGrid* aGrid = GetUnstructuredGrid();
-
- myIsPointsLabeled = theIsPointsLabeled && aGrid->GetNumberOfPoints();
+ if(myBallActor)
+ result = result || myBallActor->GetCellsLabeled();
- if ( myIsPointsLabeled )
- {
- myPointsNumDataSet->ShallowCopy(aGrid);
- vtkDataSet *aDataSet = myPointsNumDataSet;
-
- int aNbElem = aDataSet->GetNumberOfPoints();
-
- vtkIntArray *anArray = vtkIntArray::New();
- anArray->SetNumberOfValues( aNbElem );
-
- for ( vtkIdType anId = 0; anId < aNbElem; anId++ )
- {
- int aSMDSId = myVisualObj->GetNodeObjId( anId );
- anArray->SetValue( anId, aSMDSId );
- }
-
- aDataSet->GetPointData()->SetScalars( anArray );
- anArray->Delete();
- myPtsMaskPoints->SetInput( aDataSet );
- myPointLabels->SetVisibility( GetVisibility() );
- }
- else
- {
- myPointLabels->SetVisibility( false );
- }
- SetRepresentation(GetRepresentation());
- myTimeStamp->Modified();
-}
-
-
-void SMESH_ActorDef::SetCellsLabeled(bool theIsCellsLabeled)
-{
- vtkUnstructuredGrid* aGrid = GetUnstructuredGrid();
- myIsCellsLabeled = theIsCellsLabeled && aGrid->GetNumberOfPoints();
- if(myIsCellsLabeled){
- myCellsNumDataSet->ShallowCopy(aGrid);
- vtkDataSet *aDataSet = myCellsNumDataSet;
- int aNbElem = aDataSet->GetNumberOfCells();
- vtkIntArray *anArray = vtkIntArray::New();
- anArray->SetNumberOfValues(aNbElem);
- for(int anId = 0; anId < aNbElem; anId++){
- int aSMDSId = myVisualObj->GetElemObjId(anId);
- anArray->SetValue(anId,aSMDSId);
- }
- aDataSet->GetCellData()->SetScalars(anArray);
- myCellCenters->SetInput(aDataSet);
- myCellsLabels->SetVisibility(GetVisibility());
- }else{
- myCellsLabels->SetVisibility(false);
- }
- myTimeStamp->Modified();
+ return result;
}
return myIsFacesOriented;
}
-void SMESH_ActorDef::SetFacesOrientationColor(vtkFloatingPointType theColor[3])
+void SMESH_ActorDef::SetFacesOrientationColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType 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(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b)
{
- my3DActor->GetFacesOrientationColor( theColor );
+ my3DActor->GetFacesOrientationColor( r, g, b );
}
void SMESH_ActorDef::SetFacesOrientationScale(vtkFloatingPointType theScale)
my1DActor->GetMapper()->SetScalarVisibility(false);
my2DActor->GetMapper()->SetScalarVisibility(false);
my3DActor->GetMapper()->SetScalarVisibility(false);
+ myBallActor->GetMapper()->SetScalarVisibility(false);
myScalarBarActor->SetVisibility(false);
bool anIsScalarVisible = theMode > eNone;
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;
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:
}
}
- if(theCheckEntityMode){
- if(myControlActor == my1DActor)
+ if(theCheckEntityMode) {
+ if(myControlActor == my1DActor) {
+ if (!myIsEntityModeCache){
+ myEntityModeCache = GetEntityMode();
+ myIsEntityModeCache=true;
+ }
SetEntityMode(eEdges);
- else if(myControlActor == my2DActor){
- switch(myControlMode){
+ }
+ else if(myControlActor == my2DActor) {
+ switch(myControlMode) {
case eLength2D:
case eFreeEdges:
case eFreeFaces:
case eMultiConnection2D:
- //SetEntityMode(eEdges);
+ if (!myIsEntityModeCache){
+ myEntityModeCache = GetEntityMode();
+ myIsEntityModeCache=true;
+ }
SetEntityMode(eFaces);
break;
default:
+ if (!myIsEntityModeCache){
+ myEntityModeCache = GetEntityMode();
+ myIsEntityModeCache=true;
+ }
SetEntityMode(eFaces);
}
- }else if(myControlActor == my3DActor)
+ }else if(myControlActor == my3DActor) {
+ if (!myIsEntityModeCache){
+ myEntityModeCache = GetEntityMode();
+ myIsEntityModeCache=true;
+ }
SetEntityMode(eVolumes);
}
+ }
}
else {
- if(theCheckEntityMode)
- myEntityMode = eAllEntity;
+ if(theCheckEntityMode){
+ myEntityMode = myEntityModeCache;
+ myIsEntityModeCache = false;
+ }
myFunctor.reset();
}
myTimeStamp->Modified();
Modified();
+ Update();
}
void SMESH_ActorDef::AddToRender(vtkRenderer* theRenderer){
- theRenderer->AddActor(myNodeActor);
- theRenderer->AddActor(myBaseActor);
+ //myHighlightActor->AddToRender(theRenderer);
+
+ theRenderer->AddActor(myBaseActor);
theRenderer->AddActor(myNodeExtActor);
+ theRenderer->AddActor(my1DExtActor);
- my3DActor->AddToRender(theRenderer);
+ my3DActor ->AddToRender(theRenderer);
my3DExtActor->AddToRender(theRenderer);
- my2DActor->AddToRender(theRenderer);
+ my2DActor ->AddToRender(theRenderer);
my2DExtActor->AddToRender(theRenderer);
-
- theRenderer->AddActor(my1DActor);
- theRenderer->AddActor(my1DExtActor);
-
- theRenderer->AddActor(my0DActor);
+ myNodeActor ->AddToRender(theRenderer);
+ my1DActor ->AddToRender(theRenderer);
+ my0DActor ->AddToRender(theRenderer);
+ myBallActor ->AddToRender(theRenderer);
//theRenderer->AddActor(my0DExtActor);
theRenderer->AddActor(myHighlitableActor);
theRenderer->AddActor2D(myScalarBarActor);
- myPtsSelectVisiblePoints->SetRenderer(theRenderer);
- myClsSelectVisiblePoints->SetRenderer(theRenderer);
-
- theRenderer->AddActor2D(myPointLabels);
- theRenderer->AddActor2D(myCellsLabels);
-
// 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(myNodeActor);
theRenderer->RemoveActor(myBaseActor);
theRenderer->RemoveActor(myNodeExtActor);
theRenderer->RemoveActor(myHighlitableActor);
- theRenderer->RemoveActor(my0DActor);
//theRenderer->RemoveActor(my0DExtActor);
- theRenderer->RemoveActor(my1DActor);
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);
- theRenderer->RemoveActor(myPointLabels);
- theRenderer->RemoveActor(myCellsLabels);
}
myNodeExtActor->Init(myVisualObj,myImplicitBoolean);
my0DActor->Init(myVisualObj,myImplicitBoolean);
+ myBallActor->Init(myVisualObj,myImplicitBoolean);
//my0DExtActor->Init(myVisualObj,myImplicitBoolean);
my1DActor->Init(myVisualObj,myImplicitBoolean);
my3DExtActor->Init(myVisualObj,myImplicitBoolean);
my0DActor->GetMapper()->SetLookupTable(myLookupTable);
+ myBallActor->GetMapper()->SetLookupTable(myLookupTable);
//my0DExtActor->GetMapper()->SetLookupTable(myLookupTable);
my1DActor->GetMapper()->SetLookupTable(myLookupTable);
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 )
myNodeExtActor->SetTransform(theTransform);
my0DActor->SetTransform(theTransform);
+ myBallActor->SetTransform(theTransform);
//my0DExtActor->SetTransform(theTransform);
my1DActor->SetTransform(theTransform);
my2DExtActor->SetShrinkFactor(theValue);
my3DActor->SetShrinkFactor(theValue);
my3DExtActor->SetShrinkFactor(theValue);
+ my3DExtActor->SetShrinkFactor(theValue);
+ myHighlitableActor->SetShrinkFactor(theValue);
Modified();
}
my2DExtActor->SetShrink();
my3DActor->SetShrink();
my3DExtActor->SetShrink();
+ myHighlitableActor->SetShrink();
myIsShrunk = true;
Modified();
my2DExtActor->UnShrink();
my3DActor->UnShrink();
my3DExtActor->UnShrink();
+ myHighlitableActor->UnShrink();
myIsShrunk = false;
Modified();
myNodeExtActor->VisibilityOff();
my0DActor->VisibilityOff();
+ myBallActor->VisibilityOff();
//my0DExtActor->VisibilityOff();
my1DActor->VisibilityOff();
my3DExtActor->VisibilityOff();
myScalarBarActor->VisibilityOff();
- myPointLabels->VisibilityOff();
- myCellsLabels->VisibilityOff();
if(GetVisibility()){
if(theIsUpdateRepersentation)
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:
myNodeActor->VisibilityOn();
}
- if(myEntityMode & e0DElements){
+ if(myEntityMode & e0DElements && GetRepresentation() != ePoint ){
my0DActor->VisibilityOn();
}
+ if(myEntityMode & eBallElem && GetRepresentation() != ePoint ){
+ myBallActor->VisibilityOn();
+ }
if(myEntityMode & eEdges && GetRepresentation() != ePoint){
my1DActor->VisibilityOn();
my3DActor->VisibilityOn();
}
- if(myIsPointsLabeled){
- myPointLabels->VisibilityOn();
+ if(myNodeActor->GetPointsLabeled()){
myNodeActor->VisibilityOn();
}
- if(myIsCellsLabeled)
- myCellsLabels->VisibilityOn();
+ if(my0DActor)
+ my0DActor->UpdateLabels();
+
+ if(myBallActor)
+ myBallActor->UpdateLabels();
+
+ if(my1DActor)
+ my1DActor->UpdateLabels();
+
+ if(my2DActor)
+ my2DActor->UpdateLabels();
+
+ if(my3DActor)
+ my3DActor->UpdateLabels();
}
#ifndef DISABLE_PLOT2DVIEWER
else
theMode &= ~e0DElements;
}
+ if(!myVisualObj->GetNbEntities(SMDSAbs_Ball)) {
+ myEntityState &= ~eBallElem;
+ theMode &= ~eBallElem;
+ }
+
if(!myVisualObj->GetNbEntities(SMDSAbs_Edge)) {
myEntityState &= ~eEdges;
theMode &= ~eEdges;
if(myVisualObj->GetNbEntities(SMDSAbs_0DElement))
theMode |= e0DElements;
+ if(myVisualObj->GetNbEntities(SMDSAbs_Ball))
+ theMode |= eBallElem;
+
if(myVisualObj->GetNbEntities(SMDSAbs_Edge))
theMode |= eEdges;
aHightFilter->RegisterCellsWithType(VTK_VERTEX);
}
+ if (myEntityMode & eBallElem) {
+ aFilter->RegisterCellsWithType(VTK_POLY_VERTEX);
+ aHightFilter->RegisterCellsWithType(VTK_POLY_VERTEX);
+ }
+
if (myEntityMode & eEdges) {
if (MYDEBUG) MESSAGE("EDGES");
aFilter->RegisterCellsWithType(VTK_LINE);
aFilter->RegisterCellsWithType(VTK_QUAD);
aFilter->RegisterCellsWithType(VTK_QUADRATIC_TRIANGLE);
aFilter->RegisterCellsWithType(VTK_QUADRATIC_QUAD);
+ aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUAD);
aHightFilter->RegisterCellsWithType(VTK_TRIANGLE);
aHightFilter->RegisterCellsWithType(VTK_POLYGON);
aHightFilter->RegisterCellsWithType(VTK_QUAD);
aHightFilter->RegisterCellsWithType(VTK_QUADRATIC_TRIANGLE);
aHightFilter->RegisterCellsWithType(VTK_QUADRATIC_QUAD);
+ aHightFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUAD);
}
if (myEntityMode & eVolumes) {
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_CONVEX_POINT_SET);
//#ifdef VTK_HAVE_POLYHEDRON
aHightFilter->RegisterCellsWithType(VTK_HEXAHEDRON);
aHightFilter->RegisterCellsWithType(VTK_WEDGE);
aHightFilter->RegisterCellsWithType(VTK_PYRAMID);
+ aHightFilter->RegisterCellsWithType(VTK_HEXAGONAL_PRISM);
aHightFilter->RegisterCellsWithType(VTK_QUADRATIC_TETRA);
aHightFilter->RegisterCellsWithType(VTK_QUADRATIC_HEXAHEDRON);
+ aHightFilter->RegisterCellsWithType(VTK_TRIQUADRATIC_HEXAHEDRON);
aHightFilter->RegisterCellsWithType(VTK_QUADRATIC_WEDGE);
aHightFilter->RegisterCellsWithType(VTK_QUADRATIC_PYRAMID);
aHightFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET);
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;
} 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;
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) {
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;
}
my2DExtActor->SetRepresentation(aReperesent);
- my3DActor->SetProperty(aProp);
- my3DActor->SetBackfaceProperty(aBackProp);
+ my3DActor->SetProperty(aPropVN);
+ my3DActor->SetBackfaceProperty(aPropVR);
my3DActor->SetRepresentation(aReperesent);
//my0DExtActor->SetVisibility(false);
//my0DActor->SetProperty(aProp);
//my0DActor->SetBackfaceProperty(aBackProp);
my0DActor->SetRepresentation(aReperesent);
+ myBallActor->SetRepresentation(aReperesent);
//my0DExtActor->SetRepresentation(aReperesent);
switch(myControlMode){
}
bool SMESH_ActorDef::GetPointRepresentation(){
- return myIsPointsVisible || myIsPointsLabeled;
+ return myIsPointsVisible || myNodeActor->GetPointsLabeled();
}
void SMESH_ActorDef::UpdateHighlight(){
- myHighlitableActor->SetVisibility(false);
myHighlitableActor->SetHighlited(false);
-
- if(myIsHighlighted){
- myHighlitableActor->SetProperty(myHighlightProp);
- }else if(myIsPreselected){
- myHighlitableActor->SetProperty(myPreselectProp);
- }
+ myHighlitableActor->SetVisibility(false);
bool anIsVisible = GetVisibility();
- if(myIsHighlighted || myIsPreselected){
- if(GetUnstructuredGrid()->GetNumberOfCells()){
- myHighlitableActor->SetHighlited(anIsVisible);
- myHighlitableActor->SetVisibility(anIsVisible);
- myHighlitableActor->GetExtractUnstructuredGrid()->
- SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::eCells);
- myHighlitableActor->SetRepresentation(SMESH_DeviceActor::eWireframe);
- }else if(myRepresentation == ePoint || GetPointRepresentation()){
- myHighlitableActor->SetHighlited(anIsVisible);
- myHighlitableActor->GetExtractUnstructuredGrid()->
- SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::ePoints);
+ switch(myRepresentation){
+ case SMESH_DeviceActor::eSurface:
+ case SMESH_DeviceActor::eWireframe:
+ {
+ if(myIsHighlighted) {
+ myHighlitableActor->SetProperty(myHighlightProp);
+ myBallActor->SetProperty(myBallHighlightProp);
+ }else if(myIsPreselected){
+ myHighlitableActor->SetProperty(myPreselectProp);
+ myBallActor->SetProperty(myBallPreselectProp);
+ } else if(anIsVisible){
+ myBallActor->SetProperty(myBallProp);
+ (myRepresentation == eSurface) ?
+ myHighlitableActor->SetProperty(myOutLineProp) : myHighlitableActor->SetProperty(myEdgeProp);
+ }
+ if(GetUnstructuredGrid()->GetNumberOfCells()) {
+ myHighlitableActor->SetHighlited(anIsVisible);
+ myHighlitableActor->GetExtractUnstructuredGrid()->
+ SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::eCells);
+ myHighlitableActor->SetRepresentation(SMESH_DeviceActor::eWireframe);
+ }
myHighlitableActor->SetVisibility(anIsVisible);
- myHighlitableActor->SetRepresentation(SMESH_DeviceActor::ePoint);
-
- VTK::MarkerType aMarkerType = GetMarkerType();
- if(aMarkerType != VTK::MT_USER)
- myHighlitableActor->SetMarkerStd(aMarkerType, GetMarkerScale());
- else
- myHighlitableActor->SetMarkerTexture(GetMarkerTexture(), myMarkerTexture);
+ break;
+ }
+ case SMESH_DeviceActor::ePoint:
+ {
+ if(myIsHighlighted) {
+ myNodeActor->SetProperty(myHighlightProp);
+ }else if(myIsPreselected) {
+ myNodeActor->SetProperty(myPreselectProp);
+ } else if(anIsVisible) {
+ myNodeActor->SetProperty(myNodeProp);
+ }
+ myNodeActor->SetRepresentation(SMESH_DeviceActor::ePoint);
+ myNodeActor->GetExtractUnstructuredGrid()->SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::ePoints);
+ break;
}
}
}
if (anObjTime > aTime)
SetControlMode(GetControlMode(),false);
}
- if(myIsPointsLabeled){
- SetPointsLabeled(myIsPointsLabeled);
- }
- if(myIsCellsLabeled){
- SetCellsLabeled(myIsCellsLabeled);
- }
+
+ if(myNodeActor)
+ myNodeActor->UpdateLabels();
+
+ 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());
void SMESH_ActorDef::SetOpacity(vtkFloatingPointType 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);
}
}
-void SMESH_ActorDef::SetSufaceColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){
+void SMESH_ActorDef::SetSufaceColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType 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<SMESH_GroupObj*>( 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){
+void SMESH_ActorDef::GetSufaceColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b, int& delta){
::GetColor(mySurfaceProp,r,g,b);
- my2DExtProp->SetColor(1.0-r,1.0-g,1.0-b);
+ delta = myDeltaBrightness;
}
-void SMESH_ActorDef::SetBackSufaceColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){
- myBackSurfaceProp->SetColor(r,g,b);
+void SMESH_ActorDef::SetVolumeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType 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<SMESH_GroupObj*>( 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::GetBackSufaceColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){
- ::GetColor(myBackSurfaceProp,r,g,b);
+void SMESH_ActorDef::GetVolumeColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b, int& delta){
+ ::GetColor(myNormalVProp,r,g,b);
+ delta = myDeltaVBrightness;
}
void SMESH_ActorDef::SetEdgeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){
::GetColor(myEdgeProp,r,g,b);
}
+void SMESH_ActorDef::SetOutlineColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){
+ myOutLineProp->SetColor(r,g,b);
+ Modified();
+}
+
+void SMESH_ActorDef::GetOutlineColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){
+ ::GetColor(myOutLineProp,r,g,b);
+}
+
+
void SMESH_ActorDef::SetNodeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){
myNodeProp->SetColor(r,g,b);
myNodeExtProp->SetColor(1.0-r,1.0-g,1.0-b);
::GetColor(my0DProp,r,g,b);
}
+void SMESH_ActorDef::SetBallColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){
+ myBallProp->SetColor(r,g,b);
+ if( SMESH_GroupObj* aGroupObj = dynamic_cast<SMESH_GroupObj*>( myVisualObj.get() ) )
+ if( aGroupObj->GetElementType() == SMDSAbs_Ball )
+ myNameActor->SetBackgroundColor(r,g,b);
+ Modified();
+}
+
+void SMESH_ActorDef::GetBallColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){
+ ::GetColor(myBallProp,r,g,b);
+}
+
void SMESH_ActorDef::SetHighlightColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){
myHighlightProp->SetColor(r,g,b);
+ myBallHighlightProp->SetColor(r,g,b);
Modified();
}
void SMESH_ActorDef::SetPreHighlightColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){
myPreselectProp->SetColor(r,g,b);
+ myBallPreselectProp->SetColor(r,g,b);
Modified();
}
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();
}
+vtkFloatingPointType SMESH_ActorDef::GetOutlineWidth()
+{
+ return myOutLineProp->GetLineWidth();
+}
+
+void SMESH_ActorDef::SetOutlineWidth(vtkFloatingPointType theVal)
+{
+ myOutLineProp->SetLineWidth(theVal);
+ Modified();
+}
void SMESH_ActorDef::Set0DSize(vtkFloatingPointType 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();
}
return my0DProp->GetPointSize();
}
+void SMESH_ActorDef::SetBallSize(vtkFloatingPointType 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(){
+ return myBallProp->GetPointSize();
+}
+
int SMESH_ActorDef::GetObjDimension( const int theObjId )
{
return myVisualObj->GetElemDimension( theObjId );
myNodeExtActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
my0DActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
+ myBallActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
//my0DExtActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
my1DActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
myCippingPlaneCont.push_back(thePlane);
if(!IsImplicitFunctionUsed())
SetImplicitFunctionUsed(true);
+ myNodeActor->UpdateLabels();
}
return myCippingPlaneCont.size();
}
myImplicitBoolean->GetFunction()->Modified(); // VTK bug
myCippingPlaneCont.clear();
SetImplicitFunctionUsed(false);
+ myNodeActor->UpdateLabels();
}
vtkIdType