Úvod do programování v CAD



Podobné dokumenty
Hlavní užitečné funkce Visual LISPu jsou:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Programovací jazyk Pascal

VISUAL BASIC. Práce se soubory

Úvod do programování. Lekce 1

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z

DUM 06 téma: Tvorba makra pomocí VBA

AutoCAD nastavení výkresu

Algoritmizace a programování

3 Makra Příklad 4 Access Ve vytvořené databázi potřebuje sekretářka společnosti Naše zahrada zautomatizovat některé úkony pomocí maker.

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

Tabulkový procesor. Základní rysy

Paměť počítače. alg2 1

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Úvod do programu Solid Edge

Sada 1 - Základy programování

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

4a. Makra Visual Basic pro Microsoft Excel Cyklické odkazy a iterace Makra funkce a metody

Popis ovládání. Po přihlášení do aplikace se objeví navigátor. Navigátor je stromově seřazen a slouží pro přístup ke všem oknům celé aplikace.

Konvertor diakritiky 3. Instalace

Stručný návod k programu Octave

DATABÁZE MS ACCESS 2010

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM

VISUAL BASIC. Přehled témat

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

APS mini.ed programová nadstavba pro základní vyhodnocení docházky. Příručka uživatele verze

DATABÁZE A SYSTÉMY PRO UCHOVÁNÍ DAT 61 DATABÁZE - ACCESS. (příprava k vykonání testu ECDL Modul 5 Databáze a systémy pro zpracování dat)

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Nový způsob práce s průběžnou klasifikací lze nastavit pouze tehdy, je-li průběžná klasifikace v evidenčním pololetí a školním roce prázdná.

Reliance 3 design OBSAH

X36UNX 16. Numerické výpočty v sh příkazy expr, bc, dc. Zdeněk Sojka

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

2. cvičení z ZI1 - Excel

Střední odborná škola a Střední odborné učiliště, Hořovice

Uživatelský manuál. Aplikace GraphViewer. Vytvořil: Viktor Dlouhý

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

umenugr JEDNOTKA PRO VYTVÁŘENÍ UŽIVATELSKÝCH GRAFICKÝCH MENU Příručka uživatele a programátora

Algoritmizace a programování

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

AutoCAD definice bloku

Sada 1 - PHP. 03. Proměnné, konstanty

Nápověda k aplikaci EA Script Engine

1. Od Scheme k Lispu

MS Excel makra a VBA

Popis programu EnicomD

ALGORITMIZACE A PROGRAMOVÁNÍ

5 Přehled operátorů, příkazy, přetypování

ČÁST 1. Základy 32bitového programování ve Windows

1. Úvod do obsluhy AutoCADu

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Postupy práce se šablonami IS MPP

NOVINKY v PROGRAMU DOCHÁZKA ADS

Novinky. Autodesk Vault helpdesk.graitec.cz,

První kroky s METEL IEC IDE

ZÁPOČTOVÁ PRÁCE z UIR

Program pro tvorbu technických výpočtů. VIKLAN - Výpočty. Uživatelská příručka. pro seznámení se základními možnostmi programu. Ing.

PROGRAMOVÁNÍ V SHELLU

FUNKCIONÁLNÍ A LOGICKÉ PROGRAMOVÁNÍ 3. CVIČENÍ

NPRG030 Programování I, 2016/17 1 / :58:13

Sada 1 - Základy programování

Úvod do programovacích jazyků (Java)

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

PSK3-9. Základy skriptování. Hlavička

Semestrální práce 2 znakový strom

Systém je citlivý na velikost písmen CASE SENSITIVE rozeznává malá velká písmena, např. PROM=1; PROm=1; PRom=1; Prom=1; prom=1; - 5 různých proměnných

NPRG030 Programování I, 2010/11

2 PŘÍKLAD IMPORTU ZATÍŽENÍ Z XML

Č í sla slovy 1.3. verze dokumentu: vytvořil: Ing. Pavel Randák předmět: Uživatelský manuál vydavatel: Austro-Bohemia, s.r.o.

Lekce 01 Úvod do algoritmizace

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

zobrazuje názvy polí, vložené hodnoty jednotlivých záznamů, lze v něm zadávat data (přidávat záznamy) v návrhovém zobrazení:

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

10 Algoritmizace Příklad 2 Word 2007/ VBA

3 Makra Příklad 4 Access Ve vytvořené databázi potřebuje sekretářka společnosti Naše zahrada zautomatizovat některé úkony pomocí maker.

Proměnné a parametry. predn_08.odt :00:38 1

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

1 Uživatelská dokumentace

Odborný garant: Doc. Ing. Miroslav Píška, CSc.

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

SignEditor 1 - návod k použití

1. Uživatelská úprava příkazů II.

Bloky, atributy, knihovny

1. Uživatelská úprava příkazů I.

Access. Tabulky. Vytvoření tabulky

Formátové specifikace formátovací řetězce

Programování v jazyku LOGO - úvod

Vstupní požadavky, doporučení a metodické pokyny

Programy na PODMÍNĚNÝ příkaz IF a CASE

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

6. Příkazy a řídící struktury v Javě

Psaní programu pro PLC SIMATIC S7-300 pomocí STEP 7

Kurz LSL skriptování. Shiny Iceberg 2009

Základy algoritmizace a programování

Transkript:

TECHNICKÁ UNIVERZITA V LIBERCI Fakulta strojní Katedra částí a mechanizmů strojů Doc. Ing. Ladislav Ševčík, CSc. Úvod do programování v CAD Visual LISP, Visual Basic, JAVA, Pro/PROGRAM pro AutoCAD, Inventor, Pro/Engineer Liberec 2002

Doc. Ing. Ladislav Ševčík, CSc. ISBN:

Předmluva Málokterý z oborů se tak rychle vyvíjí jako programování a počítače. Dnes je všeobecně známo, že programátory musí být lidé mladí, aby stihli vstřebat všechny informace a mohli aktivně programovat. Říká se, že jejich šance být špičkovými programátory je dnes do pětadvaceti let věku. Specializovaní programátoři mají šanci větší, neboť do svých programů mohou zahrnout i zkušenosti z oboru. Tak i morální životnost těchto skript bude delší než životnost skript samotného jazyka. Děkuji vedoucímu Katedry částí a mechanismů strojů doc. Ing. Zdeňku Pustkovi, CSc. za vytvoření optimálních pracovních podmínek pro napsání těchto skript. Dále děkuji vedení Technické univerzity v Liberci a děkanátu Fakulty strojní za jejich vydání. V Liberci 18.7.2002 autor

Programování v CAD Obsah Obsah: 1 ÚVOD DO PROGRAMOVÁNÍ V CAD SYSTÉMECH...9 2 ÚVOD DO JAZYKA AUTOLISP...11 2.1 Základní typy dat v AutoLISPu... 12 2.2 Konvence zápisu... 12 2.3 Proměnné v programu... 12 2.4 Jak sestavit program... 13 2.4.1 Lexikální konvence... 13 2.5 Prostředí Visual LISPu... 14 2.5.1 Spuštění editoru Visual LISPu... 14 2.5.2 Základní funkce prostředí Visual LISPu... 14 2.5.3 Kompilace souborů... 15 2.5.4 Spuštění zkompilovaného souboru... 18 2.5.5 Práce s více soubory psanými v jazyce LISP... 18 2.6 Funkce AutoLISPu... 20 2.6.1 Matematické operace... 20 2.6.2 Porovnávací funkce... 22 2.6.3 Binární logika... 25 2.6.4 Booleovské funkce... 27 2.6.5 Funkce přiřazení... 27 2.6.6 Funkce rozhodování... 28 2.6.7 Konverzní funkce... 29 2.6.8 Funkce vstupů... 31 2.6.9 Funkce výstupů... 35 2.6.10 Funkce pro práci s řetězci... 38 2.6.11 Funkce pro práci se seznamy... 39 2.6.12 Funkce měřící a konstrukční... 42 2.6.13 Funkce pro práci se soubory a adresáři... 43 2.6.14 Funkce ve spojeni s AutoCADem... 44 2.6.14.1 Kreslení v AutoCADu... 44 2.6.14.2 Další funkce spojené s AutoCADem.... 47 4

