Skip to content
Snippets Groups Projects
Select Git revision
  • bb17d3e357bf10dd762e40de05a93f53ab43f5c4
  • main default protected
  • vac_in_initial_conditions
3 results

gen_data.py

Blame
  • project.js 5.43 KiB
    import * as Zdog from "zdog";
    import { Model } from "./model.js";
    import { Move } from "./command.js";
    
    class Project {
      constructor() {
        this.model = new Model();
        this.addLine(0, 2000, 0, 0, 0);
      }
    
      // Draw things only once, then toggle visibility if needed. TODO!
    
      renderAll() {
        window.illo.children = []; // Is this ok to do? NO. TODO!
        this.refreshGridLines();
        this.model.drawAllShapes(); // Good idea? NO. TODO!
      }
    
      refreshGridLines() {
        // Get grid size or default to 10
        if (
          !Number.isInteger(parseInt(localStorage.getItem("settingsGridSize"), 10))
        ) {
          localStorage.setItem("settingsGridSize", "10");
        }
        let gridSize = parseInt(localStorage.getItem("settingsGridSize"), 10);
    
        // Remove old grid if exists
        if (window.illoGridGroup) {
          window.illo.removeChild(window.illoGridGroup);
        }
    
        if (localStorage.getItem("settingsGridDisplay") == "off") return;
    
        // New grid
        window.illoGridGroup = new Zdog.Group({
          addTo: window.illo,
        });
        let gridRenderLimit = 250;
        let minMaxGridPoint = parseInt(gridRenderLimit / gridSize) * gridSize;
    
        // Horizontal lines
        for (var x = -minMaxGridPoint; x < minMaxGridPoint; x += gridSize) {
          var color = "#bbbbbb";
          if (x == 0) {
            color = "#111111";
          }
          new Zdog.Shape({
            addTo: window.illoGridGroup,
            path: [
              {
                y: -gridRenderLimit,
                x: x,
                z: 0,
              },
              {
                y: gridRenderLimit,
                x: x,
                z: 0,
              },
            ],
            stroke: 0.5,
            color: color,
          });
          new Zdog.Shape({
            addTo: window.illoGridGroup,
            path: [
              {
                y: x,
                x: -gridRenderLimit,
                z: 0,
              },
              {
                y: x,
                x: gridRenderLimit,
                z: 0,
              },
            ],
            stroke: 0.5,
            color: color,
          });
        }
    
        // Vertical center line
        /*new Zdog.Shape({
          addTo: window.illoGridGroup,
          path: [
            {
              y: 0,
              x: 0,
              z: -gridRenderLimit,
            },
            {
              y: 0,
              x: 0,
              z: gridRenderLimit,
            },
          ],
          stroke: 0.5,
          color: "#111111",
        });*/
      }
    
      addLine(flow, speed, toX, toY, toZ) {
        if (flow < this.model.currentCoordinates().e) {
          flow = this.model.currentCoordinates().e;
        }
        var newLine = new Move(flow, speed, toX, toY, toZ);
        //window.currentProject.model.append(newLine);
        this.model.append(newLine);
      }
    
      addArc(flow, speed, size, directionXY, directionZ, curvature) {
        const prevCoords = this.model.currentCoordinates();
        var nextStartHeight = 0;
        const steps = Math.min(size, 50);
        const flowStep = (flow - prevCoords.e) / steps;
        const angle = 90;
        for (var i = 0; i <= steps; i++) {
          var sub_angle = (i / steps) * angle * 0.017453292519943295; // (angle / 180) * Math.PI;
          var xi = size * (1 - Math.cos(sub_angle));
          var zi = size * Math.sin(sub_angle);
          if (nextStartHeight == 0 && xi > 4) nextStartHeight = zi;
          if (
            (curvature == "1" && directionZ == "2") ||
            (curvature == "2" && directionZ == "1")
          ) {
            var tempX = xi;
            xi = zi;
            zi = tempX;
          }
          switch (directionXY) {
            default:
              var newX = prevCoords.x + xi;
              var newY = prevCoords.y;
              break;
            case "2":
              var newX = prevCoords.x;
              var newY = prevCoords.y + xi;
              break;
            case "3":
              var newX = prevCoords.x - xi;
              var newY = prevCoords.y;
              break;
            case "4":
              var newX = prevCoords.x;
              var newY = prevCoords.y - xi;
              break;
          }
          switch (directionZ) {
            default:
              var newZ = prevCoords.z + zi;
              break;
            case "2":
              var newZ = prevCoords.z - zi;
              break;
            case "3":
              var newZ = prevCoords.z;
              switch (directionXY) {
                default:
                  var newX = prevCoords.x + zi;
                  var newY = prevCoords.y + xi;
                  break;
                case "2":
                  var newX = prevCoords.x - zi;
                  var newY = prevCoords.y + xi;
                  break;
                case "3":
                  var newX = prevCoords.x - zi;
                  var newY = prevCoords.y - xi;
                  break;
                case "4":
                  var newX = prevCoords.x + zi;
                  var newY = prevCoords.y - xi;
                  break;
              }
              break;
          }
          var newMove = new Move(
            prevCoords.e + flowStep * i,
            speed,
            newX,
            newY,
            newZ
          );
          this.model.append(newMove);
        }
      }
    
      playbackDelay() {
        return new Promise((resolve) => {
          setTimeout(resolve, 250);
        });
      }
    
      async drawPlaybackStart() {
        console.log("start simulation");
        document.getElementById("playViewButton").lastChild.nodeValue = " Stop";
        window.stopPlayback = false;
    
        var cmd;
        var i = 0;
        while ((cmd = this.model.commands[i])) {
          this.model.selectCommand(i);
          await this.playbackDelay();
          this.model.deselectCommand(i);
          i++;
          if (window.stopPlayback) {
            break;
          }
        }
    
        console.log("stop simulation");
        document.getElementById("playViewButton").lastChild.nodeValue = " Simulate";
      }
    
      drawPlaybackStop() {
        window.stopPlayback = true;
      }
    }
    
    export { Project };