fonteditor/demo/js/clipper.js
2015-02-25 12:19:52 +08:00

58 lines
2.0 KiB
JavaScript

/**
* @file
* @author kekee000@gmail.com
*/
define(
function (require) {
var ClipperLib = require('ClipperLib');
/**
* desc
*
* @type {Object}
*/
var entry = {
init: function () {
var canvas = $('#canvas').get(0);
var ctx = canvas.getContext('2d');
var width = canvas.offsetWidth;
var height = canvas.offsetHeight;
var subj_paths = [[{X:10,Y:10},{X:110,Y:10},{X:110,Y:110},{X:10,Y:110}],
[{X:20,Y:20},{X:20,Y:100},{X:100,Y:100},{X:100,Y:20}]];
var clip_paths = [[{X:50,Y:50},{X:150,Y:50},{X:150,Y:150},{X:50,Y:150}],
[{X:60,Y:60},{X:60,Y:140},{X:140,Y:140},{X:140,Y:60}]];
var solution_paths = [];
var cpr = new ClipperLib.Clipper();
var scale = 100;
ClipperLib.JS.ScaleUpPaths(subj_paths, scale);
ClipperLib.JS.ScaleUpPaths(clip_paths, scale);
cpr.AddPaths(subj_paths, ClipperLib.PolyType.ptSubject, true);
cpr.AddPaths(clip_paths, ClipperLib.PolyType.ptClip, true);
var succeeded = cpr.Execute(ClipperLib.ClipType.ctXor, solution_paths, ClipperLib.PolyFillType.pftNonZero, ClipperLib.PolyFillType.pftNonZero);
ClipperLib.JS.ScaleDownPaths(solution_paths, scale);
console.log(succeeded);
console.log(solution_paths);
solution_paths.forEach(function (path) {
var start = path.shift();
ctx.moveTo(start.X, start.Y);
path.forEach(function (point) {
ctx.lineTo(point.X, point.Y);
});
ctx.lineTo(start.X, start.Y);
});
ctx.fill();
}
};
entry.init();
return entry;
}
);