CVIČENIE 1: Základné rysy práce v AutoLISPe
AutoCAD [33] patrí k softvérovému produktu, ktorý umožňuje jeho modifikáciu v závislosti na požiadavkách konštruktéra – projektanta. Okrem možností úpravy AutoCADu, ktoré boli uvedené v CAD I. [21], t.j. tvorba vlastného roletového menu, patria k ďalším možnostiam programovacie jazyky AutoCADu. Jedným z nich je programovací jazyk AutoLISP [33], ktorý predstavuje vo verziách AutoCAD 2000, 2000i, 2002 jednoduchú, používateľovi “priateľskú“ formu komunikácie, využívajúci Visual LISP editor.
AutoLISP je dodávaný s plne funkčnou verziou AutoCADu. Programovací jazyk umožňuje otvorenú architektúru prostredia AutoCADu a slúži na tvorbu jeho nadstavieb, pričom si uchováva rovnakú štruktúru od verzie 14 do verzie 2002.
1. 1. Programovací jazyk AutoLISP
AutoLISP umožňuje doplnenie vlastných funkcií, ktoré si konštruktér – projektant (používateľ AutoCADu) môže zabudovať do AutoCADu. Konštruktér si vytvorí programy, príkazy a funkcie z danej oblasti, v ktorej pracuje: železničné staviteľstvo, cestné staviteľstvo, pozemné staviteľstvo, mosty, objekty, mapovanie, geografické informačné systémy, a pod.
Konštruktér má dve možnosti: buď si daný produkt, t.j. nadstavbu AutoCADu, pre svoju oblasť záujmu zakúpi hotový (vysoké finančné náklady), alebo si vytvorí vlastné doplnky AutoCADu pomocou AutoLISPu.
Vytvorenie programov v AutoLISPe zvyšuje produktivitu práce. To čo môžeme vykonať za niekoľko sekúnd (po zadaní vstupných dát), to by sme manuálne mohli kresliť niekoľko dní, napríklad pozdĺžny profil cestnej alebo železničnej komunikácie, ktorý môže byť dlhý 0.5 až 20 km. Programovacie prostriedky využívame až vtedy, ak sa daný druh činností opakuje viackrát. V prípade kreslenia jedného výkresu kreslíme prvky v AutoCADe manuálne.
Ďalšou vlastnosťou AutoLISPu je práca s rôznymi typmi dát, nielen číselnými a textovými údajmi zadanými manuálne z klávesnice alebo zo súboru, ale aj dátami objektov (entít) vo výkrese AutoCADu.
AutoLISP je textový súbor s príponou LSP. Dôležitým prvkom je prepojenie AutoLISPu s grafickým prostredím AutoCADu, t.j. to čo vypočítame, to môžeme priamo vykresliť vo výkrese, alebo naopak, vyberáme objekty z výkresu, ktoré potom spracovávame výpočtom.
Program vytvárame v ľubovoľnom textovom editore, napríklad Poznámkový blok [NotePad] z WINDOWS, prípadne Norton Editor NE [ne.com]. V dnešnej dobe pracuje AutoCAD v prostredí WINDOWS, ktorý umožňuje súčasné spustenie viacerých programov na lište Štart [Start] vo WINDOWS, napríklad výkres AutoCADu, editorom otvorený program typu LSP, editorom otvorené dátové súbory a pod.
V AutoCADe od verzie 2000, 2000i, 2002 pracujeme s uvedenými súbormi priamo vo Visual LISP editore, ktorý kontroluje správnosť napísaného programu, t.j. štruktúru programu LSP. V starších verziách AutoCADu, alebo pri písaní programu v inom textovom editore, musí kontrolu syntaxy programu vykonávať konštruktér.
Národné verzie AutoCADu a AutoLISPu (napríklad CZ) umožňujú zadávanie anglických príkazov, napríklad v českej verzii zároveň je možné použiť príkazy anglickej verzie, ale pred príkaz je potrebné pridať znak podčiarknutej medzery “_“, napríklad: úsečka (Úsečka) [_Line], kružnica (Kružnice) [_Circle], 3 bodmi (3B) [_3P], vymaž (Vymaž) [_Erase], a pod. Samotný AutoLISP je rovnaký pre všetky národné verzie, pričom funkcie sú v anglickej verzii.
Konfigurácia počítača pre AutoLISP je zhodná s konfiguráciou AutoCADu, ktorá je popísaná v CAD I. [21]. AutoLISP nie je dodávaný s verziami AutoCAD LT.
1. 2. Prepojenie Visual LISPu a AutoCADu
![]() |
Obr. 1.1. Spustenie Visual LISP editora pre AutoLISP v AutoCADe
![]() |
Obr. 1.2. Prostredie Visual LISPu v AutoCADe
V prípade požiadavky získania ďalších informácií o Visual LISPe a AutoLISPe použite vyhľadávanie v Nápovede [Help], kde je spracovaná kompletne podrobná používateľská príručka [33].
1. 3. Načítanie programov AutoLISPu a spustenie funkcií
Po vytvorení programu, alebo ak vlastníme program typu LSP, prvým krokom je načítanie programu do pamäte počítača príkazom LOAD, za účelom spustenia funkcie z tohto programu.

Uvedený príkaz LOAD nám vráti názov poslednej funkcie z tohto programu PROGRAM.LSP.
Ďalšou úlohou je spustenie požadovanej funkcie FUNKCIA z programu LSP na príkazovom riadku AutoCADu.

Po spustení funkcie z programu LSP bude vykonaný požadovaný postup naprogramovaný v súbore PROGRAM.LSP v tejto definovanej funkcií (kap. 2.1).
Ďalšou možnosťou spustenia programu typu LSP je roletové menu obr.1.1 položkou Načítať … [Load …], kde vyberieme adresár a požadované meno programu, napísaného v AutoLISPe.

