src/robots/bit-loom.lisp @ dcf037ea2878

Add second loom
author Steve Losh <steve@stevelosh.com>
date Sun, 04 Feb 2018 00:51:49 -0500
parents 203fa16acf7a
children 4c4396e7e5fa
(in-package :magitek.robots.bit-loom)

(defun pnm-to-png (pnm png)
  (sb-ext:run-program "pnmtopng" (list pnm)
                      :search t
                      :output png
                      :error nil
                      :if-output-exists :supersede)
  (sb-ext:run-program "mogrify" (list "-resize" "800x800" png)
                      :error :output
                      :search t))

(defun loom-1 (seed)
  (let ((depth (random-range-inclusive 16 19)))
    (flax.looms.001-triangles:loom seed depth "out.pnm" 3000 3000)
    (format nil "depth ~D" depth)))

(defun loom-2 (seed)
  (let ((ticks (* 1000 (random-range-inclusive 3 8))))
    (flax.looms.002-wobbly-lines:loom seed ticks "out.pnm" 2000 400)
    (format nil "~R ticks" ticks)))

(defparameter *looms* '(loom-1 loom-2))

(defun generate-image (seed)
  (let* ((loom-index (random (length *looms*)))
         (loom (elt *looms* loom-index)))
    (pr 'running loom)
    (let ((extra (funcall loom seed)))
      (pnm-to-png "out.pnm" "out.png")
      (values (1+ loom-index) extra))))

(defun random-tweet ()
  (let ((seed (random (expt 2 32))))
    (multiple-value-bind (loom-number extra-information)
        (generate-image seed)
      (values (string-upcase
                (format nil "loom ~R, seed ~D~A"
                        loom-number seed
                        (if extra-information
                          (concatenate 'string ", " extra-information)
                          "")))
              "out.png"))))