(defun so:zpusob_zadani	(/ vysledek)	;;; funkce vrací řetězec určující způsob zadání hodnot
  (initget "D P _dialog prikaz")	;;; určení možných vstupních hodnot
  (setq	vysledek
    (getkword "Jakým způsobem si přejete zadat hodnoty (Dialog / Příkazový_ řádek)? :")
  )					;;; získání klíčového slova pro pokračování
  vysledek				;;; předání návratové hodnoty nadřazené funkci
)

(defun so:zadej_hodnoty	(/ vysledek)	;;; funkce pro zadání hodnot
  (setq vysledek nil)
  (initget "K N _Kruznice N-uhelnik ")	;;; určení možných vstupních hodnot
  (setq	co_kreslit
    (getkword "Jaké objekty mám kreslit (Kružnice / N úhelník)? :")
  )					;;; získání klíčového slova pro pokračování
  (setq	gl_pam_hodnoty
    (subst
       (cons  "co_kreslit" co_kreslit)
       (assoc "co_kreslit" gl_pam_hodnoty)
       gl_pam_hodnoty
    )
  )

  (so:nastav_stred (getpoint "\nZadej střed obrazce: "))
  
  (if (= co_kreslit "Kruznice")		;;; uživatel požaduje kreslit kružnici
    (progn
      (initget 1)	;;; kontrola zadání číselné hodnoty ( 0 potvrzení zadání je ENTREM)
      (setq polomerk (getreal "\n Zadej poloměr kružnice: "))
      			;;; zjistění hodnoty poloměru
      (setq gl_pam_hodnoty
        (subst
	  (cons  "polomerke" (vl-princ-to-string polomerk))
 	  (assoc "polomerke" gl_pam_hodnoty)
	  gl_pam_hodnoty
        )
      )			;;; uložení hodnoty poloměru kružnice do asoc. seznamu gl_pam_hodnoty

      (initget 1)	;;; kontrola zadání číselné hodnoty ( 0 potvrzení zadání je ENTREM)
      (setq pocetk (getint "\n Zadej počet nakreslených kružnic: "))
			;;; zadání počtu kreslených kružnic
      (setq gl_pam_hodnoty
        (subst
	  (cons  "pocetke" (itoa pocetk))
	  (assoc "pocetke" gl_pam_hodnoty)
	  gl_pam_hodnoty
	)
      )			;;; uložení počtu kružnic z proměnné pocetk
      			;;; do asoc. seznamu gl_pam_hodnoty

      (initget 1)	;;; kontrola zadání číselné hodnoty ( 0 potvrzení zadání je ENTREM)
      (setq vzdalenostk (getreal "\n Zadej vzdálenost mezi kružnicemi: "))
			;;; zadání vzdálenosti mezi kružnicemi
      (setq gl_pam_hodnoty
        (subst
	  (cons  "vzdalenostke" (vl-princ-to-string vzdalenostk))
	  (assoc "vzdalenostke" gl_pam_hodnoty)
	  gl_pam_hodnoty
	)
      )			;;; uložení vzdálenosti mezi kružnicemi z proměnné
      			;;; vzdalenostk do asoc. seznamu gl_pam_hodnoty
    (setq vysledek T)
    )    
  )
  
  (if (= co_kreslit "N-uhelnik")	;;; uživatel požaduje kreslit n-úhelník
    (progn
      (initget 7)	;;; kontrola zadání číselné hodnoty (zakaz zadání
      			;;; záporné hodnoty a 0), potvrzení zadání je ENTREM
      (setq pocvrcholun (getint "\n Zadej počet vrcholů n-úhelníku: "))
			;;; zadání početu vrcholů n-úhelníku
      (setq gl_pam_hodnoty
	(subst
	  (cons  "pocvrcholune" (itoa pocvrcholun))
	  (assoc "pocvrcholune" gl_pam_hodnoty)
	  gl_pam_hodnoty
	)
      )			;;; uložení počtu vrcholů z proměnné pocvrcholun
      			;;; do asoc. seznamu gl_pam_hodnoty
      (initget 7)	;;; kontrola zadání číselné hodnoty (zakaz zadání
      			;;; záporné hodnoty a 0), potvrzení zadání je ENTREM
      (setq polomern (getreal "\n Zadej poloměr opsané kružnice n-úhelníku: "))
			;;; zadání hodnoty poloměru první vepsané kružnice
      (initget 7)	;;; kontrola zadání číselné hodnoty (zakaz zadání
      			;;; záporné hodnoty a 0), potvrzení zadání je ENTREM
      (setq gl_pam_hodnoty
	(subst
	  (cons  "polomerne" (vl-princ-to-string polomern))
	  (assoc "polomerne" gl_pam_hodnoty)
      	  gl_pam_hodnoty
        )
      )			;;; uložení poloměru první vepsané kružnice z proměnné
	    		;;; polomern do asoc. seznamu gl_pam_hodnoty
      (setq pocetn (getint "\n Zadej počet n-úhelníků: "))
			;;; zadání hodnoty početu kreslených n-úhelníků
      (initget 7)	;;; kontrola zadání číselné hodnoty (zakaz zadání
      			;;; záporné hodnoty a 0), potvrzení zadání je ENTREM
      (setq gl_pam_hodnoty
	(subst
	  (cons  "pocetne" (itoa pocetn))
	  (assoc "pocetne" gl_pam_hodnoty)
	  gl_pam_hodnoty
	)
      )			;;; uložení počtu kreslených n-úhelníků z proměnné pocetne
      			;;; do asoc. seznamu gl_pam_hodnoty
      (setq vzdalenostn (getreal "\n Zadej vzdálenost mezi n-úhelníky: "))
			;;; zadání vzdálenosti mezi n-úhelníky
      (setq gl_pam_hodnoty
	(subst
	  (cons  "vzdalenostne" (vl-princ-to-string vzdalenostn)) 
          (assoc "vzdalenostne" gl_pam_hodnoty)
          gl_pam_hodnoty
        )
      )			;;; uložení vzdálenosti mezi n-úhelníky z proměnné vzdalenostne
      			;;; do asoc. seznamu gl_pam_hodnoty

      (if (< pocvrcholun 3)	;;; ošetření chybného zadání
        (progn
          (princ "\n Zvětšil jsem počet vrcholů n-úhelníku na minimální počet 3")
          (setq gl_pam_hodnoty
	    (subst
	      (cons "pocvrcholune" "3")
	      (assoc "pocvrcholune" gl_pam_hodnoty)
	      gl_pam_hodnoty
	    )
          )		;;; oprava hodnoty v proměnné gl_pam_hodnoty
        )
      )			;;; ošetření chybného zadání

      (if (< polomerne 30)	;;; ošetření chybného zadání
	(progn
  	  (princ "\n Zvětšil jsem poloměr n-úhelníku počet 30")
  	  (setq	gl_pam_hodnoty
	    (subst
	      (cons "polomerne" "30")
	      (assoc "polomerne" gl_pam_hodnoty)
	      gl_pam_hodnoty
	    )
          )		;;; oprava hodnoty v proměnné gl_pam_hodnoty
	)
      )
      (setq vysledek T)
    )
  )
  vysledek
)

