Kompletní aplikace - funkce bez dialogových boxů

Posledním krokem v doplnění aplikace (zatím bez použití dialogových boxů) je dopsat kód hlavní funkce Sbjekty(). Do hlavní funkce SObjekty() musíme nejprve dopsat kód globální proměnné gl_pam_hodnoty uchovávající veškeré nastavení hodnot od uživatele. Proměnná gl_pam_hodnoty je proměnná obsahující asociační seznam.

Asociační seznam umožňuje uživateli přiřadit položce identifikační klíč, pomocí kterého je možné se odkazovat přímo na danou položku (při programování nemusíme znát přesné umístění položky jako je tomu v případu normálního seznamu). Definice proměnné gl_pam_hodnoty má následující tvar:

(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 souř. středu soustř. kružnic
   (cons "stredkey" "0.0")      ;;; y souř. středu soustř. kružnic
   (cons "stredkez" "0.0")      ;;; z souř. středu soustř. kružnic
   (cons "strednex" "0.0")      ;;; x souř. středu soustř. n-uhelníků
   (cons "stredney" "0.0")      ;;; y souř. středu soustř. n-uhelníků
   (cons "strednez" "0.0")      ;;; z souř. středu soustř. 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")       ;;; počet n-úhelníků (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
   (cons "kruz_stred_but" "0")  ;;; tlačítko - stred kruznice
   (cons "nuhel_stred_but" "0") ;;; tlačítko - stred n-úhelníku
  )
 )

Položky jsou tvořeny podle následujícího schématu:

jméno_položky + písmeno_signalizující_obrazec_(k = kružnice, n = n-úhelník) + písmeno_označující_typ_dialogového_prvku (s = slider, e = editbox).

Poznámka: Nadbytek položek v asociačním seznamu je z důvodu přípravy na dialogový box (položky končící na s - slider) nejsou nyní využité.

Hlavní funkce SObjekty():

Funkce SObjekty() definuje nový příkaz AutoCADu SObjekty po jehož zadání do příkazového řádky zobrazí otázky pro zadání hodnot od uživatele. Po jejich zodpovězení je zobrazen určený obrazec.

Hlavní části funkce:

V těle funkce je nejprve definovaná proměnná obsahující asociační seznam s uloženým nastavením všech inicializačních hodnot nastavení pro vykreslení výsledných obrazců. Následuje získání a uložení hodnoty do proměnné zadani, která určuje jakým způsobem bude chtít uživatel zadávat hodnoty (dialogovým boxem zadani = "dialog" nebo pomocí příkazového řádku zadani = "prikaz"). Po rozhodnutí typu zadávání je zavolána funkce pro zadání parametrů so:zadej_hodnoty() (v případě, že uživatel požaduje zadávání pomocí příkazového řádku) nebo so:dialog() (v případě, že uživatel požaduje zadávání pomocí dialogu). Každá z výše uvedených funkcí vrací v případu správného zadání hodnotu T (v případě jakékoliv chyby hodnotu nil). Vrácená hodnota je otestována a rovná-li se T je zavolána funkce so:vykresli(), která vykreslí daný obrazec. V opačném případě není vykreslen žádný obrazec.

Vlastní kód funkce:

(defun c:SObjekty ()
      ;;; definice nové funkce, která bude vyvolána příkazem SObjekty
 (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 souř. středu soustř. kružnic
   (cons "stredkey" "0.0")      ;;; y souř. středu soustř. kružnic
   (cons "stredkez" "0.0")      ;;; z souř. středu soustř. kružnic
   (cons "strednex" "0.0")      ;;; x souř. středu soustř. n-uhelníků
   (cons "stredney" "0.0")      ;;; y souř. středu soustř. n-uhelníků
   (cons "strednez" "0.0")      ;;; z souř. středu soustř. 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")       ;;; počet n-úhelníků (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
   (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")
  (progn
      ;;; zadání hodnot pomocí příkazového řádku
   (if (= (so:zadej_hodnoty) T)
    (progn
     (so:vykresli)
      ;;; vykreslení požadovaného objektu v případě že byly zadány hodnoty
     (princ "Funkce c:SObjekty dokončila činnost")
     (exit)                     ;;; ukončení funkce
    )
   )
  )
 )
 (if (= zadani "dialog")
  (progn
         ;;; zadání hodnot pomocí dialogového boxu
   (if (= (so:dialog) T)
    (progn
     (so:vykresli)
         ;;; vykreslení požadovaného objektu, v případě že byly zadány hodnoty
     (princ "Funkce c:SObjekty dokončila činnost")
     (exit)                     ;;; ukončení funkce
    )
   )
  )
 )
 (princ "Funkce c:SObjekty dokončila činnost")
         ;;; informace o ukončení funkce
 (princ)
)

Zdrojový soubor

Kód vysvětlované funkce (bez funkce so:kresli_kruznici()) je možné nahrát v souboru SObjektyBezDialBezKruznice.lsp.