Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let build_paths ctx g =
- let get_point idx = {
- x = float_of_int g.gs_x_coordinates.(idx);
- y = float_of_int g.gs_y_coordinates.(idx);
- on_curve = g.gs_flags.(idx) land 0x01 <> 0;
- } in
- let len = Array.length g.gs_end_pts_of_contours in
- let arr = DynArray.create () in
- let cp = ref 0 in
- let start = ref 0 in
- let stop = ref 0 in
- let pq = ref (mk_path (-1) 0.0 0.0 0.0 0.0) in
- let make_path p1 p2 ep = (* CHANGED: ep added *)
- match p1.on_curve, p2.on_curve with
- | true, true ->
- DynArray.add arr (mk_path 1 p2.x p2.y 0.0 0.0);
- | false, false ->
- let x = (p1.x +. p2.x) /. 2. in
- let y = (p1.y +. p2.y) /. 2. in
- DynArray.add arr (mk_path 2 x y !pq.gp_x !pq.gp_y);
- pq := (mk_path (-1) p2.x p2.y 0.0 0.0);
- if ep then DynArray.add arr (mk_path 2 p2.x p2.y p1.x p1.y);(* CHANGED: whole line added *)
- | true, false ->
- pq := (mk_path (-1) p2.x p2.y 0.0 0.0);
- | false, true ->
- DynArray.add arr (mk_path 2 p2.x p2.y !pq.gp_x !pq.gp_y);
- in
- for i = 0 to len - 1 do
- start := !cp;
- stop := g.gs_end_pts_of_contours.(i);
- let pstart = get_point !start in
- DynArray.add arr (mk_path 0 pstart.x pstart.y 0.0 0.0);
- 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*)
- for j = 0 to !stop - !start - 1 do
- make_path (get_point !cp) (get_point (!cp + 1)) false;(* CHANGED : false*)
- incr cp;
- done;
- make_path (get_point !stop) pstart true;(* CHANGED : true*)
- incr cp;
- done;
- DynArray.to_list arr
Advertisement
Add Comment
Please, Sign In to add comment