{"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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"}