{
const { machineCtx, output } = createMachineCtx();
const canvasCtx = DOM.context2d(width, height, window.devicePixelRatio);
canvasCtx.setTransform(
2 * ((machineProfile.xAxis * width) / machineProfile.width),
0,
0,
2 * ((machineProfile.yAxis * height) / machineProfile.height),
width * 2,
0
);
previewCurve(canvasCtx);
const arcs = curve.arcs(arcTolerance);
machineCtx.beginPath();
canvasCtx.lineWidth = 0.5;
canvasCtx.beginPath();
arcs.forEach(arc => {
const p1 = curve.compute(arc.interval.start);
const p2 = curve.compute(arc.interval.end);
const ccw = arcIsCCW2(arc);
const startAngle = !ccw ? arc.s : arc.e;
const endAngle = !ccw ? arc.e : arc.s;
canvasCtx.arc(arc.x, arc.y, arc.r, startAngle, endAngle, ccw);
machineCtx.arc(arc.x, arc.y, arc.r, startAngle, endAngle, !ccw);
});
machineCtx.stroke();
canvasCtx.stroke();
return html`
<div>
${canvasCtx.canvas}
<hr />
<pre>${output.join('\n')}</pre>
</div>
`;
}