mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-01-19 00:10:37 +05:00
CCAR: optimise GEOM_Swig::setColor speed by using SOCC_Viewer::CreatePrs
and not updating viewer if not required
This commit is contained in:
parent
2710d4df0f
commit
2b23fe11ea
@ -472,24 +472,28 @@ void GEOM_Swig::setColor(const char* theEntry, int red, int green, int blue, boo
|
|||||||
aView->Repaint();
|
aView->Repaint();
|
||||||
} else if (OCCViewer_Viewer* occViewer = GetOCCViewer(anApp)) {
|
} else if (OCCViewer_Viewer* occViewer = GetOCCViewer(anApp)) {
|
||||||
Handle(AIS_InteractiveContext) ic = occViewer->getAISContext();
|
Handle(AIS_InteractiveContext) ic = occViewer->getAISContext();
|
||||||
AIS_ListOfInteractive List;
|
SOCC_Viewer* soccViewer = dynamic_cast<SOCC_Viewer*>(occViewer);
|
||||||
ic->DisplayedObjects(List);
|
if (soccViewer)
|
||||||
AIS_ListIteratorOfListOfInteractive ite (List);
|
{
|
||||||
for (; ite.More(); ite.Next()) {
|
SALOME_Prs* prs= soccViewer->CreatePrs( myEntry.c_str() );
|
||||||
Handle(SALOME_InteractiveObject) anObj =
|
const SOCC_Prs* anOCCPrs = dynamic_cast<const SOCC_Prs*>( prs );
|
||||||
Handle(SALOME_InteractiveObject)::DownCast(ite.Value()->GetOwner());
|
if ( !anOCCPrs || anOCCPrs->IsNull() )
|
||||||
if (!anObj.IsNull() && anObj->hasEntry() && anObj->isSame(anIO)) {
|
return;
|
||||||
Quantity_Color CSFColor =
|
|
||||||
Quantity_Color(myRed/255., myGreen/255., myBlue/255., Quantity_TOC_RGB);
|
// get objects to be displayed
|
||||||
ite.Value()->SetColor(CSFColor);
|
AIS_ListOfInteractive anAISObjects;
|
||||||
if (ite.Value()->IsKind(STANDARD_TYPE(GEOM_AISShape)))
|
anOCCPrs->GetObjects( anAISObjects );
|
||||||
Handle(GEOM_AISShape)::DownCast(ite.Value())->SetShadingColor(CSFColor);
|
AIS_ListIteratorOfListOfInteractive ite( anAISObjects );
|
||||||
ic->Redisplay(ite.Value(), true, true);
|
Quantity_Color CSFColor = Quantity_Color(myRed/255., myGreen/255., myBlue/255., Quantity_TOC_RGB);
|
||||||
if (myUpdateViewer)
|
for ( ; ite.More(); ite.Next() )
|
||||||
occViewer->update();
|
{
|
||||||
break;
|
if(!ic->IsDisplayed(ite.Value()))continue; //only displayed ais
|
||||||
|
ite.Value()->SetColor(CSFColor);
|
||||||
|
if (ite.Value()->IsKind(STANDARD_TYPE(GEOM_AISShape))) Handle(GEOM_AISShape)::DownCast(ite.Value())->SetShadingColor(CSFColor);
|
||||||
|
ite.Value()->Redisplay(Standard_True); // as in OnColor
|
||||||
|
}
|
||||||
|
if (myUpdateViewer) occViewer->update();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user