Vzhľadom na to, že ešte neovládame programovanie v AutoLISPe, vyskúšame si načítať a spustiť napísaný hotový program SKRUTKA.LSP, ktorý vykreslí do výkresu skrutku alebo maticu na konštruovanie oceľového spoja.
Pr. 1.1. Načítajte do pamäte počítača program SKRUTKA.LSP a spustite funkciu SKRUTKA. Vykreslite vo výkrese skrutky a matice podľa vlastného návrhu spoja oceľovej konštrukcie (obr. 1.4).
Obr. 1.3. Návrh skrutky a matice – jednotlivé premenné z programu SKRUTKA.LSP
Vykonajte postup:
a) Nastavenie výkresu:
Príkaz: [Command:] ZOOM [Zoom] – Okno [Window]:
1. Roh: [First corner:] 0,0
2. Roh: [Other corner:] 400,300
b) Načítanie programu SKRUTKA.LSP:
Príkaz: [Command:] (load “SKRUTKA“) alebo (load “C:/ACAD/SKRUTKA“)
c) Spustenie funkcie SKRUTKA:
Príkaz: [Command:] skrutka
d) Práca konštruktéra – projektanta s programom:
a) KRESLENIE SKRUTKY ALEBO MATICE? [S,M]: s
b) VYBERTE BOD VLOŽENIA SKRUTKY: vyberte bod myšou
c) ZADAJTE DĹŽKU SKRUTKY [mm]: 60
d) ZADAJTE PRIEMER SKRUTKY [mm]: 15
e) ZADAJTE VÝŠKU HLAVY [mm]: 10
f) ZADAJTE DĹŽKU ZÁVITU [mm]: 40
g) Dĺžka závitu musí byť násobkom stúpania závitu!
ZADAJTE STÚPANIE ZÁVITU [mm]: 2
h) Objekt bude vykreslený, napríklad podľa obr.1.4. Vyskúšajte samostatne aj konštruovanie matice.
Zdrojový text ukážkového programu SKRUTKA.LSP je uvedený v Prílohe č. 9.1.
Pozn.1: Dĺžka závitu skrutky musí byť
celým násobkom stúpania závitu, napríklad dĺžka závitu 40 mm a stúpanie 2 mm,
alebo dĺžka závitu 33 mm a stúpanie 3 mm, a pod. Pred kreslením si navrhnite
rozmiestnenie skrutiek a matíc (obr. 1.4).
Obr. 1.4. Vykreslenie objektov programom SKRUTKA.LSP
Pr. 1.2. Spustite program SÚČET.LSP na sčítanie C = A + B, pričom zadajte hodnoty premenných A a B.
Zdrojový text programu SÚČET.LSP:
; Program na sčítanie dvoch čísel
(defun C:SÚČET ()
;Zadávanie hodnôt
(setq A (getreal "\nZADAJTE A: "))
(setq B (getreal "\nZADAJTE B: "))
;Sčítanie
(setq C (+ A B))
(prompt "\nVÝSLEDOK C=")
(princ C)
(princ)
)
Vyskúšajte postup:
a) Načítanie programu SÚČET.LSP:
Príkaz: [Command:] (load “SÚČET“) alebo (load “C:/ACAD/SÚČET“)
b) Spustenie funkcie SÚČET:
Príkaz: [Command:] súčet
c) Práca konštruktéra – projektanta s programom:
a) ZADAJTE A: 62
b) ZADAJTE B: 27
c) VÝSLEDOK C= 89
Pozn. 1: Príkazy a funkcie budú vysvetlené podrobne v nasledujúcich kapitolách. V kap. 1 je potrebné vyskúšať načítanie programov typu LSP pomocou LOAD (load “PROGRAM“) alebo z roletového menu (rolety) podľa obr. 1.1 a spustenie jednotlivej funkcie z PROGRAM.LSP.
CVIČENIE 2: AutoLISP a štruktúra programov
2. 1. Definovanie funkcií pomocou DEFUN
Definovanie jednotlivých častí v programe LSP je zabezpečené definovaním funkcií pomocou DEFUN.
![]() |
Pred názvom funkcie píšeme “C:“, čo znamená, že funkcia NÁZOV sa stane príkazom AutoCADu a môžeme ju vyvolať na príkazovom riadku Príkaz: [Command:] príkazom NÁZOV. V prípade, že znak “C:“ vynecháme, potom musíme zadávať funkciu v zátvorkách (NÁZOV).
Za menom funkcie NÁZOV sú definované hodnoty argumentov a lokálne premenné v zátvorkách “( )“. Ak budeme definovať lokálne premenné, sú písané za znakom “/“.
(defun NÁZOV (hodn1 hodn2 / LOKprem1 LOKprem2) ……………. )
Globálne premenné fungujú počas celej doby spustenia AutoCADu, odkedy sme premennú prvýkrát použili. Lokálne premenné sú využívané len v rámci jednej funkcie.
2. 2. Štruktúra programov v AutoLISPe
Programy vytvorené v AutoLISPe sú zostavené do zoznamov príkazov využívajúcich zátvorky (koľko je ľavých zátvoriek, toľko musí byť pravých zátvoriek). Vlastný program LSP sa môže skladať z viacerých funkcií. Jednotlivé funkcie môžu využívať ďalšie funkcie. Program je delený na jednotlivé uzavreté časti, ktoré sú definované ako funkcie DEFUN (kap. 2.1).
Vzhľadom na to, že ide o viacriadkové programy, je potrebné ich vytvárať v novom súbore s príponou LSP v ľubovoľnom textovom editore, alebo program spracovávať priamo vo Visual LISP editore AutoCADu (obr. 1.2 a obr. 2.1).
![]() |
Pri práci môžeme načítať viac programov typu LSP. Napríklad môžeme využívať funkciu NÁZOV4, ak už bola vopred načítaná do pamäte počítača pomocou iného programu LSP funkciou LOAD.
Pri tvorbe programu vytvárame funkcie:
- načítanie hodnôt existujúcich systémových premenných,
- zistenie údajov z dátových súborov,
- vlastné telo programu,
- výpočty,
- zápis údajov do dátových súborov,
- vrátenie hodnôt systémovým premenným, a pod.
2. 3. Spustenie a tvorba programu pomocou Visual LISPu
Visual LISP editor otvoríme z rolety Nástroje [Tools] z položky “AutoLISP“ a začneme definovať funkciu podľa obr. 2.1 (text v jazyku AutoLISP z Pr. 4.1).
Pr. 2.1. Otvorte text programu napísaného v AutoLISPe pomocou Visual LISP editora a pozrite si jednotlivé časti programov na kreslenie úsečky KRESLI.LSP z Pr. 4.1 alebo kreslenie skrutiek SKRUTKA.LSP z Pr. 1.1, ktoré sú zvýraznené vo Visual LISPe farebne:
- zátvorky: ( ),
- funkcie: DEFUN, SETQ, GETPOINT, POLAR, COMMAND, PRINC,
- príkazy: “_line“, “_color“,
-
![]() |
Obr. 2.1. Štruktúra programu vo Visual LISP editore na kreslenie vlastnej úsečky
a) Zadáme položku “AutoLISP“ z rolety Nástroje [Tools], kde spustíme položku pre “Visual LISP editor“ (obr. 1.1).
b) Otvoríme program LSP v rolete Súbor [File] položkou Otvoriť [Open]. Vyhľadáme požadovaný adresár a otvoríme program, v našom prípade KRESLI.LSP a potom SKRUTKA.LSP.
c) Zdrojový text programu KRESLI.LSP bude zobrazený podľa obr. 2.1.
d) Režim práce prepneme do prostredia AutoCAD, pričom môžeme načítať program podľa Pr. 1.1 príkazom LOAD a príslušnou definovanou funkciou z programu. V prípade, že sme upravovali program, musíme ho uložiť (nezničiť originály programov AutoCADu) a postup opakovať.
Pozn. 1: V prípade, že by v programe boli formálne chyby (kap. 4.1), neboli by farebne rozlíšené jednotlivé časti programu.
CVIČENIE 3: Jednoduchá komunikácia AutoLISPu
s AutoCADom
AutoLISP umožňuje spracovanie údajov výpočtami, načítaním hodnôt do premenných a pod., pričom je prepojený s grafickým prostredím AutoCADu, t.j. priamo s výkresom. Dôležitým znakom AutoLISPu je vykreslenie požadovaných hodnôt z výpočtov priamo do grafického prostredia. V priebehu vykonávania programu LSP je umožnené projektantovi vstupovať do chodu programu a vykonať potrebné zadania, napríklad vybrať bod myšou priamo vo výkrese alebo zadať požadované hodnoty z klávesnice.
Všetky príkazy, ktoré chceme použiť v programe, je možné overiť na príkazovom riadku AutoCADu manuálne. Ak program je dvoj až trojriadkový, využijeme príkazový riadok Príkaz: [Command:]. V prípade, že vytvoríme program dlhší, píšeme ho do súboru typu LSP v ľubovoľnom textovom editore, napríklad Poznámkovom bloku [NotePad] vo WINDOWS, alebo priamo vo Visual LISP editore.
3. 1. Priradenie hodnôt do premenných SETQ
Funkcia SETQ na priradenie hodnôt jednotlivým premenným patrí k dôležitým funkciám AutoLISPu:
![]() |
Obecne platí vzťah, ktorý priraďuje hodnoty jednotlivým premenným postupne v jednom príkaze:
![]() |
Pr. 3.1. Na príkazovom riadku Príkaz: [Command:] priraďte nasledovné hodnoty premenným:
a) Do premennej A priraďte hodnotu 2:
Príkaz: (setq a 2)
Funkcia vráti hodnotu: → 2
b) Do premennej B priraďte hodnotu 3 a do premennej C priraďte hodnotu z A:
(setq b 3) → 3
(setq c a) → 2
Ak chceme zistiť aktuálnu hodnotu premennej, pred premennú zadáme „!“:
!a → 2
!b → 3
!c → 2
Typ premennej sa nedefinuje, ale závisí od typu hodnoty, ktorú jej priradíme:
- celočíselné hodnoty [Integer] : 1, 2, 3, ….,
- desatinné, reálne čísla [Real]: 4.25, 3.75, ….,
- reťazce, texty [String]: “AutoLISP“, “ANO“, “A“,
- zoznam [List], a pod.: (6.25 4.28 6.22).
Počet premenných nesmieme priraďovať bez obmedzenia, závisí od pamäte počítača alebo softvéru, napríklad môže sa jednať o obmedzenie jednotiek (premenných) na 64 KB a pod. Z tohto dôvodu musíme premenné využívať opakovane v iných funkciách (podobne ako pamäť M na kalkulačke). Iné premenné sú potrebné počas celej práce programov v AutoLISPe.
V prípade, že už nepotrebujeme premennú, priradíme jej hodnotu “nil“, čím sa z pamäte počítača odstráni a nezaberá miesto.
(setq c nil) → “nil“
Pr. 3.2. Zadajte hodnoty rôznych typov do premenných podľa príkladov. Na záver zistite ich aktuálne hodnoty pomocou “!“:
(setq dx 4.25) → 4.25 - desatinné číslo,
(setq q 3) → 3 - celé číslo,
(setq s “STAVBA“) → “STAVBA“ - text, reťazec, slovo,
(setq dy dx) → 4.25 - iná premenná.
Zistite hodnoty premenných:
!dx → 4.25
!q → 3
!s → “STAVBA“
!dy → 4.25
!sss → “nil“
Pozn. 1: V prípade, že zadáme meno premennej, ktorá neexistuje, počítač vypíše “nil“, čo znamená “žiadna“ a premenná neexistuje. Uvedeným postupom môže konštruktér overiť existenciu zadaného názvu premennej.
Pozn. 2: Názov premennej musí byť jedinečný, aby sme si nepredefinovali už existujúce funkcie a premenné, napríklad: PI, ANGLE, LENGTH, MAX, T, a pod. Napríklad číslo PI (π) už nebude mať hodnotu “3.14159265…“, ale novú, ktorú sme jej pridelili.
3. 2. Matematické operácie
Matematické znaky “+“, “–“, “*“, “/“, a pod. sa považujú za funkcie, uvádzajú sa priamo za ľavú zátvorku a hodnoty argumentov sa píšu postupne za sebou.
(+ 10 20) → 30
(+ 5 6 10) → 21
(- 7 30) → -23
(* 2 3) → 6
(/ 12 4) → 3
Goniometrické funkcie sú vykonávané v radiánoch a je potrebný prevod pomocou PI (π), napríklad pre stupne [Degrees] vytvoríme premennú STUP alebo pre grády/góny [Grads] premennú GRAD.
(setq stup (/ 180 pi))
(setq grad (/ 200 pi))
Hodnoty goniometrických funkcií získame pre sínus funkciou SIN a kosínus funkciou COS. Zistenie uhla spätne z goniometrickej hodnoty je arkus tangens ATAN. Ostatné goniometrické funkcie sú odvoditeľné. Pozor, uhly pri výpočtoch sú v radiánoch.
(sin uhol)
(cos uhol)
(atan hodnota)
Funkcie pre druhú odmocninu (√¯), prirodzený logaritmus (ln), exponenciálnu funkciu (ex) a mocninu základu (yx) sú:
(sqrt 9) → 3.0
(log 5.2) → 1.64866
(exp 2.5) → 12.18249
(expt 2 4) → 16.0
V jazyku AutoLISP používame porovnávacie funkcie ako samostatné funkcie:
(< i n) - menšie,
(> i n) - väčšie,
(= i n) - rovné,
(/= i n) - nerovná sa,
(<= i n) - menšie a rovné, a pod.
Vstupné dáta:
(setq a 5)
(setq b 3)
(setq c 4)
Program na výpočet premennej VYR:
(setq vyr1 (+ 15 a))
(setq vyr2 (- 16 (* b c)))
(setq vyr (/ vyr1 vyr2))
Výsledok: !vyr → 5
Pozn. 1: V programoch je potrebné otestovať menovateľa zlomku, aby sa nerovnal nule, nakoľko by program bol zrušený (/= vyr2 0).
Vstupné dáta:
(setq r 300.0)
(setq alfa 30.0)
(setq grad (/ 200 pi))
Program na výpočet dotyčnice oblúka TOBL:
(setq alfapol (/ alfa 2))
(setq tobl (* r (/ (sin (/ alfapol grad)) (cos (/ alfapol grad))))
Výsledok:
!tobl → 72.024 m
Pozn. 1: V programe je potrebné upraviť tangens pomocou sínusu SIN a kosínusu COS, a hodnotu uhla z grádov [góny] na radiány pomocou vytvorenej premennej GRAD:
.
Pozn. 2: V prípade, že na príkazovom riadku nie je zobrazená celá hodnota výsledku, ale len platné miesta pre obrazovku, využite v programe funkciu RTOS, ktorá zobrazí v našom prípade premennú TOBL v desatinnom tvare na tri desatinné miesta (rtos tobl 2 3), kap. 5.2.
Pr. 3.5.
Napíšte v AutoLISPe výraz:
Vstupné dáta: (setq a 2 b 3 c 4)
Program na výpočet VYR:
(setq vyr1 (* 4 a))
(setq vyr2 (/ (* b c) 2))
(setq vyr (+ vyr1 vyr2))
Výsledok:
!vyr → 14
3. 3. Vstup konštruktéra - projektanta do chodu programu
Počas chodu programu musíme umožniť používateľovi vstupovať do programu, aby mohol zadávať požadované hodnoty, napríklad dĺžky, šírky, výšky objektov, vyberať body, objekty vo výkrese, alebo vyberať mená dátových súborov pre vstup a výstup za účelom ich ďalšieho spracovania.
Funkcie GET****, ktoré slúžia na zadávanie údajov konštruktérom – projektantom:
- getreal - reálne číslo [Real],
- getint - celé číslo [Integer],
- getstring - text, reťazec [String],
- getpoint - bod [Point],
- getangle - uhol [Angle],
- getdist - vzdialenosť [Distance],
- getkword - kľúčové slovo [Key Word].
Štruktúra funkcie GET****:
![]() |
Pri uvedených funkciách sa program zastaví, vypíše VÝZVU a čaká na zadanie požadovaných hodnôt. S uvedenými funkciami na vstup používateľa do chodu programu súvisí funkcia INITGET, ktorá zabezpečuje testovanie jednotlivých vstupov (kap. 9.2, Pozn. 16).
Pr. 3.6. Na príkazovom riadku napíšte časť programu na vstup používateľa na zadanie desatinného čísla, napríklad dĺžky strany objektu D pomocou GETREAL.
(setq d (getreal “\nZADAJTE DĹŽKU: “))
Program vykoná:
ZADAJTE DĹŽKU: 22.7
Výsledná hodnota premennej D:
!d → 22.7
Pr. 3.7. Napíšte časť programu na zistenie súradníc bodu na obrazovke (vo výkrese) pomocou funkcie GETPOINT. Pri výbere bodov môžete využiť záchytný režim na uchopenie bodov objektov v AutoCADe [21], [33].
(setq bod (getpoint “\nVYBERTE BOD: “))
Program vykoná:
VYBERTE BOD: vyberte bod myšou
Výsledná hodnota premennej BOD:
!bod → (147.21 96.39 0.00) v tvare (X Y Z)
Pr. 3.8. Overte časť programu na zadávanie kľúčových slov GETKWORD, napríklad “ÁNO“, “NIE“ a pod., ako odpoveď na otázku, či práve nakreslený objekt požadujeme v projekte, alebo ho chceme vymazať.
Inicializácia INITGET a zadanie kľúčových písmen z požadovaných slov:
(initget 1 “A N“)
(setq test (getkword “\n NAKRESLENÝ OBJEKT VYHOVUJE? [A,N]:“))
Ďalšia postupnosť programu na jeho rozvetvenie (kap. 4.2 a kap. 4.3):
(if (= test “A“) ……………….)
(if (= test “N“) ……………….)
Pozn. 1: Textová výzva pre projektanta sa píše v úvodzovkách. Znaky “\n“ zabezpečujú napísanie výzvy na nový riadok. Iné tlačidlá než “A“ a “N“ budú programom odmietnuté, nakoľko je aktivovaná funkcia INITGET.
3. 4. Spustenie príkazov AutoCADu v AutoLISPe
funkciou COMMAND
Príkazy AutoCADu sme mohli vyberať z roletového menu [Pull-down Menu], z ikon panelov nástrojov [Toolbars], z bočného obrazovkového menu [Screen Menu], alebo zadať manuálne na príkazovom riadku (pozri CAD I. [21]).
Príkazy, ktoré sme zadávali na príkazovom riadku Príkaz: [Command:], môžeme aplikovať do AutoLISPu pomocou funkcie COMMAND. Príkazy, ktoré chceme zabudovať do programu v AutoLISPe, otestujeme na správnosť ich zadávania na príkazovom riadku v AutoCADe.
![]() |
Pr. 3.9. Vykreslite niektoré objekty vo výkrese funkciou COMMAND. Funkciu overte na príkazovom riadku AutoCADu. Pred kreslením nastavte výrez výkresovej plochy (obrazovky) pomocou ZOOM – Okno [Window] podľa požiadaviek projektanta.
Nastavenie výrezu obrazovky:
Z rolety Zobraziť [View] vyberte ZOOM – Okno [Window]:
Príkaz: 1. roh: [First corner:] 0,0
Príkaz: 2. roh: [Other corner:] 400,300
Kreslenie úsečky (Úsečka) [Line]:
(command “_LINE“ “100,150“ “220,290“ ““)
↑ ↑ ↑ ↑
“ÚSEČKA“ BOD1 BOD2 ukončenie kreslenia
X,Y X,Y
Kreslenie kružníc (Kružnice) [Circle]:
(command “_CIRCLE“ “100,100“ “75“)
↑ ↑ ↑
“KRUŽNICE“ stred polomer
(command “_CIRCLE“ “_3P“ “50,60“ “170,90“ “95,130“)
↑ ↑ ↑ ↑ ↑
“KRUŽNICE“ 3 bodmi BOD1 BOD2 BOD3
Vymazanie objektov (Vymaž) [Erase]:
(command “_ERASE“) - viac objektov a Enter,
↑
“VYMAŽ“
(command “_ERASE“ “_SI“) - jeden objekt.
↑ ↑
“VYMAŽ“ “JE“ jeden objekt (Jednou) [Single]
Zmena farby (Barva)[Color]:
(command “_COLOR“ 3)
↑ ↑
“BARVA“ Číslo farby 1 až 7 (3 – Zelená [Green])
Pozn. 1: Ak používame české príkazy, musíme dodržiavať interpunkčné znamienka, alebo ak používame anglické príkazy, musíme zadať podčiarknutú medzeru “_“ pred príkazom, napríklad úsečka (Úsečka) [_Line], kružnica (Kružnice) [_Circle], farba (Barva) [_Color], a pod.
Pozn. 2: Ak chceme pracovať len s jedným objektom, využijeme príkaz JE [ _SI], čo znamená jeden objekt (Jednou) [Single].
CVIČENIE 4: Program v AutoLISPe a jeho vetvenie
Doteraz sme testovali niekoľkoriadkové programy AutoLISPu priamo na príkazovom riadku AutoCADu. V prípade, že vytváraný program obsahuje viac riadkov, je potrebné ho písať v súbore s príponou LSP.
Na písanie súborov LSP použijeme ľubovoľný textový editor. V starších verziách AutoCADu (ver. 10 až 14) to bol hlavne Norton Editor (ne.com), nakoľko zaberal málo miesta v pamäti počítača a kontroloval ľavé a pravé zátvorky, ktorých správne písanie je nevyhnutné na chod programu LSP.
V súčasnom období môžeme využiť niektorý z textových editorov pracujúcich v prostredí WINDOWS, pričom medzi editorom a AutoCADom prepíname na lište Štart [Start] vo WINDOWS (môžeme používať aj kombináciu tlačidiel ALT + TAB).
V AutoCADe 2000, 2000i, 2002 pracujeme vo VisulaLISP editore, ktorý je zabudovaný priamo v rolete AutoCADu (obr. 1.1).
4. 1. Vytvorenie programu typu LSP
Pomocou textového editora, napríklad v Poznámkovom bloku [NotePad], otvoríme prázdny súbor s príponou LSP. Predtým si môžeme vytvoriť nový súbor aj pomocou Prieskumníka [Explorer] z WINDOWS na pracovnom adresári AutoCADu.
Nakoľko ešte neovládame prostredie Visual LISP editora (alebo ho nevlastníme), budeme pracovať klasicky v textovom editore. Vo Visual LISP editore sa priamo otvárajú, ukladajú a zároveň kontrolujú napísané LSP programy.
Po napísaní programu, súbor uložíme a overíme jeho funkčnosť v AutoCADe príkazom LOAD (kap. 1.3).
Pr. 4.1. Vytvorte nový súbor pomocou Prieskumníka [Explorer] vo WINDOWS, otvorte ho editorom a napíšte program na kreslenie vlastnej úsečky. Funkcia bude mať názov US, aby sme si nepredefinovali originálnu funkciu ÚSEČKA. V AutoCADe 2000 až 2002 súbor vypracujte vo Visual LISP editore.
a) Vytvoríme nový súbor SK.LSP:
- použijeme položky: Štart – Programy – Prieskumník,
[Start – Programs – Explorer]
- roleta: Súbor – Nový objekt – Textový dokument,
[File – New object – Text document]
- zadáme meno súboru SK.LSP a ÁNO na overenie prípony LSP.
b) Otvoríme súbor SK.LSP:
- 2x klikneme na súbor za účelom otvorenia súboru,
v Poznámkovom bloku [NotePad],
- alebo použite Visaul LISP editor, prípadne iný textový editor.
c) Napíšeme program do súboru SK.LSP, funkciu na kreslenie úsečky nazveme US:
(defun C:US ( )
(setq fb (getint “\nZadajte číslo farby [1 až 7]: “ ))
(setq bod1 (getpoint “\nVyberte prvý bod úsečky: “))
(setq bod2 (getpoint bod1 “\nVyberte druhý bod úsečky: “))
(command “_color“ fb) - alebo (command “_colour“ fb)
(command “_line“ bod1 bod2 ““)
(princ)
)
kde: US - názov príkazu na kreslenie úsečky,
FB, BOD1, BOD2 - premenné pre číslo farby a pre jednotlivé body,
BOD1 (pri BOD2) - kreslenie siluety z bodu BOD1,
PRINC - tichý odchod z funkcie.
d) Uloženie programu SK.LSP:
- príkazom Ulož ako [Save as], za účelom overenia mena súboru a adresára na uloženie súboru SK.LSP.
e) Načítanie programu AutoLISPu v AutoCADe:
Príkaz: (load “SK“) alebo (load “C:/ACAD/SK“) alebo roleta Nástroje [Tools]
f) Spustenie nového príkazu US z programu SK.LSP na kreslenie úsečky:
Príkaz: us
g) Vykonajte postupnosti programu:
a) Zadajte číslo farby [1 až 7]: 2
b) Vyberte prvý bod úsečky: myšou vo výkrese
c) Vyberte druhý bod úsečky: myšou vo výkrese
d) Opakujte postup (stačí zadať len príkaz US alebo ENTER na vrátenie poslednej funkcie), obr. 2.1.
h) V prípade, že program obsahuje chyby, je potrebné sa vrátiť do textového editora a opraviť súbor SK.LSP.
Využijeme tlačidlo F2 na zobrazenie textovej obrazovky, prípadne zapneme viac riadkov na výpis na príkazovom riadku a zistíme druh chybového hlásenia.
Niektoré chybové hlásenia:
- definovaná funkcia neexistuje [No Function Definition] – funkcia neexistuje alebo je zlé meno, prvé slovo za hlásením je zlý názov, napríklad:
- SETG namiesto SETQ,
- spojené dve slová a pod.,
- deformovaný zoznam [Malformed List] – zlé zátvorky,
- deformovaný reťazec [Malformed String] – zlé úvodzovky,
- načítanie zrušené [Load Failed] – zlý názov súboru, alebo neexistuje, alebo je na inom adresári, zlá cesta k súboru a pod.
Pozn. 1: Postup opakujeme, až kým neodstránime všetky chyby syntaxy programu LSP, t.j. opravíme, uložíme, načítame a spustíme funkciu. Od verzie AutoCADu 2000 je zabudovaná kontrola programu AutoLISPu priamo v rolete AutoCADu Nástroje [Tools] vo Visual LISP editore [Visual LISP editor].
4. 2. Vetvenie programu pomocou funkcie IF
Program rozvetvujeme na základe určitých porovnávacích podmienok pomocou funkcie IF.
Štruktúra funkcie IF:
![]() |
Uvedená štruktúra predstavuje: Ak platí “porovnávací_výraz“, program vykoná “výrazA“, ak neplatí, vykoná sa “výrazN“.
Pr. 4.2. Preštudujte ukážkovú časť programu, kde porovnáme zadanú premennú A s hodnotou 50. Funkciu ČÍSLO vypracujte na konci programu SK.LSP za kreslením US.
(defun C:ČÍSLO ( )
(setq a (getint “\nZadajte číslo A: “))
(if (> a 50)
(prompt ”\nZadané číslo A > 50.”)
(prompt ”\nZadané číslo A <= 50.”)
)
(princ)
)
Pozn. 1: Funkcia PROMPT vykoná výpis textu alebo textovej premennej na obrazovku.
Pozn. 2: Funkcia IF nemusí obsahovať časť “výrazN“. Na vetvenie programu môžeme použiť funkciu IF dvakrát: (if (> a 50) ………..) a (if (<= a 50) ……....).
Pozn. 3: Na viacnásobné vetvenie môže byť do programu zabudovaná funkcia COND.
Pr. 4.3. Do súboru SK.LSP doplňte funkciu na otestovanie, napríklad polomeru oblúka R, ktorý nesmie byť menší než 300.0 m.
(defun C:POLOMER ( )
(setq r (getreal “\nZadajte hodnotu polomeru oblúka: “))
(if (>= r 300.0)
(prompt ”\nPolomer oblúka vyhovuje.”)
(prompt ”\nPolomer oblúka nevyhovuje.”)
)
(princ)
)
V prípade, že využívame viac výrazov v časti “výrazA“ alebo “výrazN“, použijeme funkciu PROGN. Funkcia PROGN zoskupí viac výrazov dohromady.
![]() |
Pr. 4.4. Doplňte časť programu SK.LSP na test dotyčnice oblúka TOBL pre testovanú dĺžku 100.0 m.
(defun C:DOTYČNICA ( )
(setq tobl (getreal “\nZadajte dĺžku dotyčnice oblúka: “))
(if (< r 100.0)
(progn
(prompt ”\nDĺžka dotyčnice nesmie byť menšia než 100 m!”)
(setq tobl (getreal “\nZadajte NOVÚ dĺžku dotyčnice oblúka: “))
)
)
(princ)
)
Pozn. 1: Hodnoty polomeru R a dotyčnice oblúka TOBL, v príkladoch Pr. 4.3 a Pr. 4.4, by boli v praxi vypočítané programom (napríklad Pr. 7.2). V našom prípade slúžia len na ukážku programu a zadáme ich manuálne pomocou funkcie GETREAL.
Pozn. 2: Pr. 4.4 vykoná požadovaný test len raz funkciou IF. V praxi sa používa na testovanie funkcia WHILE (kap. 4.3), ktorá test opakuje, až kým hodnota vyhovuje danej požiadavke.
4. 3. Cyklus v programe pomocou funkcií REPEAT a WHILE
Na pevný počet opakovaní príkazov vo funkciách slúži funkcia REPEAT.
![]() |
Namiesto pevného stanoveného počtu opakovaní vo funkcií REPEAT sa pri funkcií WHILE opakujú všetky funkcie a príkazy, až kým (pokiaľ) nie je splnená požadovaná podmienka.
![]() |
Pr. 4.5. Do súboru SK.LSP doplňte novú funkciu DĹŽKA na otestovanie zadanej hodnoty tak, aby nedošlo k zadaniu hodnoty menšej alebo rovnej nule (požadujeme len kladné číslo). Funkciu aplikujte na zadanie dĺžky úseku pomocou premennej VZD.
(defun C:DĹŽKA ( )
(setq vzd (getreal “\nZadajte dĺžku úseku: “))
(while (<= vzd 0)
(prompt ”\nHodnota dĺžky úseku nesmie byť <= 0!”)
(setq vzd (getreal “\nZadajte NOVÚ dĺžku úseku: “))
)
(print vzd)
(princ)
)
Pozn. 1: Funkcia PRINT vytlačí výslednú hodnotu premennej VZD. Funkcia WHILE sa bude opakovať, až kým nezadáme správnu hodnotu, t.j. VZD väčšiu ako nula.
Pozn. 2: Pri REPEAT a WHILE nie je potrebná funkcia PROGN, budú vykonané všetky výrazy v týchto funkciách.
Pozn. 3: Na zadanie kladnej hodnoty čísla, v našom prípade VZD, sa používa v programe spravidla funkcia INITGET s príslušným argumentom. Funkcia INITGET kontroluje vstupy pri zadávaní hodnôt (kap. 9.2, Pozn. 16).
(initget (+1 2))
(setq vzd (getreal “\nZadajte dĺžku úseku: “))
CVIČENIE 5: Práca s rôznymi typmi dát
AutoLISP umožňuje spracovanie rôznych typov dát pri načítaní alebo ukladaní údajov dátových súborov, alebo dát jednotlivých objektov nakreslených vo výkrese AutoCADu.
5. 1. Typy dát a funkcia TYPE
![]() |
Typy dát, ktoré môžeme aplikovať v AutoLISPe:
INT - celé číslo (-32000 až 32000),
REAL - reálne, desatinné číslo,
STR - reťazec, text,
FILE - označenie mena súboru “VSTUP.DAT“ a pod.,
ENAME - meno objektu [Entity Name] v AutoCADe,
napríklad: eS24deS…, pri každom otvorení výkresu iné,
LIST - zoznam a projektantom definovaný zoznam,
napríklad v tvare (X Y Z) a pod.,
alebo asociačný zoznam s kódom,
napríklad v tvare (10 124.57 278.75 0.00).
Pozn. 1: Funkciu TYPE využívame na otestovanie typu dát za chodu programu, aby nedošlo napríklad k sčítavaniu, násobeniu textov [STR], alebo naopak, k spájaniu premenných, ak ide o premenné napríklad typu celočíselného [INT] alebo reálneho [REAL].
Pr. 5.1. Zadajte a otestujte typ dát jednotlivých premenných funkciou TYPE. Vyskúšajte priamo na príkazovom riadku AutoCADu.
Zadanie vstupných hodnôt:
(setq a 10
b 37.8
c “AutoLISP“
)
(setq bod (getpoint “\nVyberte bod vo výkrese:“))
(setq f (open “VYSLEDKY.DAT“ “w“))
Overte typ premennej pomocou TYPE:
(type a) → INT
(type b) → REAL
(type c) → STR
(type bod) → LIST
(type f) → FILE
(close f) - odporúčame uzavrieť súbor F.
5. 2. Konverzné funkcie na prácu s dátami
Ak spracovávame vypočítané údaje, napríklad staničenie 124.62850 osi komunikácie (cesty, železnice, mostu, a pod.) z obr. 5.1, musíme vykonať prevod čísla tvaru REAL na STR, t.j. na text, nakoľko len text môžeme vykresliť vo výkrese AutoCADu:
(setq KMtxt “KM 124.62850“)
(command “_text“ bod výška uhol KMtxt).
![]() |
Obr. 5.1. Vykreslenie staničenia objektu ako text v AutoCADe
V našom prípade musíme spojiť dva texty “KM_“ a “124.62850“ a vložiť do výkresu. Platí aj opačný prevod, ak potrebujeme staničenie z výkresu v tvare STR, t.j. “124.62850“ previesť na tvar REAL, aby sme mohli hodnotu staničenia spracovávať matematicky.
Niektoré funkcie:

