home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Jason Aller Floppy Collection
/
168.img
/
ACAD3.ZIP
/
RPOLY.LSP
< prev
next >
Wrap
Lisp/Scheme
|
1988-04-15
|
3KB
|
91 lines
; ************************************************************************
; 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)
)