Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void CreateArcs(const gp_Pnt &p_start, const gp_Vec &v_start, double t_start, double t_end, gp_Pnt &p_end, gp_Vec &v_end)
- {
- spline_for_CreateArcs->D1(t_end, p_end, v_end);
- gp_Pnt p1, p2, p3;
- bool can_do_spline_whole = calculate_biarc_points(p_start, v_start, p_end, v_end, p1, p2, p3);
- HeeksObj* arc_object1 = NULL;
- HeeksObj* arc_object2 = NULL;
- if(can_do_spline_whole)
- {
- CTangentialArc arc1(p_start, v_start, p2);
- CTangentialArc arc2(p2, gp_Vec(p3.XYZ() - p2.XYZ()), p_end);
- gp_Pnt p_middle1, p_middle2;
- spline_for_CreateArcs->D0(t_start + ((t_end - t_start) * 0.25), p_middle1);
- spline_for_CreateArcs->D0(t_start + ((t_end - t_start) * 0.75), p_middle2);
- if(!arc1.radius_equal(p_middle1, tolerance_for_CreateArcs) || !arc2.radius_equal(p_middle2, tolerance_for_CreateArcs))
- can_do_spline_whole = false;
- else
- {
- arc_object1 = arc1.MakeHArc();
- arc_object2 = arc2.MakeHArc();
- }
- }
- else
- {
- // calculate_biarc_points failed, just add a line
- new_spans_for_CreateArcs->push_back(new HLine(p_start, p_end, &(wxGetApp().current_color)));
- return;
- }
- if(can_do_spline_whole)
- {
- new_spans_for_CreateArcs->push_back(arc_object1);
- new_spans_for_CreateArcs->push_back(arc_object2);
- }
- else
- {
- double t_middle = t_start + ((t_end - t_start) * 0.5);
- gp_Pnt p_middle;
- gp_Vec v_middle;
- CreateArcs(p_start, v_start, t_start, t_middle, p_middle, v_middle);// recursive
- gp_Pnt new_p_end;
- gp_Vec new_v_end;
- CreateArcs(p_middle, v_middle, t_middle, t_end, new_p_end, new_v_end);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement