UNPKG

@obliczeniowo/elementary

Version:
1 lines 19.9 kB
{"version":3,"file":"obliczeniowo-elementary-flat-pie-diagram.mjs","sources":["../../../../projects/components/flat-pie-diagram/classes/flat-pie-diagram.ts","../../../../projects/components/flat-pie-diagram/components/flat-pie-diagram/flat-pie-diagram.component.ts","../../../../projects/components/flat-pie-diagram/components/flat-pie-diagram/flat-pie-diagram.component.html","../../../../projects/components/flat-pie-diagram/flat-pie-diagram.module.ts","../../../../projects/components/flat-pie-diagram/obliczeniowo-elementary-flat-pie-diagram.ts"],"sourcesContent":["import { ColorHSV, Point2D } from '@obliczeniowo/elementary/classes';\nimport { DrawingContextInterface, TextAlign, Rect } from '@obliczeniowo/elementary/drawing';\nimport { ElementaryMath } from '@obliczeniowo/elementary/math';\nimport { keys } from '@obliczeniowo/elementary/objects';\n\nimport { PieColorsFu, PieColors, ValueKeyFormat } from '../types/types';\n\nexport class FlatPieDiagram {\n dc!: DrawingContextInterface;\n\n areaRect!: Rect;\n\n keyValues: { [key: string]: number; } = {};\n\n dr = 0;\n ray = 100;\n\n valueKeyFormat: ValueKeyFormat =\n (index: number, value: number, sum: number, key: string) => `${value} (${(value / sum * 100).toFixed(2)}%)`\n\n colors: PieColorsFu = (index: number, value: number, max: { min: number, max: number }, count: number) => ({\n fill: ColorHSV.createColorHSV(\n ((360 / count) * 2 * index) / 2,\n 0.5,\n 255\n ).convertToRGB().getHexColorBase,\n stroke: ColorHSV.createColorHSV(\n ((360 / count) * 2 * index) / 2,\n 0.35,\n 255\n ).convertToRGB().getHexColorBase,\n line: ColorHSV.createColorHSV(\n ((360 / count) * 2 * index) / 2,\n 0.35,\n 150\n ).convertToRGB().getHexColorBase,\n text: ColorHSV.createColorHSV(\n ((360 / count) * 2 * index) / 2,\n 0.65,\n 200\n ).convertToRGB().getHexColorBase\n })\n\n constructor(dc: DrawingContextInterface, area: Rect) {\n this.dc = dc;\n this.areaRect = area;\n }\n\n sum(): number {\n let sum = 0;\n\n keys(this.keyValues).forEach((key) => sum += this.keyValues[key]);\n\n return sum;\n }\n\n minMax(): { min: number, max: number } {\n const minMax = { min: 0, max: 0 };\n return keys(this.keyValues).reduce(\n (prev, curr) => (\n prev = prev\n ? {\n min: Math.min(prev.min, this.keyValues[curr]), max: Math.max(prev.max, this.keyValues[curr])\n }\n : {\n min: this.keyValues[curr],\n max: this.keyValues[curr]\n },\n prev\n ),\n minMax\n );\n }\n\n draw(dc: DrawingContextInterface = this.dc): void {\n dc.clear();\n\n const sum = this.sum();\n let start = 0;\n let da = 0;\n const center = new Point2D(this.areaRect.width / 2, this.areaRect.height / 2);\n this.ray = Math.min(this.areaRect.width, this.areaRect.height) / 3;\n\n const minMax = this.minMax();\n\n const length = keys(this.keyValues).length;\n\n if (sum) {\n const options: {\n start: number,\n da: number,\n right: boolean,\n bottom: boolean,\n index: number,\n colors: PieColors\n }[] = [];\n let leftTopIndex = 0;\n let rightTopIndex = 0;\n let leftBottomIndex = 0;\n let rightBottomIndex = 0;\n\n const dk = ElementaryMath.degreesToRadians(10);\n\n keys(this.keyValues).forEach((key, oIndex) => {\n da = this.keyValues[key] / sum * Math.PI * 2;\n const right = start + da / 2 < Math.PI / 2 || start + da / 2 > 3 * Math.PI / 2;\n const bottom = start + da / 2 < Math.PI;\n\n let index = 0;\n if (da < dk) {\n if (!right && !bottom) {\n leftTopIndex += 1;\n index = leftTopIndex;\n } else if (right && !bottom) {\n rightTopIndex += 1;\n index = rightTopIndex;\n } else if (!right && bottom) {\n leftBottomIndex += 1;\n index = leftBottomIndex;\n } else if (right && bottom) {\n rightBottomIndex += 1;\n index = rightBottomIndex;\n }\n }\n options.push(\n {\n start,\n da,\n right,\n bottom,\n index,\n colors: this.colors(oIndex, this.keyValues[key], minMax, length)\n }\n );\n start += da;\n });\n\n start = 0;\n\n keys(this.keyValues).forEach((key, index) => {\n da = this.keyValues[key] / sum * Math.PI * 2;\n const rotatedPoint = center.add(new Point2D(this.dr, 0).rotate(start + da / 2));\n dc.drawPie(\n rotatedPoint,\n this.ray,\n this.ray,\n start,\n start + da > Math.PI * 2 ? Math.PI * 2 : start + da,\n 1,\n options[index].colors.stroke,\n options[index].colors.fill\n );\n start += da;\n });\n\n start = 0;\n\n keys(this.keyValues).forEach((key, index) => {\n da = this.keyValues[key] / sum * Math.PI * 2;\n const text = this.valueKeyFormat(index, this.keyValues[key], sum, key);\n const startPoint = center.add(new Point2D(this.dr + this.ray * 0.9).rotate(start + da / 2));\n\n dc.setFontSize(8);\n\n if (da < dk) {\n let dy = 0;\n const angle = options[index];\n if (!angle.right && !angle.bottom) {\n dy = leftTopIndex * 12;\n } else if (angle.right && !angle.bottom) {\n dy = (angle.index * 2 - 1) * 12;\n } else if (!angle.right && angle.bottom) {\n dy = (angle.index * 2 - 1) * 12;\n } else if (angle.right && angle.bottom) {\n dy = rightBottomIndex * 12;\n }\n dy = this.ray - dy;\n const end = center.add(\n new Point2D(\n options[index].right ? (this.ray * 1.2) : -this.ray * 1.2,\n options[index].bottom ? options[index].index * 12 + dy : -options[index].index * 12 - dy\n )\n );\n dc.drawLine(\n startPoint,\n end,\n 1,\n options[index].colors.line\n )\n .setTextAlign(angle.right && TextAlign.LEFT || TextAlign.RIGHT)\n .drawText(\n text,\n end.add(new Point2D(angle.right && 2 || -2, 2)),\n options[index].colors.text,\n 0\n );\n } else {\n const textAngle = -180 / Math.PI * (start + da / 2);\n dc.setTextAlign(options[index].right ? TextAlign.RIGHT : TextAlign.LEFT)\n .drawText(\n text,\n startPoint,\n options[index].colors.text,\n textAngle < -90 && textAngle > -270 ? textAngle + 180 : textAngle\n );\n }\n start += da;\n });\n }\n }\n}\n","import { AfterViewInit, Component, ElementRef, Input, Renderer2, ViewChild } from '@angular/core';\n\nimport { DrawingPdfInterface } from '@obliczeniowo/elementary/drawing-pdf';\nimport { DrawingSvgInterface, Rect } from '@obliczeniowo/elementary/drawing';\nimport { Point2D } from '@obliczeniowo/elementary/classes';\n\nimport { PieColorsFu } from './../../types/types';\nimport { FlatPieDiagram } from '../../classes/flat-pie-diagram';\nimport { ValueKeyFormat } from '../../types/types';\n\n@Component({\n selector: 'obl-flat-pie-diagram',\n templateUrl: './flat-pie-diagram.component.html',\n styleUrls: ['./flat-pie-diagram.component.scss'],\n standalone: false\n})\nexport class FlatPieDiagramComponent implements AfterViewInit {\n drawing!: FlatPieDiagram;\n\n readonly width = 800;\n readonly height = 528;\n\n private pData: { [key: string]: number } = {};\n\n public get data(): { [key: string]: number } {\n return this.pData;\n }\n\n @Input()\n public set data(value: { [key: string]: number }) {\n this.pData = value;\n\n if (this.drawing) {\n this.drawing.keyValues = this.pData;\n this.drawing.draw();\n }\n }\n\n @ViewChild('diagram') svg!: ElementRef<SVGSVGElement>;\n\n protected _colors: PieColorsFu | undefined;\n\n protected _valueKeyFormat: ValueKeyFormat =\n (index: number, value: number, sum: number, key: string) => `${value} (${(value / sum * 100).toFixed(2)}%)`\n\n @Input()\n set valueKeyFormat(valueKeyFormat: ValueKeyFormat | undefined) {\n if (valueKeyFormat) {\n this._valueKeyFormat = valueKeyFormat;\n if (this.drawing) {\n this.drawing.valueKeyFormat = valueKeyFormat;\n this.drawing.draw();\n }\n }\n }\n\n @Input()\n set colors(colors: PieColorsFu | undefined) {\n if (colors) {\n this._colors = colors;\n if (this.drawing) {\n this.drawing.colors = colors;\n this.drawing.draw();\n }\n }\n }\n\n constructor(protected renderer: Renderer2) {}\n\n ngAfterViewInit(): void {\n this.drawing = new FlatPieDiagram(\n new DrawingSvgInterface(this.svg.nativeElement, this.renderer),\n new Rect(\n new Point2D(0, 0),\n new Point2D(this.width, this.height)\n )\n );\n\n this.drawing.keyValues = this.pData;\n if (this._valueKeyFormat) {\n this.drawing.valueKeyFormat = this._valueKeyFormat;\n }\n if (this._colors) {\n this.drawing.colors = this._colors;\n }\n this.drawing.draw();\n }\n\n pdf(): void {\n const dc = new DrawingPdfInterface(this.drawing.areaRect);\n this.drawing.draw(dc);\n dc.save('flat-pie-diagram');\n }\n}\n","<div class=\"svgContainer\">\n <svg #diagram [attr.viewBox]=\"'0 0 ' + width + ' ' + height\"></svg>\n\n <button class=\"pdf-button\" oblButton icon=\"file\" (click)=\"pdf()\">\n </button>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FlatPieDiagramComponent } from './components/flat-pie-diagram/flat-pie-diagram.component';\nimport { ButtonsModule } from '@obliczeniowo/elementary/buttons';\n\n@NgModule({\n declarations: [\n FlatPieDiagramComponent\n ],\n imports: [\n CommonModule,\n ButtonsModule\n ],\n exports: [\n FlatPieDiagramComponent\n ]\n})\nexport class FlatPieDiagramModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}