Spaces:
Build error
Build error
| import { intersectCircle } from './intersect/intersect-circle.js'; | |
| import { intersectEllipse } from './intersect/intersect-ellipse.js'; | |
| import { intersectPolygon } from './intersect/intersect-polygon.js'; | |
| import { intersectRect } from './intersect/intersect-rect.js'; | |
| export { shapes, setShapes }; | |
| var shapes = { | |
| rect, | |
| ellipse, | |
| circle, | |
| diamond, | |
| }; | |
| function setShapes(value) { | |
| shapes = value; | |
| } | |
| function rect(parent, bbox, node) { | |
| var shapeSvg = parent | |
| .insert('rect', ':first-child') | |
| .attr('rx', node.rx) | |
| .attr('ry', node.ry) | |
| .attr('x', -bbox.width / 2) | |
| .attr('y', -bbox.height / 2) | |
| .attr('width', bbox.width) | |
| .attr('height', bbox.height); | |
| node.intersect = function (point) { | |
| return intersectRect(node, point); | |
| }; | |
| return shapeSvg; | |
| } | |
| function ellipse(parent, bbox, node) { | |
| var rx = bbox.width / 2; | |
| var ry = bbox.height / 2; | |
| var shapeSvg = parent | |
| .insert('ellipse', ':first-child') | |
| .attr('x', -bbox.width / 2) | |
| .attr('y', -bbox.height / 2) | |
| .attr('rx', rx) | |
| .attr('ry', ry); | |
| node.intersect = function (point) { | |
| return intersectEllipse(node, rx, ry, point); | |
| }; | |
| return shapeSvg; | |
| } | |
| function circle(parent, bbox, node) { | |
| var r = Math.max(bbox.width, bbox.height) / 2; | |
| var shapeSvg = parent | |
| .insert('circle', ':first-child') | |
| .attr('x', -bbox.width / 2) | |
| .attr('y', -bbox.height / 2) | |
| .attr('r', r); | |
| node.intersect = function (point) { | |
| return intersectCircle(node, r, point); | |
| }; | |
| return shapeSvg; | |
| } | |
| // Circumscribe an ellipse for the bounding box with a diamond shape. I derived | |
| // the function to calculate the diamond shape from: | |
| // http://mathforum.org/kb/message.jspa?messageID=3750236 | |
| function diamond(parent, bbox, node) { | |
| var w = (bbox.width * Math.SQRT2) / 2; | |
| var h = (bbox.height * Math.SQRT2) / 2; | |
| var points = [ | |
| { x: 0, y: -h }, | |
| { x: -w, y: 0 }, | |
| { x: 0, y: h }, | |
| { x: w, y: 0 }, | |
| ]; | |
| var shapeSvg = parent.insert('polygon', ':first-child').attr( | |
| 'points', | |
| points | |
| .map(function (p) { | |
| return p.x + ',' + p.y; | |
| }) | |
| .join(' ') | |
| ); | |
| node.intersect = function (p) { | |
| return intersectPolygon(node, points, p); | |
| }; | |
| return shapeSvg; | |
| } | |