Py::Object TopoShapeEdgePy::getCurve() const { const TopoDS_Edge& e = TopoDS::Edge(getTopoShapePtr()->_Shape); BRepAdaptor_Curve adapt(e); switch(adapt.GetType()) { case GeomAbs_Line: { GeomLineSegment* line = new GeomLineSegment(); Handle_Geom_TrimmedCurve this_curv = Handle_Geom_TrimmedCurve::DownCast (line->handle()); Handle_Geom_Line this_line = Handle_Geom_Line::DownCast (this_curv->BasisCurve()); this_line->SetLin(adapt.Line()); this_curv->SetTrim(adapt.FirstParameter(), adapt.LastParameter()); return Py::Object(new LinePy(line),true); } case GeomAbs_Circle: { GeomCircle* circle = new GeomCircle(); Handle_Geom_Circle this_curv = Handle_Geom_Circle::DownCast (circle->handle()); this_curv->SetCirc(adapt.Circle()); //Standard_Real dd = adapt.FirstParameter(); //Standard_Real ee = adapt.LastParameter(); return Py::Object(new CirclePy(circle),true); } case GeomAbs_Ellipse: { GeomEllipse* elips = new GeomEllipse(); Handle_Geom_Ellipse this_curv = Handle_Geom_Ellipse::DownCast (elips->handle()); this_curv->SetElips(adapt.Ellipse()); return Py::Object(new EllipsePy(elips),true); } case GeomAbs_Hyperbola: { GeomHyperbola* hypr = new GeomHyperbola(); Handle_Geom_Hyperbola this_curv = Handle_Geom_Hyperbola::DownCast (hypr->handle()); this_curv->SetHypr(adapt.Hyperbola()); return Py::Object(new HyperbolaPy(hypr),true); } case GeomAbs_Parabola: { GeomParabola* parab = new GeomParabola(); Handle_Geom_Parabola this_curv = Handle_Geom_Parabola::DownCast (parab->handle()); this_curv->SetParab(adapt.Parabola()); return Py::Object(new ParabolaPy(parab),true); } case GeomAbs_BezierCurve: { GeomBezierCurve* curve = new GeomBezierCurve(adapt.Bezier()); return Py::Object(new BezierCurvePy(curve),true); } case GeomAbs_BSplineCurve: { GeomBSplineCurve* curve = new GeomBSplineCurve(adapt.BSpline()); return Py::Object(new BSplineCurvePy(curve),true); } case GeomAbs_OtherCurve: break; } throw Py::TypeError("undefined curve type"); }
Py::Object TopoShapeEdgePy::getCurve() const { const TopoDS_Edge& e = TopoDS::Edge(getTopoShapePtr()->getShape()); BRepAdaptor_Curve adapt(e); switch(adapt.GetType()) { case GeomAbs_Line: { static bool LineOld = true; static bool init = false; if (!init) { init = true; Base::Reference<ParameterGrp> hPartGrp = App::GetApplication().GetUserParameter() .GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Part"); Base::Reference<ParameterGrp> hGenPGrp = hPartGrp->GetGroup("General"); LineOld = hGenPGrp->GetBool("LineOld", false); } if (LineOld) { GeomLineSegment* line = new GeomLineSegment(); Handle(Geom_TrimmedCurve) this_curv = Handle(Geom_TrimmedCurve)::DownCast (line->handle()); Handle(Geom_Line) this_line = Handle(Geom_Line)::DownCast (this_curv->BasisCurve()); this_line->SetLin(adapt.Line()); this_curv->SetTrim(adapt.FirstParameter(), adapt.LastParameter()); PyErr_SetString(PyExc_DeprecationWarning, "For future usage 'Curve' will return 'Line' which is infinite " "instead of the limited 'LineSegment'.\n" "If you need a line segment then use this:\n" "Part.LineSegment(edge.Curve,edge.FirstParameter,edge.LastParameter)\n" "To suppress the warning set BaseApp/Preferences/Mod/Part/General/LineOld to false"); PyErr_Print(); return Py::Object(new LineSegmentPy(line),true); // LinePyOld } else { GeomLine* line = new GeomLine(); Handle(Geom_Line) this_curv = Handle(Geom_Line)::DownCast (line->handle()); this_curv->SetLin(adapt.Line()); return Py::Object(new LinePy(line),true); } } case GeomAbs_Circle: { GeomCircle* circle = new GeomCircle(); Handle(Geom_Circle) this_curv = Handle(Geom_Circle)::DownCast (circle->handle()); this_curv->SetCirc(adapt.Circle()); //Standard_Real dd = adapt.FirstParameter(); //Standard_Real ee = adapt.LastParameter(); return Py::Object(new CirclePy(circle),true); } case GeomAbs_Ellipse: { GeomEllipse* elips = new GeomEllipse(); Handle(Geom_Ellipse) this_curv = Handle(Geom_Ellipse)::DownCast (elips->handle()); this_curv->SetElips(adapt.Ellipse()); return Py::Object(new EllipsePy(elips),true); } case GeomAbs_Hyperbola: { GeomHyperbola* hypr = new GeomHyperbola(); Handle(Geom_Hyperbola) this_curv = Handle(Geom_Hyperbola)::DownCast (hypr->handle()); this_curv->SetHypr(adapt.Hyperbola()); return Py::Object(new HyperbolaPy(hypr),true); } case GeomAbs_Parabola: { GeomParabola* parab = new GeomParabola(); Handle(Geom_Parabola) this_curv = Handle(Geom_Parabola)::DownCast (parab->handle()); this_curv->SetParab(adapt.Parabola()); return Py::Object(new ParabolaPy(parab),true); } case GeomAbs_BezierCurve: { GeomBezierCurve* curve = new GeomBezierCurve(adapt.Bezier()); return Py::Object(new BezierCurvePy(curve),true); } case GeomAbs_BSplineCurve: { GeomBSplineCurve* curve = new GeomBSplineCurve(adapt.BSpline()); return Py::Object(new BSplineCurvePy(curve),true); } #if OCC_VERSION_HEX >= 0x070000 case GeomAbs_OffsetCurve: { Standard_Real first, last; Handle(Geom_Curve) c = BRep_Tool::Curve(e, first, last); Handle(Geom_OffsetCurve) off = Handle(Geom_OffsetCurve)::DownCast(c); if (!off.IsNull()) { GeomOffsetCurve* curve = new GeomOffsetCurve(off); return Py::Object(new OffsetCurvePy(curve),true); } else { throw Py::RuntimeError("Failed to convert to offset curve"); } } #endif case GeomAbs_OtherCurve: break; } throw Py::TypeError("undefined curve type"); }