Lisp »Tips 'n Tricks »GRASS.LSP ; TIP1039.LSP: GRASS.LSP ; Realistic Grass for Elevations ; (c)1994, Watson Kilbourne ; Draws row of grass with random height, ; spacing and angle in elevation ; Random number generator, from 0.000 to 0.999 (defun rn () (if (not sd) (setq sd (getvar "DATE"))) (setq md 65536 mx 25173 nc 13849 sd (rem (+ (* mx sd) nc) md) ) (setq nx (/ sd md)) ) (defun c:GRASS (/ ce bm sp ep gh dn dx an p1 p2 p3 p4 p5) (setq ce (getvar "CMDECHO")) (setq bm (getvar "BLIPMODE")) (defun ne (ne) (setvar "CMDECHO" ce) (setvar "BLIPMODE" bm) (princ "\nFunction cancelled ") (princ) ) (setq oe *error* *error* ne) (setvar "CMDECHO" 0) (while (= sp nil) (setq sp (getpoint "\nStart point of grass: ")) ) (while (= ep nil) (setq ep (getpoint "\nEnd point of grass: ")) ) (setq gh (getdist "\nApproximate height of grass <Two inches>: ") ) (if (= gh nil) (setq gh 2)) (setq dn (getint "\nDensity factor from 1 to 6 <3>: ") ) (if (or (= dn nil) (> dn 6)) (setq dn 3)) (setvar "BLIPMODE" 0) (setq dx (distance sp ep)) (setq an (angle sp ep)) (setq p1 sp p2 sp) (while (< (distance p2 sp) dx) (setq p2 (polar p1 an (/ (+ (rn) (/ gh 2)) dn))) (setq p3 (polar p2 (* pi 0.5) (* gh (rn)))) (setq p4 (polar p3 (* pi 0.6) (* gh (rn)))) (setq p5 (polar p4 (* pi 0.4) (* gh (rn)))) (command "LINE" p3 p5 "") (setq p1 p2) ) (setvar "BLIPMODE" bm) (setvar "CMDECHO" ce) (setq *error* oe oe nil) (princ) ) ; eof |