@freesewing/plugin-dimension
Version:
A FreeSewing plugin to add dimensions to your (paperless) pattern
8 lines (7 loc) • 8.3 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../src/lib/markers.js", "../src/index.js"],
"sourcesContent": ["// FIXME identical arrow paths for dimensions, cutonfold, and grainline\nexport default `\n<marker orient=\"auto\" refY=\"4.0\" refX=\"0.0\" id=\"dimensionFrom\" style=\"overflow:visible;\" markerWidth=\"12\" markerHeight=\"8\">\n\t<path class=\"mark fill-mark\" d=\"M 0,4 L 12,0 C 10,2 10,6 12,8 z\" />\n</marker>\n<marker orient=\"auto\" refY=\"4.0\" refX=\"12.0\" id=\"dimensionTo\" style=\"overflow:visible;\" markerWidth=\"12\" markerHeight=\"8\">\n\t<path class=\"mark fill-mark\" d=\"M 12,4 L 0,0 C 2,2 2,6 0,8 z\" />\n</marker>\n`;\n", "import markers from './lib/markers'\nimport pkg from '../package.json'\n\nconst prefix = '__paperless'\n\nfunction drawDimension(from, to, so, self) {\n let dimension = new self.Path()\n .move(from)\n .line(to)\n .attr('class', 'mark')\n .attr('data-text', so.text || self.units(from.dist(to)))\n .attr('data-text-class', 'fill-mark center')\n if (!so.noStartMarker) dimension.attributes.set('marker-start', 'url(#dimensionFrom)')\n if (!so.noEndMarker) dimension.attributes.set('marker-end', 'url(#dimensionTo)')\n\n return dimension\n}\n\nfunction drawLeader(self, from, to, id) {\n self.paths[id] = new self.Path().move(from).line(to).attr('class', 'mark dotted')\n}\n\nfunction hleader(so, type, self, id) {\n let point\n if (typeof so.y === 'undefined' || so[type].y === so.y) {\n point = so[type]\n } else {\n point = new self.Point(so[type].x, so.y)\n drawLeader(self, so[type], point, id)\n }\n\n return point\n}\n\nfunction vleader(so, type, self, id) {\n let point\n if (typeof so.x === 'undefined' || so[type].x === so.x) {\n point = so[type]\n } else {\n point = new self.Point(so.x, so[type].y)\n drawLeader(self, so[type], point, id)\n }\n\n return point\n}\n\nfunction lleader(so, type, self, id) {\n let point, rot, other\n if (type === 'from') {\n rot = 1\n other = 'to'\n } else {\n rot = -1\n other = 'from'\n }\n if (typeof so.d === 'undefined') {\n point = so[type]\n } else {\n point = so[type].shiftTowards(so[other], so.d).rotate(90 * rot, so[type])\n drawLeader(self, so[type], point, id)\n }\n\n return point\n}\n\nexport default {\n name: pkg.name,\n version: pkg.version,\n hooks: {\n preRender: (svg) => {\n if (svg.attributes.get('freesewing:plugin-dimension') === false) {\n svg.attributes.set('freesewing:plugin-dimension', pkg.version)\n svg.defs += markers\n }\n },\n },\n macros: {\n // horizontal\n hd: function (so) {\n const id = so.id || this.getId(prefix)\n this.paths[id] = drawDimension(\n hleader(so, 'from', this, id + '_ls'),\n hleader(so, 'to', this, id + '_le'),\n so,\n this\n )\n },\n // vertical\n vd: function (so) {\n const id = so.id || this.getId(prefix)\n this.paths[id] = drawDimension(\n vleader(so, 'from', this, id + '_ls'),\n vleader(so, 'to', this, id + '_le'),\n so,\n this\n )\n },\n // linear\n ld: function (so) {\n const id = so.id || this.getId(prefix)\n this.paths[id] = drawDimension(\n lleader(so, 'from', this, id + '_ls'),\n lleader(so, 'to', this, id + '_le'),\n so,\n this\n )\n },\n // path\n pd: function (so) {\n const id = so.id || this.getId(prefix)\n if (typeof so.d === 'undefined') so.d = 10 * this.context.settings.scale\n const dimension = so.path\n .offset(so.d)\n .attr('class', 'mark')\n .attr('data-text', so.text || this.units(so.path.length()))\n .attr('data-text-class', 'fill-mark center')\n if (!so.noStartMarker) dimension.attributes.set('marker-start', 'url(#dimensionFrom)')\n if (!so.noEndMarker) dimension.attributes.set('marker-end', 'url(#dimensionTo)')\n this.paths[id] = dimension\n drawLeader(this, so.path.start(), dimension.start(), id + '_ls')\n drawLeader(this, so.path.end(), dimension.end(), id + '_le')\n },\n // Remove dimension\n rmd: function (so) {\n if (this.paths[so.id]) delete this.paths[so.id]\n if (this.paths[`${so.id}_ls`]) delete this.paths[`${so.id}_ls`]\n if (this.paths[`${so.id}_le`]) delete this.paths[`${so.id}_le`]\n if (Array.isArray(so.ids)) {\n for (const id of so.ids) {\n if (this.paths[id]) delete this.paths[id]\n if (this.paths[`${id}_ls`]) delete this.paths[`${id}_ls`]\n if (this.paths[`${id}_le`]) delete this.paths[`${id}_le`]\n }\n }\n },\n // Remove all dimensions (with standard prefix)\n rmad: function (so) {\n for (let type of ['paths', 'points']) {\n for (let id in this[type]) {\n if (id.slice(0, prefix.length) === prefix) delete this[type][id]\n }\n }\n },\n },\n}\n"],
"mappings": "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",
"names": ["markers_default", "prefix", "drawDimension", "from", "to", "so", "self", "dimension", "drawLeader", "id", "hleader", "type", "point", "vleader", "lleader", "rot", "other", "src_default", "package_default", "svg", "markers_default"]
}