mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-24 13:50:49 +03:00
0028404: DRAW - avoid useless preparation of display data when shape is not shown
Class DBRep_DrawableShape is changed to postpone generation of display data until the shape is actually displayed (for the first time). Test perf draw bug28404 is added.
This commit is contained in:
@@ -104,18 +104,16 @@ DBRep_DrawableShape::DBRep_DrawableShape
|
||||
myRgN(Standard_False),
|
||||
myHid(Standard_False)
|
||||
{
|
||||
Set(aShape);
|
||||
myShape = aShape;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : Set
|
||||
//function : updateDisplayData
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
void DBRep_DrawableShape::Set(const TopoDS_Shape& aShape)
|
||||
void DBRep_DrawableShape::updateDisplayData () const
|
||||
{
|
||||
myShape = aShape;
|
||||
|
||||
myFaces.Clear();
|
||||
myEdges.Clear();
|
||||
|
||||
@@ -154,7 +152,7 @@ void DBRep_DrawableShape::Set(const TopoDS_Shape& aShape)
|
||||
//==============================================================
|
||||
|
||||
TopTools_IndexedDataMapOfShapeListOfShape edgemap;
|
||||
TopExp::MapShapesAndAncestors(aShape,TopAbs_EDGE,TopAbs_FACE,edgemap);
|
||||
TopExp::MapShapesAndAncestors(myShape,TopAbs_EDGE,TopAbs_FACE,edgemap);
|
||||
Standard_Integer iedge;
|
||||
|
||||
for (iedge = 1; iedge <= edgemap.Extent(); iedge++) {
|
||||
@@ -358,6 +356,9 @@ void DBRep_DrawableShape::DrawOn(Draw_Display& dis) const
|
||||
return;
|
||||
}
|
||||
|
||||
if (myFaces.IsEmpty() || myEdges.IsEmpty())
|
||||
updateDisplayData();
|
||||
|
||||
// hidden lines
|
||||
if (myHLR) {
|
||||
DBRep_DrawableShape* p = (DBRep_DrawableShape*) this;
|
||||
@@ -610,7 +611,7 @@ void DBRep_DrawableShape::DrawOn(Draw_Display& dis) const
|
||||
if (aSurf.IsNull() || mytriangulations) {
|
||||
Tr = BRep_Tool::Triangulation(F->Face(), loc);
|
||||
if (!Tr.IsNull()) {
|
||||
Display(Tr, loc.Transformation(), dis);
|
||||
display(Tr, loc.Transformation(), dis);
|
||||
}
|
||||
}
|
||||
itf.Next();
|
||||
@@ -1093,11 +1094,11 @@ void DBRep_DrawableShape::LastPick(TopoDS_Shape& s,
|
||||
|
||||
|
||||
//=======================================================================
|
||||
//function : Display
|
||||
//function : display
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
|
||||
void DBRep_DrawableShape::Display(const Handle(Poly_Triangulation)& T,
|
||||
void DBRep_DrawableShape::display(const Handle(Poly_Triangulation)& T,
|
||||
const gp_Trsf& tr,
|
||||
Draw_Display& dis) const
|
||||
{
|
||||
|
@@ -53,8 +53,6 @@ public:
|
||||
|
||||
Standard_EXPORT DBRep_DrawableShape(const TopoDS_Shape& C, const Draw_Color& FreeCol, const Draw_Color& ConnCol, const Draw_Color& EdgeCol, const Draw_Color& IsosCol, const Standard_Real size, const Standard_Integer nbisos, const Standard_Integer discret);
|
||||
|
||||
Standard_EXPORT void Set (const TopoDS_Shape& C);
|
||||
|
||||
//! Changes the number of isoparametric curves in a shape.
|
||||
Standard_EXPORT void ChangeNbIsos (const Standard_Integer NbIsos);
|
||||
|
||||
@@ -113,20 +111,21 @@ public:
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(DBRep_DrawableShape,Draw_Drawable3D)
|
||||
|
||||
protected:
|
||||
|
||||
private:
|
||||
|
||||
void display (const Handle(Poly_Triangulation)& T, const gp_Trsf& tr, Draw_Display& dis) const;
|
||||
|
||||
//! Updates internal data necessary for display
|
||||
void updateDisplayData () const;
|
||||
|
||||
private:
|
||||
|
||||
|
||||
Standard_EXPORT void Display (const Handle(Poly_Triangulation)& T, const gp_Trsf& tr, Draw_Display& dis) const;
|
||||
|
||||
TopoDS_Shape myShape;
|
||||
DBRep_ListOfEdge myEdges;
|
||||
DBRep_ListOfFace myFaces;
|
||||
|
||||
mutable DBRep_ListOfEdge myEdges;
|
||||
mutable DBRep_ListOfFace myFaces;
|
||||
DBRep_ListOfHideData myHidData;
|
||||
|
||||
Standard_Real mySize;
|
||||
Standard_Integer myDiscret;
|
||||
Draw_Color myFreeCol;
|
||||
|
Reference in New Issue
Block a user