UNPKG

fabric

Version:

Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.

1 lines 26.1 kB
{"version":3,"file":"Polyline.mjs","sources":["../../../src/shapes/Polyline.ts"],"sourcesContent":["import { config } from '../config';\nimport { SHARED_ATTRIBUTES } from '../parser/attributes';\nimport { parseAttributes } from '../parser/parseAttributes';\nimport { parsePointsAttribute } from '../parser/parsePointsAttribute';\nimport type { XY } from '../Point';\nimport { Point } from '../Point';\nimport type { Abortable, TClassProperties, TOptions } from '../typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { makeBoundingBoxFromPoints } from '../util/misc/boundingBoxFromPoints';\nimport { calcDimensionsMatrix, transformPoint } from '../util/misc/matrix';\nimport { projectStrokeOnPoints } from '../util/misc/projectStroke';\nimport type { TProjectStrokeOnPointsOptions } from '../util/misc/projectStroke/types';\nimport { degreesToRadians } from '../util/misc/radiansDegreesConversion';\nimport { toFixed } from '../util/misc/toFixed';\nimport { FabricObject, cacheProperties } from './Object/FabricObject';\nimport type { FabricObjectProps, SerializedObjectProps } from './Object/types';\nimport type { ObjectEvents } from '../EventTypeDefs';\nimport {\n CENTER,\n LEFT,\n SCALE_X,\n SCALE_Y,\n SKEW_X,\n SKEW_Y,\n TOP,\n} from '../constants';\nimport type { CSSRules } from '../parser/typedefs';\n\nexport const polylineDefaultValues: Partial<TClassProperties<Polyline>> = {\n /**\n * @deprecated transient option soon to be removed in favor of a different design\n */\n exactBoundingBox: false,\n};\n\nexport interface SerializedPolylineProps extends SerializedObjectProps {\n points: XY[];\n}\n\nexport class Polyline<\n Props extends TOptions<FabricObjectProps> = Partial<FabricObjectProps>,\n SProps extends SerializedPolylineProps = SerializedPolylineProps,\n EventSpec extends ObjectEvents = ObjectEvents,\n> extends FabricObject<Props, SProps, EventSpec> {\n /**\n * Points array\n * @type Array\n * @default\n */\n declare points: XY[];\n\n /**\n * WARNING: Feature in progress\n * Calculate the exact bounding box taking in account strokeWidth on acute angles\n * this will be turned to true by default on fabric 6.0\n * maybe will be left in as an optimization since calculations may be slow\n * @deprecated transient option soon to be removed in favor of a different design\n * @type Boolean\n * @default false\n */\n declare exactBoundingBox: boolean;\n\n private declare initialized: true | undefined;\n\n static ownDefaults = polylineDefaultValues;\n\n static type = 'Polyline';\n\n static getDefaults(): Record<string, any> {\n return {\n ...super.getDefaults(),\n ...Polyline.ownDefaults,\n };\n }\n\n /**\n * A list of properties that if changed trigger a recalculation of dimensions\n * @todo check if you really need to recalculate for all cases\n */\n static layoutProperties: (keyof Polyline)[] = [\n SKEW_X,\n SKEW_Y,\n 'strokeLineCap',\n 'strokeLineJoin',\n 'strokeMiterLimit',\n 'strokeWidth',\n 'strokeUniform',\n 'points',\n ];\n\n declare pathOffset: Point;\n\n declare strokeOffset: Point;\n\n static cacheProperties = [...cacheProperties, 'points'];\n\n strokeDiff: Point;\n\n /**\n * Constructor\n * @param {Array} points Array of points (where each point is an object with x and y)\n * @param {Object} [options] Options object\n * @return {Polyline} thisArg\n * @example\n * var poly = new Polyline([\n * { x: 10, y: 10 },\n * { x: 50, y: 30 },\n * { x: 40, y: 70 },\n * { x: 60, y: 50 },\n * { x: 100, y: 150 },\n * { x: 40, y: 100 }\n * ], {\n * stroke: 'red',\n * left: 100,\n * top: 100\n * });\n */\n constructor(points: XY[] = [], options: Props = {} as Props) {\n super();\n Object.assign(this, Polyline.ownDefaults);\n this.setOptions(options);\n this.points = points;\n const { left, top } = options;\n this.initialized = true;\n this.setBoundingBox(true);\n typeof left === 'number' && this.set(LEFT, left);\n typeof top === 'number' && this.set(TOP, top);\n }\n\n protected isOpen() {\n return true;\n }\n\n private _projectStrokeOnPoints(options: TProjectStrokeOnPointsOptions) {\n return projectStrokeOnPoints(this.points, options, this.isOpen());\n }\n\n /**\n * Calculate the polygon bounding box\n * @private\n */\n _calcDimensions(options?: Partial<TProjectStrokeOnPointsOptions>) {\n options = {\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n skewX: this.skewX,\n skewY: this.skewY,\n strokeLineCap: this.strokeLineCap,\n strokeLineJoin: this.strokeLineJoin,\n strokeMiterLimit: this.strokeMiterLimit,\n strokeUniform: this.strokeUniform,\n strokeWidth: this.strokeWidth,\n ...(options || {}),\n };\n const points = this.exactBoundingBox\n ? this._projectStrokeOnPoints(\n options as TProjectStrokeOnPointsOptions,\n ).map((projection) => projection.projectedPoint)\n : this.points;\n if (points.length === 0) {\n return {\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n pathOffset: new Point(),\n strokeOffset: new Point(),\n strokeDiff: new Point(),\n };\n }\n const bbox = makeBoundingBoxFromPoints(points),\n // Remove scale effect, since it's applied after\n matrix = calcDimensionsMatrix({ ...options, scaleX: 1, scaleY: 1 }),\n bboxNoStroke = makeBoundingBoxFromPoints(\n this.points.map((p) => transformPoint(p, matrix, true)),\n ),\n scale = new Point(this.scaleX, this.scaleY);\n let offsetX = bbox.left + bbox.width / 2,\n offsetY = bbox.top + bbox.height / 2;\n if (this.exactBoundingBox) {\n offsetX = offsetX - offsetY * Math.tan(degreesToRadians(this.skewX));\n // Order of those assignments is important.\n // offsetY relies on offsetX being already changed by the line above\n offsetY = offsetY - offsetX * Math.tan(degreesToRadians(this.skewY));\n }\n\n return {\n ...bbox,\n pathOffset: new Point(offsetX, offsetY),\n strokeOffset: new Point(bboxNoStroke.left, bboxNoStroke.top)\n .subtract(new Point(bbox.left, bbox.top))\n .multiply(scale),\n strokeDiff: new Point(bbox.width, bbox.height)\n .subtract(new Point(bboxNoStroke.width, bboxNoStroke.height))\n .multiply(scale),\n };\n }\n\n /**\n * This function is an helper for svg import. it returns the center of the object in the svg\n * untransformed coordinates, by look at the polyline/polygon points.\n * @private\n * @return {Point} center point from element coordinates\n */\n _findCenterFromElement(): Point {\n const bbox = makeBoundingBoxFromPoints(this.points);\n return new Point(bbox.left + bbox.width / 2, bbox.top + bbox.height / 2);\n }\n\n setDimensions() {\n this.setBoundingBox();\n }\n\n setBoundingBox(adjustPosition?: boolean) {\n const { left, top, width, height, pathOffset, strokeOffset, strokeDiff } =\n this._calcDimensions();\n this.set({ width, height, pathOffset, strokeOffset, strokeDiff });\n adjustPosition &&\n this.setPositionByOrigin(\n new Point(left + width / 2, top + height / 2),\n CENTER,\n CENTER,\n );\n }\n\n /**\n * @deprecated intermidiate method to be removed, do not use\n */\n protected isStrokeAccountedForInDimensions() {\n return this.exactBoundingBox;\n }\n\n /**\n * @override stroke is taken in account in size\n */\n _getNonTransformedDimensions() {\n return this.exactBoundingBox\n ? // TODO: fix this\n new Point(this.width, this.height)\n : super._getNonTransformedDimensions();\n }\n\n /**\n * @override stroke and skewing are taken into account when projecting stroke on points,\n * therefore we don't want the default calculation to account for skewing as well.\n * Though it is possible to pass `width` and `height` in `options`, doing so is very strange, use with discretion.\n *\n * @private\n */\n _getTransformedDimensions(options: any = {}) {\n if (this.exactBoundingBox) {\n let size: Point;\n /* When `strokeUniform = true`, any changes to the properties require recalculating the `width` and `height` because\n the stroke projections are affected.\n When `strokeUniform = false`, we don't need to recalculate for scale transformations, as the effect of scale on\n projections follows a linear function (e.g. scaleX of 2 just multiply width by 2)*/\n if (\n Object.keys(options).some(\n (key) =>\n this.strokeUniform ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof TProjectStrokeOnPointsOptions,\n ),\n )\n ) {\n const { width, height } = this._calcDimensions(options);\n size = new Point(options.width ?? width, options.height ?? height);\n } else {\n size = new Point(\n options.width ?? this.width,\n options.height ?? this.height,\n );\n }\n return size.multiply(\n new Point(options.scaleX || this.scaleX, options.scaleY || this.scaleY),\n );\n } else {\n return super._getTransformedDimensions(options);\n }\n }\n\n /**\n * Recalculates dimensions when changing skew and scale\n * @private\n */\n _set(key: string, value: any) {\n const changed = this.initialized && this[key as keyof this] !== value;\n const output = super._set(key, value);\n if (\n this.exactBoundingBox &&\n changed &&\n (((key === SCALE_X || key === SCALE_Y) &&\n this.strokeUniform &&\n (this.constructor as typeof Polyline).layoutProperties.includes(\n 'strokeUniform',\n )) ||\n (this.constructor as typeof Polyline).layoutProperties.includes(\n key as keyof Polyline,\n ))\n ) {\n this.setDimensions();\n }\n return output;\n }\n\n /**\n * Returns object representation of an instance\n * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n * @return {Object} Object representation of an instance\n */\n toObject<\n T extends Omit<Props & TClassProperties<this>, keyof SProps>,\n K extends keyof T = never,\n >(propertiesToInclude: K[] = []): Pick<T, K> & SProps {\n return {\n ...super.toObject(propertiesToInclude),\n points: this.points.map(({ x, y }) => ({ x, y })),\n };\n }\n\n /**\n * Returns svg representation of an instance\n * @return {Array} an array of strings with the specific svg representation\n * of the instance\n */\n _toSVG() {\n const points = [],\n diffX = this.pathOffset.x,\n diffY = this.pathOffset.y,\n NUM_FRACTION_DIGITS = config.NUM_FRACTION_DIGITS;\n\n for (let i = 0, len = this.points.length; i < len; i++) {\n points.push(\n toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS),\n ',',\n toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS),\n ' ',\n );\n }\n return [\n `<${\n (this.constructor as typeof Polyline).type.toLowerCase() as\n | 'polyline'\n | 'polygon'\n } `,\n 'COMMON_PARTS',\n `points=\"${points.join('')}\" />\\n`,\n ];\n }\n\n /**\n * @private\n * @param {CanvasRenderingContext2D} ctx Context to render on\n */\n _render(ctx: CanvasRenderingContext2D) {\n const len = this.points.length,\n x = this.pathOffset.x,\n y = this.pathOffset.y;\n\n if (!len || isNaN(this.points[len - 1].y)) {\n // do not draw if no points or odd points\n // NaN comes from parseFloat of a empty string in parser\n return;\n }\n ctx.beginPath();\n ctx.moveTo(this.points[0].x - x, this.points[0].y - y);\n for (let i = 0; i < len; i++) {\n const point = this.points[i];\n ctx.lineTo(point.x - x, point.y - y);\n }\n !this.isOpen() && ctx.closePath();\n this._renderPaintInOrder(ctx);\n }\n\n /**\n * Returns complexity of an instance\n * @return {Number} complexity of this instance\n */\n complexity(): number {\n return this.points.length;\n }\n\n /* _FROM_SVG_START_ */\n\n /**\n * List of attribute names to account for when parsing SVG element (used by {@link Polyline.fromElement})\n * @static\n * @memberOf Polyline\n * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement\n */\n static ATTRIBUTE_NAMES = [...SHARED_ATTRIBUTES];\n\n /**\n * Returns Polyline instance from an SVG element\n * @static\n * @memberOf Polyline\n * @param {HTMLElement} element Element to parser\n * @param {Object} [options] Options object\n */\n static async fromElement(\n element: HTMLElement,\n options: Abortable,\n cssRules?: CSSRules,\n ) {\n const points = parsePointsAttribute(element.getAttribute('points')),\n // we omit left and top to instruct the constructor to position the object using the bbox\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n { left, top, ...parsedAttributes } = parseAttributes(\n element,\n this.ATTRIBUTE_NAMES,\n cssRules,\n );\n return new this(points, {\n ...parsedAttributes,\n ...options,\n });\n }\n\n /* _FROM_SVG_END_ */\n\n /**\n * Returns Polyline instance from an object representation\n * @static\n * @memberOf Polyline\n * @param {Object} object Object to create an instance from\n * @returns {Promise<Polyline>}\n */\n static fromObject<T extends TOptions<SerializedPolylineProps>>(object: T) {\n return this._fromObject<Polyline>(object, {\n extraParam: 'points',\n });\n }\n}\n\nclassRegistry.setClass(Polyline);\nclassRegistry.setSVGClass(Polyline);\n"],"names":["polylineDefaultValues","exactBoundingBox","Polyline","FabricObject","getDefaults","_objectSpread","ownDefaults","constructor","points","arguments","length","undefined","options","_defineProperty","Object","assign","setOptions","left","top","initialized","setBoundingBox","set","LEFT","TOP","isOpen","_projectStrokeOnPoints","projectStrokeOnPoints","_calcDimensions","scaleX","scaleY","skewX","skewY","strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeUniform","strokeWidth","map","projection","projectedPoint","width","height","pathOffset","Point","strokeOffset","strokeDiff","bbox","makeBoundingBoxFromPoints","matrix","calcDimensionsMatrix","bboxNoStroke","p","transformPoint","scale","offsetX","offsetY","Math","tan","degreesToRadians","subtract","multiply","_findCenterFromElement","setDimensions","adjustPosition","setPositionByOrigin","CENTER","isStrokeAccountedForInDimensions","_getNonTransformedDimensions","_getTransformedDimensions","size","keys","some","key","layoutProperties","includes","_options$width","_options$height","_options$width2","_options$height2","_set","value","changed","output","SCALE_X","SCALE_Y","toObject","propertiesToInclude","_ref","x","y","_toSVG","diffX","diffY","NUM_FRACTION_DIGITS","config","i","len","push","toFixed","concat","type","toLowerCase","join","_render","ctx","isNaN","beginPath","moveTo","point","lineTo","closePath","_renderPaintInOrder","complexity","fromElement","element","cssRules","parsePointsAttribute","getAttribute","_parseAttributes","parseAttributes","ATTRIBUTE_NAMES","parsedAttributes","_objectWithoutProperties","_excluded","fromObject","object","_fromObject","extraParam","SKEW_X","SKEW_Y","cacheProperties","SHARED_ATTRIBUTES","classRegistry","setClass","setSVGClass"],"mappings":"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"}