- prevod celého čísla na reťazec, text [Integer
to Ascii].
(itoa 1) → “1“
(itoa 124) → “124“
(itoa 124.6) → chyba [Error]

- prevod textu na celé číslo [Ascii to Integer].
(atoi “27“) → 27
(atoi “124.628“) → 124

- prevod textu na desatinné číslo [Ascii to
Float, Real].
(atof “91“) → 91.0
(atof “124.62850“) → 124.62850
- prevod ľubovoľného čísla na text
[Real to String].
kde: mód je ako v príkaze pre jednotky (Jednotky) [Units] v AutoCADe:
1 vedecký [Scientific],
2 desatinný [Decimal],
3 palcový, a pod. [Engineering, etc.],
presnosť je počet desatinných miest.
(rtos 12.69268 2 3) → “12.692“
(rtos 124.8269642 2 5) → “12.82696“
(rtos pi 2 7) → “3.1415926“
Pozn. 1: Funkcia RTOS je potrebná na prevod, napríklad vypočítaných staničení pri ich vykreslení do výkresu (obr. 5.1).

- prevod na celé číslo odtrhnutím
desatinnej časti.
(fix 7.1) → 7
(fix 7.99) → 7
(fix 27) → 27
Pozn. 2: Funkciu FIX použijeme, ak potrebujeme napríklad staničenie v hektometroch (obr. 5.1). Vynásobíme staničenie 124.62850 desiatimi, odtrhneme desatinnú časť 124|6→2850 a vrátime späť delením desiatimi. Výsledný efekt bude hektometer 124.6.

