From: enk Date: Fri, 11 Feb 2005 12:34:57 +0000 (+0000) Subject: Fix. Bug PAL8109 CRASH of "Salome" happens if to check "Free Borders" control at... X-Git-Tag: V2_2_0b4~2 X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=commitdiff_plain;h=fb7bf211bb5e8cfbae094276e785326ef20fabdc;hp=fa397b27d14c143edc9b3bb38ddbabbfec9ab229 Fix. Bug PAL8109 CRASH of "Salome" happens if to check "Free Borders" control at the clipping of mesh. Fix. Bug PAL8024 Incorrect selection of the elements. --- diff --git a/src/OBJECT/SMESH_Actor.cxx b/src/OBJECT/SMESH_Actor.cxx index 0d3a46d24..d9e353c18 100644 --- a/src/OBJECT/SMESH_Actor.cxx +++ b/src/OBJECT/SMESH_Actor.cxx @@ -239,6 +239,7 @@ SMESH_ActorDef::SMESH_ActorDef(){ myBaseActor->SetUserMatrix(aMatrix); myBaseActor->SetStoreMapping(true); myBaseActor->GetProperty()->SetOpacity(0.0); + myBaseActor->myGeomFilter->SetInside(true); myPickableActor = myBaseActor; @@ -734,8 +735,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; @@ -1087,11 +1086,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); } @@ -1292,6 +1326,7 @@ void SMESH_ActorDef::Update(){ if(myIsCellsLabeled){ SetCellsLabeled(myIsCellsLabeled); } + SetEntityMode(GetEntityMode()); SetVisibility(GetVisibility()); myTimeStamp->Modified(); diff --git a/src/OBJECT/SMESH_DeviceActor.cxx b/src/OBJECT/SMESH_DeviceActor.cxx index 52a34f63d..21bf977b2 100644 --- a/src/OBJECT/SMESH_DeviceActor.cxx +++ b/src/OBJECT/SMESH_DeviceActor.cxx @@ -143,7 +143,10 @@ SMESH_DeviceActor::~SMESH_DeviceActor(){ void SMESH_DeviceActor::SetStoreMapping(int theStoreMapping){ + if (myStoreMapping == theStoreMapping) + return; myStoreMapping = theStoreMapping; + myGeomFilter->SetStoreMapping( myStoreMapping ); Modified(); } @@ -409,11 +412,10 @@ void SMESH_DeviceActor::SetExtControlMode(SMESH::Controls::FunctorPtr theFunctor using namespace SMESH::Controls; if(FreeBorders* aFreeBorders = dynamic_cast(theFunctor.get())){ myExtractUnstructuredGrid->SetModeOfChanging(SALOME_ExtractUnstructuredGrid::eAdding); - myExtractUnstructuredGrid->ClearRegisteredCells(); - vtkUnstructuredGrid* aGrid = theDeviceActor->GetUnstructuredGrid(); + vtkUnstructuredGrid* aGrid = myVisualObj->GetUnstructuredGrid(); vtkIdType aNbCells = aGrid->GetNumberOfCells(); for( vtkIdType i = 0; i < aNbCells; i++ ){ - vtkIdType anObjId = theDeviceActor->GetElemObjId(i); + vtkIdType anObjId = myVisualObj->GetElemObjId(i); if(aFreeBorders->IsSatisfy(anObjId)) myExtractUnstructuredGrid->RegisterCell(i); } @@ -517,7 +519,7 @@ void SMESH_DeviceActor::SetRepresentation(EReperesent theMode){ myGeomFilter->SetInside(true); GetProperty()->SetRepresentation(0); break; - case eInsideframe: + case eInsideframe: myGeomFilter->SetInside(true); GetProperty()->SetRepresentation(1); break; @@ -569,20 +571,20 @@ int SMESH_DeviceActor::GetElemObjId(int theVtkID){ vtkIdType anId = myGeomFilter->GetElemObjId(theVtkID); if(anId < 0) return -1; - vtkIdType anId2 = myExtractUnstructuredGrid->GetInputId(anId); + vtkIdType anId2 = myExtractGeometry->GetElemObjId(anId); if(anId2 < 0) return -1; - vtkIdType anId3 = myExtractGeometry->GetElemObjId(anId2); + vtkIdType anId3 = myExtractUnstructuredGrid->GetInputId(anId2); if(anId3 < 0) return -1; vtkIdType aRetID = myVisualObj->GetElemObjId(anId3); if(MYDEBUG) - MESSAGE("GetElemObjId - theVtkID = "<