UNPKG

@obliczeniowo/elementary

Version:
1 lines 25.6 kB
{"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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"}