X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FOBJECT%2FSMESH_Actor.cxx;h=1a6eba84d706cb73c3c71247fc802f72e85ae02b;hb=0368b0a293ab3c21684b0049fdcb24ca38e1e830;hp=3e4c1ad8a7fe3d224f8672e91e34dda3d1e6a31b;hpb=1758d524e70758cc1aacc20c2a3394208d7ff93d;p=modules%2Fsmesh.git diff --git a/src/OBJECT/SMESH_Actor.cxx b/src/OBJECT/SMESH_Actor.cxx index 3e4c1ad8a..1a6eba84d 100644 --- a/src/OBJECT/SMESH_Actor.cxx +++ b/src/OBJECT/SMESH_Actor.cxx @@ -1,23 +1,23 @@ -// 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 @@ -28,18 +28,22 @@ #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 + #ifndef DISABLE_PLOT2DVIEWER #include #endif @@ -65,10 +69,7 @@ #include #include #include -#include #include -#include -#include #include @@ -103,24 +104,35 @@ SMESH_Actor* SMESH_Actor::New(TVisualObjPtr theVisualObj, 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 - "<Initialize(); + + myPreHighlightActor = SMESH_SVTKActor::New(); + myPreHighlightActor->Initialize(); myIsShrinkable = false; myIsShrunk = false; @@ -133,8 +145,9 @@ 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 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); vtkMatrix4x4 *aMatrix = vtkMatrix4x4::New(); VTKViewer_ExtractUnstructuredGrid* aFilter = NULL; @@ -143,14 +156,18 @@ SMESH_ActorDef::SMESH_ActorDef() //----------------------------------------- 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(); + my2DActor = SMESH_CellLabelActor::New(); + my2DActor->SetStoreGemetryMapping(true); my2DActor->SetUserMatrix(aMatrix); my2DActor->PickableOff(); my2DActor->SetProperty(mySurfaceProp); @@ -163,6 +180,7 @@ SMESH_ActorDef::SMESH_ActorDef() 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); @@ -184,13 +202,16 @@ SMESH_ActorDef::SMESH_ActorDef() 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->SetRepresentation(SMESH_DeviceActor::eSurface); + my3DActor->SetCoincident3DAllowed(true); aFilter = my3DActor->GetExtractUnstructuredGrid(); aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding); aFilter->RegisterCellsWithType(VTK_TETRA); @@ -198,8 +219,10 @@ SMESH_ActorDef::SMESH_ActorDef() 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); @@ -214,6 +237,7 @@ SMESH_ActorDef::SMESH_ActorDef() my3DExtActor->SetProperty(my2DExtProp); my3DExtActor->SetBackfaceProperty(my2DExtProp); my3DExtActor->SetRepresentation(SMESH_DeviceActor::eSurface); + my3DExtActor->SetCoincident3DAllowed(true); aFilter = my3DExtActor->GetExtractUnstructuredGrid(); aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding); aFilter->RegisterCellsWithType(VTK_TETRA); @@ -221,11 +245,14 @@ SMESH_ActorDef::SMESH_ActorDef() 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 //--------------------------------- @@ -233,11 +260,12 @@ SMESH_ActorDef::SMESH_ActorDef() 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); @@ -282,9 +310,9 @@ SMESH_ActorDef::SMESH_ActorDef() 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); @@ -294,6 +322,24 @@ SMESH_ActorDef::SMESH_ActorDef() 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]; @@ -322,7 +368,7 @@ SMESH_ActorDef::SMESH_ActorDef() 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(); @@ -354,13 +400,11 @@ SMESH_ActorDef::SMESH_ActorDef() //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); @@ -368,8 +412,23 @@ SMESH_ActorDef::SMESH_ActorDef() 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(aLineWidth); + myOutLineProp->SetRepresentation(1); + myPreselectProp = vtkProperty::New(); myPreselectProp->SetAmbient(1.0); myPreselectProp->SetDiffuse(0.0); @@ -377,12 +436,18 @@ SMESH_ActorDef::SMESH_ActorDef() 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(); @@ -412,92 +477,13 @@ SMESH_ActorDef::SMESH_ActorDef() 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); @@ -526,6 +512,8 @@ SMESH_ActorDef::SMESH_ActorDef() my2dHistogram = 0; #endif + SetBallSize(aBallElemSize); + Set0DSize(aElem0DSize); } @@ -540,14 +528,12 @@ SMESH_ActorDef::~SMESH_ActorDef() } #endif - // caught by SMESHGUI::ProcessEvents() static method - this->InvokeEvent( SMESH::DeleteActorEvent, NULL ); - myScalarBarActor->Delete(); myLookupTable->Delete(); mySurfaceProp->Delete(); myBackSurfaceProp->Delete(); + myOutLineProp->Delete(); myEdgeProp->Delete(); myHighlightProp->Delete(); @@ -558,6 +544,7 @@ SMESH_ActorDef::~SMESH_ActorDef() my0DProp->Delete(); my0DActor->Delete(); + myBallActor->Delete(); //my0DExtProp->Delete(); //my0DExtActor->Delete(); @@ -577,113 +564,81 @@ SMESH_ActorDef::~SMESH_ActorDef() myNodeActor->Delete(); myBaseActor->Delete(); - myNodeExtActor->Delete(); - + myNodeExtActor->Delete(); myHighlitableActor->Delete(); - //Deleting of points numbering pipeline - //--------------------------------------- - myPointsNumDataSet->Delete(); - - // commented: porting to vtk 5.0 - // myPtsLabeledDataMapper->RemoveAllInputs(); - myPtsLabeledDataMapper->Delete(); - - // commented: porting to vtk 5.0 - // myPtsSelectVisiblePoints->UnRegisterAllOutputs(); - myPtsSelectVisiblePoints->Delete(); + myImplicitBoolean->Delete(); - // commented: porting to vtk 5.0 - // myPtsMaskPoints->UnRegisterAllOutputs(); - myPtsMaskPoints->Delete(); + myTimeStamp->Delete(); + myBallHighlightProp->Delete(); + myBallPreselectProp->Delete(); + +} - myPointLabels->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 ); + Superclass::Delete(); +} - //Deleting of cells numbering pipeline - //--------------------------------------- - myCellsNumDataSet->Delete(); +void SMESH_ActorDef::SetPointsLabeled( bool theIsPointsLabeled ) +{ + if(myNodeActor) { + myNodeActor->SetPointsLabeled(theIsPointsLabeled); + SetRepresentation(GetRepresentation()); + myTimeStamp->Modified(); + } +} - myClsLabeledDataMapper->RemoveAllInputs(); - myClsLabeledDataMapper->Delete(); +bool SMESH_ActorDef::GetPointsLabeled() { + return myNodeActor && myNodeActor->GetPointsLabeled(); +} - // commented: porting to vtk 5.0 - // myClsSelectVisiblePoints->UnRegisterAllOutputs(); - myClsSelectVisiblePoints->Delete(); +void SMESH_ActorDef::SetCellsLabeled(bool theIsCellsLabeled) +{ + if(my3DActor) + my3DActor->SetCellsLabeled(theIsCellsLabeled); - // commented: porting to vtk 5.0 - // myClsMaskPoints->UnRegisterAllOutputs(); - myClsMaskPoints->Delete(); + if(my2DActor) + my2DActor->SetCellsLabeled(theIsCellsLabeled); - // commented: porting to vtk 5.0 - // myCellCenters->UnRegisterAllOutputs(); - myCellCenters->Delete(); + if(my1DActor) + my1DActor->SetCellsLabeled(theIsCellsLabeled); - myCellsLabels->Delete(); + if(my0DActor) + my0DActor->SetCellsLabeled(theIsCellsLabeled); + + if(myBallActor) + myBallActor->SetCellsLabeled(theIsCellsLabeled); + + myTimeStamp->Modified(); +} - myImplicitBoolean->Delete(); - myTimeStamp->Delete(); -} +bool SMESH_ActorDef::GetCellsLabeled() { + bool result = false; + if(my3DActor) + result = result || my3DActor->GetCellsLabeled(); + if(my2DActor) + result = result || my2DActor->GetCellsLabeled(); -void SMESH_ActorDef::SetPointsLabeled( bool theIsPointsLabeled ) -{ - vtkUnstructuredGrid* aGrid = GetUnstructuredGrid(); - - myIsPointsLabeled = theIsPointsLabeled && aGrid->GetNumberOfPoints(); + if(my1DActor) + result = result || my1DActor->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(); -} + if(my0DActor) + result = result || my0DActor->GetCellsLabeled(); + if(myBallActor) + result = result || myBallActor->GetCellsLabeled(); -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; } @@ -760,6 +715,7 @@ SetControlMode(eControl theMode, my1DActor->GetMapper()->SetScalarVisibility(false); my2DActor->GetMapper()->SetScalarVisibility(false); my3DActor->GetMapper()->SetScalarVisibility(false); + myBallActor->GetMapper()->SetScalarVisibility(false); myScalarBarActor->SetVisibility(false); bool anIsScalarVisible = theMode > eNone; @@ -796,6 +752,27 @@ SetControlMode(eControl theMode, 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; @@ -914,19 +891,23 @@ SetControlMode(eControl theMode, 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: @@ -940,29 +921,48 @@ SetControlMode(eControl theMode, } } - 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(); } @@ -970,36 +970,32 @@ SetControlMode(eControl theMode, 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); @@ -1008,27 +1004,26 @@ void SMESH_ActorDef::AddToRender(vtkRenderer* 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); } @@ -1052,6 +1047,7 @@ bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj, myNodeExtActor->Init(myVisualObj,myImplicitBoolean); my0DActor->Init(myVisualObj,myImplicitBoolean); + myBallActor->Init(myVisualObj,myImplicitBoolean); //my0DExtActor->Init(myVisualObj,myImplicitBoolean); my1DActor->Init(myVisualObj,myImplicitBoolean); @@ -1063,6 +1059,7 @@ bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj, my3DExtActor->Init(myVisualObj,myImplicitBoolean); my0DActor->GetMapper()->SetLookupTable(myLookupTable); + myBallActor->GetMapper()->SetLookupTable(myLookupTable); //my0DExtActor->GetMapper()->SetLookupTable(myLookupTable); my1DActor->GetMapper()->SetLookupTable(myLookupTable); @@ -1136,6 +1133,7 @@ void SMESH_ActorDef::SetTransform(VTKViewer_Transform* theTransform){ myNodeExtActor->SetTransform(theTransform); my0DActor->SetTransform(theTransform); + myBallActor->SetTransform(theTransform); //my0DExtActor->SetTransform(theTransform); my1DActor->SetTransform(theTransform); @@ -1201,6 +1199,8 @@ void SMESH_ActorDef::SetShrinkFactor(vtkFloatingPointType theValue){ my2DExtActor->SetShrinkFactor(theValue); my3DActor->SetShrinkFactor(theValue); my3DExtActor->SetShrinkFactor(theValue); + my3DExtActor->SetShrinkFactor(theValue); + myHighlitableActor->SetShrinkFactor(theValue); Modified(); } @@ -1217,6 +1217,7 @@ void SMESH_ActorDef::SetShrink(){ my2DExtActor->SetShrink(); my3DActor->SetShrink(); my3DExtActor->SetShrink(); + myHighlitableActor->SetShrink(); myIsShrunk = true; Modified(); @@ -1234,6 +1235,7 @@ void SMESH_ActorDef::UnShrink(){ my2DExtActor->UnShrink(); my3DActor->UnShrink(); my3DExtActor->UnShrink(); + myHighlitableActor->UnShrink(); myIsShrunk = false; Modified(); @@ -1272,6 +1274,7 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){ myNodeExtActor->VisibilityOff(); my0DActor->VisibilityOff(); + myBallActor->VisibilityOff(); //my0DExtActor->VisibilityOff(); my1DActor->VisibilityOff(); @@ -1283,8 +1286,6 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){ my3DExtActor->VisibilityOff(); myScalarBarActor->VisibilityOff(); - myPointLabels->VisibilityOff(); - myCellsLabels->VisibilityOff(); if(GetVisibility()){ if(theIsUpdateRepersentation) @@ -1293,19 +1294,23 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool 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: @@ -1323,9 +1328,12 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){ 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(); @@ -1339,13 +1347,24 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){ 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 @@ -1365,6 +1384,11 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode) theMode &= ~e0DElements; } + if(!myVisualObj->GetNbEntities(SMDSAbs_Ball)) { + myEntityState &= ~eBallElem; + theMode &= ~eBallElem; + } + if(!myVisualObj->GetNbEntities(SMDSAbs_Edge)) { myEntityState &= ~eEdges; theMode &= ~eEdges; @@ -1384,6 +1408,9 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode) if(myVisualObj->GetNbEntities(SMDSAbs_0DElement)) theMode |= e0DElements; + if(myVisualObj->GetNbEntities(SMDSAbs_Ball)) + theMode |= eBallElem; + if(myVisualObj->GetNbEntities(SMDSAbs_Edge)) theMode |= eEdges; @@ -1412,6 +1439,11 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode) 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); @@ -1428,12 +1460,14 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode) 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) { @@ -1443,8 +1477,10 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode) 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 @@ -1456,8 +1492,10 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode) 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); @@ -1475,6 +1513,8 @@ 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; @@ -1486,10 +1526,10 @@ 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; @@ -1556,6 +1596,7 @@ void SMESH_ActorDef::SetRepresentation (int theMode) //my0DActor->SetProperty(aProp); //my0DActor->SetBackfaceProperty(aBackProp); my0DActor->SetRepresentation(aReperesent); + myBallActor->SetRepresentation(aReperesent); //my0DExtActor->SetRepresentation(aReperesent); switch(myControlMode){ @@ -1599,41 +1640,52 @@ void SMESH_ActorDef::SetPointRepresentation(bool theIsPointsVisible){ } 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; } } } @@ -1698,15 +1750,33 @@ void SMESH_ActorDef::Update(){ 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()); @@ -1737,6 +1807,8 @@ void SMESH_ActorDef::SetOpacity(vtkFloatingPointType theValue){ myNodeProp->SetOpacity(theValue); my1DProp->SetOpacity(theValue); + my0DProp->SetOpacity(theValue); + myBallProp->SetOpacity(theValue); } @@ -1745,27 +1817,23 @@ vtkFloatingPointType SMESH_ActorDef::GetOpacity(){ } -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); if( SMESH_GroupObj* aGroupObj = dynamic_cast( myVisualObj.get() ) ) if( aGroupObj->GetElementType() == SMDSAbs_Face || aGroupObj->GetElementType() == SMDSAbs_Volume ) 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); -} - -void SMESH_ActorDef::SetBackSufaceColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){ - myBackSurfaceProp->SetColor(r,g,b); - Modified(); -} - -void SMESH_ActorDef::GetBackSufaceColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){ - ::GetColor(myBackSurfaceProp,r,g,b); + delta = myDeltaBrightness; } void SMESH_ActorDef::SetEdgeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){ @@ -1782,6 +1850,16 @@ void SMESH_ActorDef::GetEdgeColor(vtkFloatingPointType& r,vtkFloatingPointType& ::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); @@ -1807,8 +1885,21 @@ void SMESH_ActorDef::Get0DColor(vtkFloatingPointType& r,vtkFloatingPointType& g, ::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( 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(); } @@ -1818,6 +1909,7 @@ void SMESH_ActorDef::GetHighlightColor(vtkFloatingPointType& r,vtkFloatingPointT void SMESH_ActorDef::SetPreHighlightColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){ myPreselectProp->SetColor(r,g,b); + myBallPreselectProp->SetColor(r,g,b); Modified(); } @@ -1835,14 +1927,27 @@ void SMESH_ActorDef::SetLineWidth(vtkFloatingPointType theVal){ myEdgeProp->SetLineWidth(theVal); my1DProp->SetLineWidth(theVal + aLineWidthInc); - my1DExtProp->SetLineWidth(theVal + aLineWidthInc); - + my1DExtProp->SetLineWidth(theVal + aLineWidthInc); + my2DExtProp->SetLineWidth(theVal + aLineWidthInc); + myOutLineProp->SetLineWidth(theVal); + myHighlightProp->SetLineWidth(theVal); + myPreselectProp->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(); } @@ -1850,6 +1955,24 @@ vtkFloatingPointType SMESH_ActorDef::Get0DSize(){ 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 ); @@ -1873,6 +1996,7 @@ SMESH_ActorDef::SetImplicitFunctionUsed(bool theIsImplicitFunctionUsed) myNodeExtActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed); my0DActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed); + myBallActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed); //my0DExtActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed); my1DActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed); @@ -1892,6 +2016,7 @@ SMESH_ActorDef::AddClippingPlane(vtkPlane* thePlane) myCippingPlaneCont.push_back(thePlane); if(!IsImplicitFunctionUsed()) SetImplicitFunctionUsed(true); + myNodeActor->UpdateLabels(); } return myCippingPlaneCont.size(); } @@ -1904,6 +2029,7 @@ RemoveAllClippingPlanes() myImplicitBoolean->GetFunction()->Modified(); // VTK bug myCippingPlaneCont.clear(); SetImplicitFunctionUsed(false); + myNodeActor->UpdateLabels(); } vtkIdType