X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FOBJECT%2FSMESH_Actor.cxx;h=f7924e191800ca5a2140b9677ee42485f42e310f;hb=dbbd8a2dbee2a8ad0a41f0d01d280c25ab6a7e9f;hp=0bf3b4176b75cafffaf3ddaf8566305d77f0cce6;hpb=98e8c177214dcc9d7b48f00048f165526aeca06e;p=modules%2Fsmesh.git diff --git a/src/OBJECT/SMESH_Actor.cxx b/src/OBJECT/SMESH_Actor.cxx index 0bf3b4176..f7924e191 100644 --- a/src/OBJECT/SMESH_Actor.cxx +++ b/src/OBJECT/SMESH_Actor.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2020 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 @@ -732,6 +732,7 @@ void SMESH_ActorDef::SetCellsLabeled(bool theIsCellsLabeled) if(myBallActor) myBallActor->SetCellsLabeled(theIsCellsLabeled); + SetRepresentation(GetRepresentation()); myTimeStamp->Modified(); } @@ -1109,7 +1110,7 @@ void SMESH_ActorDef::SetControlMode( eControl theMode, bool theCheckEntityMode ) } QString aTitle = QString(myScalarBarActor->GetTitle()); aTitle.replace(QRegExp("(:\\s).*"),"\\1"+ QString::number(GetNumberControlEntities())); - myScalarBarActor->SetTitle(aTitle.toLatin1().constData()); + myScalarBarActor->SetTitle(aTitle.toUtf8().constData()); } else { @@ -1545,7 +1546,8 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation) myScalarBarActor->VisibilityOn(); } - myPickableActor->VisibilityOn(); + if ( GetPickable( )) + myPickableActor->VisibilityOn(); if ( GetRepresentation() != ePoint ) { @@ -1555,7 +1557,8 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation) if(myEntityMode & eBallElem ){ myBallActor->VisibilityOn(); } - if(myEntityMode & eEdges && GetCellsLabeled() ){ // my1DActor shows labels only + if(myEntityMode & eEdges && ( GetCellsLabeled() || // my1DActor shows labels only + ( myControlActor == my1DActor && myControlMode != eNone ))){ my1DActor->VisibilityOn(); } if(myEntityMode & eFaces ){ @@ -1653,95 +1656,7 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode) myEntityMode = theMode; // entities to show // Set cell types to extract - - VTKViewer_ExtractUnstructuredGrid* aFilter = myBaseActor->GetExtractUnstructuredGrid(); - VTKViewer_ExtractUnstructuredGrid* aHltFilter = myHighlitableActor->GetExtractUnstructuredGrid(); - aFilter->ClearRegisteredCellsWithType(); - aHltFilter->ClearRegisteredCellsWithType(); - - bool isPassAll = ( myEntityMode == anObjectEntities && myEntityMode ); - if ( isPassAll ) - { - aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::ePassAll); - aHltFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::ePassAll); - } - else - { - aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding); - aHltFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding); - - if (myEntityMode & e0DElements) { - aFilter->RegisterCellsWithType(VTK_VERTEX); - aHltFilter->RegisterCellsWithType(VTK_VERTEX); - } - - if (myEntityMode & eBallElem) { - aFilter->RegisterCellsWithType(VTK_POLY_VERTEX); - } - - if (myEntityMode & eEdges) { - aFilter->RegisterCellsWithType(VTK_LINE); - aFilter->RegisterCellsWithType(VTK_QUADRATIC_EDGE); - - aHltFilter->RegisterCellsWithType(VTK_LINE); - aHltFilter->RegisterCellsWithType(VTK_QUADRATIC_EDGE); - } - - if (myEntityMode & eFaces) { - aFilter->RegisterCellsWithType(VTK_TRIANGLE); - aFilter->RegisterCellsWithType(VTK_QUAD); - aFilter->RegisterCellsWithType(VTK_POLYGON); - aFilter->RegisterCellsWithType(VTK_QUADRATIC_TRIANGLE); - aFilter->RegisterCellsWithType(VTK_QUADRATIC_QUAD); - aFilter->RegisterCellsWithType(VTK_QUADRATIC_POLYGON); - aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUAD); - aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_TRIANGLE); - - aHltFilter->RegisterCellsWithType(VTK_TRIANGLE); - aHltFilter->RegisterCellsWithType(VTK_QUAD); - aHltFilter->RegisterCellsWithType(VTK_POLYGON); - aHltFilter->RegisterCellsWithType(VTK_QUADRATIC_TRIANGLE); - aHltFilter->RegisterCellsWithType(VTK_QUADRATIC_QUAD); - aHltFilter->RegisterCellsWithType(VTK_QUADRATIC_POLYGON); - aHltFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUAD); - aHltFilter->RegisterCellsWithType(VTK_BIQUADRATIC_TRIANGLE); - } - - if (myEntityMode & eVolumes) { - aFilter->RegisterCellsWithType(VTK_TETRA); - aFilter->RegisterCellsWithType(VTK_VOXEL); - 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_PYRAMID); - aFilter->RegisterCellsWithType(VTK_QUADRATIC_WEDGE); - aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUADRATIC_WEDGE); - aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET); - aFilter->RegisterCellsWithType(VTK_POLYHEDRON); - - aHltFilter->RegisterCellsWithType(VTK_TETRA); - aHltFilter->RegisterCellsWithType(VTK_VOXEL); - aHltFilter->RegisterCellsWithType(VTK_HEXAHEDRON); - aHltFilter->RegisterCellsWithType(VTK_WEDGE); - aHltFilter->RegisterCellsWithType(VTK_PYRAMID); - aHltFilter->RegisterCellsWithType(VTK_HEXAGONAL_PRISM); - aHltFilter->RegisterCellsWithType(VTK_QUADRATIC_TETRA); - aHltFilter->RegisterCellsWithType(VTK_QUADRATIC_HEXAHEDRON); - aHltFilter->RegisterCellsWithType(VTK_TRIQUADRATIC_HEXAHEDRON); - aHltFilter->RegisterCellsWithType(VTK_QUADRATIC_WEDGE); - aHltFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUADRATIC_WEDGE); - aHltFilter->RegisterCellsWithType(VTK_QUADRATIC_PYRAMID); - aHltFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET); - aHltFilter->RegisterCellsWithType(VTK_POLYHEDRON); - } - } - if ( GetVisibility() ) - aFilter->Update(); - if (MYDEBUG) MESSAGE(aFilter->GetOutput()->GetNumberOfCells()); + UpdateFilter(); } SetVisibility( GetVisibility(), myRepresentationCache != 0 ); @@ -1847,6 +1762,12 @@ void SMESH_ActorDef::SetRepresentation (int theMode) if ( myRepresentation != ePoint ) aReperesent = SMESH_DeviceActor::eInsideframe; break; + case eCustomControl: + if ( myControlActor == my1DActor ) + aProp = aBackProp = my1DProp; + if ( myRepresentation != ePoint ) + aReperesent = SMESH_DeviceActor::eInsideframe; + break; default:; } @@ -2572,8 +2493,8 @@ void SMESH_ActorDef::UpdateDistribution() std::vector nbEvents; std::vector funValues; SMESH_VisualObjDef::TEntityList elems; - if ( ! dynamic_cast(myVisualObj.get())) - dynamic_cast(myVisualObj.get())->GetEntities( fun->GetType(), elems ); + if ( dynamic_cast(myVisualObj.get())) + dynamic_cast(myVisualObj.get())->GetEntities( fun->GetType(), elems ); std::vector elemIds; elemIds.reserve( elems.size() ); for ( SMESH_VisualObjDef::TEntityList::iterator e = elems.begin(); e != elems.end(); ++e) elemIds.push_back( (*e)->GetID()); @@ -2629,6 +2550,115 @@ void SMESH_ActorDef::SetMarkerTexture( int theMarkerId, VTK::MarkerTexture theMa myMarkerTexture = theMarkerTexture; // for deferred update of myHighlightActor } +void SMESH_ActorDef::UpdateFilter() +{ + unsigned int anObjectEntities = eAllEntity; // entities present in my object + + if(!myVisualObj->GetNbEntities(SMDSAbs_0DElement)) { + anObjectEntities &= ~e0DElements; + } + + if(!myVisualObj->GetNbEntities(SMDSAbs_Ball)) { + anObjectEntities &= ~eBallElem; + } + + if(!myVisualObj->GetNbEntities(SMDSAbs_Edge)) { + anObjectEntities &= ~eEdges; + } + + if(!myVisualObj->GetNbEntities(SMDSAbs_Face)) { + anObjectEntities &= ~eFaces; + } + + if(!myVisualObj->GetNbEntities(SMDSAbs_Volume)) { + anObjectEntities &= ~eVolumes; + } + + VTKViewer_ExtractUnstructuredGrid* aFilter = myBaseActor->GetExtractUnstructuredGrid(); + VTKViewer_ExtractUnstructuredGrid* aHltFilter = myHighlitableActor->GetExtractUnstructuredGrid(); + aFilter->ClearRegisteredCellsWithType(); + aHltFilter->ClearRegisteredCellsWithType(); + + bool isPassAll = ( myEntityMode == anObjectEntities && myEntityMode ); + if ( isPassAll ) + { + aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::ePassAll); + aHltFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::ePassAll); + } + else + { + aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding); + aHltFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding); + if (myEntityMode & e0DElements) { + aFilter->RegisterCellsWithType(VTK_VERTEX); + aHltFilter->RegisterCellsWithType(VTK_VERTEX); + } + + if (myEntityMode & eBallElem) { + aFilter->RegisterCellsWithType(VTK_POLY_VERTEX); + } + if (myEntityMode & eEdges) { + aFilter->RegisterCellsWithType(VTK_LINE); + aFilter->RegisterCellsWithType(VTK_QUADRATIC_EDGE); + aHltFilter->RegisterCellsWithType(VTK_LINE); + aHltFilter->RegisterCellsWithType(VTK_QUADRATIC_EDGE); + } + + if (myEntityMode & eFaces) { + aFilter->RegisterCellsWithType(VTK_TRIANGLE); + aFilter->RegisterCellsWithType(VTK_QUAD); + aFilter->RegisterCellsWithType(VTK_POLYGON); + aFilter->RegisterCellsWithType(VTK_QUADRATIC_TRIANGLE); + aFilter->RegisterCellsWithType(VTK_QUADRATIC_QUAD); + aFilter->RegisterCellsWithType(VTK_QUADRATIC_POLYGON); + aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUAD); + aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_TRIANGLE); + aHltFilter->RegisterCellsWithType(VTK_TRIANGLE); + aHltFilter->RegisterCellsWithType(VTK_QUAD); + aHltFilter->RegisterCellsWithType(VTK_POLYGON); + aHltFilter->RegisterCellsWithType(VTK_QUADRATIC_TRIANGLE); + aHltFilter->RegisterCellsWithType(VTK_QUADRATIC_QUAD); + aHltFilter->RegisterCellsWithType(VTK_QUADRATIC_POLYGON); + aHltFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUAD); + aHltFilter->RegisterCellsWithType(VTK_BIQUADRATIC_TRIANGLE); + } + + if (myEntityMode & eVolumes) { + aFilter->RegisterCellsWithType(VTK_TETRA); + aFilter->RegisterCellsWithType(VTK_VOXEL); + 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_PYRAMID); + aFilter->RegisterCellsWithType(VTK_QUADRATIC_WEDGE); + aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUADRATIC_WEDGE); + aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET); + aFilter->RegisterCellsWithType(VTK_POLYHEDRON); + aHltFilter->RegisterCellsWithType(VTK_TETRA); + aHltFilter->RegisterCellsWithType(VTK_VOXEL); + aHltFilter->RegisterCellsWithType(VTK_HEXAHEDRON); + aHltFilter->RegisterCellsWithType(VTK_WEDGE); + aHltFilter->RegisterCellsWithType(VTK_PYRAMID); + aHltFilter->RegisterCellsWithType(VTK_HEXAGONAL_PRISM); + aHltFilter->RegisterCellsWithType(VTK_QUADRATIC_TETRA); + aHltFilter->RegisterCellsWithType(VTK_QUADRATIC_HEXAHEDRON); + aHltFilter->RegisterCellsWithType(VTK_TRIQUADRATIC_HEXAHEDRON); + aHltFilter->RegisterCellsWithType(VTK_QUADRATIC_WEDGE); + aHltFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUADRATIC_WEDGE); + aHltFilter->RegisterCellsWithType(VTK_QUADRATIC_PYRAMID); + aHltFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET); + aHltFilter->RegisterCellsWithType(VTK_POLYHEDRON); + } + } + if ( GetVisibility() ) + aFilter->Update(); + if (MYDEBUG) MESSAGE(aFilter->GetOutput()->GetNumberOfCells()); +} + #ifndef DISABLE_PLOT2DVIEWER SPlot2d_Histogram* SMESH_ActorDef::UpdatePlot2Histogram() { @@ -2649,8 +2679,8 @@ SPlot2d_Histogram* SMESH_ActorDef::UpdatePlot2Histogram() std::vector nbEvents; std::vector funValues; SMESH_VisualObjDef::TEntityList elems; - if ( ! dynamic_cast(myVisualObj.get())) - dynamic_cast(myVisualObj.get())->GetEntities( fun->GetType(), elems ); + if ( dynamic_cast(myVisualObj.get())) + dynamic_cast(myVisualObj.get())->GetEntities( fun->GetType(), elems ); std::vector elemIds; for ( SMESH_VisualObjDef::TEntityList::iterator e = elems.begin(); e != elems.end(); ++e)