X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FOBJECT%2FSMESH_DeviceActor.cxx;h=cfe6159a2c0e7e4484c444878060473940d275f2;hp=f9195f19f98ba7899856aac42ee7d7e0bf1f1528;hb=30ce546b0c5099ad1112929e2db94810e683e54b;hpb=8408df59c58cdda76191f1edc7ee3811c9ab54c8 diff --git a/src/OBJECT/SMESH_DeviceActor.cxx b/src/OBJECT/SMESH_DeviceActor.cxx index f9195f19f..cfe6159a2 100644 --- a/src/OBJECT/SMESH_DeviceActor.cxx +++ b/src/OBJECT/SMESH_DeviceActor.cxx @@ -37,6 +37,7 @@ #include #include #include +#include // VTK Includes #include @@ -88,14 +89,14 @@ SMESH_DeviceActor myIsShrunk = false; myIsHighlited = false; - myRepresentation = eSurface; + myRepresentation = SMESH_DeviceActor::EReperesent(-1); myProperty = vtkProperty::New(); myMapper = VTKViewer_PolyDataMapper::New(); myPlaneCollection = vtkPlaneCollection::New(); - vtkMapper::GetResolveCoincidentTopologyPolygonOffsetParameters(myPolygonOffsetFactor, - myPolygonOffsetUnits); + VTKViewer_Actor::GetDefaultPolygonOffsetParameters(myPolygonOffsetFactor, + myPolygonOffsetUnits); myMapper->UseLookupTableScalarRangeOn(); myMapper->SetColorModeToMapScalars(); @@ -142,7 +143,7 @@ SMESH_DeviceActor if(MYDEBUG) MESSAGE("~SMESH_DeviceActor - "<Delete(); - myPlaneCollection->Delete(); + // myPlaneCollection->Delete(); -- it is vtkSmartPointer myProperty->Delete(); myExtractGeometry->Delete(); @@ -172,7 +173,8 @@ SMESH_DeviceActor ::SetStoreGemetryMapping(bool theStoreMapping) { myGeomFilter->SetStoreMapping(theStoreMapping); - SetStoreClippingMapping(theStoreMapping); + // for optimization, switch the mapping explicitly in each filter/algorithm + //SetStoreClippingMapping(theStoreMapping); } @@ -182,7 +184,10 @@ SMESH_DeviceActor { myStoreClippingMapping = theStoreMapping; myExtractGeometry->SetStoreMapping(theStoreMapping && myIsImplicitFunctionUsed); - SetStoreIDMapping(theStoreMapping); + // EAP, 23315 + // Mapping in myExtractUnstructuredGrid and myGeomFilter is ON in the pickable DeviceActor only. + // To show labels, the mapping is computed explicitly via myExtractUnstructuredGrid->BuildOut2InMap(); + //SetStoreIDMapping(theStoreMapping); } @@ -204,7 +209,6 @@ SMESH_DeviceActor SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); } - void SMESH_DeviceActor ::SetImplicitFunctionUsed(bool theIsImplicitFunctionUsed) @@ -224,14 +228,14 @@ void SMESH_DeviceActor ::SetUnstructuredGrid(vtkUnstructuredGrid* theGrid) { - if(theGrid){ - //myIsShrinkable = theGrid->GetNumberOfCells() > 10; - myIsShrinkable = true; + myExtractUnstructuredGrid->SetInputData(theGrid); - myExtractUnstructuredGrid->SetInputData(theGrid); + if ( theGrid ) + { + myIsShrinkable = true; myMergeFilter->SetGeometryConnection(myExtractUnstructuredGrid->GetOutputPort()); - + //Pass diameters of the balls if(myMapper->GetBallEnabled()) { myMergeFilter->SetScalarsConnection(myExtractUnstructuredGrid->GetOutputPort()); @@ -242,7 +246,7 @@ SMESH_DeviceActor int anId = 0; SetImplicitFunctionUsed(myIsImplicitFunctionUsed); myPassFilter[ anId + 1]->SetInputConnection( myPassFilter[ anId ]->GetOutputPort() ); - + anId++; // 1 myTransformFilter->SetInputConnection( myPassFilter[ anId ]->GetOutputPort() ); @@ -254,7 +258,7 @@ SMESH_DeviceActor myGeomFilter->SetInputConnection( myPassFilter[ anId ]->GetOutputPort() ); anId++; // 4 - myPassFilter[ anId ]->SetInputConnection( myGeomFilter->GetOutputPort() ); + myPassFilter[ anId ]->SetInputConnection( myGeomFilter->GetOutputPort() ); myPassFilter[ anId + 1 ]->SetInputConnection( myPassFilter[ anId ]->GetOutputPort() ); anId++; // 5 @@ -263,8 +267,8 @@ SMESH_DeviceActor myMapper->SetClippingPlanes( myPlaneCollection ); vtkLODActor::SetMapper( myMapper ); - Modified(); } + Modified(); } void @@ -281,6 +285,7 @@ SMESH_DeviceActor return myExtractUnstructuredGrid; } +#include "SMDS_Mesh.hxx" vtkUnstructuredGrid* SMESH_DeviceActor @@ -301,7 +306,7 @@ SMESH_DeviceActor if(anIsInitialized){ vtkUnstructuredGrid* aDataSet = vtkUnstructuredGrid::New(); - SetStoreIDMapping(true); + // SetStoreIDMapping(true); myExtractUnstructuredGrid->Update(); vtkUnstructuredGrid* aGrid = myExtractUnstructuredGrid->GetOutput(); @@ -318,7 +323,9 @@ SMESH_DeviceActor using namespace SMESH::Controls; if(NumericalFunctor* aNumericalFunctor = dynamic_cast(theFunctor.get())) { - for(vtkIdType i = 0; i < aNbCells; i++){ + myExtractUnstructuredGrid->BuildOut2InMap(); + for(vtkIdType i = 0; i < aNbCells; i++) + { vtkIdType anId = myExtractUnstructuredGrid->GetInputId(i); vtkIdType anObjId = myVisualObj->GetElemObjId(anId); double aValue = aNumericalFunctor->GetValue(anObjId); @@ -334,7 +341,9 @@ SMESH_DeviceActor } else if(Predicate* aPredicate = dynamic_cast(theFunctor.get())) { - for(vtkIdType i = 0; i < aNbCells; i++){ + myExtractUnstructuredGrid->BuildOut2InMap(); + for(vtkIdType i = 0; i < aNbCells; i++) + { vtkIdType anId = myExtractUnstructuredGrid->GetInputId(i); vtkIdType anObjId = myVisualObj->GetElemObjId(anId); bool aValue = aPredicate->IsSatisfy(anObjId); @@ -607,11 +616,32 @@ SMESH_DeviceActor -unsigned long int +vtkMTimeType SMESH_DeviceActor ::GetMTime() { - unsigned long mTime = this->Superclass::GetMTime(); + // cout << "DA " << this + // << " GF " << myGeomFilter; + // if ( this->Property ) + // cout << " P " << this->Property->GetMTime(); + // if ( this->BackfaceProperty != NULL ) + // cout << " BP " << BackfaceProperty->GetMTime(); + // if ( this->Texture != NULL ) + // cout << " T " << this->Texture->GetMTime(); + // cout << " U " << this->GetUserTransformMatrixMTime() + // << " M " << this->MTime.GetMTime() << endl; + + // cout << "DA " << this + // << " GF " << myGeomFilter + // << " " << this->Superclass::GetMTime() + // << " " << myExtractGeometry->GetMTime() + // << " " << myExtractUnstructuredGrid->GetMTime() + // << " " << myMergeFilter->GetMTime() + // << " " << myGeomFilter->GetMTime() + // << " " << myTransformFilter->GetMTime() + // << " " << myFaceOrientationFilter->GetMTime() << endl; + + vtkMTimeType mTime = this->Superclass::GetMTime(); mTime = max(mTime,myExtractGeometry->GetMTime()); mTime = max(mTime,myExtractUnstructuredGrid->GetMTime()); mTime = max(mTime,myMergeFilter->GetMTime()); @@ -718,7 +748,7 @@ SMESH_DeviceActor ::UpdateFaceOrientation() { bool aShowFaceOrientation = myIsFacesOriented; - aShowFaceOrientation &= GetVisibility(); + aShowFaceOrientation &= vtkLODActor::GetVisibility(); //GetVisibility(); -- avoid calling GetUnstructuredGrid() aShowFaceOrientation &= myRepresentation == eSurface; myFaceOrientation->SetVisibility(aShowFaceOrientation); } @@ -728,6 +758,8 @@ void SMESH_DeviceActor ::SetRepresentation(EReperesent theMode) { + if ( myRepresentation == theMode ) + return; switch(theMode){ case ePoint: myGeomFilter->SetInside(true); @@ -762,8 +794,9 @@ void SMESH_DeviceActor ::SetVisibility(int theMode) { - if(!myExtractUnstructuredGrid->GetInput() || - GetUnstructuredGrid()->GetNumberOfCells()) + if(( theMode ) && + ( !myExtractUnstructuredGrid->GetInput() || + GetUnstructuredGrid()->GetNumberOfCells())) { vtkLODActor::SetVisibility(theMode); }else{ @@ -777,10 +810,12 @@ int SMESH_DeviceActor ::GetVisibility() { - if(!GetUnstructuredGrid()->GetNumberOfCells()){ + int visibi = vtkLODActor::GetVisibility(); + if(visibi && !GetUnstructuredGrid()->GetNumberOfCells()){ vtkLODActor::SetVisibility(false); + visibi = 0; } - return vtkLODActor::GetVisibility(); + return visibi; } @@ -821,7 +856,7 @@ SMESH_DeviceActor { vtkDataSet* aDataSet = myMergeFilter->GetOutput(); vtkIdType anID = myVisualObj->GetNodeVTKId(theObjID); - double* aCoord = (anID >=0) ? aDataSet->GetPoint(anID) : NULL; + double* aCoord = (anID >=0 && anID < aDataSet->GetNumberOfPoints()) ? aDataSet->GetPoint(anID) : NULL; if(MYDEBUG) MESSAGE("GetNodeCoord - theObjID = "<