home *** CD-ROM | disk | FTP | other *** search
-
- ; ************************************************************************
- ; RPOLY.LSP
- ;
- ; Written by Kelvin R. Throop in October 1985
- ;
- ; Based on the technique described in Philip J. Davis,
- ; "Circulant Matrices", Wiley 1979.
- ;
- ; Refinement of a random polygon by iterative replacement of
- ; its vertices by the midpoints of its edges. This miraculously
- ; transforms most random polygons into an ellipse-shaped convex
- ; polygon.
- ;
- ; Added error checking and an error function - April 1988
- ;
- ; ************************************************************************
-
- (defun drawpoly (p / dp dl)
- (setq dp p)
- (setq dl (length p))
- (command "pline")
- (repeat dl
- (command (car dp))
- (setq dp (cdr dp))
- )
- (command "c")
- )
-
- (defun myerror (s) ; If an error (such as CTRL-C) occurs
- ; while this command is active...
- (if (/= s "Function cancelled")
- (princ (strcat "\nError: " s))
- )
- (setvar "cmdecho" ocmd) ; Restore saved modes
- (setvar "blipmode" oblp)
- (setq *error* olderr) ; Restore old *error* handler
- (princ)
- )
-
- (defun C:RPOLY (/ olderr ocmd oblp cycno pl p pvert cyc plast pn pe pc)
- (setq olderr *error*
- *error* myerror)
- (setq ocmd (getvar "cmdecho"))
- (setq oblp (getvar "blipmode"))
- (setvar "cmdecho" 0)
- (setq cycno 0)
- (setq pl nil)
- (while (setq p (getpoint "Next point: "))
- (setq pl (cons p pl))
- )
- (setvar "blipmode" 0)
- (setq pvert (length pl))
-
- (if pl
- (progn
- (drawpoly pl)
- (initget 6)
- (while (setq cyc (getint "\nCycle count: "))
- (repeat cyc
- (setq plast (nth (1- pvert) pl))
- (setq pn nil)
- (setq pe pl)
- (repeat pvert
- (setq pc (car pe))
- (setq pe (cdr pe))
- (setq pn (cons (list (/ (+ (car pc) (car plast)) 2)
- (/ (+ (cadr pc) (cadr plast)) 2))
- pn)
- )
- (setq plast pc)
- )
- (setq pl pn)
- (setq cycno (1+ cycno))
- (princ "Cycle ")
- (princ cycno)
- (terpri)
- )
- (command "erase" "l" "")
- (drawpoly pn)
- (command "zoom" "e")
- (initget 6)
- )
- )
- )
- (setvar "cmdecho" ocmd)
- (setvar "blipmode" oblp)
- (setq *error* olderr) ; Restore old *error* handler
- (princ)
- )
-