Advertisement
danfalck

Untitled

Sep 25th, 2011
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.63 KB | None | 0 0
  1. 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)
  2. {
  3.     spline_for_CreateArcs->D1(t_end, p_end, v_end);
  4.  
  5.  
  6.     gp_Pnt p1, p2, p3;
  7.  
  8.  
  9.  
  10.     bool can_do_spline_whole = calculate_biarc_points(p_start, v_start, p_end, v_end, p1, p2, p3);
  11.  
  12.  
  13.  
  14.     HeeksObj* arc_object1 = NULL;
  15.  
  16.     HeeksObj* arc_object2 = NULL;
  17.  
  18.  
  19.  
  20.     if(can_do_spline_whole)
  21.  
  22.     {
  23.  
  24.         CTangentialArc arc1(p_start, v_start, p2);
  25.  
  26.         CTangentialArc arc2(p2, gp_Vec(p3.XYZ() - p2.XYZ()), p_end);
  27.  
  28.  
  29.  
  30.         gp_Pnt p_middle1, p_middle2;
  31.  
  32.         spline_for_CreateArcs->D0(t_start + ((t_end - t_start) * 0.25), p_middle1);
  33.  
  34.         spline_for_CreateArcs->D0(t_start + ((t_end - t_start) * 0.75), p_middle2);
  35.  
  36.  
  37.  
  38.         if(!arc1.radius_equal(p_middle1, tolerance_for_CreateArcs) || !arc2.radius_equal(p_middle2, tolerance_for_CreateArcs))
  39.  
  40.             can_do_spline_whole = false;
  41.  
  42.         else
  43.  
  44.         {
  45.  
  46.             arc_object1 = arc1.MakeHArc();
  47.  
  48.             arc_object2 = arc2.MakeHArc();
  49.  
  50.         }
  51.  
  52.     }
  53.  
  54.     else
  55.  
  56.     {
  57.  
  58.         // calculate_biarc_points failed, just add a line
  59.  
  60.         new_spans_for_CreateArcs->push_back(new HLine(p_start, p_end, &(wxGetApp().current_color)));
  61.  
  62.         return;
  63.  
  64.     }
  65.  
  66.    
  67.  
  68.     if(can_do_spline_whole)
  69.  
  70.     {
  71.  
  72.         new_spans_for_CreateArcs->push_back(arc_object1);
  73.  
  74.         new_spans_for_CreateArcs->push_back(arc_object2);
  75.  
  76.     }
  77.  
  78.     else
  79.  
  80.     {
  81.  
  82.         double t_middle = t_start + ((t_end - t_start) * 0.5);
  83.  
  84.         gp_Pnt p_middle;
  85.  
  86.         gp_Vec v_middle;
  87.  
  88.         CreateArcs(p_start, v_start, t_start, t_middle, p_middle, v_middle);// recursive
  89.  
  90.         gp_Pnt new_p_end;
  91.  
  92.         gp_Vec new_v_end;
  93.  
  94.         CreateArcs(p_middle, v_middle, t_middle, t_end, new_p_end, new_v_end);
  95.  
  96.     }
  97.  
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement