mirror of
https://github.com/Pomax/BezierInfo-2.git
synced 2025-08-08 09:46:56 +02:00
58 lines
1.4 KiB
JavaScript
58 lines
1.4 KiB
JavaScript
var sin = Math.sin,
|
|
cos = Math.cos;
|
|
|
|
module.exports = {
|
|
setup: function(api) {
|
|
api.w = api.getPanelWidth();
|
|
api.h = api.getPanelHeight();
|
|
api.pad = 20;
|
|
api.r = api.w/2 - api.pad;
|
|
api.mousePt = false;
|
|
api.angle = 0;
|
|
var spt = { x: api.w-api.pad, y: api.h/2 };
|
|
api.setCurve(new api.Bezier(spt, spt, spt));
|
|
},
|
|
|
|
draw: function(api, curve) {
|
|
api.reset();
|
|
api.setColor("lightgrey");
|
|
api.drawGrid(1,1);
|
|
api.setColor("red");
|
|
api.drawCircle({x:api.w/2,y:api.h/2},api.r);
|
|
api.setColor("transparent");
|
|
api.setFill("rgba(100,255,100,0.4)");
|
|
var p = {
|
|
x: api.w/2,
|
|
y: api.h/2,
|
|
r: api.r,
|
|
s: api.angle < 0 ? api.angle : 0,
|
|
e: api.angle < 0 ? 0 : api.angle
|
|
};
|
|
api.drawArc(p);
|
|
api.setColor("black");
|
|
api.drawSkeleton(curve);
|
|
api.drawCurve(curve);
|
|
},
|
|
|
|
onMouseMove: function(evt, api) {
|
|
var x = evt.offsetX - api.w/2,
|
|
y = evt.offsetY - api.h/2;
|
|
var angle = Math.atan2(y,x);
|
|
var pts = api.curve.points;
|
|
// new control
|
|
var r = api.r,
|
|
b = (cos(angle) - 1) / sin(angle);
|
|
pts[1] = {
|
|
x: api.w/2 + r * (cos(angle) - b * sin(angle)),
|
|
y: api.w/2 + r * (sin(angle) + b * cos(angle))
|
|
};
|
|
// new endpoint
|
|
pts[2] = {
|
|
x: api.w/2 + api.r * cos(angle),
|
|
y: api.w/2 + api.r * sin(angle)
|
|
};
|
|
api.setCurve(new api.Bezier(pts));
|
|
api.angle = angle;
|
|
}
|
|
};
|