Skip to content

Instantly share code, notes, and snippets.

@bzztbomb
Last active August 21, 2017 23:58
Show Gist options
  • Save bzztbomb/72955886d7787eeeb1682bf382c60a78 to your computer and use it in GitHub Desktop.
Save bzztbomb/72955886d7787eeeb1682bf382c60a78 to your computer and use it in GitHub Desktop.
// Takes an svg path and generates the path code to draw it on Android.
var parse = require('svg-path-parser');
let d=`
M50.3,67.3v9.8c0,4.1-3.3,7.4-7.4,7.4H15.3c-4.1,0-7.4-3.3-7.4-7.4V60h42.3H78c2,0,3.6,1.6,3.6,3.6l0,0
c0,2-1.6,3.6-3.6,3.6H50.7L50.3,67.3z
`;
let pathOps = parse(d);
console.log(pathOps);
function puts(s) {
console.log(s);
}
let lastX = 0;
let lastY = 0;
puts(`mClipPath.reset();`);
pathOps.forEach(op => {
switch (op.code) {
case 'M' :
puts(`mClipPath.moveTo(${op.x}f, ${op.y}f);`);
lastX = op.x;
lastY = op.y;
break;
case 'v' :
puts(`mClipPath.rLineTo(0.0f, ${op.y}f);`);
lastY = lastY + op.y;
break;
case 'h' :
puts(`mClipPath.rLineTo(${op.x}f, 0.0f);`);
lastX = lastX + op.x;
break;
case 'c' :
puts(`mClipPath.rCubicTo(${op.x1}f, ${op.y1}f, ${op.x2}f, ${op.y2}f, ${op.x}f, ${op.y}f);`);
lastX = lastX + op.x;
lastY = lastY + op.y;
break;
case 'l' :
puts(`mClipPath.rLineTo(${op.x}f, ${op.y}f);`);
lastX = lastX + op.x;
lastY = lastY + op.y;
break;
case 'H' :
puts(`mClipPath.lineTo(${op.x}f, ${lastY}f);`);
lastX = op.x;
break;
case 'V' :
puts(`mClipPath.lineTo(${lastX}f, ${op.y}f);`);
lastY = op.y;
break;
}
});
puts(`mClipPath.close();`);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment