Part: Geometry Arcs inheriting from GeomTrimmedCurve

This commit is contained in:
Abdullah Tahiri
2018-10-20 15:47:53 +02:00
committed by wmayer
parent b3cf67dffe
commit c3592c8ff4
3 changed files with 120 additions and 126 deletions

View File

@@ -477,6 +477,7 @@ PyMOD_INIT_FUNC(Part)
Part::GeomBezierCurve ::init();
Part::GeomBSplineCurve ::init();
Part::GeomConic ::init();
Part::GeomTrimmedCurve ::init();
Part::GeomArcOfConic ::init();
Part::GeomCircle ::init();
Part::GeomArcOfCircle ::init();
@@ -489,7 +490,6 @@ PyMOD_INIT_FUNC(Part)
Part::GeomLine ::init();
Part::GeomLineSegment ::init();
Part::GeomOffsetCurve ::init();
Part::GeomTrimmedCurve ::init();
Part::GeomSurface ::init();
Part::GeomBezierSurface ::init();
Part::GeomBSplineSurface ::init();

View File

@@ -1441,7 +1441,89 @@ bool GeomConic::isReversed() const
// -------------------------------------------------
TYPESYSTEM_SOURCE_ABSTRACT(Part::GeomArcOfConic,Part::GeomCurve)
TYPESYSTEM_SOURCE(Part::GeomTrimmedCurve,Part::GeomCurve)
GeomTrimmedCurve::GeomTrimmedCurve()
{
}
GeomTrimmedCurve::GeomTrimmedCurve(const Handle(Geom_TrimmedCurve)& c)
{
setHandle(c);
}
GeomTrimmedCurve::~GeomTrimmedCurve()
{
}
void GeomTrimmedCurve::setHandle(const Handle(Geom_TrimmedCurve)& c)
{
this->myCurve = Handle(Geom_TrimmedCurve)::DownCast(c->Copy());
}
const Handle(Geom_Geometry)& GeomTrimmedCurve::handle() const
{
return myCurve;
}
Geometry *GeomTrimmedCurve::copy(void) const
{
GeomTrimmedCurve *newCurve = new GeomTrimmedCurve(myCurve);
newCurve->Construction = this->Construction;
return newCurve;
}
// Persistence implementer
unsigned int GeomTrimmedCurve::getMemSize (void) const {assert(0); return 0;/* not implemented yet */}
void GeomTrimmedCurve::Save (Base::Writer &/*writer*/) const {assert(0); /* not implemented yet */}
void GeomTrimmedCurve::Restore (Base::XMLReader &/*reader*/) {assert(0); /* not implemented yet */}
PyObject *GeomTrimmedCurve::getPyObject(void)
{
return 0;
}
bool GeomTrimmedCurve::intersectBasisCurves( const GeomTrimmedCurve * c,
std::vector<std::pair<Base::Vector3d, Base::Vector3d>>& points,
double tol) const
{
Handle(Geom_TrimmedCurve) curve1 = Handle(Geom_TrimmedCurve)::DownCast(handle());
Handle(Geom_TrimmedCurve) curve2 = Handle(Geom_TrimmedCurve)::DownCast(c->handle());
Handle(Geom_Conic) bcurve1 = Handle(Geom_Conic)::DownCast( curve1->BasisCurve() );
Handle(Geom_Conic) bcurve2 = Handle(Geom_Conic)::DownCast( curve2->BasisCurve() );
try {
if(!bcurve1.IsNull() && !bcurve2.IsNull()) {
GeomAPI_ExtremaCurveCurve intersector(bcurve1, bcurve2);
if (intersector.NbExtrema() == 0 || intersector.LowerDistance() > tol) {
// No intersection
return false;
}
for (int i = 1; i <= intersector.NbExtrema(); i++) {
if (intersector.Distance(i) > tol)
continue;
gp_Pnt p1, p2;
intersector.Points(i, p1, p2);
points.emplace_back(Base::Vector3d(p1.X(),p1.Y(),p1.Z()),Base::Vector3d(p2.X(),p2.Y(),p2.Z()));
}
return points.size()>0?true:false;
}
return false;
}
catch (Standard_Failure& e) {
return false;
}
}
// -------------------------------------------------
TYPESYSTEM_SOURCE_ABSTRACT(Part::GeomArcOfConic,Part::GeomTrimmedCurve)
GeomArcOfConic::GeomArcOfConic()
{
@@ -1641,45 +1723,6 @@ void GeomArcOfConic::setXAxisDir(const Base::Vector3d& newdir)
}
}
bool GeomArcOfConic::intersectBasisCurves( const GeomArcOfConic * c,
std::vector<std::pair<Base::Vector3d, Base::Vector3d>>& points,
double tol) const
{
Handle(Geom_TrimmedCurve) curve1 = Handle(Geom_TrimmedCurve)::DownCast(handle());
Handle(Geom_TrimmedCurve) curve2 = Handle(Geom_TrimmedCurve)::DownCast(c->handle());
Handle(Geom_Conic) bcurve1 = Handle(Geom_Conic)::DownCast( curve1->BasisCurve() );
Handle(Geom_Conic) bcurve2 = Handle(Geom_Conic)::DownCast( curve2->BasisCurve() );
try {
if(!bcurve1.IsNull() && !bcurve2.IsNull()) {
GeomAPI_ExtremaCurveCurve intersector(bcurve1, bcurve2);
if (intersector.NbExtrema() == 0 || intersector.LowerDistance() > tol) {
// No intersection
return false;
}
for (int i = 1; i <= intersector.NbExtrema(); i++) {
if (intersector.Distance(i) > tol)
continue;
gp_Pnt p1, p2;
intersector.Points(i, p1, p2);
points.emplace_back(Base::Vector3d(p1.X(),p1.Y(),p1.Z()),Base::Vector3d(p2.X(),p2.Y(),p2.Z()));
}
return points.size()>0?true:false;
}
return false;
}
catch (Standard_Failure& e) {
return false;
}
}
// -------------------------------------------------
TYPESYSTEM_SOURCE(Part::GeomCircle,Part::GeomConic)
@@ -3673,6 +3716,10 @@ GeomOffsetCurve::GeomOffsetCurve(const Handle(Geom_Curve)& c, double offset, con
this->myCurve = new Geom_OffsetCurve(c, offset, dir);
}
GeomOffsetCurve::GeomOffsetCurve(const Handle(Geom_Curve)& c, double offset, Base::Vector3d& dir):GeomOffsetCurve(c,offset,gp_Dir(dir.x,dir.y,dir.z))
{
}
GeomOffsetCurve::GeomOffsetCurve(const Handle(Geom_OffsetCurve)& c)
{
setHandle(c);
@@ -3711,49 +3758,6 @@ PyObject *GeomOffsetCurve::getPyObject(void)
// -------------------------------------------------
TYPESYSTEM_SOURCE(Part::GeomTrimmedCurve,Part::GeomCurve)
GeomTrimmedCurve::GeomTrimmedCurve()
{
}
GeomTrimmedCurve::GeomTrimmedCurve(const Handle(Geom_TrimmedCurve)& c)
{
setHandle(c);
}
GeomTrimmedCurve::~GeomTrimmedCurve()
{
}
void GeomTrimmedCurve::setHandle(const Handle(Geom_TrimmedCurve)& c)
{
this->myCurve = Handle(Geom_TrimmedCurve)::DownCast(c->Copy());
}
const Handle(Geom_Geometry)& GeomTrimmedCurve::handle() const
{
return myCurve;
}
Geometry *GeomTrimmedCurve::copy(void) const
{
GeomTrimmedCurve *newCurve = new GeomTrimmedCurve(myCurve);
newCurve->Construction = this->Construction;
return newCurve;
}
// Persistence implementer
unsigned int GeomTrimmedCurve::getMemSize (void) const {assert(0); return 0;/* not implemented yet */}
void GeomTrimmedCurve::Save (Base::Writer &/*writer*/) const {assert(0); /* not implemented yet */}
void GeomTrimmedCurve::Restore (Base::XMLReader &/*reader*/) {assert(0); /* not implemented yet */}
PyObject *GeomTrimmedCurve::getPyObject(void)
{
return 0;
}
// -------------------------------------------------
TYPESYSTEM_SOURCE_ABSTRACT(Part::GeomSurface,Part::Geometry)

View File

@@ -328,7 +328,36 @@ public:
const Handle(Geom_Geometry)& handle() const = 0;
};
class PartExport GeomArcOfConic : public GeomCurve
class PartExport GeomTrimmedCurve : public GeomCurve
{
TYPESYSTEM_HEADER();
public:
GeomTrimmedCurve();
GeomTrimmedCurve(const Handle(Geom_TrimmedCurve)&);
virtual ~GeomTrimmedCurve();
virtual Geometry *copy(void) const;
// Persistence implementer ---------------------
virtual unsigned int getMemSize(void) const;
virtual void Save(Base::Writer &/*writer*/) const;
virtual void Restore(Base::XMLReader &/*reader*/);
// Base implementer ----------------------------
virtual PyObject *getPyObject(void);
void setHandle(const Handle(Geom_TrimmedCurve)&);
const Handle(Geom_Geometry)& handle() const;
bool intersectBasisCurves( const GeomTrimmedCurve * c,
std::vector<std::pair<Base::Vector3d, Base::Vector3d>>& points,
double tol = Precision::Confusion()) const;
protected:
Handle(Geom_TrimmedCurve) myCurve;
};
class PartExport GeomArcOfConic : public GeomTrimmedCurve
{
TYPESYSTEM_HEADER();
@@ -369,10 +398,6 @@ public:
virtual PyObject *getPyObject(void) = 0;
const Handle(Geom_Geometry)& handle() const = 0;
bool intersectBasisCurves( const GeomArcOfConic * c,
std::vector<std::pair<Base::Vector3d, Base::Vector3d>>& points,
double tol = Precision::Confusion()) const;
};
class PartExport GeomCircle : public GeomConic
@@ -430,8 +455,6 @@ public:
void setHandle(const Handle(Geom_Circle)&);
const Handle(Geom_Geometry)& handle() const;
private:
Handle(Geom_TrimmedCurve) myCurve;
};
class PartExport GeomEllipse : public GeomConic
@@ -495,9 +518,6 @@ public:
void setHandle(const Handle(Geom_TrimmedCurve)&);
void setHandle(const Handle(Geom_Ellipse)&);
const Handle(Geom_Geometry)& handle() const;
private:
Handle(Geom_TrimmedCurve) myCurve;
};
@@ -560,9 +580,6 @@ public:
void setHandle(const Handle(Geom_TrimmedCurve)&);
void setHandle(const Handle(Geom_Hyperbola)&);
const Handle(Geom_Geometry)& handle() const;
private:
Handle(Geom_TrimmedCurve) myCurve;
};
class PartExport GeomParabola : public GeomConic
@@ -620,9 +637,6 @@ public:
void setHandle(const Handle(Geom_TrimmedCurve)&);
void setHandle(const Handle(Geom_Parabola)&);
const Handle(Geom_Geometry)& handle() const;
private:
Handle(Geom_TrimmedCurve) myCurve;
};
class PartExport GeomLine : public GeomCurve
@@ -653,7 +667,7 @@ private:
Handle(Geom_Line) myCurve;
};
class PartExport GeomLineSegment : public GeomCurve
class PartExport GeomLineSegment : public GeomTrimmedCurve
{
TYPESYSTEM_HEADER();
public:
@@ -679,8 +693,6 @@ public:
void setHandle(const Handle(Geom_Line)&);
const Handle(Geom_Geometry)& handle() const;
private:
Handle(Geom_TrimmedCurve) myCurve;
};
class PartExport GeomOffsetCurve : public GeomCurve
@@ -689,6 +701,7 @@ class PartExport GeomOffsetCurve : public GeomCurve
public:
GeomOffsetCurve();
GeomOffsetCurve(const Handle(Geom_Curve)&, double, const gp_Dir&);
GeomOffsetCurve(const Handle(Geom_Curve)&, double, Base::Vector3d&);
GeomOffsetCurve(const Handle(Geom_OffsetCurve)&);
virtual ~GeomOffsetCurve();
virtual Geometry *copy(void) const;
@@ -707,29 +720,6 @@ private:
Handle(Geom_OffsetCurve) myCurve;
};
class PartExport GeomTrimmedCurve : public GeomCurve
{
TYPESYSTEM_HEADER();
public:
GeomTrimmedCurve();
GeomTrimmedCurve(const Handle(Geom_TrimmedCurve)&);
virtual ~GeomTrimmedCurve();
virtual Geometry *copy(void) const;
// Persistence implementer ---------------------
virtual unsigned int getMemSize(void) const;
virtual void Save(Base::Writer &/*writer*/) const;
virtual void Restore(Base::XMLReader &/*reader*/);
// Base implementer ----------------------------
virtual PyObject *getPyObject(void);
void setHandle(const Handle(Geom_TrimmedCurve)&);
const Handle(Geom_Geometry)& handle() const;
private:
Handle(Geom_TrimmedCurve) myCurve;
};
class PartExport GeomSurface : public Geometry
{
TYPESYSTEM_HEADER();