jan_flanders

Untitled

Dec 27th, 2012
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 1.53 KB | None | 0 0
  1. let build_paths ctx g =
  2.     let get_point idx = {
  3.         x = float_of_int g.gs_x_coordinates.(idx);
  4.         y = float_of_int g.gs_y_coordinates.(idx);
  5.         on_curve = g.gs_flags.(idx) land 0x01 <> 0;
  6.     } in
  7.  
  8.     let len = Array.length g.gs_end_pts_of_contours in
  9.     let arr = DynArray.create () in
  10.     let cp = ref 0 in
  11.     let start = ref 0 in
  12.     let stop = ref 0 in
  13.     let pq = ref (mk_path (-1) 0.0 0.0 0.0 0.0) in
  14.     let make_path p1 p2 ep = (* CHANGED: ep added *)
  15.         match p1.on_curve, p2.on_curve with
  16.         | true, true ->
  17.             DynArray.add arr (mk_path 1 p2.x p2.y 0.0 0.0);
  18.         | false, false ->
  19.             let x = (p1.x +. p2.x) /. 2. in
  20.             let y = (p1.y +. p2.y) /. 2. in
  21.             DynArray.add arr (mk_path 2 x y !pq.gp_x !pq.gp_y);
  22.             pq := (mk_path (-1) p2.x p2.y 0.0 0.0);
  23.             if ep then DynArray.add arr (mk_path 2 p2.x p2.y p1.x p1.y);(* CHANGED: whole line added *)
  24.         | true, false ->
  25.             pq := (mk_path (-1) p2.x p2.y 0.0 0.0);
  26.         | false, true ->
  27.             DynArray.add arr (mk_path 2 p2.x p2.y !pq.gp_x !pq.gp_y);
  28.     in
  29.     for i = 0 to len - 1 do
  30.         start := !cp;
  31.         stop := g.gs_end_pts_of_contours.(i);
  32.         let pstart = get_point !start in
  33.         DynArray.add arr (mk_path 0 pstart.x pstart.y 0.0 0.0);
  34.         pq := (mk_path (-1) (float_of_int g.gs_x_coordinates.(!start)) (float_of_int g.gs_y_coordinates.(!start)) 0.0 0.0);(* CHANGED x and y changed*)
  35.         for j = 0 to !stop - !start - 1 do
  36.             make_path (get_point !cp) (get_point (!cp + 1)) false;(* CHANGED : false*)
  37.             incr cp;
  38.         done;
  39.         make_path (get_point !stop) pstart true;(* CHANGED : true*)
  40.         incr cp;
  41.     done;
  42.     DynArray.to_list arr
Advertisement
Add Comment
Please, Sign In to add comment