Part: Geometry refactor member copy

===================================

Encapsulate Part::Geometry data member copy process in a single function (copyNonTag).

Part::Geometry derived classes need not know the specifics of the data member of Part::Geometry.

Change the delegation of the copy of extensions from clone() to copyNonTag. Because clone() relies on
copy() and now copy() of Part::Geometry data member relies on copyNonTag(), there is no actual change
to the clone() functionality, but the copy() funcionality gains the copy of the extensions via copyNonTag().
This commit is contained in:
Abdullah Tahiri
2020-11-14 06:35:22 +01:00
committed by abdullahtahiriyo
parent 6ffe65c915
commit 90dea635ac
2 changed files with 38 additions and 29 deletions

View File

@@ -372,13 +372,20 @@ void Geometry::assignTag(const Part::Geometry * geo)
throw Base::TypeError("Geometry tag can not be assigned as geometry types do not match.");
}
void Geometry::copyNonTag(const Part::Geometry * src)
{
this->Construction = src->Construction;
for(auto & ext: src->extensions)
this->extensions.push_back(ext->copy());
}
Geometry *Geometry::clone(void) const
{
Geometry* cpy = this->copy();
cpy->tag = this->tag;
for(auto & ext: extensions)
cpy->extensions.push_back(ext->copy());
// class copy is responsible for copying extensions
return cpy;
}
@@ -472,7 +479,7 @@ void GeomPoint::setHandle(const Handle(Geom_CartesianPoint)& p)
Geometry *GeomPoint::copy(void) const
{
GeomPoint *newPoint = new GeomPoint(myPoint);
newPoint->Construction = this->Construction;
newPoint->copyNonTag(this);
return newPoint;
}
@@ -929,7 +936,7 @@ const Handle(Geom_Geometry)& GeomBezierCurve::handle() const
Geometry *GeomBezierCurve::copy(void) const
{
GeomBezierCurve *newCurve = new GeomBezierCurve(myCurve);
newCurve->Construction = this->Construction;
newCurve->copyNonTag(this);
return newCurve;
}
@@ -1118,7 +1125,7 @@ Geometry *GeomBSplineCurve::copy(void) const
{
try {
GeomBSplineCurve *newCurve = new GeomBSplineCurve(myCurve);
newCurve->Construction = this->Construction;
newCurve->copyNonTag(this);
return newCurve;
}
catch (Standard_Failure& e) {
@@ -1746,7 +1753,7 @@ const Handle(Geom_Geometry)& GeomTrimmedCurve::handle() const
Geometry *GeomTrimmedCurve::copy(void) const
{
GeomTrimmedCurve *newCurve = new GeomTrimmedCurve(myCurve);
newCurve->Construction = this->Construction;
newCurve->copyNonTag(this);
return newCurve;
}
@@ -2033,7 +2040,7 @@ void GeomCircle::setHandle(const Handle(Geom_Circle)& c)
Geometry *GeomCircle::copy(void) const
{
GeomCircle *newCirc = new GeomCircle(myCurve);
newCirc->Construction = this->Construction;
newCirc->copyNonTag(this);
return newCirc;
}
@@ -2225,7 +2232,7 @@ Geometry *GeomArcOfCircle::copy(void) const
{
GeomArcOfCircle* copy = new GeomArcOfCircle();
copy->setHandle(this->myCurve);
copy->Construction = this->Construction;
copy->copyNonTag(this);
return copy;
}
@@ -2454,7 +2461,7 @@ void GeomEllipse::setHandle(const Handle(Geom_Ellipse) &e)
Geometry *GeomEllipse::copy(void) const
{
GeomEllipse *newEllipse = new GeomEllipse(myCurve);
newEllipse->Construction = this->Construction;
newEllipse->copyNonTag(this);
return newEllipse;
}
@@ -2710,7 +2717,7 @@ Geometry *GeomArcOfEllipse::copy(void) const
{
GeomArcOfEllipse* copy = new GeomArcOfEllipse();
copy->setHandle(this->myCurve);
copy->Construction = this->Construction;
copy->copyNonTag(this);
return copy;
}
@@ -2979,7 +2986,7 @@ void GeomHyperbola::setHandle(const Handle(Geom_Hyperbola)& c)
Geometry *GeomHyperbola::copy(void) const
{
GeomHyperbola *newHyp = new GeomHyperbola(myCurve);
newHyp->Construction = this->Construction;
newHyp->copyNonTag(this);
return newHyp;
}
@@ -3148,7 +3155,7 @@ Geometry *GeomArcOfHyperbola::copy(void) const
{
GeomArcOfHyperbola* copy = new GeomArcOfHyperbola();
copy->setHandle(this->myCurve);
copy->Construction = this->Construction;
copy->copyNonTag(this);
return copy;
}
@@ -3407,7 +3414,7 @@ void GeomParabola::setHandle(const Handle(Geom_Parabola)& c)
Geometry *GeomParabola::copy(void) const
{
GeomParabola *newPar = new GeomParabola(myCurve);
newPar->Construction = this->Construction;
newPar->copyNonTag(this);
return newPar;
}
@@ -3557,7 +3564,7 @@ Geometry *GeomArcOfParabola::copy(void) const
{
GeomArcOfParabola* copy = new GeomArcOfParabola();
copy->setHandle(this->myCurve);
copy->Construction = this->Construction;
copy->copyNonTag(this);
return copy;
}
@@ -3785,7 +3792,7 @@ void GeomLine::setHandle(const Handle(Geom_Line)& l)
Geometry *GeomLine::copy(void) const
{
GeomLine *newLine = new GeomLine(myCurve);
newLine->Construction = this->Construction;
newLine->copyNonTag(this);
return newLine;
}
@@ -3883,7 +3890,7 @@ Geometry *GeomLineSegment::copy(void)const
{
GeomLineSegment *tempCurve = new GeomLineSegment();
tempCurve->myCurve = Handle(Geom_TrimmedCurve)::DownCast(myCurve->Copy());
tempCurve->Construction = this->Construction;
tempCurve->copyNonTag(this);
return tempCurve;
}
@@ -4029,7 +4036,7 @@ GeomOffsetCurve::~GeomOffsetCurve()
Geometry *GeomOffsetCurve::copy(void) const
{
GeomOffsetCurve *newCurve = new GeomOffsetCurve(myCurve);
newCurve->Construction = this->Construction;
newCurve->copyNonTag(this);
return newCurve;
}
@@ -4201,7 +4208,7 @@ void GeomBezierSurface::setHandle(const Handle(Geom_BezierSurface)& b)
Geometry *GeomBezierSurface::copy(void) const
{
GeomBezierSurface *newSurf = new GeomBezierSurface(mySurface);
newSurf->Construction = this->Construction;
newSurf->copyNonTag(this);
return newSurf;
}
@@ -4260,7 +4267,7 @@ const Handle(Geom_Geometry)& GeomBSplineSurface::handle() const
Geometry *GeomBSplineSurface::copy(void) const
{
GeomBSplineSurface *newSurf = new GeomBSplineSurface(mySurface);
newSurf->Construction = this->Construction;
newSurf->copyNonTag(this);
return newSurf;
}
@@ -4307,7 +4314,7 @@ Geometry *GeomCylinder::copy(void) const
{
GeomCylinder *tempCurve = new GeomCylinder();
tempCurve->mySurface = Handle(Geom_CylindricalSurface)::DownCast(mySurface->Copy());
tempCurve->Construction = this->Construction;
tempCurve->copyNonTag(this);
return tempCurve;
}
@@ -4354,7 +4361,7 @@ Geometry *GeomCone::copy(void) const
{
GeomCone *tempCurve = new GeomCone();
tempCurve->mySurface = Handle(Geom_ConicalSurface)::DownCast(mySurface->Copy());
tempCurve->Construction = this->Construction;
tempCurve->copyNonTag(this);
return tempCurve;
}
@@ -4401,7 +4408,7 @@ Geometry *GeomToroid::copy(void) const
{
GeomToroid *tempCurve = new GeomToroid();
tempCurve->mySurface = Handle(Geom_ToroidalSurface)::DownCast(mySurface->Copy());
tempCurve->Construction = this->Construction;
tempCurve->copyNonTag(this);
return tempCurve;
}
@@ -4448,7 +4455,7 @@ Geometry *GeomSphere::copy(void) const
{
GeomSphere *tempCurve = new GeomSphere();
tempCurve->mySurface = Handle(Geom_SphericalSurface)::DownCast(mySurface->Copy());
tempCurve->Construction = this->Construction;
tempCurve->copyNonTag(this);
return tempCurve;
}
@@ -4495,7 +4502,7 @@ Geometry *GeomPlane::copy(void) const
{
GeomPlane *tempCurve = new GeomPlane();
tempCurve->mySurface = Handle(Geom_Plane)::DownCast(mySurface->Copy());
tempCurve->Construction = this->Construction;
tempCurve->copyNonTag(this);
return tempCurve;
}
@@ -4544,7 +4551,7 @@ const Handle(Geom_Geometry)& GeomOffsetSurface::handle() const
Geometry *GeomOffsetSurface::copy(void) const
{
GeomOffsetSurface *newSurf = new GeomOffsetSurface(mySurface);
newSurf->Construction = this->Construction;
newSurf->copyNonTag(this);
return newSurf;
}
@@ -4599,7 +4606,7 @@ const Handle(Geom_Geometry)& GeomPlateSurface::handle() const
Geometry *GeomPlateSurface::copy(void) const
{
GeomPlateSurface *newSurf = new GeomPlateSurface(mySurface);
newSurf->Construction = this->Construction;
newSurf->copyNonTag(this);
return newSurf;
}
@@ -4654,7 +4661,7 @@ const Handle(Geom_Geometry)& GeomTrimmedSurface::handle() const
Geometry *GeomTrimmedSurface::copy(void) const
{
GeomTrimmedSurface *newSurf = new GeomTrimmedSurface(mySurface);
newSurf->Construction = this->Construction;
newSurf->copyNonTag(this);
return newSurf;
}
@@ -4703,7 +4710,7 @@ const Handle(Geom_Geometry)& GeomSurfaceOfRevolution::handle() const
Geometry *GeomSurfaceOfRevolution::copy(void) const
{
GeomSurfaceOfRevolution *newSurf = new GeomSurfaceOfRevolution(mySurface);
newSurf->Construction = this->Construction;
newSurf->copyNonTag(this);
return newSurf;
}
@@ -4752,7 +4759,7 @@ const Handle(Geom_Geometry)& GeomSurfaceOfExtrusion::handle() const
Geometry *GeomSurfaceOfExtrusion::copy(void) const
{
GeomSurfaceOfExtrusion *newSurf = new GeomSurfaceOfExtrusion(mySurface);
newSurf->Construction = this->Construction;
newSurf->copyNonTag(this);
return newSurf;
}