Programování v CAD Obsah 2.6.14.3 Příkazy pro práci se seznamem jmen... 55 2.6.15 Funkce, podprogramy, lokální a globální proměnné... 57 2.6.16 Menu... 59 2.6.17 Přístup k entitám a zařízením... 60 2.6.17.1 Funkce pracující s výběrovými množinami... 60 2.6.17.2 Funkce operující se jmény entit... 63 2.6.17.3 Funkce operující s daty entit... 64 2.6.17.4 Funkce operující s rozšířenými daty entit... 67 2.6.17.5 Přístup k tabulkám symbolů... 68 2.6.17.6 Přístup ke grafické obrazovce a ke vstupním zařízením... 69 2.7 Příkazy dialogového panelu... 70 2.7.1 Funkce pro tvorbu dialogových panelů... 70 2.7.2 Funkce pro práci s dialogovými panely... 73 2.7.3 Ukázka definování dialogového panelu... 80 2.7.4 Ukázka spojení dialogového panelu se LISPovským souborem... 81 2.8 Prostředí ActiveX v AutoLISPu a Visual LISPu... 83 2.8.1 Funkce ActiveX v AutoLISPu... 83 2.8.2 Klíč jmen funkcí... 84 2.8.3 Použití funkcí ve Visual Basicu... 85 2.8.4 AutoLISP syntaxe:... 85 2.8.5 Funkce prostředí ActiveX v AutoLISPu... 86 2.8.5.1 Konverze dat z AutoLISPu na ActiveX data... 86 2.8.5.2 Zabezpečená pole... 87 2.8.5.3 Změna a zobrazení vlastností objektu... 88 2.8.5.4 Změna vlastností objektu... 89 2.8.5.5 Krátký příklad programu s funkcemi ActiveX:... 91 2.9 Reaktory... 92 3 VISUAL BASIC A PROGRAMOVÁNÍ V CAD APLIKACÍ...97 3.1 Úvod do Visual Basicu... 97 3.1.1 Spuštění Visual Basicu v AutoCADu... 97 3.1.2 Spuštění Visual Basicu v Inventoru... 98 3.2 Základy jazyka... 98 3.2.1 Základní pojmy z VBA... 98 3.2.2 Vytváření cyklů... 105 3.2.3 Větvení programu... 107 5

Programování v CAD Obsah 3.2.4 Dialogy... 108 3.2.5 Procedury a funkce... 109 3.2.6 Vlastnosti... 112 3.2.7 Události... 113 3.2.7.1 Příklad spojení VBA a prostředí AutoCADu... 116 3.2.8 Rozdíly mezi standardním modulem a modulem třídy... 117 3.2.8.1 Vytvoření třídy v modulu třídy... 117 3.2.9 Vytvoření vlastní třídy... 119 3.2.9.1 Použití vlastní třídy objektu... 120 3.2.9.2 Použití vlastní třídy... 122 3.2.10 Formulář... 123 3.2.10.1 Funkce, objekty, vlastnosti a události ve formuláři... 123 3.2.10.2 Vlastnosti prvků formuláře... 125 3.2.10.3 Události ve formuláři... 127 3.3 Práce s objekty - kolekce... 129 4 ZÁKLADY PROGRAMOVÁNÍ V PRO/ENGINEERU...132 4.1 Pro/PROGRAM... 132 4.1.1 O používání Pro/PROGRAMu... 132 4.1.2 Nabídka which design... 132 4.1.3 Jak prohlížet konstrukci modelu... 133 4.1.4 Editace modelu... 133 4.1.5 Relace... 134 4.1.6 Vstupní parametry... 134 4.1.7 Vkládání výzev... 134 4.1.8 Podmíněné příkazy... 135 4.1.9 Operace s prvky... 135 4.1.9.1 Potlačení prvků součástí nebo sestav... 135 4.1.9.2 Přeuspořádání a vymazání prvků... 135 4.1.9.3 Úprava rozměrů prvku... 136 4.1.9.4 Použití komentářů... 136 4.1.9.5 Editace chyb... 136 4.1.10 Zahrnutí změn do modelu... 137 4.1.10.1 Zadávání hodnot vstupních proměnných... 137 4.1.10.2 Výběr a změna vstupních parametrů... 137 4.1.11 Chyby při provádění programu... 138 4.1.12 Chyby prvků... 138 6

Programování v CAD Obsah 5 JAVA & PRO/ENGINEER...140 5.1.1 Základní rysy jazyka Java... 140 5.1.2 Klíčová slova JAVA... 142 5.1.3 Řídící příkazy... 143 5.1.4 Instalace vývojového balíku Javy... 143 5.1.4.1 Instalace vývojového balíku Javy z CD-ROM... 143 5.1.4.2 Stažení vývojového balíku Javy z Internetu... 145 5.1.5 Typy souborů... 145 5.1.6 Kompilace souborů Javy pomocí kompilátoru javac... 146 5.1.6.1 Kompilátor javac... 147 5.1.7 Kompilace zdrojových souborů Javy pod Windows a Unix... 148 5.1.7.1 Spuštění aplikace Javy... 148 5.1.8 Soubory typu třída... 149 5.1.8.1 Soubor classes.zip... 150 5.1.9 Nastavení J-Link... 150 5.1.9.1 Nastavení na počítači... 151 5.1.9.2 Nastavení J-Link programu... 152 5.1.9.3 Spouštění aplikace... 153 5.1.9.4 Spojení a běh J-Link aplikace s modelem... 154 5.2 Přehled programovacích objektů... 156 5.2.1 Objekty modelu... 157 5.2.2 Deskriptory... 157 5.2.3 Operace s modelem... 158 5.2.4 Vytvoření solid prvků pomocí objektů... 159 5.2.4.1 Informace o solidovém modelu... 159 5.2.5 Vlastnosti... 159 5.2.6 Metody pro part... 161 5.2.7 Geometrické termíny... 163 5.2.7.1 Typy hran... 163 5.2.7.2 Typy ploch... 164 6 DOPORUČENÁ LITERATURA...165 7 PŘÍLOHY...166 7.1 Tabulka srovnání funkcí jazyka AutoLISP a VB... 166 7.2 Příklad použití reaktorů... 174 7.2.1 Reaktor objektu... 174 7

Programování v CAD Obsah 7.2.2 Reaktor databáze... 175 7.2.3 Reaktor editoru... 176 7.3 Příklad kolekce pro vykreslení čtyřúhelníka... 179 7.4 Ukázka Programu Java a Pro/Engineer... 181 7.5 Pro/PROGRAM - příklady... 186 7.5.1 Příklad 1... 186 7.5.2 Příklad 2... 192 7.5.3 Příklad 1 sestava... 195 8

Programování v CAD Úvod 1 Úvod do programování v CAD systémech Text je psán se zaměřením na CAD systémy: AutoCAD, AutoDESK Inventor, Pro/Engineer. A programovací jazyky: AutoLISP,(Visual Lisp), Visual Basic, JAVA, Pro/PROGRAM a prostředí ActiveX. Programování v CAD Proč programovat v CAD? Většina aplikací a to aplikací z různých oborů lidské činnosti, které jsou a byly napsány pro počítače jakéhokoliv typu dovolují uživateli vystavět vlastní programové zázemí, kterým lze doplnit vlastní speciální funkce charakteristické pouze konkrétnímu uživateli nebo skupině uživatelů. Za druhé existence programovacích jazyků umožňuje rutinní postupy automatizovat a tak zvýšit produktivitu práce s daným programovým produktem. Pokud by existoval profesionální softwarový balík bez možnosti přizpůsobení uživateli, byl by určen k zániku. Příkladem je nejznámější kancelářský software Microsoft Office, kde každý jednotlivý program má možnost psaní maker v programovacím jazyku Visual Basic. CAD programy podporují i několik možností programování. Např. AutoCAD lze programovat v následujících programovacích jazykách: AutoLISP, C jazyk, Visual Basic, Diesel skript. Programování v Pro/Engineeru podporuje programování v jazyce JAVA, C jazyk, Pro/PROGRAM a skript. Většina aplikací napsaných pro CAD systémy a které se v tomto textu vyskytují, zpracovávají databázové nebo grafické informace. Skripta slouží jako podklad pro cvičení a přednášky z předmětu Programování v CAD. Zároveň skripta je možné využít v samostatném studiu jako návod na programování v CAD aplikacích a to zejména v AutoCADu, Inventoru a Pro/Engineeru. Jsou určena pro konstruktéry, návrháře, architekty a další uživatele CAD systémů, kteří si chtějí vytvořit svoji vlastní aplikaci. Texty skript obsahují seznam příkazů jazyka AutoLISP setříděný do kapitol podle funkční podobnosti, návod na tvorbu vlastního programu v AutoLISPu, použití prostředí Visual LISPu v AutoCADu 2000. S AutoLISPem lze snadno programovat uživatelské aplikace a jednoduše přistupovat k databázi entit modelu nebo výkresu. LISP je součástí pouze AutoCADu a CAD aplikací postavených na AutoCADu jako 9

