open Js_of_ocaml let (let=?) : 'a option -> ('a -> unit) -> unit = fun f opt -> Option.iter opt f let post_message : Worker_messages.from_worker -> unit = Worker.post_message let execute (command: [> Worker_messages.to_worker]) = match command with (* Full rebuild, evaluate the whole path *) | `Complete outline -> let path = outline.Outline.path in let=? path = Path.Fixed.rebuild path in let back = Path.Fixed.map path (fun pt -> Path.Point.copy pt @@ Path.Point.get_coord' pt) in let=? back = Path.Fixed.rebuild back in post_message (`Complete {outline with path; back}) (* Remove the point from the main line, and reevaluate the whole path *) | `DeletePoint (point, outline) -> let=? path = Path.Fixed.remove_point outline.Outline.path point in let back = Path.Fixed.map path (fun pt -> Path.Point.copy pt @@ Path.Point.get_coord' pt) in let=? back = Path.Fixed.rebuild back in post_message (`Complete {outline with path; back}) (* Only evaluate the interior *) | `Back outline -> let back = Path.Fixed.map outline.Outline.path (fun pt -> Path.Point.copy pt @@ Path.Point.get_coord' pt) in let=? back = Path.Fixed.rebuild back in post_message (`Complete {outline with back}) | _ -> post_message (`Other (Js.string "Unknown message received")) let () = Worker.set_onmessage execute