(defun so:vykresli (/ co_kreslit)
  (setq co_kreslit (cdr (assoc "co_kreslit" gl_pam_hodnoty)))
  	;;; získání klíčového slova pro určení dalšího postupu pokračování
  (if (= co_kreslit "Kruznice")		;;; uživatel požaduje kreslit kružnici
    (so:kresli_kruznici)		;;; volání funkce pro vykreslení kružnice
  )
  (if (= co_kreslit "N-uhelnik")	;;; uživatel požaduje kreslit n-úhelník
    (so:kresli_nuhelnik)		;;; volání funkce pro vykreslení n-úhelníku
  )
)

(defun so:kresli_nuhelnik (/ stred_nu pocvrcholu polomer pol_kresl	pocet vzdalenost)
;;; vykreslení n-úhelníku
;;;; stred_nu   - souřadnice středu (real.číslo, real.číslo, real.číslo)
;;;; pocvrcholu - celé číslo reprezentující počet vrcholů n-úhelníku
;;;; polomer    - real.číslo reprezentující poloměr první vepsané kružnice
;;;; pol_kresl  - real.číslo reprezentující poloměr vepsaných kružnic
;;;; pocet      - celé číslo reprezentující počet kreslených soustředných n-úhelníků
;;;; vzdalenost - real.číslo reprezentující vzdálenost mezi n-úhelníky
  (setq	stred_nu
    (list
      (atof (cdr (assoc "strednex" gl_pam_hodnoty)))
      (atof (cdr (assoc "stredney" gl_pam_hodnoty)))
      (atof (cdr (assoc "strednez" gl_pam_hodnoty)))
    )
  )		;;; převod tří řetězců reprezentujících souřadnice
  		;;; do proměnné stred (položky stred jsou typu float)
  (setq pocvrcholu (atoi (cdr (assoc "pocvrcholune" gl_pam_hodnoty))))
		;;; získání počtu vrcholů n-úhelníku z asoc. seznamu gl_pam_hodnoty
  (setq polomer    (atof (cdr (assoc "polomerne"    gl_pam_hodnoty))))
		;;; získání poloměru první vepsané kružnice z asoc. seznamu gl_pam_hodnoty
  (setq pocet      (atoi (cdr (assoc "pocetne"      gl_pam_hodnoty))))
		;;; získání početu kreslených n-úhelníků z asoc. seznamu gl_pam_hodnoty
  (setq vzdalenost (atof (cdr (assoc "vzdalenostne" gl_pam_hodnoty))))
		;;; získání vzdálenosti mezi n-úhelníky z asoc. seznamu gl_pam_hodnoty

  (while (> pocet 0)	;;; dokud je co kreslit opakuj
    (setq pol_kresl (+ polomer (* vzdalenost (- pocet 1))))
		;;; nastavení aktuálního poloměru vepsané kružnice, kresleného n-uhelníku
    (command)	;;; ukončení všech předchozích příkazů
    (command "_polygon" pocvrcholu stred_nu "O" pol_kresl)
    		;;; vykresli n-úhelníku
    (setq pocet (- pocet 1))	;;; zmenši počet n-úhelníků o 1
  )
)

(defun so:kresli_kruznici (/ stred_kr polomer pol_kresl pocet vzdalenost)
;;; vykreslení kružnice
;;;; stred_kr - souřadnice středu (real.číslo, real.číslo, real.číslo)
;;;; polomer - real.číslo reprezentující poloměr první kružnice
;;;; pol_kresl - real.číslo reprezentující poloměr vykreslované kružnice
;;;; pocet - celé číslo reprezentující počet kreslených soustředných kružnic
;;;; vzdalenost - real.číslo reprezentující vzdálenost mezi kružnicemi
  (setq stred_kr
    (list
      (atof (cdr (assoc "stredkex" gl_pam_hodnoty)))
      (atof (cdr (assoc "stredkey" gl_pam_hodnoty)))
      (atof (cdr (assoc "stredkez" gl_pam_hodnoty)))
    )
  )		;;; převod tří řetězců reprezentujících souřadnice
  		;;; do proměnné stred (položky stred jsou typu float)
  (setq polomer (atof (cdr (assoc "polomerke" gl_pam_hodnoty))))
		;;; získání poloměru první kružnice z asoc. seznamu gl_pam_hodnoty
  (setq pocet (atoi (cdr (assoc "pocetke" gl_pam_hodnoty))))
		;;; získání počtu kreslených kružnic z asoc. seznamu gl_pam_hodnoty
  (setq vzdalenost (atof (cdr (assoc "vzdalenostke" gl_pam_hodnoty))))
		;;; získání vzdálenosti mezi kružnicemi z asoc. seznamu gl_pam_hodnoty
  (command)	;;; ukončení všech předchozích příkazů
  (while (> pocet 0)	;;; dokud je co kreslit opakuj
    (setq pol_kresl (+ polomer (* vzdalenost (- pocet 1))))	;;; nastav aktuální poloměr
    (command "_circle" stred_kr pol_kresl)
  		;;; vykreslení kružnice
    (setq pocet (- pocet 1))					;;; zmenši počet kružnic o 1
  )
)