Programování v CAD Úvod je např. Mechanical Desktop. Bohužel v českých verzích CAD programů firmy AutoDESK se překlad jazyka AutoLISP od verze AutoCADu 14 neprovádí. Rada je pouze v anglickém jazyce. Dále je jedna kapitola věnována problematice prostředí ActiveX v CAD aplikaci AutoCAD. Funkce ActiveX lze použít v mnoha programovacích jazycích, ale v následném textu byly použity ve spojení s AutoLISPem a Visual Lispem. Univerzálnější programovací prostředí podporované především v aplikacích majících certifikát Microsoft Office se běžně k tvorbě vlastních programů používá Visual Basic. Jeho předností je objektové programování. Podpora CAD systémů od firmy AutoDESK je pro Visual Basic dostatečná pro snadné a rychlé programování. V textu jsou uvedeny základní termíny z objektového programování, vysvětlena stavba programu a uvedeny základní funkce CAD systémů. Nejsou zde ale popisovány funkce Visual Basicu, neboť na rozdíl od AutoLISPu existuje česká rada. Obecné postupy a základy programování ve Visual Basicu lze získat z velkého množství populárních publikací. Součástí též nejsou procedury, funkce, objekty jazyka Visual Basic v prostředí Inventoru a AutoCADu. O nich se lze dovědět z help souborů vydaných k dané verzi. V předposlední části je uveden návod, jak lze pomocí Pro/PROGRAMu vytvořit program, který řídí vytváření součásti nebo sestav editováním dat parametrických modelů v Pro/Engineeru. S využitím Pro/PROGRAMu můžete navrhnout modely s podobnými charakteristikami, které budou splňovat zvolená konstrukční kritéria. Každý model Pro/Engineeru obsahuje popis hlavních konstrukčních kroků a parametrů. Tento popis modelu lze editovat tak, že bude pracovat jako program. Po spuštění programu pak může uživatel měnit model podle nového konstrukčního zadání. V poslední části jsou základy nastavení prostředí v Pro/Engineeru a to pro programování v jazyce JAVA a v jednoduchém programovacím nástroji Pro/PROGRAM. Součástí textu není výuka programovaní v jazyce JAVA, pouze vlastní nastavení a přizpůsobení prostředí Pro/Engineera. Součástí též nejsou procedury, funkce, objekty jazyka JAVA v prostředí Pro/Engineera. 10

Programování v CAD AutoLISP, Visual LISP 2 Úvod do jazyka AutoLISP LISP jako programovací jazyk vznikl okolo roku 1960. Nejedná se tedy o žádnou novinku. Používá se nejen pro AutoCAD, ale je možnost použití například pod Linuxem V. AutoLISP je součástí AutoCADu od verze 2.1 (1980) a vypadá to, že bude jeho součástí i nadále. Má totiž spoustu výhod a je v něm napsáno nejenom nezměrné množství utilit, ale i část vlastního AutoCADu. Viz. adresář 'Support' - editace kót, export atributů, filtr entit a další. Proč tedy nevyužít možnosti a taky něco přidat. Proč AutoLISP? Proč si nevybrat jiný programovací prostředek když AutoCAD nabízí hned několik řešení? Od nejjednoduššího skriptovacího jazyku pro *.src soubory přes DIESEL (zejména pro menu a ikony) Visual Basic for Aplicaton až po Visual C++. Další jazyky jsou samozřejmě možné, ale ne zrovna podporované. AutoLISP nabízí několik výhod, jako jso zejména: 1. LISP vyniká v práci s množstvím nesourodých objektů v různě velkých skupinách, což je právě ten typ dat, se kterým CAD systémy pracují. 2. Jednoduchou syntaxi, naprosto nejjednodušší práci s proměnnými (není nutno předem definovat typy a jména proměnných), jednoduchost vytváření konečného programu (není nutná kompilace). 3. Vždy dostupný editor v němž píše tisíce lidí na celém světě a je možno najít spousty rutin na Internetu. 4. Patří mezi nejjednodušší jazyky jak pro zvládnutí tak pro výuku. 5. Pro neobyčejně jednoduchou syntaxi je LISP nenáročný na paměť a lze jej snadno implementovat. 6. Modifikuje AutoCAD. Seznamy (anglicky list) a operace s nimi jsou základem práce v jazyku LISP. Odsud i jméno jazyka LISt Processing, zpracování seznamů. Seznam je skupina elementů (dat) jakéhokoliv typu, která je uzavřena v kulatých závorkách. Každý výraz v AutoLISPu je seznamem a každý program v AutoLISPu je seznamem. A tedy při psaní programu se používá značné množství kulatých závorek a tak lze s nadsázkou ocenit neoficiální význam zkratky LISP (tj. Lost In Stupid Parenthesis). V této kapitole je proveden pouze stručný popis příkazu jazyka AutoLISP a příklady použití. Je zde též uveden orientační návod práce s jazykem Visual LISP. Podrobnější informace o AutoLISPu lze získat buď z uživatelské příručky, Rady k AutoLISPu a nebo např.. z publikace L. Molnára a P. Návrata: Programovanie v jazyku LISP. Alfa, Bratislava 1988, dále z knih psaných v Anglickém jazyce např.: Rod R. Rawls - Mark A. Hagen: Autolisp Programming: Principles and Techniques. Goodheart-Willcox Co 1998, nebo P. M. Moanfeldt: Introduction to AutoCAD. 11

Programování v CAD AutoLISP, Visual LISP Pretince Hall, 1996. Anebo desítky dalších knih publikovaných ve světě s touto tématikou. Vývoj programu v AutoLISPu začíná myšlenkou automatizace nějakého aspektu AutoCADu. Může se jednat o zrychlení opakované kreslicí funkce či o zjednodušení složitých sérií operací. V AutoLISPu se nedeklarují proměnné na začátku programu, funkce či procedury. Jazyk si typ proměnné přiřadí sám dle její hodnoty. 2.1 Základní typy dat v AutoLISPu typ příklad -seznamy '(1 a 20) -symboly a b % $ -řetězce "TO JE ŘET." -reálná čísla 3.0 -integerová čísla 7 -entity AutoCADu objekty (přímky...) -výběrové množiny AutoCADu několik vybraných objektů (např. CROSSING) -atomy čísla a řetězce, které jsou součástí seznamu -body jsou seznamy dvou nebo tří atomů (3.0 8.6) (3.0-8.4 5.0) 2.2 Konvence zápisu Příkazy musí být uzavřeny v kulatých závorkách. Proměnné se předem nedeklarují. Nastavují se podle typu čísla, které je jim přiřazeno jako první. Např.: (setq i(+ 3.0 4.5)), proměnná i bude typu reálného čísla. 2.3 Proměnné v programu Proměnná je pojmenovaný úsek operační paměti. Je jednoznačně určena svým jménem a má proměnný obsah. Jméno proměnné musí být sestava znaků začínající písmenem a následně mohou být jakékoliv tisknutelné znaky. Délka jména není 12

