@obliczeniowo/elementary
Version:
Library made in Angular version 19
1 lines • 107 kB
Source Map (JSON)
{"version":3,"file":"obliczeniowo-elementary-linear-diagram.mjs","sources":["../../../../projects/components/linear-diagram/components/diagram-point-hover/diagram-point-hover.component.ts","../../../../projects/components/linear-diagram/components/diagram-point-hover/diagram-point-hover.component.html","../../../../projects/components/linear-diagram/class/linear-diagram-2-d/elements/y-axis-i.ts","../../../../projects/components/linear-diagram/class/linear-diagram-2-d/linear-diagram-2-d.ts","../../../../projects/components/linear-diagram/components/diagram2d/linear-diagram-2d.component.ts","../../../../projects/components/linear-diagram/components/diagram2d/linear-diagram-2d.component.html","../../../../projects/components/linear-diagram/components/diagram-data-filter/diagram-data-filter.component.ts","../../../../projects/components/linear-diagram/components/diagram-data-filter/diagram-data-filter.component.html","../../../../projects/components/linear-diagram/linear-diagram.module.ts","../../../../projects/components/linear-diagram/obliczeniowo-elementary-linear-diagram.ts"],"sourcesContent":["import { Subject, Subscription } from 'rxjs';\r\nimport { Component, ContentChild, HostBinding, OnDestroy, TemplateRef } from '@angular/core';\r\n\r\n/**\r\n * Create hover over element on obl-linear-diagram-2d element by ng-content\r\n *\r\n * example with own template\r\n *\r\n * <obl-linear-diagram-2d [points]=\"points\">\r\n * <ng-template #xyTemplate let-x=\"x\" let-y=\"y\">\r\n * <div class=\"xy-template\">\r\n * <div>x = {{ x | number: '0.5-5' }}</div>\r\n * <div>y = {{ y | number: '0.5-5' }}</div>\r\n * </div>\r\n * </ng-template>\r\n * </obl-linear-diagram-2d>\r\n */\r\n@Component({\r\n selector: 'obl-diagram-point-hover',\r\n templateUrl: './diagram-point-hover.component.html',\r\n styleUrls: ['./diagram-point-hover.component.scss'],\r\n standalone: false\r\n})\r\nexport class DiagramPointHoverComponent implements OnDestroy {\r\n x!: number;\r\n y!: number;\r\n\r\n private pOnMouseOver?: Subscription;\r\n set onMouseOver(value: Subject<SVGGElement> | undefined) {\r\n if (this.pOnMouseOver && !this.pOnMouseOver.closed) {\r\n this.pOnMouseOver.unsubscribe();\r\n }\r\n if (value) {\r\n this.pOnMouseOver = value.subscribe(\r\n (element) => {\r\n const point = JSON.parse(element.dataset.point as string);\r\n const pointSvg = JSON.parse(element.dataset.pointSvg as string);\r\n this.x = point.x;\r\n this.y = point.y;\r\n const rect = element.getBoundingClientRect();\r\n const svgHeight = element.ownerSVGElement?.clientHeight as number;\r\n const svgWidth = element.ownerSVGElement?.clientWidth as number;\r\n const viewBox = (element.ownerSVGElement?.getAttribute('viewBox') as string).split(' ').slice(2).map(v => parseFloat(v));\r\n this.left = pointSvg.x / viewBox[0] * svgWidth + rect.width / 2;\r\n this.top = pointSvg.y / viewBox[1] * svgHeight + rect.height / 2;\r\n this.over = '';\r\n }\r\n );\r\n }\r\n }\r\n\r\n private pOnMouseOut?: Subscription;\r\n public set onMouseOut(value: Subject<void> | undefined) {\r\n if (this.pOnMouseOut && !this.pOnMouseOut.closed) {\r\n this.pOnMouseOut.unsubscribe();\r\n }\r\n if (value) {\r\n this.pOnMouseOut = value.subscribe(() => {\r\n this.over = 'none';\r\n });\r\n }\r\n }\r\n\r\n @HostBinding('style.display') over: '' | 'none' = 'none';\r\n @HostBinding('style.top.px') top = 0;\r\n @HostBinding('style.left.px') left = 0;\r\n\r\n @ContentChild('xyTemplate') xyTemplate!: TemplateRef<any>;\r\n\r\n ngOnDestroy(): void {\r\n this.onMouseOut = undefined;\r\n this.onMouseOver = undefined;\r\n if (this.pOnMouseOut && !this.pOnMouseOut.closed) {\r\n this.pOnMouseOut.unsubscribe();\r\n }\r\n }\r\n}\r\n","@if (!xyTemplate) {\r\n <div>\r\n <p>x: {{ x }}</p>\r\n <p>y: {{ y }}</p>\r\n </div>\r\n}\r\n\r\n<ng-container *ngTemplateOutlet=\"xyTemplate; context: { x: x, y: y }\"></ng-container>\r\n\r\n<ng-content></ng-content>","import { DecimalPipe } from '@angular/common';\r\nimport { Point2D } from '@obliczeniowo/elementary/classes';\r\nimport { DrawingContextInterface, Rect, TextAlign } from '@obliczeniowo/elementary/drawing';\r\nimport { AxisOptions, YAxisOptions } from '../linear-diagram-2-d';\r\nimport { MinMax } from '@obliczeniowo/elementary/math';\r\n\r\nexport abstract class YAxisI {\r\n protected textAlign: TextAlign = TextAlign.RIGHT;\r\n\r\n /** pipe used for formatting x/y axis text */\r\n decimalPipe = new DecimalPipe('en-US');\r\n\r\n /**\r\n * Function that give you control over format of y axis values\r\n * this function can be overrided let programmer use whatever he want\r\n * @param y value on scale to draw\r\n * @param yK y * pow(10, yK) - power of 10 that provide number into n.xxxx format\r\n * @returns formatted string value of y scale\r\n */\r\n yFormatter: (y: number, yK: number) => string = (y: number, yK: number) => this.decimalPipe.transform(y * Math.pow(10, yK), '0.3-3') || 'NaN';\r\n\r\n abstract draw(\r\n dc: DrawingContextInterface,\r\n startPoint: Point2D,\r\n startScale: Point2D,\r\n dY: number,\r\n minMax: MinMax,\r\n yScale: number,\r\n yK: number,\r\n diagramArea: Rect,\r\n yLabel: string,\r\n yOptions?: AxisOptions\r\n ): number;\r\n}\r\n\r\nexport class YAxis extends YAxisI {\r\n draw(\r\n dc: DrawingContextInterface,\r\n startPoint: Point2D,\r\n startScale: Point2D,\r\n dY: number,\r\n minMax: MinMax,\r\n yScale: number,\r\n yK: number,\r\n diagramArea: Rect,\r\n yLabel: string,\r\n yOptions: YAxisOptions\r\n ): number {\r\n dc.group({ name: 'yAxis' });\r\n\r\n const color = yOptions?.color;\r\n\r\n this.textAlign = yOptions?.textAlign || this.textAlign;\r\n\r\n if (this.textAlign !== TextAlign.RIGHT) {\r\n const m = new Point2D(diagramArea.width, 0);\r\n startPoint = startPoint.add(m);\r\n startScale = startScale.add(m);\r\n }\r\n\r\n let posy: Point2D = new Point2D(startPoint.x, startScale.y);\r\n\r\n dc.drawArrow(\r\n startPoint,\r\n startPoint.add(\r\n new Point2D(\r\n 0,\r\n -diagramArea.height\r\n )\r\n ),\r\n yOptions?.stroke || 1,\r\n color || '#000000',\r\n !!yOptions?.arrow\r\n );\r\n\r\n dc.setTextAlign(this.textAlign);\r\n\r\n let lengthYLabel = 0;\r\n let yText = '';\r\n\r\n dc.group({ name: 'values' });\r\n\r\n const dm = new Point2D(\r\n this.textAlign === TextAlign.RIGHT ? -2 : 4,\r\n 1.5\r\n );\r\n const dsc = new Point2D(\r\n 0,\r\n -dY * yScale\r\n );\r\n\r\n for (let y = Math.ceil(minMax.min / dY) * dY; y <= minMax.max; y += dY) {\r\n yText = this.yFormatter(y, yK);\r\n\r\n const tw = dc.getTextWidth(yText);\r\n\r\n lengthYLabel = tw > lengthYLabel ? tw : lengthYLabel;\r\n\r\n dc.drawText(yText, posy.add(dm), color || '#000000', 0);\r\n\r\n posy = posy.add(dsc);\r\n }\r\n\r\n dc.setTextAlign(TextAlign.LEFT);\r\n\r\n dc.endGroup();\r\n\r\n dc.endGroup();\r\n\r\n if (yLabel) {\r\n const textWidth = dc.getTextWidth(yLabel);\r\n\r\n const offset = this.textAlign === TextAlign.RIGHT\r\n ? new Point2D(diagramArea.x, diagramArea.y + diagramArea.height * 0.5).add(\r\n new Point2D(\r\n -lengthYLabel - 10,\r\n textWidth / 2\r\n ))\r\n : new Point2D(diagramArea.x + diagramArea.width, diagramArea.y + diagramArea.height * 0.5).add(\r\n new Point2D(\r\n lengthYLabel + 20,\r\n textWidth / 2\r\n ));\r\n\r\n dc.drawText(\r\n yLabel,\r\n offset,\r\n color || '#009900',\r\n 90\r\n );\r\n }\r\n\r\n if (yK) {\r\n const offset = this.textAlign === TextAlign.RIGHT\r\n ? new Point2D(\r\n diagramArea.x,\r\n diagramArea.y\r\n ).add(new Point2D(-lengthYLabel - 10, 0))\r\n : new Point2D(\r\n diagramArea.x + diagramArea.width,\r\n diagramArea.y\r\n ).add(new Point2D(lengthYLabel + 20, 0));\r\n\r\n dc.setTextAlign(TextAlign.RIGHT);\r\n dc.drawText(\r\n `×e${-yK}`,\r\n offset,\r\n color || '#009900',\r\n 90\r\n );\r\n }\r\n\r\n return lengthYLabel;\r\n }\r\n}\r\n","import { ElementaryMath, MinMax } from '@obliczeniowo/elementary/math';\r\nimport { YAxis, YAxisI } from './elements/y-axis-i';\r\nimport {\r\n DrawingContextInterface,\r\n LinePattern,\r\n TextAlign,\r\n TextBaseline,\r\n Rect,\r\n} from '@obliczeniowo/elementary/drawing';\r\nimport { DecimalPipe } from '@angular/common';\r\nimport { Subject } from 'rxjs';\r\nimport {\r\n Point2D,\r\n ColorType,\r\n LinearFunction2D,\r\n} from '@obliczeniowo/elementary/classes';\r\nimport { ns } from '@obliczeniowo/elementary/svg';\r\n\r\nexport enum PointType {\r\n NONE = 'none',\r\n CIRCLE = 'circle',\r\n X = 'x',\r\n STAR = 'star',\r\n}\r\n\r\nexport interface BaseDrawingOptions {\r\n /** color in format #rrggbb */\r\n color?: ColorType;\r\n stroke?: number;\r\n linePattern?: LinePattern | string;\r\n drawPoint?: PointType | string;\r\n}\r\n\r\nexport interface AxisOptions extends BaseDrawingOptions {\r\n arrow?: boolean;\r\n dp?: number;\r\n autoIncreaseDecrease?: boolean;\r\n precision?: number;\r\n display?: boolean;\r\n}\r\n\r\nexport interface YAxisOptions extends AxisOptions {\r\n textAlign?: TextAlign;\r\n}\r\n\r\n// tslint:disable-next-line: no-empty-interface\r\nexport interface GridOptions extends BaseDrawingOptions {\r\n display?: boolean;\r\n}\r\n\r\nexport interface LinearDiagram2DOptions {\r\n displayCursor?: boolean;\r\n xAxis?: AxisOptions;\r\n yAxis?: YAxisOptions;\r\n greed?: GridOptions;\r\n set?: BaseDrawingOptions[];\r\n xMinMax?: MinMax;\r\n yMinMax?: MinMax;\r\n}\r\n\r\nexport type DrawingPointFu = (\r\n point: Point2D,\r\n dc: DrawingContextInterface,\r\n stroke: number,\r\n color: ColorType,\r\n index: number,\r\n value: number\r\n) => void;\r\n\r\nexport class LinearDiagram2D {\r\n protected static drawingPoints: Map<string, DrawingPointFu> = new Map<\r\n string,\r\n DrawingPointFu\r\n >();\r\n\r\n protected options!: LinearDiagram2DOptions;\r\n\r\n /** min max for x */\r\n protected xMinMax!: MinMax;\r\n /** min max for y */\r\n protected yMinMax!: MinMax;\r\n /** */\r\n protected yAxis: YAxisI = new YAxis();\r\n /** */\r\n protected xScale!: number;\r\n /** */\r\n protected yScale!: number;\r\n\r\n protected xCursorLine!: SVGPolylineElement;\r\n protected yCursorLine!: SVGPolylineElement;\r\n protected xyCursor!: SVGTextElement;\r\n\r\n selectionRange?: MinMax;\r\n\r\n /** diagram area rect (area where diagram data will be drawn) */\r\n diagramArea: Rect;\r\n\r\n pPoints: Point2D[][] = [[]];\r\n\r\n /** diagram title text */\r\n title = '';\r\n\r\n /** x label description */\r\n xLabel = '';\r\n /** y label description */\r\n yLabel = '';\r\n\r\n /** legend description table */\r\n legend: string[] = [];\r\n\r\n /** pipe used for formatting x/y axis text */\r\n decimalPipe = new DecimalPipe('en-US');\r\n\r\n /** */\r\n xK = 0;\r\n /** */\r\n yK = 0;\r\n\r\n redraw: Subject<void> = new Subject<void>();\r\n onPointMouseOver: Subject<SVGGElement> = new Subject<SVGGElement>();\r\n onPointMouseOut: Subject<void> = new Subject<void>();\r\n\r\n static registerDrawingPointFu(name: string, fu: DrawingPointFu): boolean {\r\n if (LinearDiagram2D.drawingPoints.has(name)) {\r\n return false;\r\n }\r\n\r\n LinearDiagram2D.drawingPoints.set(name, fu);\r\n return true;\r\n }\r\n\r\n /**\r\n * Function that give you control over format of x axis values\r\n * this function can be overridden let programmer use whatever he want\r\n * @param x value on scale to draw\r\n * @param xK x * pow(10, xK) - power of 10 that provide number into n.xxxx format\r\n * @returns formatted string value of x scale\r\n */\r\n xFormatter: (x: number, xK: number) => string = (x: number, xK: number) =>\r\n this.decimalPipe.transform(x * Math.pow(10, xK), '0.2-2') || 'NaN';\r\n\r\n set yFormatter(fu: (y: number, yK: number) => string) {\r\n this.yAxis.yFormatter = fu;\r\n }\r\n\r\n /**\r\n * set points vector and recalculate xMinMax & yMinMax values for diagram\r\n */\r\n set points(points: Point2D[][]) {\r\n this.pPoints = points;\r\n\r\n this.xMinMax = this.getXMinMax();\r\n\r\n this.xK = -Math.floor(\r\n Math.log10(\r\n Math.max(Math.abs(this.xMinMax.max), Math.abs(this.xMinMax.min))\r\n )\r\n );\r\n\r\n this.yMinMax = this.getYMinMax();\r\n\r\n this.yK = -Math.floor(\r\n Math.log10(\r\n Math.max(Math.abs(this.yMinMax.max), Math.abs(this.yMinMax.min))\r\n )\r\n );\r\n }\r\n\r\n /**\r\n * @param area diagram area\r\n * @param points points vectors as table of Point2D\r\n * @param options options settings for diagram (most of them override default one)\r\n */\r\n constructor(\r\n area: Rect,\r\n points: Point2D[][],\r\n options?: LinearDiagram2DOptions\r\n ) {\r\n if (!LinearDiagram2D.drawingPoints.has(PointType.CIRCLE)) {\r\n LinearDiagram2D.drawingPoints.set(\r\n PointType.CIRCLE,\r\n (\r\n point: Point2D,\r\n dc: DrawingContextInterface,\r\n stroke: number,\r\n color: ColorType\r\n ) => dc.drawCircle(point, 2, stroke, color, 'none')\r\n );\r\n LinearDiagram2D.drawingPoints.set(\r\n PointType.STAR,\r\n (\r\n point: Point2D,\r\n dc: DrawingContextInterface,\r\n stroke: number,\r\n color: ColorType\r\n ) =>\r\n [0, 1, 2, 3, 4, 5].forEach((i) =>\r\n dc.drawLine(\r\n point,\r\n new Point2D(0, 5)\r\n .rotate(ElementaryMath.degreesToRadians(60) * i)\r\n .add(point),\r\n stroke,\r\n color\r\n )\r\n )\r\n );\r\n LinearDiagram2D.drawingPoints.set(\r\n PointType.X,\r\n (\r\n point: Point2D,\r\n dc: DrawingContextInterface,\r\n stroke: number,\r\n color: ColorType\r\n ) =>\r\n [0, 1, 2, 3].forEach((i) =>\r\n dc.drawLine(\r\n point,\r\n new Point2D(0, 5)\r\n .rotate((Math.PI / 2) * i + Math.PI / 4)\r\n .add(point),\r\n stroke,\r\n color\r\n )\r\n )\r\n );\r\n }\r\n\r\n this.diagramArea = area;\r\n\r\n this.options = {\r\n xAxis: {\r\n display: true,\r\n arrow: true,\r\n color: '#ff0000',\r\n stroke: 1,\r\n },\r\n yAxis: {\r\n display: true,\r\n arrow: true,\r\n color: '#009900',\r\n stroke: 1,\r\n },\r\n greed: {\r\n display: true,\r\n color: {\r\n hex: '#777777',\r\n html: 'var(--obl-linear-diagram-greed-color)',\r\n },\r\n stroke: 0.25,\r\n linePattern: LinePattern.DASHED,\r\n },\r\n };\r\n\r\n this.setOptions(options);\r\n\r\n this.points = points;\r\n }\r\n\r\n protected normalizeMinMax(min: number, max: number): MinMax {\r\n if (min === max) {\r\n if (min && max) {\r\n if (min > 0) {\r\n min = 0;\r\n } else {\r\n max = 0;\r\n }\r\n } else {\r\n max = 1;\r\n }\r\n }\r\n\r\n return {\r\n min,\r\n max,\r\n };\r\n }\r\n\r\n protected filterByRange(): Point2D[][] {\r\n const { selectionRange } = this;\r\n const { min, max } = selectionRange || { min: 0, max: 1 };\r\n const check = (p?: Point2D) => p && p.x >= min && p.x <= max;\r\n\r\n const between = (p1?: Point2D, p2?: Point2D) =>\r\n p1 && p1.x < min && p2 && p2.x > max;\r\n\r\n return selectionRange\r\n ? this.pPoints.map((points) =>\r\n points.filter(\r\n (p, index) =>\r\n check(p) ||\r\n check(points[index - 1]) ||\r\n check(points[index + 1]) ||\r\n between(p, points[index + 1]) ||\r\n between(points[index + 1], p) ||\r\n between(p, points[index - 1]) ||\r\n between(points[index - 1], p)\r\n )\r\n )\r\n : this.pPoints;\r\n }\r\n\r\n /**\r\n * Get min and max of x axis\r\n * @returns return min & max for x axis\r\n */\r\n public getXMinMax(): MinMax {\r\n let min!: number;\r\n let max!: number;\r\n\r\n const filtered = this.filterByRange();\r\n\r\n filtered.forEach((points) => {\r\n points.forEach((point, index) => {\r\n if (min === undefined || min > point.x) {\r\n min = point.x;\r\n }\r\n if (max === undefined || max < point.x) {\r\n max = point.x;\r\n }\r\n });\r\n });\r\n\r\n if (!this.selectionRange) {\r\n if (\r\n min === undefined ||\r\n (this.options?.xMinMax?.min !== undefined &&\r\n min > this.options?.xMinMax?.min)\r\n ) {\r\n min = this.options?.xMinMax?.min || 0;\r\n }\r\n\r\n if (\r\n max === undefined ||\r\n (this.options?.xMinMax?.max !== undefined &&\r\n max < this.options?.xMinMax?.max)\r\n ) {\r\n max = this.options?.xMinMax?.max || min + 1;\r\n }\r\n } else {\r\n return this.normalizeMinMax(\r\n this.selectionRange.min,\r\n this.selectionRange.max\r\n );\r\n }\r\n\r\n return this.normalizeMinMax(min, max);\r\n }\r\n\r\n /**\r\n * Find minimum & maximum for y axis\r\n * @returns MinMax interface of displayed values\r\n */\r\n protected getYMinMax(): MinMax {\r\n let min!: number;\r\n let max!: number;\r\n\r\n const filtered = this.filterByRange();\r\n\r\n filtered.forEach((points) => {\r\n const { selectionRange } = this;\r\n\r\n if (selectionRange && points.length > 1) {\r\n let fu = LinearFunction2D.fromTwoPoints(points[0], points[1]);\r\n\r\n if (fu) {\r\n if (min !== undefined) {\r\n min = Math.min(fu.yPoint(selectionRange.min), min);\r\n max = Math.max(min, max);\r\n } else {\r\n min = fu.yPoint(selectionRange.min);\r\n max = min;\r\n }\r\n }\r\n\r\n fu = LinearFunction2D.fromTwoPoints(\r\n points[points.length - 2],\r\n points[points.length - 1]\r\n );\r\n\r\n if (fu) {\r\n if (min !== undefined) {\r\n min = Math.min(fu.yPoint(selectionRange.max), min);\r\n max = Math.max(fu.yPoint(selectionRange.max), max);\r\n } else {\r\n min = fu.yPoint(selectionRange.max);\r\n max = min;\r\n }\r\n }\r\n }\r\n\r\n points.forEach((point, index) => {\r\n if ((index === 0 || index === points.length - 1) && selectionRange) {\r\n return;\r\n }\r\n\r\n if (min === undefined || min > point.y) {\r\n min = point.y;\r\n }\r\n if (max === undefined || max < point.y) {\r\n max = point.y;\r\n }\r\n });\r\n });\r\n\r\n if (\r\n min === undefined ||\r\n (this.options?.yMinMax?.min !== undefined &&\r\n min > this.options?.yMinMax?.min)\r\n ) {\r\n min = this.options?.yMinMax?.min || 0;\r\n }\r\n\r\n if (\r\n max === undefined ||\r\n (this.options?.yMinMax?.max !== undefined &&\r\n max < this.options?.yMinMax?.max)\r\n ) {\r\n max = this.options?.yMinMax?.max || min + 1;\r\n }\r\n\r\n return this.normalizeMinMax(min, max);\r\n }\r\n\r\n /**\r\n * Convert point diagram pos to SVG pos\r\n * @param point point to transform\r\n * @param startPoint diagram start point\r\n * @param xScale x scale\r\n * @param yScale y scale\r\n * @returns Point2D instance\r\n */\r\n protected diagramPosToSVG(point: Point2D, startPoint: Point2D): Point2D {\r\n return new Point2D(\r\n (point.x - this.xMinMax.min) * this.xScale + startPoint.x,\r\n -(point.y - this.yMinMax.min) * this.yScale + startPoint.y\r\n );\r\n }\r\n\r\n protected svgPosToDiagram(\r\n point: Point2D,\r\n startPoint: Point2D,\r\n xScale: number,\r\n yScale: number\r\n ): Point2D {\r\n return new Point2D(\r\n (point.x - startPoint.x) / xScale + this.xMinMax.min,\r\n (startPoint.y - point.y) / yScale + this.yMinMax.min\r\n );\r\n }\r\n\r\n protected getDAxis(\r\n range: number,\r\n autoIncreaseDecrease: boolean,\r\n dp: number\r\n ): number {\r\n if (!dp) {\r\n dp = range;\r\n }\r\n if (autoIncreaseDecrease) {\r\n while (range / dp > 10) {\r\n dp *= 2;\r\n }\r\n\r\n while (range / dp < 5) {\r\n dp /= 2;\r\n }\r\n }\r\n\r\n return dp;\r\n }\r\n\r\n protected getDx(): number {\r\n const range = this.xMinMax.max - this.xMinMax.min;\r\n\r\n return this.getDAxis(\r\n this.xMinMax.max - this.xMinMax.min,\r\n !this.options?.xAxis?.autoIncreaseDecrease,\r\n (this.options.xAxis?.dp && this.options.xAxis.dp) ||\r\n this.recalcDScale(\r\n range,\r\n this.options.xAxis?.precision !== undefined &&\r\n this.options.xAxis?.precision >= 0\r\n ? this.options.xAxis.precision\r\n : 2\r\n )\r\n );\r\n }\r\n\r\n protected getDy(): number {\r\n const range = this.yMinMax.max - this.yMinMax.min;\r\n\r\n return this.getDAxis(\r\n range,\r\n !this.options?.yAxis?.autoIncreaseDecrease,\r\n (this.options.yAxis?.dp && this.options.yAxis.dp) ||\r\n this.recalcDScale(\r\n range,\r\n this.options.yAxis?.precision && this.options.yAxis?.precision >= 0\r\n ? this.options.yAxis.precision\r\n : 2\r\n )\r\n );\r\n }\r\n\r\n protected drawGreed(dc: DrawingContextInterface, startPoint: Point2D): void {\r\n if (!this.options.greed?.display) {\r\n return;\r\n }\r\n\r\n dc.group({ name: 'greed' }).setLinePattern(this.options.greed?.linePattern);\r\n\r\n const dx = this.getDx();\r\n const dy = this.getDy();\r\n\r\n const startScale: Point2D = this.diagramPosToSVG(\r\n new Point2D(\r\n Math.ceil(this.xMinMax.min / dx) * dx,\r\n Math.ceil(this.yMinMax.min / dy) * dy\r\n ),\r\n startPoint\r\n );\r\n\r\n const dxy: Point2D = new Point2D(dx * this.xScale, dy * this.yScale);\r\n\r\n let posX: Point2D = new Point2D(startScale.x, startPoint.y);\r\n\r\n let posY: Point2D = new Point2D(startPoint.x, startScale.y);\r\n\r\n while (\r\n posX.x <=\r\n posY.x + (this.xMinMax.max - this.xMinMax.min) * this.xScale\r\n ) {\r\n dc.drawLine(\r\n posX,\r\n new Point2D(\r\n posX.x,\r\n posX.y - (this.yMinMax.max - this.yMinMax.min) * this.yScale\r\n ),\r\n this.options?.greed?.stroke || 0,\r\n this.options?.greed?.color || '#000000'\r\n );\r\n\r\n posX = posX.add(new Point2D(dxy.x, 0));\r\n }\r\n\r\n while (\r\n posY.y >=\r\n posX.y - (this.yMinMax.max - this.yMinMax.min) * this.yScale\r\n ) {\r\n dc.drawLine(\r\n posY,\r\n new Point2D(\r\n posY.x + (this.xMinMax.max - this.xMinMax.min) * this.xScale,\r\n posY.y\r\n ),\r\n this.options.greed?.stroke || 0,\r\n this.options.greed?.color || '#000000'\r\n );\r\n\r\n posY = posY.add(new Point2D(0, -dxy.y));\r\n }\r\n\r\n dc.setLinePattern(LinePattern.NONE).endGroup();\r\n }\r\n\r\n /**\r\n * Calc scale elementary increase value with given precision\r\n * @param value (max - min)\r\n * @param precision integer number should be >= 0\r\n * @returns scale elementary increase value\r\n */\r\n protected recalcDScale(value: number, precision: number = 2): number {\r\n const power = Math.floor(Math.log10(value));\r\n return +(\r\n Math.ceil((Math.pow(10, -power + precision) * value) / 10) *\r\n Math.pow(10, power - precision)\r\n ).toFixed(precision);\r\n }\r\n\r\n protected drawXAxis(\r\n dc: DrawingContextInterface,\r\n startPoint: Point2D\r\n ): number {\r\n if (!this.options.xAxis?.display) {\r\n return 0;\r\n }\r\n\r\n dc.group({ name: 'xAxis' });\r\n\r\n const dx = this.getDx();\r\n\r\n const startScale: Point2D = this.diagramPosToSVG(\r\n new Point2D(Math.ceil(this.xMinMax.min / dx) * dx, 0),\r\n startPoint\r\n );\r\n\r\n let posX: Point2D = new Point2D(startScale.x, startPoint.y);\r\n\r\n const bP = this.diagramPosToSVG(\r\n new Point2D(this.xMinMax.min, this.yMinMax.min),\r\n startPoint\r\n );\r\n\r\n const eP = this.diagramPosToSVG(\r\n new Point2D(this.xMinMax.max, this.yMinMax.min),\r\n startPoint\r\n );\r\n\r\n dc.drawArrow(\r\n bP,\r\n eP,\r\n this.options.xAxis?.stroke || 0,\r\n this.options.xAxis?.color || '#000000',\r\n !!this.options?.xAxis?.arrow\r\n );\r\n\r\n let xText = '';\r\n\r\n let textWidth = 0;\r\n\r\n dc.group({ name: 'values' });\r\n\r\n for (\r\n let x = Math.ceil(this.xMinMax.min / dx) * dx;\r\n x <= this.xMinMax.max;\r\n x += dx\r\n ) {\r\n xText = this.xFormatter(x, this.xK);\r\n\r\n textWidth = dc.getTextWidth(xText) + 5;\r\n dc.drawText(\r\n xText,\r\n posX.add(new Point2D(1.5, textWidth)),\r\n this.options.xAxis?.color || '#000000',\r\n 90\r\n );\r\n\r\n posX = posX.add(new Point2D(dx * this.xScale, 0));\r\n }\r\n\r\n dc.endGroup().endGroup();\r\n\r\n return textWidth;\r\n }\r\n\r\n protected drawYAxis(\r\n dc: DrawingContextInterface,\r\n startPoint: Point2D\r\n ): number {\r\n if (!this.options.yAxis?.display) {\r\n return 0;\r\n }\r\n const dy = this.getDy();\r\n\r\n const startScale: Point2D = this.diagramPosToSVG(\r\n new Point2D(0, Math.ceil(this.yMinMax.min / dy) * dy),\r\n startPoint\r\n );\r\n\r\n return this.yAxis.draw(\r\n dc,\r\n startPoint,\r\n startScale,\r\n dy,\r\n this.yMinMax,\r\n this.yScale,\r\n this.yK,\r\n this.diagramArea,\r\n this.yLabel,\r\n this.options.yAxis\r\n );\r\n }\r\n\r\n protected drawLegend(dc: DrawingContextInterface): void {\r\n if (\r\n this.legend?.length &&\r\n this.pPoints &&\r\n this.legend.length <= this.pPoints.length &&\r\n this.options?.set?.length\r\n ) {\r\n dc.setFontSize(8);\r\n const maxTextWidth: number = this.legend\r\n .map((text) => dc.getTextWidth(text))\r\n .reduce(\r\n (prev, current) => ((prev = prev < current ? current : prev), prev),\r\n 0\r\n );\r\n\r\n const padding = 5;\r\n const keyHeight = 10;\r\n const keyWidth = 15;\r\n\r\n const totalWidth = keyWidth + padding * 3 + maxTextWidth;\r\n const totalHeight = padding + (keyHeight + padding) * this.legend.length;\r\n\r\n const pc = new Point2D(\r\n this.diagramArea.x + this.diagramArea.width - padding - totalWidth,\r\n this.diagramArea.y + padding\r\n );\r\n\r\n dc.group({ name: 'legend' }).drawRect(\r\n pc.x,\r\n pc.y,\r\n totalWidth,\r\n totalHeight,\r\n 1,\r\n '#aaaaaa',\r\n '#ffffff',\r\n { opacity: 0.6 }\r\n );\r\n\r\n this.legend.forEach((text, index) => {\r\n const pt = new Point2D(\r\n padding,\r\n padding + index * (keyHeight + padding) + keyHeight / 2\r\n ).add(pc);\r\n\r\n const styles = this.options.set\r\n ? this.options.set[index % this.options.set.length]\r\n : {};\r\n\r\n dc.group({ name: `key-${index + 1}` }).setLinePattern(\r\n styles.linePattern\r\n );\r\n if (styles.linePattern !== LinePattern.DISABLED) {\r\n dc.drawLine(\r\n pt,\r\n pt.add(new Point2D(keyWidth, 0)),\r\n styles.stroke || 1,\r\n styles.color || '#000000'\r\n );\r\n }\r\n\r\n dc.setLinePattern(undefined);\r\n this.getDrawPointFu(styles.drawPoint || PointType.NONE)(\r\n pt.add(new Point2D(keyWidth / 2, 0)),\r\n dc,\r\n styles.stroke || 1,\r\n styles.color || '#000000',\r\n 0,\r\n 0\r\n );\r\n\r\n dc.endGroup()\r\n .setFontSize(8)\r\n .setTextAlign(TextAlign.LEFT)\r\n .drawText(\r\n text,\r\n pc.add(\r\n new Point2D(\r\n padding * 2 + keyWidth,\r\n padding + index * (keyHeight + padding) + keyHeight * 0.75\r\n )\r\n ),\r\n '#000000',\r\n 0\r\n );\r\n });\r\n\r\n dc.endGroup();\r\n }\r\n }\r\n\r\n protected drawVectors(\r\n dc: DrawingContextInterface,\r\n startPoint: Point2D\r\n ): void {\r\n const pos = new Point2D(this.diagramArea.x, this.diagramArea.y - 2);\r\n const width = this.diagramArea.width;\r\n const height = this.diagramArea.height + 2;\r\n dc.group({\r\n name: 'vectors-tables',\r\n clipRect: {\r\n pos,\r\n width,\r\n height,\r\n },\r\n });\r\n\r\n this.pPoints.forEach((points, index) => {\r\n const setIndex =\r\n (this.options.set && index % this.options.set.length) || 0;\r\n const stroke = this.options?.set?.[setIndex].stroke || 2;\r\n const color = this.options?.set?.[setIndex].color || '#000000';\r\n const linePattern = this.options?.set?.[setIndex].linePattern;\r\n\r\n dc.setLinePattern(this.options?.set?.[setIndex].linePattern).group({\r\n name: `vectors-${index + 1}`,\r\n });\r\n\r\n points = points.map((point) => this.diagramPosToSVG(point, startPoint));\r\n points = points.map((point, i) => {\r\n const prev = points[i + 1];\r\n const next = points[i - 1];\r\n if (\r\n point.isPtInRect(pos.x, pos.y, width, height) || // current in rect\r\n prev?.isPtInRect(pos.x, pos.y, width, height) || // prev in rect\r\n next?.isPtInRect(pos.x, pos.y, width, height) || // next in rect\r\n (prev && prev.x <= pos.x && point.x >= pos.x + width) || // prev outside left and current outside of right\r\n (next && point.x <= pos.x && next.x >= pos.x + width) // current outside left and next outside of right\r\n ) {\r\n return point;\r\n }\r\n return undefined;\r\n })\r\n .filter(pt => pt) as Point2D[];\r\n\r\n if (linePattern !== LinePattern.DISABLED) {\r\n dc.drawPolyline(\r\n points,\r\n stroke,\r\n color\r\n );\r\n }\r\n\r\n if (this.options.set) {\r\n if (\r\n this.options.set[setIndex].drawPoint &&\r\n this.options.set[setIndex].drawPoint !== PointType.NONE\r\n ) {\r\n const pointType =\r\n this.options.set[setIndex].drawPoint || PointType.NONE;\r\n\r\n if (pointType !== PointType.NONE) {\r\n const drawPointFu: DrawingPointFu = this.getDrawPointFu(pointType);\r\n\r\n dc.group({ name: 'points-marks' });\r\n\r\n points.forEach((point, pIndex) => {\r\n dc.group({\r\n data: {\r\n point: JSON.stringify(point),\r\n pointSvg: JSON.stringify(\r\n point\r\n ),\r\n },\r\n onMouseOver: (g: SVGGElement) => this.onPointMouseOver.next(g),\r\n onMouseOut: () => this.onPointMouseOut.next(),\r\n });\r\n\r\n drawPointFu(\r\n point,\r\n dc,\r\n stroke,\r\n color,\r\n pIndex,\r\n point.y\r\n );\r\n\r\n dc.endGroup();\r\n });\r\n\r\n dc.endGroup();\r\n }\r\n }\r\n }\r\n\r\n dc.endGroup();\r\n });\r\n\r\n dc.endGroup();\r\n }\r\n\r\n draw(dc: DrawingContextInterface): void {\r\n dc.clear();\r\n\r\n this.xCursorLine = undefined as any;\r\n this.yCursorLine = undefined as any;\r\n this.xyCursor = undefined as any;\r\n\r\n this.xScale =\r\n this.diagramArea.width / (this.xMinMax.max - this.xMinMax.min);\r\n this.yScale =\r\n this.diagramArea.height / (this.yMinMax.max - this.yMinMax.min);\r\n\r\n const startPoint: Point2D = new Point2D(\r\n this.diagramArea.x,\r\n this.diagramArea.y + this.diagramArea.height\r\n );\r\n\r\n dc.setFontSize(10);\r\n\r\n this.drawGreed(dc, startPoint);\r\n\r\n this.drawVectors(dc, startPoint);\r\n\r\n dc.setLinePattern(LinePattern.NONE);\r\n\r\n dc.setTextAlign(TextAlign.CENTER);\r\n\r\n dc.setTextBaseline(TextBaseline.ALPHABETIC);\r\n\r\n if (this.title) {\r\n dc.setFontSize(30);\r\n dc.drawText(\r\n this.title,\r\n this.diagramPosToSVG(\r\n new Point2D(\r\n (this.xMinMax.max + this.xMinMax.min) * 0.5,\r\n this.yMinMax.max\r\n ),\r\n startPoint\r\n ).add(new Point2D(0, -20)),\r\n '#ff0000',\r\n 0\r\n );\r\n dc.setFontSize(15);\r\n }\r\n\r\n dc.setTextBaseline(TextBaseline.ALPHABETIC)\r\n .setTextAlign(TextAlign.LEFT)\r\n .setFontSize(10);\r\n\r\n const lengthXLabel = this.drawXAxis(dc, startPoint);\r\n\r\n this.drawYAxis(dc, startPoint);\r\n\r\n dc.setTextAlign(TextAlign.CENTER);\r\n\r\n if (this.options.xAxis?.display) {\r\n if (this.xLabel) {\r\n dc.drawText(\r\n this.xLabel,\r\n this.diagramPosToSVG(\r\n new Point2D(\r\n (this.xMinMax.max + this.xMinMax.min) * 0.5,\r\n this.yMinMax.min\r\n ),\r\n startPoint\r\n ).add(new Point2D(0, lengthXLabel + 20)),\r\n this.options.xAxis?.color || '#000000',\r\n 0\r\n );\r\n }\r\n\r\n if (this.xK) {\r\n dc.setTextAlign(TextAlign.RIGHT).drawText(\r\n `×e${-this.xK}`,\r\n this.diagramPosToSVG(\r\n new Point2D(this.xMinMax.max, this.yMinMax.min),\r\n startPoint\r\n ).add(new Point2D(0, lengthXLabel + 20)),\r\n this.options.xAxis?.color || '#000000',\r\n 0\r\n );\r\n }\r\n }\r\n\r\n dc.setTextAlign(TextAlign.LEFT).setTextBaseline(TextBaseline.ALPHABETIC);\r\n\r\n this.drawLegend(dc);\r\n\r\n this.redraw.next();\r\n }\r\n\r\n setOptions(options: LinearDiagram2DOptions | undefined): void {\r\n if (!options) {\r\n options = {};\r\n }\r\n\r\n this.options = {\r\n displayCursor: options.displayCursor,\r\n xAxis: {\r\n ...this.options.xAxis,\r\n ...options?.xAxis,\r\n },\r\n yAxis: {\r\n ...this.options.yAxis,\r\n ...options?.yAxis,\r\n },\r\n xMinMax: {\r\n ...this.options.xMinMax,\r\n ...(options?.xMinMax as any),\r\n },\r\n yMinMax: {\r\n ...this.options.xMinMax,\r\n ...(options?.yMinMax as any),\r\n },\r\n greed: {\r\n ...this.options.greed,\r\n ...options?.greed,\r\n },\r\n set: options?.set ||\r\n this.options.set || [\r\n {\r\n color: '#37abc8',\r\n stroke: 2,\r\n linePattern: LinePattern.NONE,\r\n drawPoint: PointType.NONE,\r\n },\r\n {\r\n color: '#ab37c8',\r\n stroke: 2,\r\n linePattern: LinePattern.NONE,\r\n drawPoint: PointType.NONE,\r\n },\r\n {\r\n color: '#ffc837',\r\n stroke: 2,\r\n linePattern: LinePattern.NONE,\r\n drawPoint: PointType.NONE,\r\n },\r\n ],\r\n };\r\n }\r\n\r\n drawCursor(mousePos: Point2D, svg: SVGGElement): void {\r\n if (\r\n !this.options?.displayCursor ||\r\n !mousePos ||\r\n this.xScale === undefined ||\r\n this.yScale === undefined\r\n ) {\r\n return;\r\n }\r\n const legend = svg.querySelector('.legend');\r\n const vectors = svg.querySelector('.vectors-tables');\r\n const append = (element: SVGElement, before: Element | null) => {\r\n if (before) {\r\n svg.insertBefore(element, before);\r\n } else {\r\n svg.appendChild(element);\r\n }\r\n };\r\n if (!this.xCursorLine) {\r\n this.xCursorLine = document.createElementNS(ns, 'polyline');\r\n append(this.xCursorLine, vectors || legend);\r\n this.xCursorLine.style.stroke = '#ff0000';\r\n this.xCursorLine.style.strokeWidth = '.2';\r\n }\r\n if (!this.yCursorLine) {\r\n this.yCursorLine = document.createElementNS(ns, 'polyline');\r\n append(this.yCursorLine, vectors || legend);\r\n this.yCursorLine.style.stroke = '#ff0000';\r\n this.yCursorLine.style.strokeWidth = '.2';\r\n }\r\n if (!this.xyCursor) {\r\n this.xyCursor = document.createElementNS(ns, 'text');\r\n append(this.xyCursor, legend);\r\n this.xyCursor.style.fill = '#ff0000';\r\n this.xyCursor.style.textAnchor = 'left';\r\n this.xyCursor.style.fontSize = '8px';\r\n }\r\n\r\n if (!this.diagramArea.isPtInRect(mousePos)) {\r\n this.yCursorLine.style.display = 'none';\r\n this.xCursorLine.style.display = 'none';\r\n this.xyCursor.style.display = 'none';\r\n } else {\r\n this.yCursorLine.style.display = '';\r\n this.xCursorLine.style.display = '';\r\n this.xyCursor.style.display = '';\r\n }\r\n\r\n const startPoint: Point2D = new Point2D(\r\n this.diagramArea.x,\r\n this.diagramArea.y + this.diagramArea.height\r\n );\r\n\r\n const diagramPos = this.svgPosToDiagram(\r\n mousePos,\r\n startPoint,\r\n this.xScale,\r\n this.yScale\r\n );\r\n\r\n this.xyCursor.textContent = `${this.decimalPipe.transform(\r\n diagramPos.x,\r\n '0.3-3'\r\n )}; ${this.decimalPipe.transform(diagramPos.y, '0.3-3')}`;\r\n this.xyCursor.setAttribute('x', (mousePos.x + 2).toString());\r\n this.xyCursor.setAttribute('y', (mousePos.y - 2).toString());\r\n\r\n this.xCursorLine.setAttribute(\r\n 'points',\r\n `${this.diagramArea.x},${mousePos.y} ${\r\n this.diagramArea.x + this.diagramArea.width\r\n },${mousePos.y}`\r\n );\r\n\r\n this.yCursorLine.setAttribute(\r\n 'points',\r\n `${mousePos.x},${this.diagramArea.y} ${mousePos.x},${\r\n this.diagramArea.y + this.diagramArea.height\r\n }`\r\n );\r\n }\r\n\r\n svgToDiagram(point: Point2D) {\r\n const startPoint: Point2D = new Point2D(\r\n this.diagramArea.x,\r\n this.diagramArea.y + this.diagramArea.height\r\n );\r\n\r\n return this.svgPosToDiagram(point, startPoint, this.xScale, this.yScale);\r\n }\r\n\r\n protected getDrawPointFu(pointType: PointType | string): DrawingPointFu {\r\n const fu = LinearDiagram2D.drawingPoints.get(pointType);\r\n\r\n // eslint-disable-next-line no-unneeded-ternary\r\n return fu\r\n ? fu\r\n : (\r\n point: Point2D,\r\n dc: DrawingContextInterface,\r\n stroke: number,\r\n color: ColorType\r\n ) => {};\r\n }\r\n}\r\n","import { DiagramPointHoverComponent } from './../diagram-point-hover/diagram-point-hover.component';\r\nimport {\r\n AfterContentInit,\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ContentChild,\r\n effect,\r\n ElementRef,\r\n input,\r\n Input,\r\n OnDestroy,\r\n Renderer2,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n LinearDiagram2D,\r\n LinearDiagram2DOptions,\r\n} from '../../class/linear-diagram-2-d/linear-diagram-2-d';\r\nimport {\r\n DrawingContextInterface,\r\n DrawingSvgInterface,\r\n Rect,\r\n} from '@obliczeniowo/elementary/drawing';\r\nimport { DrawingPdfInterface } from '@obliczeniowo/elementary/drawing-pdf';\r\nimport { Subscription } from 'rxjs';\r\nimport { Point2D } from '@obliczeniowo/elementary/classes';\r\n\r\n@Component({\r\n selector: 'obl-linear-diagram-2d',\r\n templateUrl: './linear-diagram-2d.component.html',\r\n styleUrls: ['./linear-diagram-2d.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false\r\n})\r\nexport class LinearDiagram2DComponent\r\n implements OnDestroy, AfterViewInit, AfterContentInit\r\n{\r\n protected dc!: DrawingSvgInterface;\r\n protected diagram2d?: LinearDiagram2D;\r\n protected mousePos: Point2D = new Point2D();\r\n\r\n protected selectArea?: Rect;\r\n\r\n readonly width = 800;\r\n readonly height = 528;\r\n\r\n @ViewChild('diagram') diagram!: ElementRef<SVGSVGElement>;\r\n\r\n legend = input<string[]>([]);\r\n points = input<Point2D[][]>([]);\r\n\r\n xFormatter = input<(x: number) => string>();\r\n yFormatter = input<(x: number) => string>();\r\n\r\n private pOptions!: LinearDiagram2DOptions;\r\n\r\n public get options(): LinearDiagram2DOptions {\r\n return this.pOptions;\r\n }\r\n\r\n @Input() public set options(value: LinearDiagram2DOptions) {\r\n this.pOptions = value;\r\n\r\n if (this.diagram2d && this.dc) {\r\n this.diagram2d.setOptions(value);\r\n this.diagram2d.draw(this.dc);\r\n }\r\n }\r\n\r\n protected pLabels: {\r\n x: string,\r\n y: string,\r\n title: string\r\n } = {\r\n x: '',\r\n y: '',\r\n title: '',\r\n };\r\n\r\n @Input() set labels(labels: { x: string; y: string; title: string }) {\r\n this.pLabels = labels;\r\n\r\n if (this.diagram2d) {\r\n this.diagram2d.draw(this.dc);\r\n }\r\n }\r\n\r\n @ContentChild(DiagramPointHoverComponent)\r\n diagramPointHover!: DiagramPointHoverComponent;\r\n\r\n protected subscriptions: Subscription[] = [];\r\n\r\n constructor(protected renderer: Renderer2) {\r\n effect(() => {\r\n this.points();\r\n this.legend();\r\n this.draw()\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscriptions.forEach((subscription) => {\r\n if (!subscription.closed) {\r\n subscription.unsubscribe();\r\n }\r\n });\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n if (this.diagramPointHover && this.diagram2d) {\r\n this.diagramPointHover.onMouseOut = this.diagram2d.onPointMouseOut;\r\n this.diagramPointHover.onMouseOver = this.diagram2d.onPointMouseOver;\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.draw();\r\n }\r\n\r\n pdf(): void {\r\n const dc: DrawingPdfInterface = new DrawingPdfInterface(\r\n new Rect(new Point2D(0, 0), new Point2D(800, 600), 20, 20)\r\n );\r\n\r\n this.draw(dc);\r\n\r\n dc.save(\r\n this.diagram2d?.title.length ? this.diagram2d.title : 'Diagram 2D'\r\n );\r\n }\r\n\r\n draw(dc: DrawingContextInterface = this.dc): void {\r\n if (!dc) {\r\n if (!this.diagram) {\r\n return;\r\n }\r\n this.dc = new DrawingSvgInterface(this.diagram.nativeElement, this.renderer);\r\n dc = this.dc;\r\n }\r\n\r\n if (!this.diagram2d) {\r\n this.diagram2d = new LinearDiagram2D(\r\n new Rect(new Point2D(120, 50), new Point2D(700, 400)),\r\n this.points(),\r\n this.options\r\n );\r\n if (this.diagramPointHover) {\r\n this.diagramPointHover.onMouseOut = this.diagram2d.onPointMouseOut;\r\n this.diagramPointHover.onMouseOver = this.diagram2d.onPointMouseOver;\r\n }\r\n } else {\r\n this.diagram2d.points = this.points();\r\n }\r\n\r\n this.diagram2d.legend = this.legend();\r\n\r\n this.diagram2d.xLabel = this.pLabels.x;\r\n this.diagram2d.yLabel = this.pLabels.y;\r\n this.diagram2d.title = this.pLabels.title;\r\n\r\n const xFormatter = this.xFormatter();\r\n if (xFormatter) {\r\n this.diagram2d.xFormatter = xFormatter;\r\n }\r\n\r\n const yFormatter = this.yFormatter();\r\n if (yFormatter) {\r\n this.diagram2d.yFormatter = yFormatter;\r\n }\r\n\r\n this.diagram2d.draw(dc);\r\n if (dc instanceof DrawingSvgInterface) {\r\n this.diagram2d.drawCursor(\r\n this.mousePos,\r\n (dc as DrawingSvgInterface).svgContainer\r\n );\r\n }\r\n }\r\n\r\n move(event: MouseEvent): void {\r\n const rect = this.diagram.nativeElement.getBoundingClientRect();\r\n this.mousePos = new Point2D(\r\n ((event.clientX - rect.left) / rect.width) * this.width,\r\n ((event.clientY - rect.top) / rect.height) * this.height\r\n );\r\n\r\n if (!this.diagram2d) {\r\n return;\r\n }\r\n\r\n this.diagram2d.drawCursor(this.mousePos, this.diagram.nativeElement);\r\n\r\n const area = this.diagram2d.diagramArea;\r\n\r\n if (\r\n event.buttons === 1 &&\r\n this.mousePos.isPtInRect(area.x, area.y, area.width, area.height)\r\n ) {\r\n if (this.selectArea) {\r\n this.selectArea.width = this.mousePos.x - this.selectArea.x;\r\n } else {\r\n const startPoint = new Point2D(\r\n this.mousePos.x,\r\n this.diagram2d.diagramArea.y\r\n );\r\n const endPoint = new Point2D(\r\n Math.min(\r\n this.mousePos.x,\r\n this.diagram2d.diagramArea.x + this.diagram2d.diagramArea.width\r\n ),\r\n this.diagram2d.diagramArea.y + this.diagram2d.diagramArea.height\r\n );\r\n this.selectArea = new Rect(startPoint, endPoint);\r\n }\r\n }\r\n }\r\n\r\n keyup(event: MouseEvent) {\r\n if (!this.diagram2d) {\r\n return;\r\n }\r\n const { selectArea } = this;\r\n if (selectArea) {\r\n const xMin = selectArea.x < selectArea.x + selectArea.width ? selectArea.x : selectArea.x + selectArea.width;\r\n const xMax = selectArea.x < selectArea.x + selectArea.width ? selectArea.x + selectArea.width : selectArea.x;\r\n this.diagram2d.selectionRange = {\r\n min: this.diagram2d.svgToDiagram(\r\n new Point2D(xMin, selectArea.y)\r\n ).x,\r\n max: this.diagram2d.svgToDiagram(\r\n new Point2D(\r\n xMax,\r\n selectArea.y\r\n )\r\n ).x,\r\n };\r\n this.selectArea = undefined;\r\n this.draw();\r\n }\r\n }\r\n\r\n left() {\r\n if (!this.diagram2d) {\r\n return;\r\n }\r\n const { selectionRange } = this.diagram2d;\r\n if (selectionRange) {\r\n this.diagram2d.selectionRange = undefined;\r\n const range = selectionRange.max - selectionRange.min;\r\n const minMax = this.diagram2d.getXMinMax();\r\n\r\n selectionRange.min = Math.max(selectionRange.min - range, minMax.min);\r\n selectionRange.max = selectionRange.min + range;\r\n\r\n this.diagram2d.selectionRange = selectionRange;\r\n this.draw();\r\n }\r\n }\r\n\r\n right() {\r\n if (!this.diagram2d) {\r\n return;\r\n }\r\n const { selectionRange } = this.diagram2d;\r\n if (selectionRange) {\r\n this.diagram2d.selectionRange = undefined;\r\n const range = selectionRange.max - selectionRange.min;\r\n const minMax = this.diagram2d.getXMinMax();\r\n\r\n selectionRange.max = Math.min(selectionRange.max + range, minMax.max);\r\n selectionRange.min = selectionRange.max - range;\r\n\r\n this.diagram2d.selectionRange = selectionRange;\r\n this.draw();\r\n }\r\n }\r\n}\r\n","<div class=\"svgContainer\">\r\n <svg\r\n #diagram\r\n [attr.viewBox]=\"'0 0 ' + width + ' ' + height\"\r\n (mousemove)=\"move($event)\"\r\n (mouseup)=\"keyup($event)\"\r\n >\r\n @if (selectArea) {\r\n <rect\r\n [attr.x]=\"[selectArea.x, selectArea.x + selectArea.width] | oblMin\"\r\n [attr.y]=\"selectArea.y\"\r\n [attr.width]=\"([selectArea.width] | oblAbs)[0]\"\r\n [attr.height]=\"([selectArea.height] | oblAbs)[0]\"\r\n ></rect>\r\n }\r\n <g class=\"root\"></g>\r\n </svg>\r\n <div class=\"buttons\">\r\n <button class=\"pdf-button\" oblButton icon=\"file\" (click)=\"pdf()\"></button>\r\n @if (diagram2d?.selectionRange) {\r\n <button\r\n oblButton\r\n icon=\"cancel\"\r\n (click)=\"diagram2d && diagram2d.selectionRange = undefined; this.draw()\"\r\n ></button>\r\n <button oblButton icon=\"left\" (click)=\"left()\"></button>\r\n <button oblButton icon=\"right\" (click)=\"right()\"></button>\r\n }\r\n </div>\r\n <ng-content></ng-content>\r\n</div>\r\n","/* eslint-disable @typescript-eslint/no-dynamic-delete */\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Point2D } from '@obliczeniowo/elementary/classes';\r\nimport { OblFileService } from '@obliczeniowo/elementary/files';\r\nimport { ElementaryMath } from '@obliczeniowo/elementary/math';\r\nimport { keysValues } from '@obliczeniowo/elementary/objects';\r\nimport { TranslationPipe } from '@obliczeniowo/elementary/text-pipes';\r\n\r\nexport interface ArrayFilterOption {\r\n value: number;\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n}\r\n\r\nexport type ArrayFiltersOptions = { [option: string]: ArrayFilterOption };\r\n\r\nexport interface ArrayFilterModel {\r\n filter: (data: Point2D[], options: { [option: string]: any }) => Point2D[];\r\n options: ArrayFiltersOptions;\r\n}\r\n\r\nexport interface ValueDesc {\r\n value: number;\r\n min?: number;\r\n max?: number;\r\n steep?: number;\r\n}\r\n\r\nexport type FiltersOptions = { [filter: string]: ArrayFiltersOptions };\r\n\r\n@Component({\r\n selector: 'obl-diagram-data-filter',\r\n templateUrl: './diagram-data-filter.component.html',\r\n styleUrl: './diagram-data-filter.component.scss',\r\n standalone: false\r\n})\r\nexport class DiagramDataFilterComponent {\r\n protected models: { [name: string]: ArrayFilterModel } = {\r\n smooth: {\r\n filter: (\r\n data: Point2D[],\r\n options: { [option: string]: any }\r\n ): Point2D[] => {\r\n const tolerance = options?.tolerance.value ?? 0.5;\r\n const sampleSize: number = options?.sampleSize.value ?? 10;\r\n data.forEach((r, index: number) => {\r\n const sample = data.slice(index, index + sampleSize).map((d) => d.y);\r\n const max = Math.max(...sample);\r\n const min = Math.min(...sample);\r\n if (max - min < tolerance && sample.length) {\r\n r.y = ElementaryMath.average(sample);\r\n }\r\n });\r\n return data;\r\n },\r\n options: {\r\n tolerance: { value: 0.5, min: 0, max: 5, step: 0.1 },\r\n sampleSize: { value: 10, min: 2, max: 25, step: 1 },\r\n },\r\n },\r\n 'index-range': {\r\n filter: (\r\n data: Point2D[],\r\n options: { [option: string]: ValueDesc }\r\n ): Point2D[] => {\r\n const start = ElementaryMath.minmax(\r\n options?.start?.value ?? 0,\r\n 0,\r\n data.length - 1\r\n );\r\n const end = ElementaryMath.minmax(\r\n options?.end?.value ?? data.length,\r\n 0,\r\n data.length - 1\r\n );\r\n return data.slice(start, end);\r\n },\r\n options: {\r\n start: { value: 0 },\r\n end: { value: 20 },\r\n },\r\n },\r\n 'x-range': {\r\n filter: (\r\n data: Point2D[],\r\n options: { [option: string]: ValueDesc }\r\n ): Point2D[] => {\r\n const start = options?.start?.value || 0;\r\n const end = options?.end?.value || data.length;\r\n return data.filter((v) => v.x >= start && v.x <= end);\r\n },\r\n options: {\r\n start: { value: 0 },\r\n end: { value: 20 },\r\n },\r\n },\r\n diff: {\r\n filter: (\r\n data: Point2D[],\r\n options: { [option: string]: ValueDesc }\r\n ): Point2D[] => {\r\n const points: Point2D[] = [];\r\n data.forEach((p, index) => {\r\n if (index < data.length - 1) {\r\n const pt = data[index + 1].copy();\r\n pt.y = (pt.y - p.y) / (pt.x - p.x);\r\n points.push(pt);\r\n }\r\n });\r\n return points;\r\n },\r\n options: {},\r\n },\r\n 'nth-filter': {\r\n filter: (\r\n data: Point2D[],\r\n options: { [option: string]: ValueDesc }\r\n ): Point2D[] => {\r\n const nth = options?.nth?.value ?? 1;\r\n return data.filter((_, index) => index % nth === 0);\r\n },\r\n options: {\r\n nth: { value: 1, min: 1, max: 100, step: 1 },\r\n },\r\n },\r\n multiply: {\r\n filter: (\r\n data: Point2D[],\r\n options: { [option: string]: ValueDesc }\r\n ): Point2D[] => {\r\n const k = options?.k?.value ?? 1;\r\n return data.map((v) => new Point2D(v.x, v.y * k));\r\n },\r\n options: {\r\n k: { value: 1, step: 0 },\r\n },\r\n },\r\n add: {\r\n filter: (\r\n data: Point2D[],\r\n options: { [option: string]: ValueDesc }\r\n ): Point2D[] => {\r\n const add = options?.adding?.value ?? 1;\r\n return data.map((v) => new Point2D(v.x, v.y + add));\r\n },\r\n options: {\r\n adding: { value: 1, step: 0 },\r\n },\r\n },\r\n };\r\n\r\n protected _filters: FiltersOptions = {};\r\n\r\n protected selected?: string;\r\n\r\n protected lastData?: Point2D[];\r\n\r\n @Input() set filters(filters: FiltersOptions) {\r\n this._filters = filters;\r\n keysValues(filters).forEach(\r\n ([name, value]) => (this.models[name].options = value)\r\n );\r\n }\r\n\r\n get filters(): FiltersOptions {\r\n return this._filters;\r\n }\r\n\r\n @Input() translations: { [en: string]: string } = {};\r\n\r\n @Output() filtersChanged = new EventEmitter<FiltersOptions>();\r\n\r\n constructor(\r\n protected file: OblFileService\r\n ) {}\r\n\r\n filtering(data: Point2D[]) {\r\n this.lastData = data;\r\n let copy = data.map((d) => d.copy());\r\n const filters = this.models;\r\n keysValues(this._filters).forEach(([name, value]) => {\r\n filters[name] = { ...value, ...filters[name] };\r\n const filter = filters[name];\r\n copy = filter.filter(copy, filter);\r\n });\r\n\r\n return copy;\r\n }\r\n\r\n protected remove(name: string) {\r\n delete this._filters[name];\r\n this.selected = undefined;\r\n this.changed();\r\n }\r\n\r\n protected changed() {\r\n const filters = keysValues(this.models)\r\n .filter(([name]) => this._filters[name])\r\n .map(([name, value]) => {\r\n return { [name]: { ...value.options } };\r\n })\r\n .reduce((p, c) => ({ ...p, ...c }), {});\r\n\r\n this.filtersChanged.emit(filters);\r\n }\r\n\r\n protected compare = (f: any, s: any) => {\r\n return 0;\r\n };\r\n\r\n protected download() {\r\n const translationPipe = new TranslationPipe();\r\n if (this.lastData) {\r\n return this.file.saveTextFile(\r\n JSON.stringify(this.filtering(this.lastData)),\r\n translationPipe.transform('filtered data', this.translations),\r\n 'application/json'\r\n );\r\n }\r\n }\r\n}\r\n","@if ((filters | keyvalue).length) {\r\n <fieldset class=\"filters\">\r\n <legend>{{ 'Chosen' | oblTranslation : translations }}</legend>\r\n <div class=\"items\">\r\n @for (filter of filters | keyvalue : compare; track filter.key) {\r\n <div\r\n class=\"filter\"\r\n (click)=\"selected = filter.key\"\r\n >\r\n <span>{{ filter.key | oblTranslation : translations }}</span>\r\n <button oblButton icon=\"cancel\" (click)=\"remove(filter.key)\"></button>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"buttons\">\r\n <button oblButton icon=\"save\" (click)=\"download()\"></button>\r\n <ng-content></ng-content>\r\n </div>\r\n </fieldset>\r\n}\r\n\r\n@if ((filters | keyvalue).length !== (models | keyvalue).length) {\r\n <fieldset class=\"filters\">\r\n <legend>{{ 'Others' | oblTranslation : translations }}</legend>\r\n <div class=\"items\">\r\n @for (filter of models | keyvalue : compare; track filter.key) {\r\n @if (!filters[filter.key]) {\r\n <div\r\n class=\"filter\"\r\n (click)=\"filters[filter.key] = filter.value.options; changed()\"\r\n >\r\n <span>{{ filter.key | oblTranslation : translations }}</span>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </fieldset>\r\n}\r\n\r\n@if (selected) {\r\n <div>\r\n <div class=\"head\">\r\n {{ 'Edit filter option of name:' | oblTranslation : translations }}\r\n {{ selected | oblTranslation : translations }}\r\n </div>\r\n @for(filter of models[selected].options | keyvalue : compare; track filter.key) {\r\n <div class=\"filter-option-control\">\r\n <obl-input-wrapper [label]=\"filter.key | oblTranslation : translations\">\r\n <input\r\n oblInput\r\n type=\"number\"\r\n [value]=\"filter.value.value\"\r\n (change)=\"\r\n models[selected].options[filter.key].value = input.valueAsNumber;\r\n changed()\r\n \"\r\n [step]=\"filter.value.step\"\r\n [min]=\"filter.value.min\"\r\n [max]=\"filter.value.max\"\r\n #input\r\n />\r\n </obl-input-wrapper>\r\n </div>\r\n }\r\n </div>\r\n}","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { ButtonsModule } from '@obliczeniowo/elementary/buttons';\r\nimport { TextPipesModule } from '@obliczeniowo/elementary/text-pipes';\r\nimport { InputModule } from '@obliczeniowo/elementary/input';\r\nimport { AbsPipe, MinPipe } from '@obliczeniowo/elementary/numeric-pipes';\r\n\r\nimport { LinearDiagram2DComponent } from './components/diagram2d/linear-diagram-2d.component';\r\nimport { DiagramPointHoverComponent } from './components/diagram-point-hover/diagram-point-hover.component';\r\nimport { DiagramDataFilterComponent } from './components/diagram-data-filter/diagram-data-filter.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n LinearDiagram2DComponent,\r\n DiagramPointHoverComponent,\r\n DiagramDataFilterComponent,\r\n ],\r\n imports: [CommonModule, ButtonsModule, TextPipesModule, InputModule, AbsPipe, MinPipe],\r\n exports: [\r\n LinearDiagram2DComponent,\r\n DiagramPointHoverComponent,\r\n DiagramDataFilterComponent,\r\n ],\r\n})\r\nexport class LinearDiagramModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i4"],"mappings":"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"}