1
0
mirror of https://github.com/Pomax/BezierInfo-2.git synced 2025-08-17 14:10:56 +02:00
Files
BezierInfo-2/docs/chapters/shapes/handler.js
2020-08-20 13:01:32 -07:00

90 lines
2.0 KiB
JavaScript

var modes;
module.exports = {
getInitialState: function() {
modes = this.modes = ["unite","intersect","exclude","subtract"];
return {
mode: modes[0]
};
},
setMode: function(mode) {
this.setState({ mode: mode });
},
formPath: function(api, mx, my, w, h) {
mx = mx || 0;
my = my || 0;
var unit = 30;
var unit2 = unit/2;
w = w || 8 * unit;
h = h || 4 * unit;
var w2 = w/2;
var h2 = h/2;
var ow3 = w2/3;
var oh3 = h2/3;
var Paper = api.Paper;
var Path = Paper.Path;
var Point = Paper.Point;
var path = new Path();
path.moveTo(
new Point(mx-w2 + unit*2, my-h2)
);
path.cubicCurveTo(
new Point(mx-w2 + unit2, my-h2 + unit2),
new Point(mx-w2 + unit2, my+h2 - unit2),
new Point(mx-w2 + unit*2, my+h2)
);
path.cubicCurveTo(
new Point(mx-ow3, my+oh3),
new Point(mx+ow3, my+oh3),
new Point(mx+w2 - unit*2, my+h2)
);
path.cubicCurveTo(
new Point(mx+w2 - unit2, my+h2 - unit2),
new Point(mx+w2 - unit2, my-h2 + unit2),
new Point(mx+w2 - unit*2, my-h2)
);
path.cubicCurveTo(
new Point(mx+ow3, my-oh3),
new Point(mx-ow3, my-oh3),
new Point(mx-w2 + unit*2, my-h2)
);
path.closePath(true);
path.strokeColor = "rgb(100,100,255)";
return path;
},
setup: function(api) {
var dim = api.getPanelWidth();
var pad = 40;
var cx = dim/2;
var cy = dim/2;
api.c1 = this.formPath(api, cx, cy);
cx += pad;
cy += pad;
api.c2 = this.formPath(api, cx, cy);
this.state.mode = modes[0];
},
onMouseMove: function(evt, api) {
var cx = evt.offsetX;
var cy = evt.offsetY;
api.c2.position = {x:cx, y:cy};
},
draw: function(api) {
if (api.c3) { api.c3.remove(); }
var c1 = api.c1,
c2 = api.c2,
fn = c1[this.state.mode].bind(c1),
c3 = api.c3 = fn(c2);
c3.strokeColor = "red";
c3.fillColor = "rgba(255,100,100,0.4)";
api.Paper.view.draw();
}
};