- prevod celého čísla na desatinné číslo.
(float 4) → 4.0
(float 6.73) → 6.73

- absolútna hodnota čísla.
(abs -100) → 100
(abs 27.92) → 27.92
- prevod hodnoty uhla na text
[Angle to String].
kde: mód je ako v príkaze pre jednotky (Jednotky) [Units] v AutoCADe
(pre verziu AutoCADu 2002):
0 desatinné stupne [Degrees],
1 stupne/minúty/sekundy [Degrees/Minutes/Seconds],
2 grády [Grads],
3 radiány [Radians],
4 zemepisné jednotky [Surveyor´s Units].
presnosť je počet desatinných miest.
(angtos pi 2 5) → “200.00000g“
(angtos pi 0 4) → “180.0000d“

- prevod reťazca na premennú.
(read “A B2 C3 D“) → A
5. 3. Práca s reťazcami
V prípade staničenia “KM 124.62850“ z obr. 5.1 je ďalšou úlohou po prevode typu dát, spojiť dva texty “KM_“ a “124.62850“. Iným typom úlohy môže byť napríklad výber časti textu z reťazca “KM 124.6“. V tomto prípade chceme matematicky spracovávať staničenie 124.6.
Niektoré funkcie na prácu s reťazcami:
- spojenie dvoch textov.
(strcat “Auto“ “LISP“) → “AutoLISP“
(strcat “a“ “b“ “c“) → “abc“
alebo spojenie premennej typu text a textu:
(setq KMst “124.62850“)
(setq KMtxt (strcat “KM “ KMst)) → “KM 124.62850“

- zistenie dĺžky reťazca [String Length],
t.j. počet znakov.
(strlen “abcd“) → 4
(strlen “KM 124.62850“) → 12
(strlen “prvý“ “druhý“) → 9
Pozn. 1: Ak umiestnime text vľavo od osi komunikácie na obr. 5.1, určíme dĺžku textu dTXT = 1.2*N + D podľa počtu znakov N. Hodnota 1.2 je priemerná dĺžka jedného znaku v texte, ktorú si zvolíme, D je odsadenie textu od objektu. Alebo vložíme text zarovnaný vpravo.
Pozn. 2: Druhá možnosť využitia je pri zápise dát do dátového súboru do stĺpcov, nakoľko napríklad dĺžka dotyčnice môže byť 7.00, 70.00 alebo 700.00 m.
Doplnenie programu na zarovnanie desatinných bodiek hodnôt premenných, napríklad pre 10 znakov si uvedieme následne. Musíme zistiť dĺžku textu a pridať prázdne medzery “_“ pred text.
Časť programu na zarovnanie stĺpcov v dátovom súbore:
(setq do (getreal “\nZadajte dĺžku dotyčnice:“)) - dĺžka D0 je spravidla z výpočtu,
(setq doTXT (rtos do 2 3)) v našom prípade ju zadáme
(setq doDL (length doTXT)) priamo pomocou SETQ.
(setq n 10) - N je šírka stĺpca,
(while (<= (- n doDL)) v našom prípade 10 znakov.
(setq doTXT (strcat “ “ doTXT))
(setq doDL (+ doDL 1))
)
(setq f (open “Výsledky.dat“ “a“)) - uloženie premennej v textovom
(print doTXT f) tvare D0TXT do dátového
(close f) súboru funkciou PRINT.
- získanie podreťazca z reťazca.
(substr “Automobil“ 1 4) → “Auto“
(substr “AutoCAD“ 5) → “CAD“
(substr “KM 124.6“ 4 5) → “124.6“
5. 4. Funkcie na výpis údajov na obrazovku a do súborov
Na zapínanie a vypínanie textového okna v AutoCADe slúži tlačidlo F2. V prípade programu vytvoreného v AutoLISPe je programové zapínanie textového okna funkciami TEXTSCR a GRAPHSCR.

