mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-11-11 16:19:16 +05:00
23315: [CEA 1929] Too much memory used to display a mesh in shading and wireframe
Use my1DActor only to show edge numbers and controls of all edges => 10% decrease memory usage
This commit is contained in:
parent
270d55cf05
commit
d053feed93
@ -323,6 +323,10 @@ SMESH_ActorDef::SMESH_ActorDef()
|
||||
myEdgeProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
|
||||
myEdgeProp->SetLineWidth(aLineWidth);
|
||||
|
||||
// my1DActor is used to
|
||||
// - show numbers
|
||||
// - show controls on all edges (eg Length)
|
||||
// since edges are shown by myHighlitableActor
|
||||
my1DActor = SMESH_CellLabelActor::New();
|
||||
my1DActor->SetStoreClippingMapping(true);
|
||||
my1DActor->SetUserMatrix(aMatrix);
|
||||
@ -350,6 +354,7 @@ SMESH_ActorDef::SMESH_ActorDef()
|
||||
my1DExtProp->SetLineWidth(aLineWidth + aLineWidthInc);
|
||||
my1DExtProp->SetPointSize(aElem0DSize);
|
||||
|
||||
// my1DExtActor is used to show filtered edges or links between nodes
|
||||
my1DExtActor = SMESH_DeviceActor::New();
|
||||
my1DExtActor->SetUserMatrix(aMatrix);
|
||||
my1DExtActor->PickableOff();
|
||||
@ -995,8 +1000,7 @@ void SMESH_ActorDef::SetControlMode( eControl theMode, bool theCheckEntityMode )
|
||||
return;
|
||||
}
|
||||
|
||||
vtkUnstructuredGrid* aGrid = myControlActor->GetUnstructuredGrid();
|
||||
vtkIdType aNbCells = aGrid->GetNumberOfCells();
|
||||
int aNbCells = myFunctor ? myVisualObj->GetNbEntities( myFunctor->GetType() ) : 0;
|
||||
bool aShowOnlyScalarBarTitle = false;
|
||||
if(aNbCells) {
|
||||
myControlMode = theMode;
|
||||
@ -1055,25 +1059,13 @@ void SMESH_ActorDef::SetControlMode( eControl theMode, bool theCheckEntityMode )
|
||||
SetEntityMode(eEdges);
|
||||
}
|
||||
else if(myControlActor == my2DActor) {
|
||||
switch(myControlMode) {
|
||||
case eLength2D:
|
||||
case eFreeEdges:
|
||||
case eFreeFaces:
|
||||
case eMultiConnection2D:
|
||||
if (!myIsEntityModeCache){
|
||||
myEntityModeCache = GetEntityMode();
|
||||
myIsEntityModeCache=true;
|
||||
}
|
||||
SetEntityMode(eFaces);
|
||||
break;
|
||||
default:
|
||||
if (!myIsEntityModeCache){
|
||||
myEntityModeCache = GetEntityMode();
|
||||
myIsEntityModeCache=true;
|
||||
}
|
||||
SetEntityMode(eFaces);
|
||||
if (!myIsEntityModeCache){
|
||||
myEntityModeCache = GetEntityMode();
|
||||
myIsEntityModeCache=true;
|
||||
}
|
||||
}else if(myControlActor == my3DActor) {
|
||||
SetEntityMode(eFaces);
|
||||
}
|
||||
else if(myControlActor == my3DActor) {
|
||||
if (!myIsEntityModeCache){
|
||||
myEntityModeCache = GetEntityMode();
|
||||
myIsEntityModeCache=true;
|
||||
@ -1487,9 +1479,15 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation)
|
||||
case eCoincidentNodes:
|
||||
myNodeExtActor->VisibilityOn();
|
||||
break;
|
||||
case eLength:
|
||||
case eMultiConnection:
|
||||
my1DActor->VisibilityOn();
|
||||
break;
|
||||
case eFreeEdges:
|
||||
case eFreeBorders:
|
||||
case eCoincidentElems1D:
|
||||
case eLength2D:
|
||||
case eMultiConnection2D:
|
||||
my1DExtActor->VisibilityOn();
|
||||
break;
|
||||
case eFreeFaces:
|
||||
@ -1503,39 +1501,31 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation)
|
||||
case eCoincidentElems3D:
|
||||
my3DExtActor->VisibilityOn();
|
||||
break;
|
||||
case eLength2D:
|
||||
case eMultiConnection2D:
|
||||
my1DExtActor->VisibilityOn();
|
||||
break;
|
||||
default:;
|
||||
}
|
||||
if(myControlActor->GetUnstructuredGrid()->GetNumberOfCells())
|
||||
if ( myFunctor && myVisualObj->GetNbEntities( myFunctor->GetType() ))
|
||||
myScalarBarActor->VisibilityOn();
|
||||
}
|
||||
|
||||
if(myRepresentation != ePoint)
|
||||
myPickableActor->VisibilityOn();
|
||||
else {
|
||||
myNodeActor->VisibilityOn();
|
||||
}
|
||||
myPickableActor->VisibilityOn();
|
||||
|
||||
if(myEntityMode & e0DElements && GetRepresentation() != ePoint ){
|
||||
my0DActor->VisibilityOn();
|
||||
}
|
||||
if(myEntityMode & eBallElem && GetRepresentation() != ePoint ){
|
||||
myBallActor->VisibilityOn();
|
||||
}
|
||||
|
||||
if(myEntityMode & eEdges && GetRepresentation() != ePoint){
|
||||
my1DActor->VisibilityOn();
|
||||
}
|
||||
|
||||
if(myEntityMode & eFaces && GetRepresentation() != ePoint){
|
||||
my2DActor->VisibilityOn();
|
||||
}
|
||||
|
||||
if(myEntityMode & eVolumes && GetRepresentation() != ePoint){
|
||||
my3DActor->VisibilityOn();
|
||||
if ( GetRepresentation() != ePoint )
|
||||
{
|
||||
if(myEntityMode & e0DElements ){
|
||||
my0DActor->VisibilityOn();
|
||||
}
|
||||
if(myEntityMode & eBallElem ){
|
||||
myBallActor->VisibilityOn();
|
||||
}
|
||||
if(myEntityMode & eEdges && GetCellsLabeled() ){ // my1DActor shows labels only
|
||||
my1DActor->VisibilityOn();
|
||||
}
|
||||
if(myEntityMode & eFaces ){
|
||||
my2DActor->VisibilityOn();
|
||||
}
|
||||
if(myEntityMode & eVolumes ){
|
||||
my3DActor->VisibilityOn();
|
||||
}
|
||||
}
|
||||
|
||||
if(myNodeActor->GetPointsLabeled()){
|
||||
@ -1750,8 +1740,6 @@ void SMESH_ActorDef::SetRepresentation (int theMode)
|
||||
}
|
||||
|
||||
myPickableActor = myBaseActor;
|
||||
myNodeActor->SetVisibility(false);
|
||||
myNodeExtActor->SetVisibility(false);
|
||||
vtkProperty *aProp = NULL, *aBackProp = NULL;
|
||||
vtkProperty *aPropVN = NULL, *aPropVR = NULL;
|
||||
SMESH_DeviceActor::EReperesent aReperesent = SMESH_DeviceActor::EReperesent(-1);
|
||||
@ -1759,7 +1747,6 @@ void SMESH_ActorDef::SetRepresentation (int theMode)
|
||||
switch (myRepresentation) {
|
||||
case ePoint:
|
||||
myPickableActor = myNodeActor;
|
||||
myNodeActor->SetVisibility(true);
|
||||
aQuadraticMode = SMESH_Actor::eLines;
|
||||
aProp = aBackProp = aPropVN = aPropVR = myNodeProp;
|
||||
aReperesent = SMESH_DeviceActor::ePoint;
|
||||
@ -1777,54 +1764,50 @@ void SMESH_ActorDef::SetRepresentation (int theMode)
|
||||
break;
|
||||
}
|
||||
|
||||
my2DActor->SetProperty(aProp);
|
||||
my2DActor->SetBackfaceProperty(aBackProp);
|
||||
my2DActor->SetRepresentation(aReperesent);
|
||||
if ( myRepresentation != ePoint )
|
||||
{
|
||||
my2DActor->SetProperty(aProp);
|
||||
my2DActor->SetBackfaceProperty(aBackProp);
|
||||
my2DActor->SetRepresentation(aReperesent);
|
||||
|
||||
if(aQuadraticMode == SMESH_Actor::eLines)
|
||||
my2DActor->SetQuadraticArcMode(false);
|
||||
else if(aQuadraticMode == SMESH_Actor::eArcs)
|
||||
my2DActor->SetQuadraticArcMode(true);
|
||||
if(aQuadraticMode == SMESH_Actor::eLines)
|
||||
my2DActor->SetQuadraticArcMode(false);
|
||||
else if(aQuadraticMode == SMESH_Actor::eArcs)
|
||||
my2DActor->SetQuadraticArcMode(true);
|
||||
|
||||
my2DExtActor->SetRepresentation(aReperesent);
|
||||
my2DExtActor->SetRepresentation(aReperesent);
|
||||
|
||||
my3DActor->SetProperty(aPropVN);
|
||||
my3DActor->SetBackfaceProperty(aPropVR);
|
||||
my3DActor->SetRepresentation(aReperesent);
|
||||
my3DActor->SetProperty(aPropVN);
|
||||
my3DActor->SetBackfaceProperty(aPropVR);
|
||||
my3DActor->SetRepresentation(aReperesent);
|
||||
|
||||
my0DActor->SetRepresentation(aReperesent);
|
||||
myBallActor->SetRepresentation(aReperesent);
|
||||
|
||||
my1DExtActor->SetVisibility(false);
|
||||
my2DExtActor->SetVisibility(false);
|
||||
my3DExtActor->SetVisibility(false);
|
||||
switch ( myControlMode ) {
|
||||
case eLength:
|
||||
case eMultiConnection:
|
||||
aProp = aBackProp = my1DProp;
|
||||
if(myRepresentation != ePoint)
|
||||
aReperesent = SMESH_DeviceActor::eInsideframe;
|
||||
break;
|
||||
default:;
|
||||
}
|
||||
|
||||
my0DActor->SetRepresentation(aReperesent);
|
||||
myBallActor->SetRepresentation(aReperesent);
|
||||
if(aQuadraticMode == SMESH_Actor::eLines)
|
||||
my1DActor->SetQuadraticArcMode(false);
|
||||
else if(aQuadraticMode == SMESH_Actor::eArcs)
|
||||
my1DActor->SetQuadraticArcMode(true);
|
||||
|
||||
switch ( myControlMode ) {
|
||||
case eLength:
|
||||
case eMultiConnection:
|
||||
aProp = aBackProp = my1DProp;
|
||||
if(myRepresentation != ePoint)
|
||||
aReperesent = SMESH_DeviceActor::eInsideframe;
|
||||
break;
|
||||
default:;
|
||||
my1DActor->SetProperty(aProp);
|
||||
my1DActor->SetBackfaceProperty(aBackProp);
|
||||
my1DActor->SetRepresentation(aReperesent);
|
||||
|
||||
my1DExtActor->SetRepresentation(aReperesent);
|
||||
}
|
||||
|
||||
if(aQuadraticMode == SMESH_Actor::eLines)
|
||||
my1DActor->SetQuadraticArcMode(false);
|
||||
else if(aQuadraticMode == SMESH_Actor::eArcs)
|
||||
my1DActor->SetQuadraticArcMode(true);
|
||||
|
||||
my1DActor->SetProperty(aProp);
|
||||
my1DActor->SetBackfaceProperty(aBackProp);
|
||||
my1DActor->SetRepresentation(aReperesent);
|
||||
|
||||
my1DExtActor->SetRepresentation(aReperesent);
|
||||
|
||||
if(myIsPointsVisible)
|
||||
myPickableActor = myNodeActor;
|
||||
if(GetPointRepresentation())
|
||||
myNodeActor->SetVisibility(true);
|
||||
|
||||
SetMapper(myPickableActor->GetMapper());
|
||||
|
||||
@ -1886,6 +1869,7 @@ void SMESH_ActorDef::UpdateHighlight()
|
||||
}
|
||||
myNodeActor->SetRepresentation(SMESH_DeviceActor::ePoint);
|
||||
myNodeActor->GetExtractUnstructuredGrid()->SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::ePoints);
|
||||
myNodeActor->GetProperty()->Modified();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -198,7 +198,8 @@ void SMESH_CellLabelActor::RemoveFromRender(vtkRenderer* theRenderer)
|
||||
SMESH_DeviceActor::RemoveFromRender(theRenderer);
|
||||
}
|
||||
|
||||
void SMESH_CellLabelActor::UpdateLabels() {
|
||||
void SMESH_CellLabelActor::UpdateLabels()
|
||||
{
|
||||
if(myIsCellsLabeled)
|
||||
SetCellsLabeled(myIsCellsLabeled);
|
||||
}
|
||||
@ -207,7 +208,8 @@ void SMESH_CellLabelActor::UpdateLabels() {
|
||||
void SMESH_CellLabelActor::ProcessEvents(vtkObject* vtkNotUsed(theObject),
|
||||
unsigned long theEvent,
|
||||
void* theClientData,
|
||||
void* vtkNotUsed(theCallData)) {
|
||||
void* vtkNotUsed(theCallData))
|
||||
{
|
||||
SMESH_CellLabelActor* self = reinterpret_cast<SMESH_CellLabelActor*>(theClientData);
|
||||
if(self)
|
||||
self->UpdateLabels();
|
||||
|
@ -88,7 +88,7 @@ SMESH_DeviceActor
|
||||
myIsShrunk = false;
|
||||
myIsHighlited = false;
|
||||
|
||||
myRepresentation = eSurface;
|
||||
myRepresentation = SMESH_DeviceActor::EReperesent(-1);
|
||||
|
||||
myProperty = vtkProperty::New();
|
||||
myMapper = VTKViewer_PolyDataMapper::New();
|
||||
@ -306,7 +306,7 @@ SMESH_DeviceActor
|
||||
vtkUnstructuredGrid* aDataSet = vtkUnstructuredGrid::New();
|
||||
|
||||
// SetStoreIDMapping(true);
|
||||
// myExtractUnstructuredGrid->Update();
|
||||
myExtractUnstructuredGrid->Update();
|
||||
vtkUnstructuredGrid* aGrid = myExtractUnstructuredGrid->GetOutput();
|
||||
|
||||
aDataSet->ShallowCopy(aGrid);
|
||||
@ -619,7 +619,19 @@ unsigned long int
|
||||
SMESH_DeviceActor
|
||||
::GetMTime()
|
||||
{
|
||||
// cout << this->myExtractUnstructuredGrid
|
||||
// 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()
|
||||
@ -745,6 +757,8 @@ void
|
||||
SMESH_DeviceActor
|
||||
::SetRepresentation(EReperesent theMode)
|
||||
{
|
||||
if ( myRepresentation == theMode )
|
||||
return;
|
||||
switch(theMode){
|
||||
case ePoint:
|
||||
myGeomFilter->SetInside(true);
|
||||
|
Loading…
Reference in New Issue
Block a user