(defun so:nastav_stred (stred / stredx stredy stredz)
;;; funkce pro nastavení hodnot souřadnic středu do globální proměnné gl_pam_hodnoty
  (setq stredx (strcat (vl-princ-to-string (car stred))))
  (setq stredy (strcat (vl-princ-to-string (cadr stred))))
  (setq stredz (strcat (vl-princ-to-string (caddr stred))))
  (if (= (cdr (assoc "co_kreslit" gl_pam_hodnoty)) "Kruznice")	;;; jaký střed se nastavuje
    (progn							;;; nastavujeme střed kružnice
      (setq gl_pam_hodnoty
        (subst
	  (cons  "stredkex" stredx)
          (assoc "stredkex" gl_pam_hodnoty)
	  gl_pam_hodnoty
	)
      )
      (setq gl_pam_hodnoty
        (subst
	  (cons  "stredkey" stredy)
          (assoc "stredkey" gl_pam_hodnoty)
	  gl_pam_hodnoty
	)
      )
      (setq gl_pam_hodnoty
	(subst
	  (cons  "stredkez" stredz)
	  (assoc "stredkez" gl_pam_hodnoty)
	  gl_pam_hodnoty
	)
      )
    )
  )
  (if (= (cdr (assoc "co_kreslit" gl_pam_hodnoty)) "N-uhelnik")	;;; jaký střed se nastavuje
    (progn							;;; nastavujeme střed "N-uhelnik"
      (setq gl_pam_hodnoty
        (subst
   	  (cons  "strednex" stredx)
          (assoc "strednex" gl_pam_hodnoty)
          gl_pam_hodnoty
        )
      )
      (setq gl_pam_hodnoty
        (subst 
	  (cons  "stredney" stredy)
          (assoc "stredney" gl_pam_hodnoty)
          gl_pam_hodnoty
        )
      )
      (setq gl_pam_hodnoty
        (subst
	  (cons  "strednez" stredz)
          (assoc "strednez" gl_pam_hodnoty)
          gl_pam_hodnoty
        )
      )
    )
  )
)