git @ Cat's Eye Technologies Erratic-Turtle-Graphics / master demo / erratic-turtle-graphics-launcher.js
master

Tree @master (Download .tar.gz)

erratic-turtle-graphics-launcher.js @masterraw · history · blame

/*
 * dam-plus-widgets-0.2.js, erratic-turtle.js, and erratic-logo.js should be loaded before this.
 * After this is loaded, call launch() to start the gewgaw.
 */

function launch(config) {
  var div=DAM.maker('div'), button=DAM.maker('button'), textarea=DAM.maker('textarea'), canvas=DAM.maker('canvas');

  var can = canvas({ width: 1000, height: 400 });
  var viewport = div({ id: "canvas_viewport" });
  viewport.appendChild(can);
  config.container.appendChild(viewport);

  var turtle = (new ErraticTurtle()).init({ canvas: can });
  var options = [
    {
      text: 'Stars',
      value: "setxyp 0.125 0.666 lt 18 repeat 7 [ repeat 500 [ fd 150 lt 144 ] shiftxyp 0.125 0.0 shifterr 0.00375 0.3 ]"
    },
    {
      text: 'Lines',
      value: "setxyp 0.125 0.666 repeat 7 [ repeat 50 [ fd 150 lt 180 ] shiftxyp 0.125 0.0 shifterr 0.00375 0.3 ]"
    },
    {
      text: 'Boxes',
      value: "setxyp 0.125 0.666 repeat 7 [ repeat 400 [ fd 50 lt 90 ] shiftxyp 0.125 0.0 shifterr 0.0015 0.3 ]"
    },
    {
      text: 'Circles',
      value: "setxyp 0.125 0.5 repeat 7 [ repeat 4500 [ fd 1.0 lt 4 ] shiftxyp 0.125 0.0 shifterr 0.00375 0.05 ]"
    },
    {
      text: 'Chain',
      value: "setxyp 1.0 0.5 repeat 7 [ repeat 1845 [ fd 2.0 lt 4 ] lt 180 shifterr 0.00375 0.225 ] repeat 7 [ repeat 1845 [ fd 2.0 lt 4 ] lt 180 shifterr -0.00375 -0.225 ]"
    }
  ];
  var program = options[0].value;

  function run() {
    turtle.reset();
    var p = (new Parser()).init(program);
    var i = p.parseInstrs();
    interpretInstrs(i, turtle);
  }

  var programTextarea = textarea({ rows: 4, cols: 80 }, program);
  var controlPanel = div(
    div(
      DAM.makeSelect({
        title: "Form",
        options: options,
        onchange: function(option) {
          program = option.value;
          programTextarea.value = program;
          run();
        }
      })
    ),
    div(
      programTextarea
    ),
    div(
      button("Run", {
        onclick: function() {
          program = programTextarea.value;
          program = run();
        }
      })
    )
  );
  config.container.appendChild(controlPanel);

  run();
}