Part: Geometry Arcs inheriting from GeomTrimmedCurve
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user