Programování v CAD AutoLISP, Visual LISP omezena. Hodnoty proměnných se vztahují k danému výkresu. Ukončením editace výkresu se hodnoty proměnných ztrácejí, nejsou do výkresu při jeho ukládání zapisovány. 2.4 Jak sestavit program 1. V AutoCADu se nastaví LISP na ON, platí pro AutoCADy do verze 12. 2. Spustí se editoru Visual LISPu, nebo se zajistí spuštění nějakého textového editoru např. poznámkový blok (notepad), Windows Commanderu, editor jakéhokoliv programovacího jazyku aj. 3. V editoru se vytvoří soubor. 4. Dodržuje se konvence zápisu, používají se dovolené příkazy a funkce. 5. Soubor ACAD.LSP a jeho využívání není povinné, lze však do něho předdefinovat některé často použivatelné nebo samo spustitelné funkce jako např. funkci CLEAN, která po zavolání smaže všechny LISPovské funkce z paměti počítače nahrané po ni. Tuto funkci je užitečné dopsat do ACAD.LSP. (defun C:CLEAN (/ i item) (setq i 0) (while (not (equal (setq item (nth i atomlist)) 'C:CLEAN)) (if (= (type (eval item)) 'FILE) (close (eval item))) (setq i (1+i)) ) (setq atomlist (member 'C:CLEAN atomlist)) 'DONE ) 2.4.1 Lexikální konvence - Jména proměnných se mohou sestávat z libovolné posloupnosti tisknutelných znaků vyjma ( ),.! " '; - Následující znaky ukončují jméno proměnné nebo číselnou konstantu ( ). " ' ; - Výrazy mohou zabírat více řádků - Více mezer mezi symboly je ekvivalentní jedné mezeře. Toho lze použít proto, aby byly funkce lépe čitelné - AutoLISP nerozlišuje velká a malá písmena u jmen proměnných a funkcí. Jména proměnných by neměla začínat číslicí. 13

Programování v CAD AutoLISP, Visual LISP - Celočíselné konstanty mohou začínat znaménkem + nebo -, jejich rozsah je -32768, +32767 -Reálné konstanty se sestávají z jedné nebo více číslic, které jsou následovány desetinnou tečkou a jednou nebo více číslicemi. Reálná čísla mohou být vyjádřena ve vědeckém tvaru, mohou obsahovat "E" nebo "e" následované exponentem. -Znakové řetězce jsou posloupnosti znaků uzavřené do uvozovek. V rámci řetězců je znak (\) užíván pro začlenění řídících znaků : \\ má význam "\" \e má význam znaku escape \n má význam znaku nová řádka \r má význam znaku return \t má význam znaku tabulátor \nnn má význam znaku, jehož oktanový kód je nnn Například následující příkaz zapíše výzvu na nový řádek. (prompt "\nzadej první bod : ") -Do programu lze psát komentáře, které začínají středníkem. -Zadá-li se! před jménem proměnné na příkazovém řádku AutoCADu, vypíše se její obsah. 2.5 Prostředí Visual LISPu Programování ve Visual LISPu je v podstatě shodné s programováním ve AutoLISPu. Odlišnost je zejména v prostředí, ve kterém se program píše. Pro psaní programu ve Visual LISPu nepotřebujete žádný editor. Visual LISP obsahuje stejný editor jako rodina programovacích jazyků s názvem Visual jako např. Visual Basic, Visual C Prostředí Visual LISPu je uživatelsky přívětivé a v současné době je doporučeno vytvářet aplikační programy v tomto prostředí. 2.5.1 Spuštění editoru Visual LISPu Visual LISP lze spustit buď z roletového menu Nástroje, AutoLISP, Editor Visual LISP, anebo na výzvu AutoCADu Příkaz: zadejte v příkazovém řádku vlisp pro spuštění editoru Visual LISPu. 2.5.2 Základní funkce prostředí Visual LISPu Příkazy prostředí lze zadávat z roletového menu nebo ikonových menu. Příkazy v roletovém menu jsou standardně uspořádány. Pod roletou soubor lze vytvořit, otevřít, uložit jednotlivý soubor AutoLISPu, nebo vytvořit Projekt. Projekt Visual LISPu nabízí pohodlný způsob správy jednotlivých souborů tvořících aplikaci. 14

Programování v CAD AutoLISP, Visual LISP Příkazy pro práci s projektem jsou v roletovém menu projekt. Příkaz uložit v roletovém menu soubory ukládá i celý projekt. Pomocí této funkce lze otevřít jeden projektový soubor místo otevírání všech souborů LISPu dané aplikace. Jakmile je projekt otevřen, můžete se přesunout do jeho dílčích souborů pouhým poklepáním. 2.5.3 Kompilace souborů Pro běh programu napsaného v jazyce LISP není nezbytně nutné provádět kompilaci. Kompilování se provádí většinou pro zjednodušení práce se soubory, pro zjednodušení spouštění aplikací a pro ochranu vašeho Know How. VLISP umožňuje několik přístupů ke kompilaci podle toho, zda se kompiluje jeden, nebo více LISPovských souborů. Zkompilováním vytvořte binární soubor. Pro kompilaci jediného souboru se používá funkce vlisp-compile. Ke kompilování několika lispovských souborů do jediného potom Make Application wizard. Jestliže se kompilování provádí na sadě lispovských souborů, doporučuje se použití jednotného zařízení ke kompilaci project management. Project manager umožňuje: 1. zkontrolovat, které soubory v LISPu byly v aplikaci změněny a automaticky rekompilovat pouze tyto soubory 2. zjednodušit přístup ke zdrojovým souborům vytvořením seznamu všech zdrojových souborů 3. nalézt části programu hledáním zadaného řetězce, když není známo, který zdrojový soubor obsahuje hledaný text. VLISP omezuje hledání na soubory obsažené v daném projektu. Zapsání sady kompilovaných souborů do jediného dovoluje soubor optimalizovat, tzn. zajistit vyšší ochranu souborů proti přepsání, tj. možnému znehodnocení. Probíhá-li kompilace standardním způsobem (neoptimalizovaným binárním kódem) VLISP nemění symboly jmen funkcí a globálních proměnných, protože ty mohou být užity i v jiných aplikacích. Při kompilaci s optimalizací VLISP přibírá všechny soubory obsažené v programu a vkládá je do jednoho společného. To dovoluje přepsat i jména funkcí a proměnných. Při kompilaci dává VLISP uživateli zprávy o průběhu každé fáze kompilace v Build Output Window. Je-li kompilace úspěšná, objeví se zpráva ;Compilation complete. 15

Programování v CAD AutoLISP, Visual LISP Typy souborů, užívaných VLISPem, potřebné při kompilaci Přípona typ souboru popis.lsp program AutoLISPu Soubor obsahující nekompilovaný program AutoLISPu..fas kompilovaný soubor Soubor vzniklý kompilací souboru AutoLISPu v jazyce LISP. Může být načten a spuštěn, nebo kompilován do VLX modulů. Tyto soubory se načtou mnohem rychleji než zdrojové soubory LISPu a jsou bezpečnější, protože jejich obsah je uživateli skryt..dcl soubor dialogového Obsahuje definici dialogového okna AutoCADu okna. VLISP může tyto soubory zobrazit a mohou být vloženy do.vlx souborů. Funkce užívaná pro kompilaci Funkce užívaná pro kompilaci souboru v jazyce LISP se nazývá vlisp-compile. Její syntaxe je: kde (vlisp-compile mode filename [ out_filename ]), mode je symbol určující typ kompilace, filename je řetězec jména zdrojového souboru a out_filename nepovinný řetězec jména zkompilovaného výstupního souboru. Potom mode Nabývá hodnot st lsm lsa význam standardní způsob kompilace optimalizované a nepřímé spojení optimalizované a přímé spojení Standardní způsob vytváří nejmenší výstupní soubor a je vhodný pro aplikace obsahující jediný soubor. Volba optimalizační je vhodná i pro aplikace sestávající se z více souborů. Základní funkce optimalizace jsou následující: 1. Přímé volání funkcí zkompilovaného souboru. Tento prvek zlepšuje výkonnost kompilovaného programu a chrání ho proti přepsáním uživatelem. 2. Pojmenování funkcí pro vytvoření bezpečnějšího kompilovaného programu a zmenšení velikosti programu a času potřebného pro jeho nahrání a spuštění. 16

Programování v CAD AutoLISP, Visual LISP 3. Pojmenování lokálních proměnných. I toto přispívá ke znesnadnění přepsání uživatelem. Dále filename Tento argument v syntaxi funkce vlisp-compile označuje jméno souboru v jazyce LISP, který má být kompilován. Při kompilaci souboru umístěného podle obr.2 stačí napsat pouze jméno_souboru.lsp. Jestliže je kompilovaný soubor umístěn jinde, je nutné napsat celou cestu k tomuto souboru. Cesta se hledá v roletovém menu: Nástroje, Možnosti Soubory => Cesta k podpůrným souborům a nakonec [ out_filename ]. Tento nepovinný argument označuje jméno souboru, pod kterým bude zkompilovaný soubor uložen. Jestliže nebude uveden, VLISP vytvoří zkompilovaný soubor stejného jména jako je filename, ale s příponou.fas. Tento zkompilovaný soubor uloží do instalačního adresáře AutoCADu. Bude-li uvedeno jen jméno_výstupního souboru, VLISP vytvoří v instalačním adresáři AutoCADu soubor s tímto jménem a příponou.fas. Aby byl zkompilovaný soubor umístěn jinde je nutné, aby místo out_filename byla napsána celá cesta ke zkompilovanému souboru. 17 Obr. 2-1. Nastavení cest k podpůrným souborům

Programování v CAD AutoLISP, Visual LISP Příklad zápisu (vlisp-compile 'st "sinusovka.lsp") Standartní způsob kompilace souboru sinusovka.lsp, který je umístěn podle. Bude vytvořen soubor sinusovka.fas ve stejném adresáři. Příkazem (vlisp-compile 'st "c:/program files/autocad T/Sample/VisualLISP/sinusovka.lsp") Standardní způsob kompilace souboru sinusovka.lsp, který je umístěn podle napsané cesty. (vlisp-compile 'st "sinusovka.lsp" "Krivky.fas") Standardní způsob kompilace souboru sinusovka.lsp, soboru, který je umístěn v implicitním adresáři Bude vytvořen soubor Krivky.fas ve stejném adresáři. (vlisp-compile 'st "sinusovka.lsp" "c:/programfiles/.../sample/visuallisp/krivky") Standardní způsob kompilace souboru sinusovka.lsp. Bude vytvořen soubor Krivky.fas a umístěn podle zadané cesty. 2.5.4 Spuštění zkompilovaného souboru Zkompilované soubory mohou být načteny a spuštěny z okna VLISPu zvaného Konzola, z příkazové řádky AutoCADu i pomocí roletového menu Nástroje, Načíst aplikaci. Postup spuštění v Konzoli VLISPu, nebo na příkazovém řádku: 1. Načtení zkompilovaného souboru. (load "c:/program files/acad2000/sample/visuallisp/krivky.fas") 2. Zadání jména funkce, kterou chci spustit. (sinusovka) v případě definice v programu: (defun sinusovka () ) (C:sinusovka) v případě definice v programu: (defun C:sinusovka () ) 2.5.5 Práce s více soubory psanými v jazyce LISP Programy ve VLISPu lze psát dvojím způsobem: 1. Psát vše do jediného souboru tak, jak to jde popořádku. 2. Použít vložené funkce. Bod 1 se používá pro jednoduché a krátké programy. 18

Programování v CAD AutoLISP, Visual LISP Bod 2 se používá pro komplikované programy. Je to z důvodu přehlednosti zápisu. Vložené funkce mohou být definovány přímo v souboru hlavního programu, nebo mohou být definovány v samostatných souborech. Důležité je, aby byly při spuštění programu načteny. Při definování vložených funkcí přímo v hlavním programu nezáleží na pořadí v jakém jsou definovány, ani na tom zda jsou definovány před nebo za hlavním programem. Vložené funkce definované v samostatných souborech mohou být použity ve více programech. Hlavní program může být definován dvěma způsoby: (defun C:jméno_hlavního_programu (). ) (defun jméno_hlavního_programu (). ) Syntaxe definice vložené funkce je: (defun C:jméno_vložené_funkce (). ) (defun jméno_vložené_funkce (). ) Volání vložené funkce v hlavním programu se děje zápisem: (C:jméno_vložené_funkce) (jméno_vložené_funkce) pro první způsob definice pro druhý způsob definice 19

Programování v CAD AutoLISP, Visual LISP 2.6 Funkce AutoLISPu AutoLISP obsahuje mnoho definovaných a předdefinovaných funkcí. Každou funkci lze vyvolat jedním jménem jako prvním prvkem seznamu a dále argumenty této funkce (jsou-li) jako následnými prvky seznamu. Lze vytvořit vlastní funkce pomocí příkazů AutoLISPu. Dále je uveden seznam základních funkcí a jejich stručný popis. Seznam funkcí je platný pro AutoCADu do verze 2002. Funkce jsou zařazeny dle oblasti použití a seřazeny abecedně a většinou doplněny jednoduchým výstižným příkladem: 2.6.1 Matematické operace Veškeré funkce v AutoLISPu mají standardní formát. Nejdříve je jméno funkce a pak její argumenty. Sečtení dvou čísel vypadá následovně: (+ 10 15). Tento způsob zadávání se nazývá obrácená, nebo polská logika. Nevypadá na první pohled přirozeně, ale tato vlastnost bude s výhodou použita při práci s AutoCADem. V této sekci jsou příkazy pro provedení základních algebraických funkcí, logaritmických a goniometrických funkcí funkce arcus sinus a arcus cosinus nejsou definovány ve většině programovacích jazyků. Odvozují se z arcus tangens a konstanta pi. (+ číslo číslo...) Součet (+ 1 2.0) vrací 3.0. (- číslo [číslo]...) Rozdíl čísel nebo záporné číslo (-6) vrací -6, (- 10 4) vrací 6. (* číslo [číslo]...) Součin (* 3 4.5) vrací 13.5. (/ číslo [číslo]...) Podíl (/ 10 3) vrací 3, (/ 100 20.0 2) vrací 2.5. 20

(1+číslo) Vrací číslo o 1 větší. (1-číslo) Vrací číslo o 1 menší. Programování v CAD AutoLISP, Visual LISP (abs číslo) Vrací absolutní hodnotu čísla. (atan číslo1 [číslo2]) Vrací arkustangens čísla1 v radiánech, nebo arkustangens podílu čísla1 a čísla2. Pokud je číslo2 rovno 0 vrací 1.570796. (cos úhel) Vrací kosinus úhlu v radiánech. (exp číslo) Vrací základ přirozeného logaritmu a umocněný na číslo (exp 1.0) vrací 2.71828. (expt základ mocnina) Vrací hodnotu základu umocněnou na hodnotu mocnina (expt 2 4) vrací 16. (lambda argument výraz...) Definuje anonymní funkci, která je pouze dočasná. Tato funkce se použije tehdy, když není možno použít definici nové funkce. Také to zprůhledňuje záměr programátora při umísťování funkcí na místo, kde jsou použité. Tato funkce vrací poslední hodnotu svého argumentu výraz a je často používána s funkcí apply a/nebo mapcar pro aplikaci funkce na seznam. argument - argumenty přiřazené výrazu výraz - výraz AutoLISPu (apply '(lambda (x y z) (* x (- y z)) ) a nebo 21

Programování v CAD AutoLISP, Visual LISP (setq counter 0) (mapcar '(lambda (x) (setq counter (1+ counter)) (* x 5) ) (log číslo) Vrací hodnotu přirozeného logaritmu reálného argumentu číslo. (log 4.5) vrací 1.50408. pi Nejedná se o funkci, ale o konstantu pí. (sin úhel) Tato funkce vrací hodnotu funkce sinus argumentu úhel, který je v radiánech. (sqrt číslo) Funkce vrací druhou odmocninu z reálného argumentu číslo. 2.6.2 Porovnávací funkce V této sekci jsou funkce pro porovnání hodnot čísel, jako je menší, větší, rovno.dále příkazy pro zjištění shody hodnot a existence hodnot, typ hodnot Dále jsou zde funkce pro hledání minima či maxima z čísel, největšího společného dělitele čísel, zbytku po dělení, absolutní hodnoty. (= atom atom...) Je rovno (= 4 4.0) vrací T, (= "on" "ty") vrací nil. (/= atom atom...) Není rovno. (< atom atom...) Menší než. (< 10 20) vrací T, (< "b" "c" "e") vrací T. 22

(<= atom atom...) Menší nebo rovno než. (> atom atom...) Větší než. (>= atom atom...) Větší nebo rovno než. Programování v CAD AutoLISP, Visual LISP (atom položka) Vrací nil je-li položka seznamem (setq a '(x y z)) (atom 'a) vrací T, (atom a) vrací nil. (boundp atom) Vrací T má-li atom na sebe vázánu nějakou hodnotu (setq a 2) (boundp 'a) vrací T. (eq výraz1 výraz2) Funkce určuje zda hodnota argumentu výraz1 je shodná s hodnotou argumentu výraz2 ve smyslu, zda jsou výrazy přiřazeny stejnému objektu např.: (setq f1 '(a b c)) (setq f2 '(a c b)) (setq f3 f2), potom (eq f1 f2) vrací nil, (eq f3 f2) vrací T. (equal výraz1 výraz2 [přesnost]) Funkce určuje, zda je argument výraz1 rovný argumentu výraz2, tj. jestli se stejně vyhodnotí (setq a 1.23456) (setq b 1.23457) potom (equal a b) vrací nil, (equal a b 0.00001) vrací T. (gcd číslo1 číslo2) Vrací největší společný dělitel daných čísel. Argumenty musí být čísla celá 23

Programování v CAD AutoLISP, Visual LISP (gcd 81 57) vrací 3. (listp položka) Jestliže je argument položka seznam, vrací funkce T. (listp '(a b c)) vrací T. (max číslo číslo...) Funkce vrací největší číslo z daných čísel (max -16 19 2 4) vrací 19. (min číslo číslo...) Funkce vrací nejmenší číslo z daných čísel (min 72 45.0 2-8) vrací -8. (minusp položka) Funkce vrací T, jestliže je položka vyhodnocena jako záporné reálné nebo celé číslo (minusp -2.342) vrací T. (not položka) Funkce vrací T, jestliže výraz je nil, v opačném případě vrací nil (setq a 123) (not a) vrací nil (not '()) vrací T. (null položka) Jestliže je argument položka vázán na nil, vrací T. V opačném případě vrací nil (setq a 123) (null a) vrací nil. (numberp položka) Pokud hodnota argumentu položka je reálné číslo, funkce vrací T. Jinak vrací nil (setq a 123) (setq b 'a) (numberp b) vrací nil (numberp (eval b) vrací T. (progn výraz...) Tato funkce vyhodnocuje každý výraz postupně a vrací hodnotu posledního výrazu (if (= a b) (progn (setq a (+ a 10)) 24

Programování v CAD AutoLISP, Visual LISP (setq b (- b 10)) ) ) V uvedeném případě progn způsobí vyhodnocení dvou výrazů. (quote výraz) Vrací nevyhodnocený výraz. Jiný způsob zápisu je 'výraz (quote a) je stejné jako 'a a vrací A. (rem číslo1 číslo2...) Funkce vrací zbytek po dělení, čísla mohou být i reálná. (rem 42 12) vrací 6. (type položka) Funkce vrací typ argumentu položka, kde typ může nabývat hodnot jako atom, např.: (setq a 123 r 3.45 s "ahoj") potom (type 'a) vrací SYM (symbol), (type a) vrací INT (integer), (type r) vrací REAL, (type s) vrací STR (string). (zerop položka) Tato funkce vrací T, jestliže parametr položka je nulové reálné nebo celé číslo (zerop 0) vrací T. 2.6.3 Binární logika AutoLISP obsahuje několik funkcí porovnávajících nebo pracujících s čísly binárně, tedy bit po bitu. Tyto funkce nevracejí T nebo nil, ale binární, bit po bitu provedený výsledek operace. (~ číslo) Not čísla bit po bitu (~ 3) vrací -4. (Boole druh_funkce int1 int2...) Toto je obecná binární booleovská funkce. Argument funkce je číslo z intervalu 0 až 15 dle tabulky standardních Booleovských funkcí. Následující 25

Programování v CAD AutoLISP, Visual LISP celočíselné argumenty jsou bit po bitu booleovsky zpracovány. Některé hodnoty funkce odpovídají standardním booleovským operacím viz. následující tabulky: Int1 Int2 Druh_funkce 0 0 8 0 1 4 1 0 2 1 1 1 Funkce Operace Výsledný bit je jedna, jestliže... 1 AND Oba vstupní bity jsou 1. 6 XOR Pouze jeden ze vstupních bitů je 1. 7 OR Jeden nebo dva vstupní bity jsou 1. 8 NOT Oba vstupní bity jsou 0. (boole 1 12 5) vrací 4. (logand číslo číslo...) Funkce vrací výsledek logické operace AND, která je provedena bit po bitu na daném seznamu čísel (logand 7 15 3) vrací 3. (logior číslo číslo...) Funkce vrací výsledek logické operace OR, která je provedena bit po bitu na daném seznamu čísel (logior 1 2 4) vrací 7. (lsh číslo1 počet_bitů) Tato hodnota vrací logický posun čísla1 o hodnotu počet_bitů. Argumenty musí být celočíselné, výsledek je také celé číslo (lsh 2 1) vrací 4, (lsh 2-1) vrací 1. 26

Programování v CAD AutoLISP, Visual LISP 2.6.4 Booleovské funkce Funkce mají zajímavá uplatnění např.: (setq a b nil) (and a (setq pt1 (getpoint "Zadejte bod"))) (and b (setq pt2 (getpoint "Zadejte druhý bod"))) První funkce (and) se zeptá na bod a uloží jej do proměnné pt1. Druhá se na žádný bod nezeptá, protože vyhodnocování funkce (and) se zastaví, jakmile se najde argument s hodnotou nil. Funkce (or) provádí vyhodnocování až dokonce. (and výraz) Logické AND. (or výraz...) Tato funkce vrací logické OR mezi výrazy seznamu. Funkce OR vyhodnocuje zleva doprava a hledá přitom výraz, který není nil. 2.6.5 Funkce přiřazení Základní funkce pro přiřazování hodnot proměnným. (apply funkce seznam) Aplikuje funkci na argumenty. Funkce může být standardní nebo definovaná uživatelem (apply '+ '(1 2 3)) vrací 6. (eval výraz) Funkce vrací hodnotu výrazu (eval 4.0) vrací 4.0. (set symbol výraz) Funkce set přiřazuje argumentu symbol hodnotu argumentu výraz. Argument symbol musí být uveden funkcí quote nebo apostrofem (musí být explicitně citovaný) např. (set 'a 5.0) vrací 5.0 a nastavuje symbol A (set (quote b) 'a) vrací A a nastavuje symbol B (set b 640) vrací 640 a přiřadí hodnotu symbolu A, protože je obsažena v symbolu B. 27

Programování v CAD AutoLISP, Visual LISP (setq sym1 výraz1 [sym2 výraz2...]) Je to základní funkce přiřazení. Setq a set jsou podobné funkce, rozdíl je v tom, že funkce set vyhodnocuje pouze první argument. (setq a (+ 2 3.0) vrací 5.0 (setq a 10 b 2.3 c 4.5) vrací 4.5 ale a=10, b=-2.3, c=4.5 2.6.6 Funkce rozhodování K explicitnímu větvení programu patří funkce IF a COND, k zasmyčkování funkce WHILE REPEAT. Funkce IF COND a WHILE obsahují podmínku, podle které se řídí další běh programu. (cond (test1 výsledek1...)...) Vyhodnocuje první položku v každém seznamu (v daném pořadí), dokud jedna z položek nevrátí jinou hodnotu než nil. Následující funkce testuje odpověď uživatele vřazenou do řetězce s a vrací 1, jestliže je v řetězci A, nebo a 0, jestliže je v řetězci N nebo n a nil ve všech ostatních případech. Obecně se t používá jako poslední testovací výraz. (cond ((= s "A") 1) ((= s "a") 1) ((= s "N") 0) ((= s "n") 0) (t nil) ) (exit) Ukončuje aktuální funkci AutoLISPu bez toho, že by bylo možné dojít až na konec této funkce a přejít přes poslední uzavírací závorku. (if testvýraz pakvýraz [nebovýraz]) Funkce vyhodnocuje podmíněné výrazy (if (= 3 2) "Ano" "Ne.") vrací "Ne.". (if (= a 0) (setq b 100) (setq b 0)) (quit) Ukončuje aktuální funkci AutoLISPu bez toho, že by bylo možné dojít až na konec této funkce a přejít přes poslední uzavírací závorku. 28

Programování v CAD AutoLISP, Visual LISP (repeat počet výraz...) Počet je libovolné celé kladné číslo. Funkce vyhodnocuje výraz tolikrát, kolik je hodnota argumentu počet. Vrací hodnotu posledního výrazu. (setq a 10) (repeat 4 (setq a (+ a 10)) ) vrací A rovné 50. (while test_výraz výraz...) Tato funkce vyhodnocuje test_výraz, pokud není nil (setq test 1) (while (<= test 10) (setq a (1+test)) ). 2.6.7 Konverzní funkce AutoLISP obsahuje řadu funkcí převádějící data jednoho typu na data jiného typu. (angtof úhel [jednotky]) Převádí úhel z reálného čísla na radiány, úhel - úhel ve tvaru reálného čísla v jednotkách nastavených pomocí volby jednotky, jednotky - nastavení jednotek úhlu: 0 stupně, 1 stupně/minuty/vteřiny, 2 gradiány, 3 radiány, 4 zeměpisné jednotky. (angtof "180.0000") vrací 1.14159... ze stupňů na radiány (angtof "180.0000" 3) vrací 4.07081... z radiánů na radiány (angtos úhel [mód [přesnost]]) Vstupem je úhel v radiánech, výstupem je pro mód rovno 0 - desetinný tvar stupně, 1 - stupně/minuty/vteřiny, 2 - gradiány, 29

Programování v CAD AutoLISP, Visual LISP 3 - radiány, 4 - zeměpisné jednotky. (angtos pi 0 0) vrací 180 (chr číslo) Vrací konverzi celočíselné reprezentace ASCII kódu (chr 65) vrací "A". (cvunit hodnota zdroj cíl) Převádí hodnotu z jedněch jednotek do jiných jednotek např. (cvunit 1 "minute" "second") vrací 60. (distof řetězec [mode]) Převádí řetězec (string) reprezentující reálné číslo (s desetinnou tečkou) na reálné číslo - opak funkce rtos. řetězec - převáděný řetězec mode - nastavení formátu, ve kterém je zadán řetězec string: 1 - vědecký 2 - desítkový 3 - stopy a palce (desítky) 4 - stopy a palce (zlomky) 5 - zlomky (fix číslo) Funkce vrací konverzi čísla na číslo celé (fix 3.7) vrací 3. (float číslo) Funkce vrací konverzi čísla na číslo reálné (float 3) vrací 3.0. (itoa celé číslo) Funkce převádí celé číslo na řetězec. Např.: (itoa 45) vrací "45". 30

Programování v CAD AutoLISP, Visual LISP 2.6.8 Funkce vstupů Funkce vyžadují vstupy od uživatele. Zadání se provádí v prostředí AutoCADu a funkce mohou obsahovat argument výzva pro lepší orientaci v při zadávání. Argument výzva je nepovinný. Funkcím getxxx se přidává funkce initget, která uživatele nepustí dále v programu, dokud nezadá správnou hodnotu. V této skupině příkazů jsou též příkazy pro čtení (vstup) z textových souborů uložených na disku. Je nezbytně nutné použít funkci open, která přiřadí souboru jeho označení, a na konci použít příkaz close pro uzavření souboru, viz. funkce pro práci se soubory a adresáři. (getangle [bod] [výzva]) Funkce očekává úhel zadaný uživatelem a vrací tento úhel v radiánech. Měří úhly proti směru hodinových ručiček od 0 rad nastavených v systémové proměnné ANGBASE a ANGDIR. Vrácený úhel je vyjádřen v rad měřený vzhledem k aktuální konstrukční rovině (setq ang (getangle '(1.0 3.0) "Kudy? ")). (getcfg cfgname) Vrací data aplikace ze sekce AppData ze souboru acad.cfg nebo nil v případě neplatného argumentu cfgname. Parametr se zadá funkcí setcfg. Kde, cfgname - jméno (maximálně 496 znaků) sekce a parametru hodnoty, kterou chcete zjistit. Musí to být řetězec v následující formě: "AppData/application_name/section_name/.../param_name". Příklad: jestliže parametr Tl_steny v sekci AppData/ArchStuff má hodnotu 8, pak tuto hodnotu získáte takto: (getcfg "AppData/ArchStuff/Tl_steny") vrací "8" (getcname cname) Vrací jméno příkazu v českém AutoCADu v angličtině či češtině. Jestliže je cname napsáno bez podtržítka (příkaz česky), pak vrací jméno příkazu v angličtině. Pokud je příkaz napsán anglicky s podtržítkem vrací český název. Jestliže cname je neplatné jméno příkazu, vrací nil. Argument funkce: cname - jméno příkazu v češtině (či angličtině s podtržítkem), maximálně 64 znaků. Příklad: v české verzi AutoCADu 31

Programování v CAD AutoLISP, Visual LISP (getcname "barva") (getcname "_color") vrací"_color" vrací "BARVA" (getcorner bod [výzva]) Funkce getcorner vrací bod v aktuálním UCS, podobně jako funkce getpoint avšak getcorner požaduje jako argument bázový bod. Potom z bázového bodu a bodu, který zadá uživatel pomocí grafického klíče, se nakreslí pravoúhelník. Souřadnice bázového bodu jsou vyjádřeny ve vztahu k aktuálnímu UCS, Z-ová souřadnice je ignorována. (getdist [bod] [výzva]) Funkce čeká uživatelovo zadání vzdálenosti, nebo zadání jednoho či dvou bodů a vrací reálné číslo reprezentující vzdálenost mezi těmito body. (setq dist (getdist "Jak daleko? ")) (getenv jméno_proměnné) Funkce vrací řetězec přiřazený systémové proměnné (getenv acad) vrací např. "/acad11/support". (getfiled titul implic roz návěští) Výběr souborů ze zadaného adresáře. Titul - definuje návěští celého dialogového panelu. Implic - implicitní nabízené jméno souboru. Roz - implicitně nabízené rozšíření, přípona souboru. Návěští - definuje různé činnosti panelu (nabývá hodnot 1..15). Například: (getfiled "Vyberte soubor z Wordu" "/text/archiv" "doc" 5). (getint [výzva]) Funkce žádá zadání celého čísla a vrací toto číslo (setq num (getint "Zadejte celé číslo ")). (getkword [výzva]) Funkce čeká na uživatelovo zadání klíčového slova. Seznam platných klíčových slov musí být nastaven před voláním této funkce funkcí initget (initget 1 "Ano Ne") (setq x (getkword "Opravdu? (Ano Ne) ")) AutoLISP bude opakovat výzvu do té doby než zadáte Ano nebo Ne. 32

Programování v CAD AutoLISP, Visual LISP (getorient [bod] [výzva]) Tato funkce je podobná funkci getangle, ale s tím rozdílem, že úhel vrácený funkcí nezávisí na systémových proměnných ANGBASE a ANGDIR. Předpokládejte, že systémová proměnná ANGBASE je nastavena na 90 stupňů (sever) a systémová proměnná ANGDIR je nastavena na 1 (kladný přírůstek ve směru otáčení hodinových ručiček). Potom následující tabulka ukazuje co vrací funkce getangle a getorient. (setq pt1 (getpoint "Pick point: ")) (getorient pt1 "Ukažte bod: ") Vstup GETANGLE GETORIENT (stupně) 0 0.0 1.5708-90 1.5708 3.14159 180 3.14159 4.71239 90 4.71239 0.0 (getpoint [bod] [výzva]) Funkce čeká na uživatelovo zadání bodu. Je-li zadán argument bod, je vytvářena z tohoto bodu do zadávaného bodu pružná úsečka (setq p (getpoint '(2.4 5.6 1.9) "Kde? ")). (getreal [výzva]) Funkce čeká na uživatelovo zadání reálného čísla a vrací reálné číslo (setq b (getreal "Zadej reálné číslo")). (getstring [cr] [výzva]) Funkce čeká na uživatelovo zadání řetězce. Vrací pouze prvních 132 znaků. Jestliže je přítomen argument cr a není nil je možné vkládat i mezery (setq s (getstring T "Jaké je Vaše celé jméno? ")). (getvar jméno_proměnné) Funkce vyhledá jméno_proměnné a vrací hodnotu systémové proměnné AutoCADu. Jméno proměnné musí být uzavřeno v uvozovkách. Např. je-li rádius přechodu 0.25 potom (getvar "FILLETRAD") vrací 0.25. (initget [bit] [řetězec]) Tato funkce nastavuje různé volby pro následné volání funkcí getxxx kromě getstring a getvar. Celočíselný bit může nabývat hodnot podle následující tabulky: 33

Programování v CAD AutoLISP, Visual LISP Bitová hodnota Význam 1 Nepovolí nulový vstup. 2 Nepovolí nulové hodnoty. 4 Nepovolí záporné hodnoty. 8 Nekontroluje limity, i když je nastavena kontrola LIMCHECK. 16 (Není v současnosti používán. 32 Použije čárkovaných čar pro kreslení siluety nebo obdélníka. 64 Ignoruje Z-ovou souřadnici 3D bodů (pouze u getdist). Volitelný argument řetězec - definuje seznam volitelných klíčových slov, která mají být kontrolována během následující funkce getxxx. Pokud nesouhlasí zadaná odpověď s klíčovým slovem, bude AutoCAD otázku opakovat, v opačném případě postupuje dále (defun vstup_čísla (/ x) (initget 1 "Pi Dvě-pi") (setq x (getreal "Pi/Dvě-pi/číslo: ")) (cond ((eq x "Pi") pi) ((eq x "Dvě-pi") (* 2.0 pi)) (T x) ) ) (read řetězec) Tato funkce vrací první seznam nebo atom získaný z řetězce. Argument řetězec nesmí obsahovat mezery, vrací argument konvertovaný do odpovídajícího typu dat (read "Hej tam") vrací řetězec HEJ, (read "/ "Hej vy/"") vrací řetězec "Hej vy", (read "(a b c) ") vrací seznam (A B C). (read-char [označení_souboru]) Tato funkce přečte jeden znak z paměti klávesnice nebo z otevřeného souboru. Vrací celočíselný ASCII kód, reprezentující přečtený znak. Není-li uvedeno označení souboru, je čteno z klávesnice. (read-line [označení_souboru]) Funkce čte řetězec z klávesnice, nebo z otevřeného souboru, pokud je uvedeno označení souboru. Jestliže narazí při čtení na konec souboru, vrací nil. 34

Programování v CAD AutoLISP, Visual LISP Následující příkazy čtou z již vytvořeného textového souboru. (setq f (open "c:\\my documents\\text.txt" "r")) vrací #<file "c:\\my documents\\text.txt"> (read-line f) vrací "Toto je text ze souboru text.txt" (close f) 2.6.9 Funkce výstupů V této skupině je především definována množina příkazů pro výstup na obrazovku. Pro zápis do textových souborů uložených na disku je nezbytně nutné použít funkci open, která přiřadí souboru jeho označení. Na konci použít příkaz close pro uzavření souboru viz. funkce pro práci se soubory a adresáři. Dále jsou zde funkce pro ovládání obrazovky a odlaďování programu, načtení, zrušení a výpis ADS aplikací. (alert řetězec) Zobrazuje dialogový panel s varováním, které musí uživatel schválit odklepnutím tlačítka OK.Příliš dlouhý text pro použití v okně je zkrácen, aby se vešel do okna. Funkce vrací nil. Atribut řetězec - text, který se zobrazí v dialog. okně (alert "Neplatný výběr!") => zobrazí okno s textem "Neplatný výběr!" a s tlačítkem OK. (alert "Neplatný \nvýběr!") => text rozdělen na dva řádky. (alert "Nemůžete zadat zápornou hodnotu") (alloc n-alloc) Nastavuje velikost části využívané funkcí expand. Argument n-alloc je číslo typu integer a udává velikost paměti obsazené programem. Číslo udává počet symbolů, řetězců, funkcí (alloc 100) vrací 1000 (ads) Funkce vrací seznam aktuálně načtených aplikací modulu ADS (AutoCAD Developtment System). (prin1 [výraz [označení_souboru]]) Tato funkce vypíše argument výraz na obrazovku a vrací výraz. Argument může být jakýkoliv výraz, nemusí být řetězec. Je-li přítomen argument označení 35

Programování v CAD AutoLISP, Visual LISP souboru a soubor je otevřený, zapíše se položka do souboru přesně tak, jak by se objevila na obrazovce. Zapíše se pouze výraz bez jakéhokoliv dalšího znaku (setq a 123) (prin1 'a) vrací A, (prin1 a) vrací 123. (princ [výraz [označení_souboru]]) Je totéž co funkce prin1 až na to, že řídící znaky jsou tištěny bez rozšíření. Řídící znaky pro tisk jsou uvedeny výše (začínají lomítkem). (print [výraz [označení_souboru]]) Je stejná jako print1 až na to, že je před výrazem tištěna nová řádka a po výrazu mezera. (prompt výzva) Funkce zobrazí výzvu na obrazovce a vrací nil jako např. (prompt "Nová hodnota :"). (terpri) Tato funkce vypíše na obrazovku nový řádek a vrací nil. (textbox eseznam) Měří specifikovanou textovou oblast a vrací souřadnice diagonály objektu, jenž tuto oblast obklopuje. eseznam - seznam definující entitu, která definuje textovou oblast, ve formátu výstupu funkce entget. Jestliže argument elist neobsahuje jiné parametry textu než text samotný, jsou použity aktuální (nebo přednastavené) hodnoty těchto parametrů. Funkce vrací seznam souřadnic dvou bodů, v případě neúspěchu vrací nil. Příklad: Následující příkaz obsahuje text a akceptuje aktuální nastavení ostatních parametrů: (textbox '((1. "Test textu."))) vrací ((0.0 0.0 0.0) (3.0 15.10 0.0)) (textpage) Přepne z grafické obrazovky na textovou. Tato funkce je ekvivalentní funkci textscr. Vrací nil. Funkce změní u jedno obrazovkových systémů grafickou obrazovku na textovou a vymaže všechny předcházející texty. (textscr) Funkce změní u jednoobrazovkových systémů grafickou obrazovku na textovou. 36

Programování v CAD AutoLISP, Visual LISP (trace funkce...) Tato funkce pomáhá při odlaďování programů. Nastavuje návěští pro sledování určené funkce a vrací poslední jméno funkce. Pokaždé, když je funkce volána, je vypsán vstup do funkce a její výsledek. (untrace funkce...) Opak funkce trace. (write-char číslo [označení_souboru]) Funkce zapíše jeden znak na obrazovku nebo do otevřeného souboru. Hodnota argumentu číslo je ASCII kód znaku, který má být zapsán (write-char 67 f), zapíše do souboru se jménem f znak c. (write-line řetězec [označení_souboru]) Tato funkce zapíše řetězec na obrazovku nebo do otevřeného souboru. Vrací řetězec s apostrofy, které však při zápisu do souboru vynechá (write-line "Test" f) vrací "Test" a zapíše do souboru jména f Test (xload aplikace) Tato funkce načte aplikaci ADS. Tímto příkazem se třeba načítá AME. (xunload aplikace) Tato funkce odstraní aplikaci ADS z paměti počítače. (*error* řetězec) Tato funkce umožňuje definovat vlastní ošetření chyb. Jestliže není nil je funkce provedena kdykoliv se vyskytne chybová podmínka AutoLISPu. Má jediný argument řetězec obsahující popis chyby. Např.: (defun *error* (hlášení) (princ "chyba: ") (princ "hlášení") (terpri) ) 37

Programování v CAD AutoLISP, Visual LISP 2.6.10 Funkce pro práci s řetězci Zahrnují zejména převody řetězců na čísla různého formátu a převod čísel na řetězce. Dále zahrnuje příkazy pro práci s řetězcem znaků, např.: slučování řetězců, délka řetězce, části řetězce a porovnání dvou řetězců. (ascii řetězec) Vrací hodnotu ASCII kódu prvního znaku v řetězci (ascii "A") vrací 65. (atof řetězec) Vrací konverzi řetězce na reálné číslo, (atof "97.1") vrací 97.1, (atof "90") vrací 90.0. (atoi řetězec) Vrací konverzi řetězce na celé číslo, (atoi "3.9") vrací 3. (rtos číslo [režim [přesnost]]) Tato funkce vrací řetězec, který je reprezentován převodem reálného argumentu číslo, na řetězec. Tvar řetězce závisí na nastavení argumentů režim a přesnost. Hodnoty těchto argumentů jsou celá čísla. V následujícím jsou uvedeny hodnoty argumentu režim: 1 Vědecký. 2 Desítkový. 3 Palce a stopy (desítky). 4 Palce a stopy (zlomky). 5 Zlomky. (rtos 17.5 1 4) vrací "1.7500E+01". (strcase řetězec [jak]) Funkce vrací konvertovaný argument řetězec na velká nebo malá písmena v závislosti na argumentu jak. Pokud argument jak je vynechán nebo nabývá hodnoty nil, je konvertováno na velká písmena. Pokud je T, tak na malá. (strcase "Zkouška") vrací "ZKOUŠKA". (strcat řetězec1 řetězec2...) Funkce vrací řetězec, který vznikne spojením řetězců. (strcat "Auto" "LISP") vrací "AutoLISP". 38

Programování v CAD AutoLISP, Visual LISP (strlen [řetězec]...) Funkce vrací počet znaků v řetězci (strlen "ABCD") vrací 4. (substr řetězec start [délka]) Funkce vrací pod řetězec argumentu řetězec od pozice určené argumentem start a o délce určené argumentem délka. Start a délka musí být celá kladná čísla. (substr "automobil" 1 4) vrací "auto". (wcmatch řetězec vzor) Tato funkce porovnává vzor složený z náhradních znaků a daný řetězec. Náhradní znaky jsou např.: # Nahrazuje jednotlivé číslice. @ Nahrazuje jednotlivá písmena.. Nahrazuje jednotlivé nealfanumerické znaky.? Nahrazuje jakýkoliv znak. Nahrazuje posloupnost znaků. (wcmatch "Name" "N*") vrací T (wcmatch "Name" "???,~*m*,n*") vrací T 2.6.11 Funkce pro práci se seznamy Seznamy (LIST) a práce s nimi jsou základem práce v jazyku LISP. Odsud i jméno jazyka LISt Processing, zpracování seznamů. Seznamy jsou primárním prvkem, ve kterém jazyk uchovává a třídí data. Seznam je skupina elementů (dat) jakéhokoliv typu, která je uzavřena v kulatých závorkách. Data jsou odděleny mezerou. Se seznamem je zacházeno jako s jedním elementem a může být přiřazen jediné proměnné. Seznam může obsahovat libovolné množství reálných a celých čísel, řetězců, proměnných, nebo dalších řetězců. Vše, co je uzavřeno mezi levou a pravou kulatou závorkou, je seznam. Každý výraz v AutoLISPu je seznamem a každý program v AutoLISPu je seznamem. (append výraz...) Bere libovolný počet seznamů a převádí ho do jednoho (append '(ab) '(cd)) vrací (ABCD). (assoc položka a seznam) Vrací asociační podseznam 39