@davepagurek/flo-mat
Version:
Medial / Scale Axis Transform (MAT/SAT) Library.
48 lines (32 loc) • 1.16 kB
text/typescript
import { drawFs } from 'flo-draw';
import { Mat } from '../../../mat/mat.js';
import { traverseEdges } from '../../../cp-node/traverse-edges.js';
import { getCurveToNext } from '../../../cp-node/get-curve-to-next.js';
import { isTerminating } from '../../../cp-node/cp-node.js';
/** @internal */
function drawMat(type: 'mat' | 'sat') {
const classes: string = type === 'mat'
? 'thin5 purple nofill'
: 'thin10 red nofill';
return (
g: SVGGElement,
mat: Mat,
classes_?: string,
delay = 0,
scaleFactor = 1): SVGElement[] => {
const cpNode = mat.cpNode;
// if (!cpNode) { return undefined; }
if (!cpNode) { return []; }
const $svgs: SVGElement[] = [];
let i = 0;
traverseEdges(cpNode, cpNode => {
if (isTerminating(cpNode)) { return; }
const bezier = getCurveToNext(cpNode);
if (!bezier) { return; }
i++;
$svgs.push( ...drawFs.bezier(g, bezier, classes, delay));
});
return $svgs;
}
}
export { drawMat }