(defun c:SObjekty ()
;;; definice nové funkce kresli
  (setq	gl_pam_hodnoty		;;; globální proměnná uchovávající jednotlivá nastavení
     (list
	(cons "co_kreslit"   "Kruznice")	;;; určení co se bude kreslit
	(cons "stredkex"     "0.0")		;;; x-ova souřadnice středu sostř. kružnic
	(cons "stredkey"     "0.0")		;;; y-ova souřadnice středu sostř. kružnic
	(cons "stredkez"     "0.0")		;;; z-ova souřadnice středu sostř. kružnic
	(cons "strednex"     "0.0")		;;; x-ova souřadnice středu sostř. n-uhelníků
	(cons "stredney"     "0.0")		;;; y-ova souřadnice středu sostř. n-uhelníků
	(cons "strednez"     "0.0")		;;; z-ova souřadnice středu sostř. n-uhelníků
	(cons "pocvrcholune" "3")		;;; počet vrcholů n - úhelníku (editbox)
	(cons "pocvrcholuns" "3")		;;; počet vrcholů n - úhelníku (slider)
	(cons "polomerne"    "3")		;;; poloměr n - úhelníku (editbox)
	(cons "polomerns"    "3")		;;; poloměr n - úhelníku (slider)
	(cons "pocetne"      "1")		;;; počet n - úhelníků (editbox)
	(cons "pocetns"      "1")		;;; počet n - úhelníků (slider)
	(cons "vzdalenostne" "1")		;;; vzdálenost mezi n - úhelníky (editbox)
	(cons "vzdalenostns" "1")		;;; vzdálenost mezi n - úhelníky (slider)
	(cons "polomerke"    "1")		;;; poloměr kružnice (editbox)
	(cons "polomerks"    "1")		;;; poloměr kružnice (slider)
	(cons "pocetke"      "1")		;;; počet kružnic (editbox)
	(cons "pocetks"      "1")		;;; počet kružnic (slider)
	(cons "vzdalenostke" "1")		;;; vzdálenost mezi kružnicemi (editbox)
	(cons "vzdalenostks" "1")		;;; vzdálenost mezi kružnicemi (slider)
	(cons "kruz_stred_but"  "0")		;;; tlačítko - stred kruznice
	(cons "nuhel_stred_but" "0")		;;; tlačítko - stred n úhelníku
     )
  )
  (setq zadani (so:zpusob_zadani))      ;;; nastavení proměnné určující jakým
  					;;; způsobem se mají zadat informace
  (if (= zadani "prikaz")		;;; zadání hodnot pomocí příkazového řádku
    (if	(= (so:zadej_hodnoty) T)
      (so:vykresli)			;;; vykreslení požadovaného objektu,
      					;;; v případě že byly zadány hodnoty
    )
  )
  (if (= zadani "dialog")		;;; zadání hodnot pomocí dialogového boxu
    (if	(= (so:dialog) T)
      (so:vykresli)			;;; vykreslení požadovaného objektu,
      					;;; v případě že byly zadány hodnoty  
    )
  )
  (princ "Funkce c:SObjekty dokončila činnost")	;;; informace o ukončení funkce
  (princ)
)

 
(defun so:dialog (/ id co_delat vysledek)
  (setq id (load_dialog "d:/vyber.dcl"))	;;; předání jména dialogového boxu
    ;;; CESTU K UMÍSTĚNÍ DIALOGU SE MUSÍ AKTUALIZOVAT PODLE AKTUALNÍHO UMÍSTĚNÍ
    
  (setq co_delat 2)
  (while (>= co_delat 2)			;;; opakuj pokud nenastane zmena
    (if	(not (new_dialog "vyber" id))		;;; není-li jméno dialogu vyber tak skonči
      (exit)
    )
    (start_list "popup")	;;; vytvoření položek popup listu
      (add_list "N úhelník")	;;; přidání položky "N úhelník"
      (add_list "Kružnice")	;;; přidání položky "Kružnice"
    (end_list)

    ;;; nastavení hodnot dialogových prvků
    (set_tile "polomerke"    (cdr (assoc "polomerke"    gl_pam_hodnoty)))
    (set_tile "polomerks"    (cdr (assoc "polomerks"    gl_pam_hodnoty)))
    (set_tile "pocetke"      (cdr (assoc "pocetke"      gl_pam_hodnoty)))
    (set_tile "pocetks"      (cdr (assoc "pocetks"      gl_pam_hodnoty)))
    (set_tile "vzdalenostke" (cdr (assoc "vzdalenostke" gl_pam_hodnoty)))
    (set_tile "vzdalenostks" (cdr (assoc "vzdalenostks" gl_pam_hodnoty)))
    (set_tile "polomerne"    (cdr (assoc "polomerne"    gl_pam_hodnoty)))
    (set_tile "polomerns"    (cdr (assoc "polomerns"    gl_pam_hodnoty)))
    (set_tile "pocetne"      (cdr (assoc "pocetne"      gl_pam_hodnoty)))
    (set_tile "pocetns"      (cdr (assoc "pocetns"      gl_pam_hodnoty)))
    (set_tile "vzdalenostne" (cdr (assoc "vzdalenostne" gl_pam_hodnoty)))
    (set_tile "vzdalenostns" (cdr (assoc "vzdalenostns" gl_pam_hodnoty)))
    (set_tile "pocvrcholune" (cdr (assoc "pocvrcholune" gl_pam_hodnoty)))
    (set_tile "pocvrcholuns" (cdr (assoc "pocvrcholuns" gl_pam_hodnoty)))
    (set_tile "stredkex"     (cdr (assoc "stredkex"     gl_pam_hodnoty)))
    (set_tile "stredkey"     (cdr (assoc "stredkey"     gl_pam_hodnoty)))
    (set_tile "stredkez"     (cdr (assoc "stredkez"     gl_pam_hodnoty)))
    (set_tile "strednex"     (cdr (assoc "strednex"     gl_pam_hodnoty)))
    (set_tile "stredney"     (cdr (assoc "stredney"     gl_pam_hodnoty)))
    (set_tile "strednez"     (cdr (assoc "strednez"     gl_pam_hodnoty)))

    (action_tile "kruznice" "(so:naskruh)")
		;;; je-li vybrán radio_button "kruznice" zavolej funkci (so:naskruh)
    (action_tile "nuhelnik" "(so:nasnuhe)")
		;;; je-li vybrán radio_button "nuhelnik" zavolej funkci (so:nasnuhe)
    (action_tile "popup"
      "(progn
         (if (= $value \"0\")(so:nasnuhe))			
         (if (= $value \"1\") (so:naskruh))
	)"
    )
		;;; je-li vybrána položka popup_listu "N úhelník" zavolej funkci (so:nasnuhe)
		;;; je-li vybrána položka popup_listu "Kružnice" zavolej funkci (so:naskruh)
    (action_tile "polomerks" "(so:vazba_prvku $value $reason \"polomerke\"  \"polomerks\")")
    (action_tile "pocetks"   "(so:vazba_prvku $value $reason \"pocetke\"    \"pocetks\")")
    (action_tile "vzdalenostks"	"(so:vazba_prvku $value $reason \"vzdalenostke\" \"vzdalenostks\")")
    (action_tile "polomerns" "(so:vazba_prvku $value $reason \"polomerne\"  \"polomerns\")")
    (action_tile "pocetns"   "(so:vazba_prvku $value $reason \"pocetne\"    \"pocetns\")")
    (action_tile "vzdalenostns"	"(so:vazba_prvku $value $reason \"vzdalenostne\" \"vzdalenostns\")")
    (action_tile "pocvrcholuns"	"(so:vazba_prvku $value $reason \"pocvrcholune\" \"pocvrcholuns\")")
		;;; je-li změněn některý posuvník "slider.." zavolej funkci so:vazba_prvků
    (action_tile "stredkex"
       "(setq gl_pam_hodnoty
        (subst
          (cons \"stredkex\" $value)
          (assoc \"stredkex\" gl_pam_hodnoty)
          gl_pam_hodnoty
        ))"
    )
    (action_tile "stredkey"
       "(setq gl_pam_hodnoty
        (subst
          (cons \"stredkey\" $value)
          (assoc \"stredkey\" gl_pam_hodnoty)
          gl_pam_hodnoty
        ))"
    )
    (action_tile "stredkez"
       "(setq gl_pam_hodnoty
        (subst
          (cons \"stredkez\" $value)
          (assoc \"stredkez\" gl_pam_hodnoty)
          gl_pam_hodnoty
        ))"
    )
		;;; je-li změněn některý editbox středu kružnice nastav odpovídající hodnoty
    (action_tile "polomerke" "(so:vazba_prvku $value $reason \"polomerke\" \"polomerks\")")
    (action_tile "pocetke"
      		 "(so:vazba_prvku (zaokr_string $value) $reason \"pocetke\" \"pocetks\")"
    )
    (action_tile "vzdalenostke"	"(so:vazba_prvku $value $reason \"vzdalenostke\" \"vzdalenostks\")")
		;;; je-li změněn některý editbox zavolej funkci so:vazba_prvku
    (action_tile "strednex"
       "(setq gl_pam_hodnoty
        (subst
          (cons \"strednex\" $value)
          (assoc \"strednex\" gl_pam_hodnoty)
          gl_pam_hodnoty
        ))"
    )
    (action_tile "stredney"
       "(setq gl_pam_hodnoty
        (subst
          (cons \"stredney\" $value)
          (assoc \"stredney\" gl_pam_hodnoty)
          gl_pam_hodnoty
        ))"
    )
    (action_tile "strednez"
       "(setq gl_pam_hodnoty
        (subst
          (cons \"strednez\" $value)
          (assoc \"strednez\" gl_pam_hodnoty)
          gl_pam_hodnoty
        ))"
    )
		;;; je-li změněn některý editbox středu n-úhelníku nastav odpovídající hodnoty
    (action_tile "polomerne" "(so:vazba_prvku $value $reason \"pocvrcholune\" \"polomerns\")")
    (action_tile "pocetne"
      		 "(so:vazba_prvku (zaokr_string $value) $reason \"pocetne\" \"pocetns\")")
    (action_tile "vzdalenostne"	"(so:vazba_prvku $value $reason \"vzdalenostne\" \"vzdalenostns\")")
    (action_tile "pocvrcholune"
		 "(so:vazba_prvku (zaokr_string $value) $reason \"pocvrcholune\" \"pocvrcholuns\")")
		;;; je-li změněn některý editbox zavolej funkci so:vazba_prvku
    		;;; pozor hodnota $value je u některých prvků zaokrouhlena
    (action_tile "kruz_stred_but" "(done_dialog 4)")
		;;; je-li zmáčknuto tlačítko "kruz_stred_but" zavolej
    		;;; funkci done_dialog s hodnotou 4
    (action_tile "nuhel_stred_but" "(done_dialog 4)")
		;;; je-li zmáčknuto tlačítko "nuhel_stred_but" zavolej
    		;;; funkci done_dialog s hodnotou 4
    (action_tile "accept" "(done_dialog 1)")
		;;; je-li zmáčknuto tlačítko "accept"
    		;;; zavolej funkci done_dialog s hodnotou 1
    (action_tile "cancel" "(done_dialog 0)")
		;;; je-li zmáčknuto tlačítko "cancel"
    		;;; zavolej funkci done_dialog s hodnotou 0
    (if (= (cdr (assoc "co_kreslit" gl_pam_hodnoty)) "Kruznice")
			;;; je-li nastaveno kresleni kruznice
      (so:naskruh)	;;; zavolej fukci (so:naskruh)
    )
    (if (= (cdr (assoc "co_kreslit" gl_pam_hodnoty)) "N-uhelnik")
			;;; není-li nastaveno kresleni n-úhelníku
      (so:nasnuhe)	;;; zavolej funkci (so:nasnuhe)
    )
    (setq co_delat (start_dialog))
		;;; nastaví proměnnou na hodnotu získanou od funkce start_dialog
		;;; (hodnota s kterou končí funkce done_dialog)
    (cond	;;; určení další činnosti
      ((= co_delat 0) (setq vysledek nil))	;;; uživatel stornoval dialog = konec funce
      ((= co_delat 1) (setq vysledek T))	;;; uživatel potvrdil dialog,
      						;;; zavolej funkci (vykresli)
      ((= co_delat 4) (so:nastav_stred (getpoint "\nVýběr bodu:")))
				;;; uživatel zmáčkl tlačítko pro zadání souřadnic středu
	    			;; zavolej funkci nastav_střed
    )
  )
  (unload_dialog id)		;;; odstraní dialog id z paměti
    vysledek			;;; vrácení výsledku funkce (jestli proběhla OK)
)


(defun so:naskruh ()
;;; nastavení hodnot (přepínačů) a viditelnosti prvků pro   nabídku kružnice
  (setq gl_pam_hodnoty 
    (subst
      (cons "co_kreslit" "Kruznice")
      (assoc "co_kreslit" gl_pam_hodnoty)
      gl_pam_hodnoty
    )
  )			;;; nastavení aktuálního objeku v asoc. seznamu na hodnotu "Kruznice"

  (set_tile "kruznice" "1")	;;; nastavení radio_buttunu "kruznice" jako zvýrazněný
  (set_tile "nuhelnik" "0")	;;; nastavení radio_buttunu "n uhelnik" jako nezvýrazněný
  (set_tile "popup"    "1")	;;; nastavení popup_listu na hodnotu "Kružnice"

;;; deaktivování prvků   příslušných k n-úhelníku:
  (mode_tile "strednex"     1)	;;; deaktivování edit_boxu "strednex"
  (mode_tile "stredney"     1)	;;; deaktivování edit_boxu "stredney"
  (mode_tile "strednez"     1)	;;; deaktivování edit_boxu "strednez"
  (mode_tile "polomerne"    1)	;;; deaktivování edit_boxu "polomerne"
  (mode_tile "pocetne"      1)	;;; deaktivování edit_boxu "pocetne"
  (mode_tile "vzdalenostne" 1)	;;; deaktivování edit_boxu "vzdalenostne" 
  (mode_tile "pocvrcholune" 1)	;;; deaktivování edit_boxu "pocvrcholune"
  (mode_tile "polomerns"    1)	;;; deaktivování slideru "polomerns"
  (mode_tile "pocetns"      1)	;;; deaktivování slideru "pocetns" 
  (mode_tile "vzdalenostns" 1)	;;; deaktivování slideru "vzdalenostns" 
  (mode_tile "pocvrcholuns" 1)	;;; deaktivování slideru "pocvrcholuns"
  (mode_tile "nuhel_stred_but" 1)	;;; deaktivování tlačítka "nuhel_stred_but" 
;;; aktivování   prvků příslušných ke kružnici:
  (mode_tile "polomerks"    0)	;;; aktivování slideru "polomerks"
  (mode_tile "pocetks"     0)	;;; aktivování slideru "pocetks"
  (mode_tile "vzdalenostks" 0)	;;; aktivování slideru "vzdalenostks" 
  (mode_tile "stredkex"    0)	;;; aktivování edit_boxu "stredkex"
  (mode_tile "stredkey"    0)	;;; aktivování edit_boxu "stredkey" 
  (mode_tile "stredkez"     0)	;;; aktivování edit_boxu "stredkez"
  (mode_tile "polomerke"    0)	;;; aktivování edit_boxuu "polomerke"
  (mode_tile "pocetke"      0)	;;; aktivování edit_boxu "pocetke" 
  (mode_tile "vzdalenostke" 0)	;;; aktivování edit_boxu "vzdalenostke"
  (mode_tile "kruz_stred_but" 0)	;;; aktivování tlačítka "kruz_stred_but"
)
  


(defun so:nasnuhe ()
;;; nastavení hodnot (přepínačů) a viditelnosti prvků pro   nabídku n-úhelník
  (setq gl_pam_hodnoty 
    (subst
      (cons "co_kreslit" "N-uhelnik")
      (assoc "co_kreslit" gl_pam_hodnoty)
      gl_pam_hodnoty
    )
  )		;;; nastavení aktuálního objeku v asoc. seznamu na hodnotu "Kruznice"
  
  (set_tile "kruznice" "0")	;;; nastavení radio_buttunu "kruznice" jako nezvýrazněný
  (set_tile "nuhelnik" "1")	;;; nastavení radio_buttunu "n uhelnik" jako zvýrazněný
  (set_tile "popup"    "0")	;;; nastavení popup_listu na hodnotu "N - úhelník"

;;; deaktivování prvků   příslušných ke kružnici:
  (mode_tile "polomerks"    1)	;;; deaktivování slideru "polomerks"
  (mode_tile "pocetks"      1)	;;; deaktivování slideru "pocetks"
  (mode_tile "vzdalenostks" 1)	;;; deaktivování slideru "vzdalenostks" 
  (mode_tile "stredkex"     1)	;;; deaktivování edit_boxu "stredkex"
  (mode_tile "stredkey"     1)	;;; deaktivování edit_boxu "stredkey" 
  (mode_tile "stredkez"     1)	;;; deaktivování edit_boxu "stredkez"
  (mode_tile "polomerke"    1)	;;; deaktivování edit_boxuu "polomerke"
  (mode_tile "pocetke"      1)	;;; deaktivování edit_boxu "pocetke" 
  (mode_tile "vzdalenostke" 1)	;;; deaktivování edit_boxu "vzdalenostke"
  (mode_tile "kruz_stred_but" 1)	;;; deaktivování tlačítka "kruz_stred_but"
;;; aktivování prvků příslušných   k n-úhelníku:
  (mode_tile "strednex"     0)	;;; aktivování edit_boxu "strednex"
  (mode_tile "stredney"     0)	;;; aktivování edit_boxu "stredney"
  (mode_tile "strednez"     0)	;;; aktivování edit_boxu "strednez"
  (mode_tile "polomerne"    0)	;;; aktivování edit_boxu "polomerne"
  (mode_tile "pocetne"      0)	;;; aktivování edit_boxu "pocetne"
  (mode_tile "vzdalenostne" 0)	;;; aktivování edit_boxu "vzdalenostne" 
  (mode_tile "pocvrcholune" 0)	;;; aktivování edit_boxu "pocvrcholune"
  (mode_tile "polomerns"    0)	;;; aktivování slideru "polomerns"
  (mode_tile "pocetns"      0)	;;; aktivování slideru "pocetns" 
  (mode_tile "vzdalenostns" 0)	;;; aktivování slideru "vzdalenostns" 
  (mode_tile "pocvrcholuns" 0)	;;; aktivování slideru "pocvrcholuns"
  (mode_tile "nuhel_stred_but" 0)	;;; aktivování tlačítka "nuhel_stred_but" 
)

(defun zaokr_string (string)
;;; funkce pro převod řetězce reprezentujícího   reálné číslo
;;; na řetězec reprezentující celé číslo
  (setq str (atoi string))			;;; převede řetězec na celé číslo
  (setq string (vl-princ-to-string str))	;;; převede číslo na řetězec
)


(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
      (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
      (initget 7)	;;; kontrola zadání číselné hodnoty (zakaz zadání
      			;;; záporné hodnoty a 0), potvrzení zadání je ENTREM
      (setq pocetn (getint "\n Zadej počet n-úhelníků: "))
			;;; zadání hodnoty početu kreslených n-úhelníků
      (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
      (initget 7)	;;; kontrola zadání číselné hodnoty (zakaz zadání
      			;;; záporné hodnoty a 0), potvrzení zadání je ENTREM
      (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: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: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
        )
      )
    )
  )
)

(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
  )
)

(defun so:vazba_prvku (val why editbox slider)
;;; funkce pro nastavení odpovídajících prvků na stejné hodnoty
;;; příklad editbox1 a slider1 atd.
;;; val - nastavovaná hodnota
;;; why - určuje jaká akce uživatele vyvolala akci dialogového   prvku
;;; editbox - jméno prvku typu editbox
;;; slider - jméno odpovídajícího prvku typu slider

  (if (or (= why 2) (= why 1))
;;; zjistení jaká akce uživatele způsobila akci dialogu
;;; 2 = opustění editboxu
;;; 1 = uživatel vybral prvek (příklad entrem)
    (progn
      (setq edit_hodnota (atof val))
;;; převedení řetězce reprezentujícího nastavenou hodnotu   na číslo
      (if (> edit_hodnota 100)
	(setq val "100")	;;; je-li číslo mimo rozsah prvku, proveď korekci
      )
      (if (< edit_hodnota 0)
	(setq val "0")		;;; je-li číslo mimo rozsah prvku, proveď korekci
      )
      (if (and (= editbox "pocvrcholune") (< edit_hodnota 3))
	(setq val "3")		;;; kontrola jestli nezadáváme počet vrcholů n-úhelníku <   3
      )
      (if (and (= editbox "polomerne") (< edit_hodnota 30))
	(setq val "30")	;;; kontrola jestli nezadáváme poloměr opsané kružnice n-úhelníku   < 3
      )
      (set_tile editbox val)	;;; nastavení editboxu na správnou hodnotu
      (set_tile slider val)	;;; nastavení slideru na správnou hodnotu
      (setq gl_pam_hodnoty
	(subst
	  (cons editbox val)
	  (assoc editbox gl_pam_hodnoty)
	  gl_pam_hodnoty
	)
      )
      (setq gl_pam_hodnoty
	(subst
	  (cons slider val)
	  (assoc slider gl_pam_hodnoty)
	  gl_pam_hodnoty
	)
      )
    )
  )
)

(princ "\nFunkce se spouští příkazem  (c:SObjekty)  v IDE Visual LISPu")
(princ "\nFunkce se spouští příkazem  SObjekty v AutoCADu")