- zapnutie textového okna v AutoCADe.

- vypnutie textového okna v AutoCADe.
Pozn. 1: V prípade, že vlastníme dva monitory – textový a grafický, texty sú automaticky zobrazované aj na druhom monitore (textovom).
Text, ktorý chceme vypísať na obrazovke v mieste príkazového riadku alebo v textovom móde obrazovky, vypíšeme funkciou PROMPT.

- zobrazí výpis textu alebo výzvu
na obrazovku.
(prompt “\nVykreslenie bolo ukončené.“)
Všetky funkcie na výpis údajov na obrazovku a do súboru sú podobné. V prípade, že vynecháme časť “súbor“, výpis bude zobrazený na obrazovke od postavenia kurzora. Ak potrebujeme začať na novom riadku, použijeme špeciálne znaky “\n“.

- vytlačí výraz alebo obsah premennej do
súboru, ak je uvedená premenná pre súbor.
(princ “\nVýsledné súradnice bodu: “)
(princ “X= “) - výpis textu “X=“ na obrazovku,
(princ x) - výpis hodnoty premennej X na obrazovku,
(princ “ “) - výpis prázdnych znakov na obrazovku.
(princ “Y= “)
(princ y)
Do súboru uložíme, ak zadáme parameter pre súbor, napríklad F (kap. 6.1):
(setq f (open “VYSLEDKY.DAT“ “a“))
(princ “\nČB: “ f) - výpis textu “ČB: “ na nový riadok do súboru F,
(princ cb f) - výpis hodnoty premennej CB do súboru F,
(princ “ “ f) - výpis prázdnych znakov do súboru F.
(princ x f)
(princ “ “ f)
(princ y f)
(close f)
Pozn. 2: Dátový súbor F musí byť pred prácou otvorený funkciou OPEN (v tomto príklade súbor musí už existovať) a po práci uzatvorený funkciou CLOSE (kap. 6.1 a kap. 6.2).
Pozn. 3: Funkcie na tlač PRINT a PRIN1 sú podobné ako PRINC, ale vykonajú iný zápis dát. Napríklad PRINT vytlačí na nový riadok a pridá medzeru. Vyskúšajte si tú istú premennú vytlačiť do súboru viackrát pomocou PRINC, PRINT a PRIN1.