using Toybox.Graphics as Gfx; import Toybox.Lang; using Toybox.Math as Math; using C as C; class Hand { var length; var width; var color; var vert = new [5]; public function initialize(length, width, color) { me.length = length; me.width = width; me.color = color; var w2 = width / 2; var w3 = width / 2.4; var mid = length * 0.6; vert[0] = [ -w2, 0 ]; vert[1] = [ -w2 - w3, -mid ]; vert[2] = [ 0, -length ]; vert[3] = [ +w2 + w3, -mid ]; vert[4] = [ +w2, 0 ]; } private function get_bb(points as Array< Array >) as Array< Array > { var min = [9999, 9999] as Array; var max = [0,0] as Array; for (var i = 0; i < points.size(); ++i) { if (points[i][0] < min[0]) { min[0] = points[i][0]; } if (points[i][1] < min[1]) { min[1] = points[i][1]; } if (points[i][0] > max[0]) { max[0] = points[i][0]; } if (points[i][1] > max[1]) { max[1] = points[i][1]; } } return [min, max] as Array< Array >; } public function show(dc, val, max, abbr, clipit) { C.set_fill(dc, color); var h = dc.getFontHeight(Gfx.FONT_TINY); if (abbr) { dc.drawText(C.center_x, C.center_y - C.dot_sz - h, Gfx.FONT_XTINY, abbr, Gfx.TEXT_JUSTIFY_CENTER); } val *= C.ccw; var a = (((Math.PI * 2) * val) / max) + (Math.PI/2); var v = C.translate(vert, C.center_x, C.center_y, a); if (clipit) { var clip = get_bb(v); var bb_w= clip[1][0] - clip[0][0] + 1; var bb_h= clip[1][1] - clip[0][1] + 1; dc.setClip(clip[0][0], clip[0][1], bb_w, bb_h); } dc.fillPolygon(v); } }