UNPKG

@obliczeniowo/elementary

Version:
1 lines 17.1 kB
{"version":3,"file":"obliczeniowo-elementary-pages-circle-tree.mjs","sources":["../../../../projects/components/pages-circle-tree/pages-circle-tree/pages-circle-tree.component.ts","../../../../projects/components/pages-circle-tree/pages-circle-tree/pages-circle-tree.component.html","../../../../projects/components/pages-circle-tree/pages-circle-tree.module.ts","../../../../projects/components/pages-circle-tree/models/page-category.model.ts","../../../../projects/components/pages-circle-tree/obliczeniowo-elementary-pages-circle-tree.ts"],"sourcesContent":["import { PageItem } from './../models/page-item.model';\r\nimport {\r\n Component,\r\n ElementRef,\r\n Output,\r\n EventEmitter,\r\n input,\r\n effect,\r\n Renderer2,\r\n} from '@angular/core';\r\nimport {\r\n DrawingSvgInterface,\r\n TextAlign,\r\n} from '@obliczeniowo/elementary/drawing';\r\nimport {\r\n ColorType,\r\n Point2D,\r\n TextTransform,\r\n} from '@obliczeniowo/elementary/classes';\r\nimport { PageCategory } from '../models/page-category.model';\r\n\r\n@Component({\r\n selector: 'obl-pages-circle-tree',\r\n templateUrl: './pages-circle-tree.component.html',\r\n styleUrls: ['./pages-circle-tree.component.scss'],\r\n standalone: false\r\n})\r\nexport class PagesCircleTreeComponent {\r\n /** items to draw */\r\n items = input([], {\r\n transform: (value: PageItem[]) => {\r\n return structuredClone(value);\r\n },\r\n });\r\n\r\n @Output() onClicked = new EventEmitter<PageItem>();\r\n\r\n /** drawing interface */\r\n protected drawing!: DrawingSvgInterface;\r\n\r\n /** found under mouse item */\r\n protected item: PageItem | undefined;\r\n\r\n /** prepared points to redraw diagram */\r\n protected points: Point2D[] = [];\r\n\r\n /** ray */\r\n protected graphSize: number = 175;\r\n\r\n /**\r\n * graphSizeMax = graphSize + dGraphSize\r\n */\r\n protected dGraphSize: number = 40;\r\n\r\n /** size of svg view box */\r\n protected size: number = 500;\r\n\r\n /** categories */\r\n protected categories: PageCategory[] = [];\r\n\r\n constructor(protected elementRef: ElementRef<HTMLElement>, protected renderer: Renderer2) {\r\n effect(() => {\r\n this.calcPoints();\r\n this.draw();\r\n })\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.drawing = new DrawingSvgInterface(\r\n this.elementRef.nativeElement.querySelector('svg') as SVGSVGElement, this.renderer\r\n );\r\n\r\n setTimeout(() => this.draw());\r\n }\r\n\r\n move(event: any) {\r\n const items = this.items();\r\n if (this.drawing && items.length) {\r\n const box = this.drawing.svgContainer.getBoundingClientRect();\r\n\r\n let pt = new Point2D(event.x - box.left, event.y - box.top);\r\n\r\n pt = pt.scale(500 / box.width, 500 / box.width);\r\n pt = pt.subtract(new Point2D(250, 250));\r\n pt = pt.scale(1, -1).rotate(Math.PI / 2);\r\n\r\n let angle = pt.angle();\r\n\r\n if (angle < 0) {\r\n angle = 2 * Math.PI + angle;\r\n }\r\n\r\n const index = Math.floor((items.length / (Math.PI * 2)) * angle);\r\n\r\n this.item = items[index];\r\n\r\n this.draw();\r\n }\r\n }\r\n\r\n clicked() {\r\n if (this.item) {\r\n this.onClicked.emit(structuredClone(this.item));\r\n }\r\n }\r\n\r\n protected calcPoints() {\r\n const items = this.items();\r\n if (items) {\r\n const max = this.getMax();\r\n\r\n const k = this.dGraphSize / (max || 1);\r\n\r\n this.points = [];\r\n\r\n items.forEach((item, index) => {\r\n const calcRay = this.graphSize + k * item.value;\r\n const angle = ((Math.PI * 2) / this.items().length) * index;\r\n const pos = new Point2D(\r\n calcRay * Math.sin(angle) + this.size / 2,\r\n calcRay * Math.cos(angle) + this.size / 2\r\n );\r\n item.data = {\r\n ...item.data,\r\n pos,\r\n index,\r\n angle,\r\n };\r\n this.points.push(pos);\r\n });\r\n }\r\n\r\n this.calcCategories();\r\n }\r\n\r\n protected calcCategories() {\r\n this.categories = [];\r\n const center = new Point2D(this.size / 2, this.size / 2);\r\n const items = this.items();\r\n\r\n const getPos = (index: number, scale: number = 0.9) =>\r\n items[index].data.pos\r\n .subtract(center)\r\n .setLength(this.graphSize)\r\n .multiply(scale)\r\n .add(center);\r\n\r\n for (let i = 1; i < items.length; i++) {\r\n if (i === 1) {\r\n const { parentName, rootName } = items[0];\r\n this.categories.push({\r\n parentName,\r\n rootName,\r\n pos: getPos(0, 1.2),\r\n endPos: getPos(0),\r\n pChanged: true,\r\n });\r\n } else if (\r\n items[i].rootName !== items[i - 1].rootName ||\r\n items[i].parentName !== items[i - 1].parentName\r\n ) {\r\n const { parentName, rootName } = items[i];\r\n const pChanged = items[i].rootName !== items[i - 1].rootName;\r\n this.categories.push({\r\n parentName,\r\n rootName,\r\n pos: getPos(i, pChanged ? 1.2 : 1),\r\n endPos: getPos(i),\r\n pChanged,\r\n });\r\n }\r\n }\r\n }\r\n\r\n protected draw() {\r\n if (!this.drawing) {\r\n return;\r\n }\r\n\r\n const color = '#000000';\r\n const diagramClass: string[] = ['diagram'];\r\n const categoriesClass: string[] = ['categories'];\r\n\r\n this.drawing.clear();\r\n this.drawing.drawPolyline(this.points, 1, color, {\r\n close: true,\r\n svgOnly: {\r\n classes: diagramClass,\r\n },\r\n });\r\n\r\n this.categories.forEach((category) => {\r\n this.drawing.drawLine(\r\n category.pos,\r\n category.endPos,\r\n category.pChanged ? 0.6 : 0.3,\r\n color,\r\n {\r\n svgOnly: {\r\n classes: categoriesClass.concat(\r\n category.pChanged ? ['root'] : ['parent']\r\n ),\r\n },\r\n }\r\n );\r\n });\r\n\r\n if (this.item) {\r\n this.drawing.drawCircle(this.item.data.pos, 2.5, 1, color, color, {\r\n svgOnly: { classes: ['current'] },\r\n });\r\n\r\n this.drawing.drawCircle(\r\n new Point2D(250, 250),\r\n this.item.data.pos.subtract(new Point2D(250, 250)).length(),\r\n 0.1,\r\n color,\r\n undefined,\r\n { svgOnly: { classes: ['value'] } }\r\n );\r\n\r\n this.drawing.drawCircle(\r\n new Point2D(250, 250),\r\n this.graphSize,\r\n 0.1,\r\n color,\r\n undefined,\r\n { svgOnly: { classes: ['minimum'] } }\r\n );\r\n\r\n this.drawing.setFontSize(20);\r\n this.drawing.setTextAlign(TextAlign.CENTER);\r\n this.drawing.drawText(this.item.rootName, new Point2D(250, 230), color);\r\n this.drawing.setFontSize(15);\r\n this.drawing.drawText(\r\n `${this.item.parentName}`,\r\n new Point2D(250, 255),\r\n color\r\n );\r\n\r\n this.drawing.setFontSize(7);\r\n const offset = this.drawSplittedText(\r\n this.item.name,\r\n new Point2D(250, 270),\r\n color,\r\n 80\r\n );\r\n\r\n this.drawing.drawText(\r\n `${this.item.value}`,\r\n new Point2D(250, 270 + offset),\r\n color\r\n );\r\n }\r\n }\r\n\r\n protected drawSplittedText(\r\n text: string,\r\n position: Point2D,\r\n color: ColorType,\r\n maxLength: number\r\n ): number {\r\n const strings: string[] = TextTransform.splitByLengthAndWords(\r\n text,\r\n maxLength\r\n );\r\n\r\n const fontSize = this.drawing.fontSize * 1.4;\r\n\r\n strings.forEach((text, index) => {\r\n this.drawing.drawText(\r\n text,\r\n position.add(new Point2D(0, index * fontSize)),\r\n color\r\n );\r\n });\r\n\r\n return strings.length * fontSize;\r\n }\r\n\r\n protected getMax() {\r\n let max = 0;\r\n\r\n this.items().forEach((item) => {\r\n if (max < item.value) {\r\n max = item.value;\r\n }\r\n });\r\n\r\n return max;\r\n }\r\n}\r\n","<svg width=\"75%\" [attr.viewBox]=\"'0 0 ' + size + ' ' + size\" (mousemove)=\"move($event)\" (click)=\"clicked()\">\r\n</svg>","import { PagesCircleTreeComponent } from './pages-circle-tree/pages-circle-tree.component';\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@NgModule({\r\n declarations: [\r\n PagesCircleTreeComponent\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n PagesCircleTreeComponent\r\n ]\r\n})\r\nexport class PagesCircleTreeModule { }\r\n","import { Point2D } from '@obliczeniowo/elementary/classes';\r\n\r\nexport interface PageCategory {\r\n rootName?: string;\r\n parentName?: string;\r\n pos: Point2D;\r\n endPos: Point2D;\r\n pChanged: boolean;\r\n};\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}