X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FOBJECT%2FSMESH_Actor.cxx;h=f3794ec5e452b2a9a4d6209efc4c288feeede871;hp=dc35fcda2aa9bba3850ce2767a0bc69933183e44;hb=1eea5485d119de1f044c0bb06c4bfd557a9572b1;hpb=4a31c0f62c598738b612ab5f1810db58271a554c diff --git a/src/OBJECT/SMESH_Actor.cxx b/src/OBJECT/SMESH_Actor.cxx index dc35fcda2..f3794ec5e 100644 --- a/src/OBJECT/SMESH_Actor.cxx +++ b/src/OBJECT/SMESH_Actor.cxx @@ -68,6 +68,7 @@ #include #include #include +#include #include "utilities.h" @@ -239,9 +240,10 @@ SMESH_ActorDef::SMESH_ActorDef(){ myBaseActor->SetUserMatrix(aMatrix); myBaseActor->SetStoreMapping(true); myBaseActor->GetProperty()->SetOpacity(0.0); + myBaseActor->myGeomFilter->SetInside(true); myPickableActor = myBaseActor; - + myHighlightProp = vtkProperty::New(); myHighlightProp->SetAmbient(1.0); myHighlightProp->SetDiffuse(0.0); @@ -598,7 +600,8 @@ void SMESH_ActorDef::SetPointsLabeled( bool theIsPointsLabeled ) } -void SMESH_ActorDef::SetCellsLabeled(bool theIsCellsLabeled){ +void SMESH_ActorDef::SetCellsLabeled(bool theIsCellsLabeled) +{ vtkUnstructuredGrid* aGrid = GetUnstructuredGrid(); myIsCellsLabeled = theIsCellsLabeled && aGrid->GetNumberOfPoints(); if(myIsCellsLabeled){ @@ -734,8 +737,6 @@ void SMESH_ActorDef::SetControlMode(eControl theMode){ my1DExtActor->SetExtControlMode(aFunctor,myControlActor); break; case eLength2D: - my1DExtActor->SetExtControlMode(aFunctor,myControlActor,myScalarBarActor,myLookupTable); - break; case eMultiConnection2D: my1DExtActor->SetExtControlMode(aFunctor,myControlActor,myScalarBarActor,myLookupTable); break; @@ -819,18 +820,6 @@ bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj, setName(theName); myVisualObj = theVisualObj; - myNodeActor->myVisualObj = myVisualObj; - myBaseActor->myVisualObj = myVisualObj; - - myHighlitableActor->myVisualObj = myVisualObj; - myNodeHighlitableActor->myVisualObj = myVisualObj; - - my1DActor->myVisualObj = myVisualObj; - my1DExtActor->myVisualObj = myVisualObj; - - my2DActor->myVisualObj = myVisualObj; - my3DActor->myVisualObj = myVisualObj; - myVisualObj->Update(theIsClear); myNodeActor->Init(myVisualObj,myImplicitBoolean); @@ -1038,7 +1027,6 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){ my1DExtActor->VisibilityOn(); break; case eLength2D: - my1DExtActor->VisibilityOn(); case eMultiConnection2D: my1DExtActor->VisibilityOn(); default: @@ -1049,18 +1037,26 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){ if(myRepresentation != ePoint) myPickableActor->VisibilityOn(); + else { + myNodeActor->VisibilityOn(); + } - if(myEntityMode & eEdges) + if(myEntityMode & eEdges){ my1DActor->VisibilityOn(); + } - if(myEntityMode & eFaces) + if(myEntityMode & eFaces){ my2DActor->VisibilityOn(); + } - if(myEntityMode & eVolumes) + if(myEntityMode & eVolumes){ my3DActor->VisibilityOn(); + } - if(myIsPointsLabeled) + if(myIsPointsLabeled){ myPointLabels->VisibilityOn(); + myNodeActor->VisibilityOn(); + } if(myIsCellsLabeled) myCellsLabels->VisibilityOn(); @@ -1080,11 +1076,46 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode){ if(!myVisualObj->GetNbEntities(SMDSAbs_Volume)) theMode &= ~eVolumes; - if(!theMode) - return; + if(!theMode){ + if(myVisualObj->GetNbEntities(SMDSAbs_Edge)) + theMode |= eEdges; + + if(myVisualObj->GetNbEntities(SMDSAbs_Face)) + theMode |= eFaces; + + if(myVisualObj->GetNbEntities(SMDSAbs_Volume)) + theMode |= eVolumes; + } myEntityMode = theMode; + SALOME_ExtractUnstructuredGrid* aFilter = NULL; + aFilter = myBaseActor->GetExtractUnstructuredGrid(); + aFilter->ClearRegisteredCellsWithType(); + aFilter->SetModeOfChanging(SALOME_ExtractUnstructuredGrid::eAdding); + + if(myEntityMode & eEdges){ + if (MYDEBUG) MESSAGE("EDGES"); + aFilter->RegisterCellsWithType(VTK_LINE); + } + + if(myEntityMode & eFaces){ + if (MYDEBUG) MESSAGE("FACES"); + aFilter->RegisterCellsWithType(VTK_TRIANGLE); + aFilter->RegisterCellsWithType(VTK_POLYGON); + aFilter->RegisterCellsWithType(VTK_QUAD); + } + if(myEntityMode & eVolumes){ + if (MYDEBUG) MESSAGE("VOLUMES"); + aFilter->RegisterCellsWithType(VTK_TETRA); + aFilter->RegisterCellsWithType(VTK_VOXEL); + aFilter->RegisterCellsWithType(VTK_HEXAHEDRON); + aFilter->RegisterCellsWithType(VTK_WEDGE); + aFilter->RegisterCellsWithType(VTK_PYRAMID); + aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET); + } + aFilter->Update(); + if (MYDEBUG) MESSAGE(aFilter->GetOutput()->GetNumberOfCells()); SetVisibility(GetVisibility(),false); } @@ -1128,10 +1159,10 @@ void SMESH_ActorDef::SetRepresentation(int theMode){ vtkProperty *aProp = NULL, *aBackProp = NULL; SMESH_DeviceActor::EReperesent aReperesent = SMESH_DeviceActor::EReperesent(-1); switch(myRepresentation){ - case ePoint: + case ePoint: myPickableActor = myNodeActor; myNodeActor->SetVisibility(true); - + aProp = aBackProp = myNodeProp; aReperesent = SMESH_DeviceActor::ePoint; break; @@ -1173,7 +1204,6 @@ void SMESH_ActorDef::SetRepresentation(int theMode){ if(myIsPointsVisible) myPickableActor = myNodeActor; - if(GetPointRepresentation()) myNodeActor->SetVisibility(true); @@ -1286,6 +1316,7 @@ void SMESH_ActorDef::Update(){ if(myIsCellsLabeled){ SetCellsLabeled(myIsCellsLabeled); } + SetEntityMode(GetEntityMode()); SetVisibility(GetVisibility()); myTimeStamp->Modified(); @@ -1415,9 +1446,67 @@ int SMESH_ActorDef::GetObjDimension( const int theObjId ) return myVisualObj->GetElemDimension( theObjId ); } +bool +SMESH_ActorDef:: +IsImplicitFunctionUsed() const +{ + return myBaseActor->IsImplicitFunctionUsed(); +} + +void +SMESH_ActorDef:: +SetImplicitFunctionUsed(bool theIsImplicitFunctionUsed) +{ + myNodeActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed); + myBaseActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed); + + myHighlitableActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed); + myNodeHighlitableActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed); + + my1DActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed); + my1DExtActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed); + + my2DActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed); + my3DActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed); +} -vtkImplicitBoolean* SMESH_ActorDef::GetPlaneContainer(){ - return myImplicitBoolean; +vtkIdType +SMESH_ActorDef:: +AddClippingPlane(vtkPlane* thePlane) +{ + if(thePlane){ + myImplicitBoolean->GetFunction()->AddItem(thePlane); + myCippingPlaneCont.push_back(thePlane); + if(!IsImplicitFunctionUsed()) + SetImplicitFunctionUsed(true); + } + return myCippingPlaneCont.size(); +} + +void +SMESH_ActorDef:: +RemoveAllClippingPlanes() +{ + myImplicitBoolean->GetFunction()->RemoveAllItems(); + myImplicitBoolean->GetFunction()->Modified(); // VTK bug + myCippingPlaneCont.clear(); + SetImplicitFunctionUsed(false); +} + +vtkIdType +SMESH_ActorDef:: +GetNumberOfClippingPlanes() +{ + return myCippingPlaneCont.size(); +} + +vtkPlane* +SMESH_ActorDef:: +GetClippingPlane(vtkIdType theID) +{ + if(theID >= myCippingPlaneCont.size()) + return NULL; + return myCippingPlaneCont[theID].Get(); }