if possible then keep canonical curve and avoid to get a B-spline
This commit is contained in:
parent
2dcbba9c33
commit
1073d06ef5
|
@ -49,6 +49,7 @@
|
||||||
# include <BRepBuilderAPI_MakeEdge.hxx>
|
# include <BRepBuilderAPI_MakeEdge.hxx>
|
||||||
# include <BRepAdaptor_Surface.hxx>
|
# include <BRepAdaptor_Surface.hxx>
|
||||||
# include <BRepLib.hxx>
|
# include <BRepLib.hxx>
|
||||||
|
# include <BRepAdaptor_Curve.hxx>
|
||||||
# include <TopoDS.hxx>
|
# include <TopoDS.hxx>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -112,6 +113,69 @@ PyObject* Curve2dPy::reverse(PyObject * args)
|
||||||
|
|
||||||
namespace Part {
|
namespace Part {
|
||||||
extern Py::Object shape2pyshape(const TopoDS_Shape &shape);
|
extern Py::Object shape2pyshape(const TopoDS_Shape &shape);
|
||||||
|
|
||||||
|
TopoDS_Edge create3dCurve(const TopoDS_Edge& edge)
|
||||||
|
{
|
||||||
|
TopoDS_Edge edge3d;
|
||||||
|
BRepAdaptor_Curve adapt_curve(edge);
|
||||||
|
switch(adapt_curve.GetType()) {
|
||||||
|
case GeomAbs_Line:
|
||||||
|
{
|
||||||
|
BRepBuilderAPI_MakeEdge mkBuilder3d(adapt_curve.Line(),
|
||||||
|
adapt_curve.FirstParameter(),
|
||||||
|
adapt_curve.LastParameter());
|
||||||
|
edge3d = mkBuilder3d.Edge();
|
||||||
|
} break;
|
||||||
|
case GeomAbs_Circle:
|
||||||
|
{
|
||||||
|
BRepBuilderAPI_MakeEdge mkBuilder3d(adapt_curve.Circle(),
|
||||||
|
adapt_curve.FirstParameter(),
|
||||||
|
adapt_curve.LastParameter());
|
||||||
|
edge3d = mkBuilder3d.Edge();
|
||||||
|
} break;
|
||||||
|
case GeomAbs_Ellipse:
|
||||||
|
{
|
||||||
|
BRepBuilderAPI_MakeEdge mkBuilder3d(adapt_curve.Ellipse(),
|
||||||
|
adapt_curve.FirstParameter(),
|
||||||
|
adapt_curve.LastParameter());
|
||||||
|
edge3d = mkBuilder3d.Edge();
|
||||||
|
} break;
|
||||||
|
case GeomAbs_Hyperbola:
|
||||||
|
{
|
||||||
|
BRepBuilderAPI_MakeEdge mkBuilder3d(adapt_curve.Hyperbola(),
|
||||||
|
adapt_curve.FirstParameter(),
|
||||||
|
adapt_curve.LastParameter());
|
||||||
|
edge3d = mkBuilder3d.Edge();
|
||||||
|
} break;
|
||||||
|
case GeomAbs_Parabola:
|
||||||
|
{
|
||||||
|
BRepBuilderAPI_MakeEdge mkBuilder3d(adapt_curve.Parabola(),
|
||||||
|
adapt_curve.FirstParameter(),
|
||||||
|
adapt_curve.LastParameter());
|
||||||
|
edge3d = mkBuilder3d.Edge();
|
||||||
|
} break;
|
||||||
|
case GeomAbs_BezierCurve:
|
||||||
|
{
|
||||||
|
BRepBuilderAPI_MakeEdge mkBuilder3d(adapt_curve.Bezier(),
|
||||||
|
adapt_curve.FirstParameter(),
|
||||||
|
adapt_curve.LastParameter());
|
||||||
|
edge3d = mkBuilder3d.Edge();
|
||||||
|
} break;
|
||||||
|
case GeomAbs_BSplineCurve:
|
||||||
|
{
|
||||||
|
BRepBuilderAPI_MakeEdge mkBuilder3d(adapt_curve.BSpline(),
|
||||||
|
adapt_curve.FirstParameter(),
|
||||||
|
adapt_curve.LastParameter());
|
||||||
|
edge3d = mkBuilder3d.Edge();
|
||||||
|
} break;
|
||||||
|
default:
|
||||||
|
edge3d = edge;
|
||||||
|
BRepLib::BuildCurves3d(edge3d);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return edge3d;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject* Curve2dPy::toShape(PyObject *args)
|
PyObject* Curve2dPy::toShape(PyObject *args)
|
||||||
|
@ -157,8 +221,9 @@ PyObject* Curve2dPy::toShape(PyObject *args)
|
||||||
Handle_Geom2d_Curve curv = Handle_Geom2d_Curve::DownCast(getGeometry2dPtr()->handle());
|
Handle_Geom2d_Curve curv = Handle_Geom2d_Curve::DownCast(getGeometry2dPtr()->handle());
|
||||||
|
|
||||||
BRepBuilderAPI_MakeEdge mkBuilder(curv, surf);
|
BRepBuilderAPI_MakeEdge mkBuilder(curv, surf);
|
||||||
TopoDS_Shape edge = mkBuilder.Shape();
|
TopoDS_Edge edge = mkBuilder.Edge();
|
||||||
BRepLib::BuildCurves3d(edge);
|
edge = create3dCurve(edge);
|
||||||
|
|
||||||
return Py::new_reference_to(shape2pyshape(edge));
|
return Py::new_reference_to(shape2pyshape(edge));
|
||||||
}
|
}
|
||||||
catch (Standard_Failure) {
|
catch (Standard_Failure) {
|
||||||
|
@ -176,8 +241,9 @@ PyObject* Curve2dPy::toShape(PyObject *args)
|
||||||
Handle_Geom2d_Curve curv = Handle_Geom2d_Curve::DownCast(getGeometry2dPtr()->handle());
|
Handle_Geom2d_Curve curv = Handle_Geom2d_Curve::DownCast(getGeometry2dPtr()->handle());
|
||||||
|
|
||||||
BRepBuilderAPI_MakeEdge mkBuilder(curv, surf, u1, u2);
|
BRepBuilderAPI_MakeEdge mkBuilder(curv, surf, u1, u2);
|
||||||
TopoDS_Shape edge = mkBuilder.Shape();
|
TopoDS_Edge edge = mkBuilder.Edge();
|
||||||
BRepLib::BuildCurves3d(edge);
|
edge = create3dCurve(edge);
|
||||||
|
|
||||||
return Py::new_reference_to(shape2pyshape(edge));
|
return Py::new_reference_to(shape2pyshape(edge));
|
||||||
}
|
}
|
||||||
catch (Standard_Failure) {
|
catch (Standard_Failure) {
|
||||||
|
@ -195,8 +261,9 @@ PyObject* Curve2dPy::toShape(PyObject *args)
|
||||||
|
|
||||||
BRepAdaptor_Surface adapt(face);
|
BRepAdaptor_Surface adapt(face);
|
||||||
BRepBuilderAPI_MakeEdge mkBuilder(curv, adapt.Surface().Surface());
|
BRepBuilderAPI_MakeEdge mkBuilder(curv, adapt.Surface().Surface());
|
||||||
TopoDS_Shape edge = mkBuilder.Shape();
|
TopoDS_Edge edge = mkBuilder.Edge();
|
||||||
BRepLib::BuildCurves3d(edge);
|
edge = create3dCurve(edge);
|
||||||
|
|
||||||
return Py::new_reference_to(shape2pyshape(edge));
|
return Py::new_reference_to(shape2pyshape(edge));
|
||||||
}
|
}
|
||||||
catch (Standard_Failure) {
|
catch (Standard_Failure) {
|
||||||
|
@ -214,8 +281,9 @@ PyObject* Curve2dPy::toShape(PyObject *args)
|
||||||
|
|
||||||
BRepAdaptor_Surface adapt(face);
|
BRepAdaptor_Surface adapt(face);
|
||||||
BRepBuilderAPI_MakeEdge mkBuilder(curv, adapt.Surface().Surface(), u1, u2);
|
BRepBuilderAPI_MakeEdge mkBuilder(curv, adapt.Surface().Surface(), u1, u2);
|
||||||
TopoDS_Shape edge = mkBuilder.Shape();
|
TopoDS_Edge edge = mkBuilder.Edge();
|
||||||
BRepLib::BuildCurves3d(edge);
|
edge = create3dCurve(edge);
|
||||||
|
|
||||||
return Py::new_reference_to(shape2pyshape(edge));
|
return Py::new_reference_to(shape2pyshape(edge));
|
||||||
}
|
}
|
||||||
catch (Standard_Failure) {
|
catch (Standard_Failure) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user