@obliczeniowo/elementary
Version:
Library made in Angular version 19
1 lines • 24.1 kB
Source Map (JSON)
{"version":3,"file":"obliczeniowo-elementary-radar.mjs","sources":["../../../../projects/components/radar/classes/radar.class.ts","../../../../projects/components/radar/radar-picker/radar-picker.component.ts","../../../../projects/components/radar/radar-picker/radar-picker.component.html","../../../../projects/components/radar/radar.module.ts","../../../../projects/components/radar/obliczeniowo-elementary-radar.ts"],"sourcesContent":["import { ColorType, Point2D } from '@obliczeniowo/elementary/classes';\r\nimport { DrawingContextInterface, LinePattern, TextAlign } from '@obliczeniowo/elementary/drawing';\r\nimport { ElementaryMath } from '@obliczeniowo/elementary/math';\r\n\r\nexport interface RadarGroup {\r\n values: number[];\r\n stroke: number;\r\n color: ColorType | 'none',\r\n fill: ColorType | 'none',\r\n opacity?: number;\r\n}\r\n\r\nexport class Radar {\r\n private greedColor = 'var(--obl-radar-greed-color, var(--obl-linear-diagram-greed-color))';\r\n\r\n closestSet?: { closest: Point2D, category: number, newLevel: number };\r\n\r\n constructor(\r\n private ctx: DrawingContextInterface,\r\n private levels: number | (string | number)[] = 5,\r\n private categories: string[] = [],\r\n private groups: RadarGroup[] = [],\r\n private size: number = 500\r\n ) {\r\n }\r\n\r\n getCenter() {\r\n return new Point2D(this.size / 2, this.size / 2);\r\n }\r\n\r\n getRay() {\r\n return this.size / 2 - 50;\r\n }\r\n\r\n getMaxLevel(): number {\r\n return typeof this.levels === 'number' ? this.levels : this.levels.length;\r\n }\r\n\r\n getDRawy() {\r\n return this.getRay() / (this.getMaxLevel() || 1);\r\n }\r\n\r\n getDAngle() {\r\n return Math.PI * 2 / (this.categories.length || 1)\r\n }\r\n\r\n draw(ctx: DrawingContextInterface = this.ctx) {\r\n ctx.clear();\r\n\r\n const { categories, greedColor } = this;\r\n\r\n if (categories.length < 3) {\r\n throw new Error('Number of categories must be >= 3');\r\n }\r\n\r\n const count = categories.length;\r\n const center = this.getCenter();\r\n const ray = this.getRay();\r\n const dr = this.getDRawy();\r\n const dA = this.getDAngle();\r\n const maxLevel = this.getMaxLevel();\r\n\r\n ctx.setFontSize(8);\r\n\r\n if (this.groups) {\r\n ctx.setLinePattern(LinePattern.NONE);\r\n this.groups.forEach((group, index) => {\r\n let polygon: Point2D[] = [];\r\n const { values } = group;\r\n if (values.length === count) {\r\n values.forEach(\r\n (item, index) => {\r\n const angle = index * dA;\r\n const r = ray * item / maxLevel;\r\n polygon = polygon.concat([\r\n center.add(new Point2D(r * Math.sin(angle), r * Math.cos(angle)).rotate(Math.PI))\r\n ])\r\n }\r\n )\r\n }\r\n\r\n ctx.drawPolygon(polygon, group.stroke, group.color, group.fill,\r\n { close: true, opacity: group.opacity || 0.5 })\r\n .drawPolyline(polygon, group.stroke, group.color, { close: true });\r\n })\r\n }\r\n ctx.setTextAlign(TextAlign.LEFT)\r\n .group();\r\n\r\n let mapping = typeof this.levels === 'number' ? [] : this.levels;\r\n const offset = new Point2D(5, 4);\r\n\r\n for (let dRay = 1; dRay <= maxLevel; dRay++) {\r\n const ray = dr * dRay;\r\n for (let dAngle = 0; dAngle < count; dAngle++) {\r\n const angle = dAngle * dA;\r\n ctx.setLinePattern(LinePattern.DASHED)\r\n .drawLine(\r\n center.add(new Point2D(ray * Math.sin(angle), ray * Math.cos(angle)).rotate(Math.PI)),\r\n center.add(new Point2D(ray * Math.sin(angle + dA), ray * Math.cos(angle + dA)).rotate(Math.PI)),\r\n 0.25,\r\n greedColor\r\n )\r\n }\r\n ctx.drawText(`${mapping[dRay - 1] || dRay}`, center.add(new Point2D(0, -ray)).add(offset), greedColor, 0);\r\n }\r\n\r\n ctx.setTextAlign(TextAlign.CENTER)\r\n\r\n for (let dAngle = 0; dAngle < count; dAngle++) {\r\n const angle = dAngle * dA;\r\n ctx.setLinePattern(LinePattern.DASHED)\r\n .drawLine(\r\n center.add(new Point2D(ray * Math.sin(angle), ray * Math.cos(angle)).rotate(Math.PI)),\r\n center,\r\n 0.25,\r\n greedColor\r\n );\r\n const angleCondition = angle > Math.PI / 2 && angle < Math.PI / 2 * 3;\r\n const r = ray + (angleCondition && 10 || 5);\r\n const start = new Point2D(r * Math.sin(angle), r * Math.cos(angle)).rotate(Math.PI);\r\n const angleText = angleCondition ? Math.PI : 0;\r\n const value = this.groups[0].values[dAngle];\r\n ctx.drawText(categories[dAngle] + (this.groups.length === 1 ? `: ${mapping[value - 1] ?? this.groups[0].values[dAngle]}` : ''), start.add(center), 'gray', ElementaryMath.radiansToDegrees(angle + angleText), {});\r\n }\r\n\r\n ctx.endGroup();\r\n\r\n if (this.closestSet) {\r\n ctx.setLinePattern(LinePattern.NONE);\r\n const pos = this.closestSet.closest.add(center);\r\n ctx.drawCircle(pos, 2, 1, 'red', 'white')\r\n .setTextAlign(this.closestSet.closest.x > 0 ? TextAlign.RIGHT : TextAlign.LEFT)\r\n .drawText(\r\n `${mapping[this.closestSet.newLevel - 1] ?? this.closestSet.newLevel}`,\r\n pos.add(new Point2D(this.closestSet.closest.x > 0 ? -5 : 5, 4)),\r\n 'red',\r\n 0\r\n )\r\n }\r\n }\r\n\r\n onMove(point: Point2D) {\r\n this.closestSet = this.getClosest(point);\r\n this.draw()\r\n }\r\n\r\n getClosest(point: Point2D): {\r\n closest: Point2D,\r\n category: number,\r\n newLevel: number\r\n } {\r\n const center = this.getCenter();\r\n point = point.subtract(center);\r\n let closest = center.copy();\r\n let distance = Infinity;\r\n let newLevel = 0;\r\n let category = 0;\r\n\r\n if (this.groups.length === 1) {\r\n const { categories } = this;\r\n const count = categories.length;\r\n const dr = this.getDRawy();\r\n const dA = this.getDAngle();\r\n const maxLevel = this.getMaxLevel();\r\n for (let rayIndex = 1; rayIndex <= maxLevel; rayIndex++) {\r\n const ray = dr * rayIndex;\r\n for (let angleIndex = 0; angleIndex < count; angleIndex++) {\r\n const angle = angleIndex * dA;\r\n const checkPoint = new Point2D(ray * Math.sin(angle), ray * Math.cos(angle)).rotate(Math.PI);\r\n\r\n const dist = checkPoint.subtract(point).sickLength();\r\n if (distance > dist) {\r\n closest = checkPoint;\r\n newLevel = rayIndex;\r\n distance = dist;\r\n category = angleIndex;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return {\r\n closest,\r\n category,\r\n newLevel\r\n }\r\n }\r\n\r\n clicked(point: Point2D): null | RadarGroup {\r\n const { closest, category, newLevel } = this.getClosest(point);\r\n\r\n if (!closest.isZeroLength) {\r\n this.groups[0].values[category] = newLevel;\r\n this.draw();\r\n\r\n return this.groups[0];\r\n }\r\n\r\n return null;\r\n }\r\n}","import { Component, ElementRef, Input, Output, ViewChild, EventEmitter, HostBinding, SimpleChanges, Renderer2 } from '@angular/core';\r\n\r\nimport { DrawingContextInterface, DrawingSvgInterface } from '@obliczeniowo/elementary/drawing';\r\nimport { Point2D } from '@obliczeniowo/elementary/classes';\r\n\r\nimport { Radar, RadarGroup } from '../classes/radar.class';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'obl-radar-picker',\r\n templateUrl: './radar-picker.component.html',\r\n styleUrl: './radar-picker.component.scss',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n multi: true,\r\n useExisting: RadarPickerComponent\r\n },\r\n ],\r\n standalone: false\r\n})\r\nexport class RadarPickerComponent implements ControlValueAccessor {\r\n protected dc!: DrawingSvgInterface;\r\n protected radar!: Radar;\r\n protected mousePos?: Point2D;\r\n\r\n /**\r\n * as number describe how many of levels should exist and then build levels from 1 to given number\r\n * as array length describe number of levels that starts from 1 to levels.length and value inside of\r\n * array is something to display\r\n */\r\n @Input() levels: number | (number | string)[] = 5;\r\n\r\n /**\r\n * Categories list as string\r\n */\r\n @Input() categories: string[] = [];\r\n\r\n /**\r\n * values and connected to them colors\r\n * values.values.length must be equal categories.length\r\n */\r\n @Input() values!: RadarGroup;\r\n\r\n @Output() changed = new EventEmitter<RadarGroup>();\r\n\r\n readonly size = 500;\r\n\r\n @ViewChild('radar') diagram!: ElementRef<SVGSVGElement>;\r\n\r\n @Input()\r\n @HostBinding('class.disabled') disabled?: any;\r\n\r\n onChange = (set: {\r\n values: RadarGroup,\r\n categories: string[],\r\n levels: number | (string | number)[]\r\n }) => {\r\n this.changed.emit({ ...set.values });\r\n };\r\n\r\n onTouched = () => { };\r\n\r\n constructor(protected renderer: Renderer2) {}\r\n\r\n ngAfterViewInit(): void {\r\n this.draw();\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\r\n if (!this.dc) {\r\n this.dc = new DrawingSvgInterface(\r\n this.diagram.nativeElement, this.renderer\r\n );\r\n\r\n if (this.values) {\r\n this.radar = new Radar(this.dc, this.levels, this.categories, [this.values], this.size);\r\n }\r\n }\r\n\r\n dc = this.dc;\r\n }\r\n\r\n this.radar?.draw(dc);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes.values || changes.categories || changes.levels || changes.size && this.diagram && this.values && this.categories && this.levels) {\r\n this.radar = new Radar(this.dc, this.levels, this.categories, [this.values], this.size);\r\n this.draw();\r\n }\r\n }\r\n\r\n move(event: any): void {\r\n if (this.disabled) {\r\n return;\r\n }\r\n const rect = this.diagram.nativeElement.getBoundingClientRect();\r\n this.mousePos = new Point2D(\r\n (event.clientX - rect.left) / rect.width * this.size,\r\n (event.clientY - rect.top) / rect.height * this.size\r\n );\r\n this.radar?.onMove(this.mousePos);\r\n }\r\n\r\n clicked(event: any) {\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n if (!this.mousePos) {\r\n this.move(event);\r\n }\r\n\r\n const set = this.radar.clicked(this.mousePos as Point2D);\r\n\r\n if (set) {\r\n this.values = set;\r\n const { categories, levels } = this;\r\n this.changed.emit({ ...set });\r\n this.onChange({\r\n values: set,\r\n categories,\r\n levels\r\n })\r\n }\r\n }\r\n\r\n writeValue(set: {\r\n values: RadarGroup,\r\n categories: string[],\r\n levels: number\r\n }): void {\r\n Object.assign(this, set);\r\n this.draw();\r\n }\r\n\r\n registerOnChange(onChange: any): void {\r\n this.onChange = onChange;\r\n }\r\n\r\n registerOnTouched(onTouched: any): void {\r\n this.onTouched = onTouched;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n onMouseLeave() {\r\n if (this.radar) {\r\n this.radar.closestSet = undefined;\r\n this.draw();\r\n }\r\n }\r\n}\r\n","<svg\r\n [attr.viewBox]=\"'0 0 ' + size + ' ' + size\"\r\n (mousemove)=\"move($event)\"\r\n (click)=\"clicked($event)\"\r\n (mouseout)=\"onMouseLeave()\"\r\n #radar\r\n></svg>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { RadarPickerComponent } from './radar-picker/radar-picker.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n RadarPickerComponent\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n RadarPickerComponent\r\n ]\r\n})\r\nexport class RadarModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}