@obliczeniowo/elementary
Version:
Library made in Angular version 20
1 lines • 25.6 kB
Source Map (JSON)
{"version":3,"file":"obliczeniowo-elementary-diagram3-d.mjs","sources":["../../../../projects/components/diagram3-d/classes/diagram3-d.ts","../../../../projects/components/diagram3-d/components/diagram3-d/diagram3-d.component.ts","../../../../projects/components/diagram3-d/components/diagram3-d/diagram3-d.component.html","../../../../projects/components/diagram3-d/diagram3-d.module.ts","../../../../projects/components/diagram3-d/obliczeniowo-elementary-diagram3-d.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/non-nullable-type-assertion-style */\nimport { ElementaryMath } from '@obliczeniowo/elementary/math';\nimport { Point2D, Point3D } from '@obliczeniowo/elementary/classes';\nimport { DrawingContextInterface } from '@obliczeniowo/elementary/drawing';\nexport class Diagram3D {\n protected svg!: SVGSVGElement;\n\n protected xAxisLength = 100;\n protected yAxisLength = 100;\n protected zAxisLength = 100;\n\n protected xAxisAngle!: number;\n protected yAxisAngle!: number;\n protected zAxisAngle!: number;\n\n protected xScale!: number;\n protected yScale!: number;\n protected zScale!: number;\n\n protected correctionAngle!: number;\n\n protected offsetLongitude = 0;\n protected offsetLatitude = 0;\n\n private pLatitude!: number;\n\n protected get latitude(): number {\n return this.pLatitude + this.offsetLatitude;\n }\n\n protected set latitude(value: number) {\n this.pLatitude = value;\n }\n\n private pLongitude!: number;\n\n protected get longitude(): number {\n return this.pLongitude + this.offsetLongitude;\n }\n\n protected set longitude(value: number) {\n this.pLongitude = value;\n }\n\n protected anchor = new Point2D();\n\n protected dx = 20;\n protected dy = 20;\n\n private pzValues: number[][] = [[]];\n\n public get zValues(): number[][] {\n return this.pzValues;\n }\n\n public set zValues(value: number[][]) {\n if (!value.length || !value[0].length) {\n throw new Error('table must have more then 0 elements for x & y');\n }\n this.dx = 400 / value.length;\n this.dy = 400 / value[0].length;\n this.pzValues = value;\n }\n\n constructor(svg: SVGSVGElement) {\n this.svg = svg;\n\n this.setDiagramAngles(\n ElementaryMath.degreesToRadians(300),\n ElementaryMath.degreesToRadians(60)\n );\n }\n\n diagramPosToDrawingArea(p3d: Point3D): Point2D {\n return new Point2D(\n p3d.x * Math.cos(this.xAxisAngle + this.correctionAngle) * this.xScale +\n p3d.y * Math.cos(this.yAxisAngle + this.correctionAngle) * this.yScale +\n p3d.z * Math.cos(this.zAxisAngle + this.correctionAngle) * this.zScale,\n p3d.x * Math.sin(this.xAxisAngle + this.correctionAngle) * this.xScale +\n p3d.y * Math.sin(this.yAxisAngle + this.correctionAngle) * this.yScale +\n p3d.z * Math.sin(this.zAxisAngle + this.correctionAngle) * this.zScale\n ).add(this.anchor);\n }\n\n pointsAngle(\n x1: number,\n y1: number,\n x2: number,\n y2: number\n ): number {\n if (x1 === x2 && y1 === y2) {\n return 0;\n }\n const length: number = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));\n\n if (length === 0) {\n return 0;\n }\n\n if (y2 < y1) {\n return Math.acos((x1 - x2) / length);\n } else {\n return Math.acos((x1 - x2) / -length) - Math.PI;\n }\n }\n\n setDiagramAngles(latitude: number, longitude: number): void {\n this.latitude = latitude;\n this.longitude = longitude;\n this.setAxisAngles();\n }\n\n setLatitude(latitude: number): void {\n this.latitude = latitude;\n this.setAxisAngles();\n }\n\n setLongitude(longitude: number): void {\n this.longitude = longitude;\n this.setAxisAngles();\n }\n\n setAxisAngles(): void {\n const length = 100;\n const pX = new Point2D();\n const pY = new Point2D();\n const pZ = new Point2D();\n\n const cosLong = Math.cos(this.longitude);\n const sinLong = Math.sin(this.longitude);\n const cosLat = Math.cos(this.latitude);\n const sinLat = Math.sin(this.latitude);\n\n const sinLongAnd90 = Math.sin(Math.PI / 2 + this.longitude);\n const cosLongAnd90 = Math.cos(Math.PI / 2 + this.longitude);\n const sinLatAnd90 = Math.sin(this.latitude + Math.PI / 2);\n const cosLatAnd90 = Math.cos(this.latitude + Math.PI / 2);\n\n pY.x = length * (cosLat * cosLong * cosLong + sinLat * cosLongAnd90);\n pY.y = length * (cosLat * sinLong * cosLong + sinLat * sinLongAnd90);\n pX.x = length * (cosLatAnd90 * cosLong * cosLong + sinLatAnd90 * cosLongAnd90);\n pX.y = length * (cosLatAnd90 * sinLong * cosLong + sinLatAnd90 * sinLongAnd90);\n\n const dx = length * Math.cos(Math.PI / 2 - this.longitude) * cosLong;\n const dy = length * Math.cos(Math.PI / 2 - this.longitude) * sinLong;\n\n pZ.x = - dx;\n pZ.y = - dy;\n\n this.xAxisAngle = this.pointsAngle(pX.x, pX.y, 0, 0);\n this.yAxisAngle = this.pointsAngle(pY.x, pY.y, 0, 0);\n this.zAxisAngle = this.pointsAngle(pZ.x, pZ.y, 0, 0);\n\n this.xScale = length ? pX.length() / length : 0;\n this.yScale = length ? pY.length() / length : 0;\n this.zScale = length ? pZ.length() / length : 0;\n\n if (Math.abs(this.longitude) >= Math.PI) {\n this.correctionAngle = Math.PI * 0.5 - this.zAxisAngle;\n } else {\n this.correctionAngle = Math.PI * 1.5 - this.zAxisAngle;\n }\n }\n\n protected drawAxis(dc: DrawingContextInterface, offset: Point3D = new Point3D()): void {\n dc.drawLine(\n this.diagramPosToDrawingArea(offset),\n this.diagramPosToDrawingArea(\n offset.add(new Point3D(this.xAxisLength))\n ),\n 1,\n '#ff0000'\n );\n\n dc.drawLine(\n this.diagramPosToDrawingArea(offset),\n this.diagramPosToDrawingArea(\n offset.add(new Point3D(0, this.yAxisLength))\n ),\n 1,\n '#00ff00'\n );\n\n dc.drawLine(\n this.diagramPosToDrawingArea(offset),\n this.diagramPosToDrawingArea(\n offset.add(new Point3D(0, 0, this.zAxisLength))\n ),\n 1,\n '#0000ff'\n );\n }\n\n protected drawNet(dc: DrawingContextInterface, offset: Point3D = new Point3D()): void {\n const stroke = 0.5;\n for (let x = 0; x < this.zValues.length - 1; x++) {\n for (let y = 0; y < this.zValues[x].length - 1; y++) {\n const points = [\n this.diagramPosToDrawingArea(\n new Point3D(\n x * this.dx,\n y * this.dy,\n this.zValues[x][y]\n ).add(offset)\n ),\n this.diagramPosToDrawingArea(\n new Point3D(\n (x + 1) * this.dx,\n y * this.dy,\n this.zValues[x + 1][y]\n ).add(offset)\n ),\n this.diagramPosToDrawingArea(\n new Point3D(\n x * this.dx,\n (y + 1) * this.dy,\n this.zValues[x][y + 1]\n ).add(offset)\n ),\n this.diagramPosToDrawingArea(\n new Point3D(\n (x + 1) * this.dx,\n (y + 1) * this.dy,\n this.zValues[x + 1][y + 1]\n ).add(offset)\n )\n ];\n\n dc.drawLine(points[0], points[1], stroke, '#ff0000');\n dc.drawLine(points[0], points[2], stroke, '#00ff00');\n dc.drawLine(points[3], points[2], stroke, '#ff0000');\n dc.drawLine(points[1], points[2], stroke, '#0000ff');\n dc.drawLine(points[1], points[3], stroke, '#00ff00');\n }\n }\n }\n\n draw(dc: DrawingContextInterface): void {\n dc.clear();\n\n const box = (this.svg.getAttribute('viewBox') as string).split(' ').slice(2).map(v => parseFloat(v));\n\n this.anchor.x = box[0] / 2;\n this.anchor.y = box[1] / 2;\n\n const offset = new Point3D(-this.zValues.length * this.dx / 2, -this.zValues[0].length * this.dy / 2);\n\n this.drawAxis(dc, offset);\n\n this.drawNet(dc, offset);\n }\n\n mouse(x: number, y: number, dc: DrawingContextInterface): void {\n this.pLatitude -= 0.01 * x;\n this.pLongitude -= 0.01 * y;\n this.setAxisAngles();\n this.draw(dc);\n }\n}\n","import { DrawingSvgInterface, Rect } from '@obliczeniowo/elementary/drawing';\nimport { Diagram3D } from './../../classes/diagram3-d';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Input, Renderer2, ViewChild } from '@angular/core';\nimport { DrawingPdfInterface } from '@obliczeniowo/elementary/drawing-pdf';\nimport { Point2D } from '@obliczeniowo/elementary/classes';\n\n@Component({\n selector: 'obl-diagram3-d',\n templateUrl: './diagram3-d.component.html',\n styleUrls: ['./diagram3-d.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false\n})\nexport class Diagram3DComponent implements AfterViewInit {\n readonly width = 800;\n readonly height = 600;\n\n protected diagram3d!: Diagram3D;\n protected dc!: DrawingSvgInterface;\n\n protected mousePos: Point2D = new Point2D();\n\n @ViewChild('diagram') diagram!: ElementRef<SVGSVGElement>;\n\n protected pzValues: number[][] = [[]];\n\n @Input() set zValues(zValues: number[][]) {\n this.pzValues = zValues;\n if (this.diagram3d) {\n this.diagram3d.zValues = zValues;\n this.diagram3d.draw(this.dc);\n }\n }\n\n @Input() set latitude(latitude: number) {\n if (this.diagram3d) {\n this.diagram3d.setLatitude(latitude);\n this.diagram3d.draw(this.dc);\n }\n }\n\n @Input() set longitude(longitude: number) {\n if (this.diagram3d) {\n this.diagram3d.setLongitude(longitude);\n this.diagram3d.draw(this.dc);\n }\n }\n\n constructor(protected renderer: Renderer2) {}\n\n ngAfterViewInit(): void {\n if (this.diagram) {\n this.diagram3d = new Diagram3D(this.diagram.nativeElement);\n this.dc = new DrawingSvgInterface(this.diagram.nativeElement, this.renderer);\n\n this.diagram3d.zValues = this.pzValues;\n this.diagram3d.draw(this.dc);\n }\n }\n\n mouseMove(event: any): void {\n if (this.diagram) {\n const rect = this.diagram.nativeElement.getBoundingClientRect();\n const x = (event.clientX - rect.left) / this.diagram.nativeElement.clientWidth * this.width; // x position within the element.\n const y = (event.clientY - rect.top) / this.diagram.nativeElement.clientHeight * this.height;\n\n if (event.buttons === 1 && this.diagram3d) {\n this.diagram3d.mouse(x - this.mousePos.x, y - this.mousePos.y, this.dc);\n }\n\n this.mousePos.x = x;\n this.mousePos.y = y;\n }\n }\n\n pdf(): void {\n const dc: DrawingPdfInterface = new DrawingPdfInterface(new Rect(\n new Point2D(0, 0),\n new Point2D(800, 600),\n 20,\n 20\n ));\n\n this.diagram3d.draw(dc);\n\n dc.save('Diagram 3D');\n }\n}\n","<div class=\"svgContainer\">\n <svg\n #diagram\n class=\"diagram-3d\"\n [attr.viewBox]=\"'0 0 ' + width + ' ' + height\"\n (mousemove)=\"mouseMove($event)\"\n ></svg>\n <button oblButton class=\"pdf-button\" (click)=\"pdf()\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M7.9393 16.4004H8.58466C8.76358 16.4004 8.90202 16.3375 9 16.2115C9.09798 16.0856 9.14697 15.9025 9.14697 15.6621C9.14697 15.4125 9.09691 15.2145 8.99681 15.068C8.8967 14.9192 8.76251 14.8436 8.59425 14.8413H7.9393V16.4004Z\"\n fill=\"black\"\n />\n <path\n d=\"M11.6645 14.8413V18.1621H11.9457C12.2588 18.1621 12.4792 18.0739 12.607 17.8977C12.7348 17.7191 12.8019 17.4123 12.8083 16.9773V16.1085C12.8083 15.6415 12.7476 15.3164 12.6262 15.1332C12.5048 14.9478 12.2982 14.8505 12.0064 14.8413H11.6645Z\"\n fill=\"black\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M19.937 8.68L19.9276 8.65196C19.9204 8.62974 19.9132 8.60787 19.904 8.586C19.855 8.48 19.794 8.379 19.708 8.293L13.708 2.293C13.622 2.207 13.521 2.146 13.415 2.097C13.3943 2.08736 13.3727 2.08056 13.3508 2.07367C13.3409 2.07056 13.331 2.06742 13.321 2.064C13.237 2.036 13.151 2.018 13.062 2.013C13.0519 2.01208 13.0424 2.00925 13.033 2.00647C13.0221 2.0032 13.0113 2 13 2H6C4.897 2 4 2.897 4 4V20C4 21.103 4.897 22 6 22H18C19.103 22 20 21.103 20 20V9C20 8.98867 19.9968 8.97792 19.9935 8.96697C19.9907 8.95762 19.9879 8.94813 19.987 8.938C19.982 8.85 19.965 8.764 19.937 8.68ZM13 4V9H18L13 4ZM7.9393 17.2418V19H7V14H8.58466C9.04473 14 9.41108 14.1534 9.68371 14.4602C9.95847 14.7669 10.0958 15.1653 10.0958 15.6552C10.0958 16.1451 9.9606 16.5321 9.6901 16.8159C9.4196 17.0998 9.04473 17.2418 8.5655 17.2418H7.9393ZM10.7252 19V14H11.9553C12.4984 14 12.9308 14.1854 13.2524 14.5563C13.5761 14.9272 13.7412 15.4354 13.7476 16.081V16.8915C13.7476 17.5485 13.5857 18.0648 13.262 18.4402C12.9404 18.8134 12.4963 19 11.9297 19H10.7252ZM15.3642 16.9602H16.8243V16.1223H15.3642V14.8413H17V14H14.4249V19H15.3642V16.9602Z\"\n fill=\"black\"\n />\n </svg>\n </button>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Diagram3DComponent } from './components/diagram3-d/diagram3-d.component';\n\nimport { ButtonsModule } from '@obliczeniowo/elementary/buttons';\n\n@NgModule({\n declarations: [\n Diagram3DComponent\n ],\n imports: [\n CommonModule,\n ButtonsModule\n ],\n exports: [\n Diagram3DComponent\n ]\n})\nexport class Diagram3DModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}