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
3
Reaktory ......................................................................................................... 92
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
4
Práce s objekty - kolekce............................................................................. 129
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 -seznamy -symboly -řetězce -reálná čísla -integerová čísla -entity AutoCADu -výběrové množiny AutoCADu -atomy -body
příklad '(1 a 20) ab%$ "TO JE ŘET." 3.0 7 objekty (přímky...) několik vybraných objektů (např. CROSSING) čísla a řetězce, které jsou součástí seznamu 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: (vlisp-compile ‘mode „filename“ [ „out_filename“]), kde 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)
pro první způsob definice
(jméno_vložené_funkce)
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
Programování v CAD –AutoLISP, Visual LISP (1+číslo) Vrací číslo o 1 větší. (1-číslo) Vrací číslo o 1 menší. (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
Programování v CAD –AutoLISP, Visual LISP (<= atom atom ...) Menší nebo rovno než. (> atom atom ...) Větší než. (>= atom atom ...) Větší nebo rovno než. (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 0 0 1 1
Int2 0 1 0 1
Funkce 1 6 7 8
Druh_funkce 8 4 2 1 Operace AND XOR OR NOT
Výsledný bit je jedna, jestliže... Oba vstupní bity jsou 1. Pouze jeden ze vstupních bitů je 1. Jeden nebo dva vstupní bity jsou 1. 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 (stupně) 0 -90 180 90
GETANGLE
GETORIENT
0.0 1.5708 3.14159 4.71239
1.5708 3.14159 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 1 2 4 8 16 32 64
Význam Nepovolí nulový vstup. Nepovolí nulové hodnoty. Nepovolí záporné hodnoty. Nekontroluje limity, i když je nastavena kontrola LIMCHECK. (Není v současnosti používán. Použije čárkovaných čar pro kreslení siluety nebo obdélníka. 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í #
(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
Programování v CAD –AutoLISP, Visual LISP as je definováno ((name box) (šířka 3.23) (výška 4.75)) potom (assoc 'šířka as) vrací (ŠÍŘKA 3.23) . (car seznam) Vrací první prvek seznamu. Je-li seznam prázdný, je vráceno nil (car '(a b c)) vrací A. (cdr seznam) Vrací seznam obsahující vše kromě prvního prvku seznamu (cdr '(a b c)) vrací (B C). (caar seznam), (cadr seznam), (cddr seznam), (cadar seznam), atd. AutoCAD podporuje spojování funkcí car a cdr až do čtyř úrovní. Např. předpokládejte přiřazení (setq x '((a b) c d)) potom (caar x) odpovídá (car (car x)) a vrací A , (cdar x) odpovídá (cdr (car x)) a vrací (B) , (cadar x) odpovídá (car (cdr (car x))) a vrací B , (cadr x) odpovídá (car (cdr x)) a vrací C , (cddr x) odpovídá (cdr (cdr x)) a vrací (D) , (caddr x) odpovídá (car (cdr (cdr x))) a vrací D . Nebo (setq bod3 '(5.25 1.0 3.0)) , potom (car bod3) vrací 5.25 , (cadr bod3) vrací 1.0 , (caddr bod3) vrací 3.0 . (cons nový_první_prvek seznam) Základní funkce pro tvoření seznamu, který vznikne z původního seznamu přidáním nového prvního prvku seznamu (cons 'a '(b c d)) vrací (A B C D), (cons 'a 2) vrací (A.2) . (foreach jméno seznam výraz ...)
40
Programování v CAD –AutoLISP, Visual LISP Funkce prochází seznamem a přiřazuje každý jeho prvek jménu a vyhodnocuje každý výraz pro každý prvek seznamu. Lze zadat libovolný počet argumentů výraz. Funkce vrací výsledek posledního argumentu výraz. Např.: (foreach n '(a b c) (print n)) je ekvivalentní (print a) (print b) (print c) . (last seznam) Vrací poslední prvek seznamu (last '(a b c d e)) vrací E . (length seznam) Tato funkce vrací celé číslo, které se rovná počtu prvků v seznamu (length '(a b c d)) vrací 4 . (list výraz ...) Tato funkce slučuje libovolný počet výrazů a vrací seznam (list 3.9 6.7) vrací (3.9 6.7) . Používá se často k definici 2D nebo 3D bodů. (mapcar funkce seznam1 ... seznam) Funkce vrací výsledek provedení funkce na jednotlivé prvky seznamu, jakožto argumentu funkce (setq a 10 b 20 c 30) (mapcar '1+ (list a b c)) vrací (11 21 31) . (member výraz seznam) Funkce hledá výskyt argumentu výraz a vrací zbytek seznamu počínajíc prvním výskytem výrazu. Jestliže se výraz v seznamu nevyskytuje funkce vrací nil (member 'c '(a b c d e)) vrací C D E . (nth n-tý seznam) Funkce vrací n-tý prvek seznamu seznam, kde n je pořadové číslo vybíraného prvku (0 odpovídá prvnímu elementu). Je-li n větší než počet prvků vrací nil (nth 3 '(a b c d e)) vrací D .
41
Programování v CAD –AutoLISP, Visual LISP (reverse seznam) Funkce vrací seznam, jehož prvky jsou v opačném pořadí (reverse '((a) b c)) vrací (C B (A)) (subst nový_prvek starý_prvek seznam) Tato funkce prohlíží argument seznam a hledá každý výskyt argumentu starý_prvek. Pokud ho najde, zamění ho za argument nový_prvek (setq prikl '(a b (c d)b)) , (setq 'qq 'b prikl] vrací (A QQ (C D) QQ) .
2.6.12 Funkce měřící a konstrukční Často je potřeba změřit vzdálenosti, nebo úhly mezi dvěma body v daném souřadném systému, anebo vypočítat souřadnice bodu v daném souřadném systému, či provést přepočet do jiného souřadného systému. (angle bod1 bod2) Vrací úhel v radiánech přímky z bodu1 do bodu2 od osy X současného UCS. 3D, body jsou promítány do současné konstrukční roviny, (angle '(0 0 0) '(1 1 1)) vrací 0.785398 . (distance bod1 bod2) Funkce vrací prostorovou vzdálenost mezi body bod1 a bod2 (distance '(1.0 2.5 3.0) '(7.7 2.5 3.0)) vrací 6.7 . (inters bod1 bod2 bod3 bod4 [nek]) Funkce vyšetřuje vzájemnou polohu dvou úseček. Jestliže je uveden volitelný argument nek a je nil, funkce bude vracet souřadnice průsečíku ležícího v i v prodloužení úseček (setq a '(1.0 1.0) b '(9.0 9.0)) (setq c '(4.0 1.0) d '(4.0 2.0)) potom (inters a b c d nil) vrací (4.0 4.0) . (polar bod úhel délka) Tato funkce vrací bod uživatelského systému, který je od bodu vzdálen o délku v daném úhlu. Úhel je měřený v radiánech v současné konstrukční rovině (polar '(1.0 1.0 3.5) 0.785 1.4142) vrací (2.0 2.0 3.5). (trans bod odkud kam [disp]) 42
Programování v CAD –AutoLISP, Visual LISP Funkce transformuje bod nebo vektor z jednoho souřadného systému do druhého. Argument bod je seznam tří reálných čísel. Argument odkud je kód určující souřadný systém pomocí kterého je bod popsán. Kam je kód určující cílový souřadný systém. Volitelný argument disp, pokud je uveden a není nil, specifikuje, zda argument bod má být chápán jako 3D vektor. Argumenty odkud a kam nabývají následujících hodnot: 0 Světový (globální) systém souřadnic, 1 Uživatelský systém souřadnic, 2 Souřadný systém displeje aktuálního výřezu a aktuálního výřezu modelového prostoru, když je použit spolu s 3, 3 Souřadný systém zobrazení výkresového prostoru (použito pouze s 2).
2.6.13 Funkce pro práci se soubory a adresáři Tato množina příkazů umožňuje čtení a zápis textových souborů. Pro zápis či čtení 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. Dále umožňují vyhledat soubor v přístupných adresářích a vrátit cestu k souboru. (close ukazatel_na_soubor) Funkce uzavírá soubor a vrací nil. Ukazatel na soubor lze získat pomocí funkce open. (findfile jméno_souboru) Vyhledává soubor v přístupných adresářích a vrací cestu k souboru a jeho jméno jako řetězec.. Nerozlišuje soubory podle typu či přípony. Jestliže argument jméno_souboru neobsahuje název disku či adresáře, pak příkaz prohledá knihovnu AutoCADu. Jestliže je uveden i název disku či adresáře, pak příkaz hledá pouze v zadaném adresáři. Vrací řetězec znaků obsahující celý název souboru nebo nil, pokud soubor či adresář není nalezen. Tento řetězec je použitelný pro otevření souboru pomocí příkazu open. jméno_souboru - jméno hledaného souboru či adresáře Příklady: 1) Jestliže aktuální adresář je /acad2000 a tento adresář obsahuje soubor abc.lsp, následující zápis nalezne cestu k tomuto souboru: (findfile "abc.lsp") "C:\\Program Files\\ACAD2000\\abc.lsp" 43
Programování v CAD –AutoLISP, Visual LISP 2) Jestliže editujete výkres v adresáři /acad2000/drawings, potom je programová proměnná ACAD nastavena na hodnotu /acad2000/support a soubor xyz.txt existuje pouze v adresáři /acad2000/support, potom následující příkaz nalezne cestu k tomuto souboru: (findfile "xyz.txt") vrací "C:\\Program Files\\ACAD2000\\support\\xyz.txt" 3) Jestliže soubor nosuch není aktuálně v žádném adresáři napsaném v cestě do knihovny, pak příkaz vrací nil: (findfile "nosuch") vrací Nil (load jméno_souboru [chyba]) Načítá soubor AutoLISPovských funkcí. Jméno souboru je řetězec. Do argumentu chyba lze napsat hlášení o nezdařeném načtení (load "f:/mujadres/proglisp" "soubor neexistuje") . (open jméno_souboru režim) Funkce open otvírá soubor, aby byl přístupný AutoLISPovským I/O funkcím. Vrací označení souboru, a proto musí být toto označení přiřazeno k symbolu pomocí funkce setq. Například (setq a (open "soubor.typ" "r")) , argument režim může nabývat těchto hodnot Režim otevření "r" "w" "a"
Popis Otevření souboru pro čtení. Pokud neexistuje, vrací nil. Otevření souboru pro zápis. Pokud soubor neexistuje, vytvoří se nový. Pokud existuje, budou data přepsána. Otevření souboru pro připojení dat. Jestliže soubor neexistuje, je vytvořen nový a otevřen pro zápis. Jestliže soubor existuje, bude otevřen a data budou zapisována na konec. Pozor, je třeba se přesvědčit, jestli není znak CTRL Z na konci souboru.
2.6.14 Funkce ve spojeni s AutoCADem 2.6.14.1 Kreslení v AutoCADu Většina programů AutoLISPu kreslí entity pomocí jednoho z následujících způsobů a to: funkce ActiveX, 44
Programování v CAD –AutoLISP, Visual LISP funkce entmake, funkce command. Nejnovější způsob vytváření entit je pomocí funkcí ActiveX v rámci VLISPu. Funkce ActiveX má oproti funkcím entmake a command několik výhod. Funkce ActiveX jsou rychlejší. Názvy funkcí ActiveX naznačují operaci, kterou funkce provádí, proto se tyto funkce vyznačují lepší čitelností, správou a odladěním chyb. Nové typy dat pro funkce Active X Funkce, které volají spouštění metod ActiveX, nyní vyžadují, aby argumenty byly definovány jako jiná data. Funkce ActiveX také vrací odlišné hodnoty. Tato změna znamená, že se musí upravit všechny programy ActiveX AutoLISPu pro Release 14. Další informace o používání metod ActiveX v AutoCADu 2000 naleznete v kapitole 6 "Práce s ActiveX" v Programátorské příručce Visual LISPu. ActiveX, reaktor a rozšířené funkce Visual LISPu musí být nyní explicitně načítány. AutoLISP ActiveX, reaktor a rozšířené funkce Visual LISPu (vlax-*) nejsou při spouštění AutoCADu implicitně načítány. Tato změna podstatně urychluje spouštění AutoCADu, ale znamená to, že pro použití těchto funkcí v aplikacích AutoLISPu je musíte explicitně načíst. Pro načtení AutoLISP ActiveX, reaktoru a rozšířených funkcí Visual LISPu použijte (vl-load-com). POZNÁMKA: Dokud nezadáte vl-load-com, není také z Visual LISPu dostupná online nápověda pro funkce ActiveX AutoLISPu. Pokud zadáte funkci Nápověda pro ActiveX před zadáním vl-load-com., Visual LISP zobrazí následující zprávu: "error: no function definition: get-ACAD-itl error" v okně konzole Visual LISPu. (entmake [eseznam]) Funkce entmake umožňuje tvorbu entit tak, že shromáždí rozmanité hodnoty, například souřadnice polohy, informace o orientaci, hladině či barvě do asociovaného seznamu a potom požádá AutoCAD, aby podle těchto dat entitu vytvořil. Asociativní seznam funkce entmake vypadá podobně jako asociovaný seznam vrácený funkcí entget. Rozdíl je v tom, že funkce entget jen vrací informace o entitě, zatímco funkce entmake vytvoří z dat novou entitu. Následující příklad vytvoří kružnici červené barvy(barva 62), se středem v (4,4) a s poloměrem 1.Další vlastnosti jako je hladina, barva, tloušťka lze též nastavit. (entmake '((0 . "CIRCLE") (62 . 1) (10 4.0 4.0 0.0) (40 . 1.0))) nakreslí kružnici a vrací: ((0 . "CIRCLE") (62 . 1) (10 4.0 4.0 0.0) (40 . 1.0))
45
Programování v CAD –AutoLISP, Visual LISP Funkce command Když se v AutoCADu poprvé objevil jazyk AutoLISP, byla pro vytváření entit k dispozici pouze jediná metoda, a to funkce command. Ta umožňuje programátorovi AutoLISPu, aby v kódu použil libovolný příkaz, který může být spuštěn pomocí výzvy Příkaz AutoCADu. Jedná se o spolehlivý způsob, který však není tak rychlý jako metody ActiveX a nenabízí takovou pružnost jako funkce entmake. (command [argumenty]...) Funkce vykonává v AutoLISPu AutoCADovské příkazy. Např. (command "LINE" bod1 bod2 bod3 ""), (command "") znamená ukončení příkazu a (command) bez argumentů znamená CTRL C . nebo, (setq ptlist '((10 20 0) (20 30 0) (40 60 0))) (command "_SPLINE") (foreach pt ptlist (command pt)) (command "" "" "") . Vykreslí křivku typu SPLINE proloženou třemi body.
46
Programování v CAD –AutoLISP, Visual LISP 2.6.14.2 Další funkce spojené s AutoCADem. Jsou zde funkce pro nastavení.barev panelů, rady, uchopovacího režimu, tvorby a překreslení výřezu, funkce nastavující hodnoty proměnných AutoCADu. (acad_colordlg colornum [flag]) Zobrazí standardní AutoCADovské dialogové okno pro výběr barvy. Argumenty: colornum - celé číslo z intervalu 0-256 (včetně) specifikující číslo barvy v AutoCADu použité jako výchozí; 0=DLEBLOK, 256=DLEHLAD flag - pokud je rovno nil, znemožní použít tlačítka DLEHLAD a DLEBLOK v dialogu; pokud není tento argument použit či je jiné hodnoty než nil, je možno použít tlačítka DLEHLAD a DLEBLOK Vrací číselnou hodnotu barvy nebo nil, pokud uživatel stiskne Storno. (acad_colordlg 3) v dialogu nastaví zelenou barvu jako „default“, jestliže není nic vybráno. (acad_helpdlg helpfile topic) Starý příkaz pro volání rady - pro kompatibilitu se staršími verzemi AutoCADu. Je již nahrazena vestavěnou funkcí rada (help). (acad_strlsort list) Seřadí seznam řetězců podle abecedy Argument list - seznam řetězců Vrací list v abecedním pořadí. Pokud je list neplatný, či je nedostatek paměti, vrací nil. Seřazení seznamu názvů kalendářních měsíců podle abecedy (setq mos '("Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec")) vrací ("Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec") (acad_strlsort mos) vrací ("Apr" "Aug" "Dec" "Feb" "Jan" "Jul" "Jun" "Mar" "May" "Nov" "Oct" "Sep") (grvecs vlist [trans]) Kreslí multičáru na obrazovku. vlist - seznam seznamů pro vyjádření jednoho vektoru, skládají se z čísla barvy vektoru a dvou dvoučlenných seznamů vyjadřujících souřadnice bodů vektoru.
47
Programování v CAD –AutoLISP, Visual LISP trans - transformační matice pro změnu umístění či měřítka vektorů definovaných v seznamu vektorů vlist. Skládá se ze seznamu čtyř seznamů, z nichž každý je tvořen čtyřmi reálnými čísly). Vrací nil. Formát seznamu vektorů vlist: ([barva1] poč_bod1 konc_bod1 [barva2] poč_bod2 konc_bod2 ...) barva - číslo barvy pro daný vektor. Rozsah čísel barev je od 0 do 255. Jestliže je použito číslo větší než 255, pak jsou vektory nakresleny v "XOR inkoustem", který doplní vše, co se nakreslí přes něj a vymaže sám sebe při překreslení. Jestliže je číslo barvy menší než nula, je vektor zvýrazněn. Zvýraznění závisí na nastavení zobrazení. Nejčastější je zvýraznění provedeno jako přerušovaná čára. poč_bod1, konc_bod1 - seznamy dvou čísel, kde první dvojice specifikuje počáteční bod vektoru a druhá dvojice specifikuje koncový bod vektoru. Souřadnice se musí vyjádřit v aktuálním souřadném systému. Ačkoliv mohou body ležet i v prostoru, přesto musí být napsány jako dvojice čísel. Následující zápis provede vykreslení pěti svislých vektorů na obrazovku, každý v jiné barvě:) (grvecs '(1 (1 2)(1 5) Nakreslí červenou čáru z bodu (1,2) do bodu (1,5). 2 (2 2)(2 5) Nakreslí žlutou čáru z bodu (2,2) do bodu (2,5). 3 (3 2)(3 5) Nakreslí zelenou čáru z bodu (3,2) do bodu (3,5). 4 (4 2)(4 5) Nakreslí modrozelenou čáru z bodu (4,2) do bodu (4,5). 5 (5 2)(5 5) Nakreslí modrou čáru z bodu (5,2) do bodu (5,5). ) ) Následující matice vyjadřuje jednotné měřítko pro všechny 3 osy a posuv reprezentovaný vektorem (5.0, 5.0, 0.0) (první tři sloupce představují měřítka, poslední sloupec představuje vektor posunutí - jedná se o rozšířenou transformační matici - viz příkaz nentselp). (help [soubor_helpu [první [příkaz]]]) Vyvolá nabídku Rada. Argumenty: soubor_helpu - název souboru s nápovědou. Jestliže je tento argument prázdný řetězec (" ") nebo chybí zcela, pak AutoCAD použije standardní Help file. Přípona názvu souboru není vyžadována. Jestliže je přesto obsažena
48
Programování v CAD –AutoLISP, Visual LISP v argumentu soubor_helpu, pak AutoCAD hledá pouze soubor s danou příponou. Jestliže není obsažena, pak sám přidá příponu .hlp. první- klíčové slovo specifikující první zobrazené heslo v nápovědě. Jestliže je tento argument prázdný řetězec (" "), pak se zobrazí první heslo v příslušném souboru nápovědy. příkaz - řetězec specifikující počáteční stav v okně Rada. Nabídka argumentů HELP_CONTENTS - zobrazí první položku v souboru rada. HELP_HELPONHELP - zobrazí nápovědu pro použití nápovědy. HELP_PARTIALKEY - zobrazí dialog Rejstřík pro hledání podle počátečních písmen hledaného tématu. Vrací název souboru s nápovědou souboru rady, nebo nil v případě neúspěchu. Jestliže se použije příkaz help bez žádného argumentu, je vrácen prázdný řetězec (" "), v případě neúspěchu pak nil. Jediná chybová hláška, kterou tato funkce může v aplikaci zobrazit, je upozornění o existenci souboru s nápovědou souboru rada. Ostatní chybové hlášky jsou zobrazeny pomocí dialogového okna. Příklad: Následující zápis zobrazí informace o heslu můj_příkaz v souboru nápovědy achelp.hlp: (help "achelp.hlp" "můj_příkaz") (initdia [návěští]) Způsobí zobrazení dialogového okna příkazu, který následuje. Možno použít pro tyto příkazy: _ATTDEF, _ATTEXT, _BHATCH, _BLOCK, _COLOR, _IMAGE, _IMAGEADJUST, _INSERT, _LAYER, _LINETYPE, _MTEXT, _PLOT, _RENAME, _STYLE, _TOOLBAR a _VIEW. Vrací nil. Argument návěští - celé číslo. Jestliže tento argument není uveden či je nenulový, potom pouze první příští použití příkazu způsobí zobrazení dialogového okna namísto komunikace pomocí příkazové řádky. Je-li tento argument nulový, pak všechna předchozí volání dané funkce jsou anulována a je obnoven standardní režim dané funkce - tedy komunikace pomocí příkazové řádky. Příklad: Následující zápis způsobí, že po zadání příkazu _.PLOT dojde k zobrazení dialogového okna příslušného k této funkci: (initdia) (command "_.PLOT")
49
Programování v CAD –AutoLISP, Visual LISP (layoutlist) Vrací seznam všech rozvržení v aktivním výkresu. (layoutlist) vrací ("Rozvržení1" "Rozvržení2") . (osnap bod řetězec_režimu) Funkce osnap vrací bod, který je výsledkem uchopovacího režimu specifikovaného v řetězci (setq bod2 (osnap bod1 "stř")) . (redraw (jménoe [režim])) Pokud se funkce volá bez argumentů, překreslí se aktuální výřez. Pokud se funkce volá s argumentem jména entity, bude překreslena vybraná entita. Režim je celé číslo, jehož hodnoty jsou uvedeny v následujícím 1 Překreslení entity na obrazovce. 2 Vymazání entity. 3 Zvýšení světelnosti entity. 4 Snížení světelnosti entity. (setcfg cfg_jméno cfg_hodnota) Zapisuje data aplikace do sekce AppData souboru acad.cfg. Vrací (v případě úspěchu) hodnotu argumentu cfg_hodnota, jinak nil. cfg_jméno - řetězec představující název sekce a parametru, do kterého se zapisuje hodnota cfg_hodnota. Tento argument musí být řetězec následující formy (max. délka 496 znaků): "AppData/název_aplikace/název_sekce/.../název_parametru" cfg_hodnota - řetězec max. délky 512 znaků. Delší řetězce jsou touto funkcí akceptovány, ale nelze je zpětně vyvolat funkcí getcfg. Následující zápis nastaví v sekci AppData/ArchStuff hodnotu parametru Tl_steny na 8 a vrátí řetězec "8": (setcfg "AppData/ArchStuff/Tl_steny" "8") vrací"8". (setenv název_proměnné hodnota) Nastavuje systémovou proměnnou AutoCADu na specifickou hodnotu. Vrací hodnotu argumentu hodnota. Změny v nastavení se projeví až po novém spuštění AutoCADu. Argumenty funkce: název_proměnné - řetězec specifikující název systémové proměnné, jejíž hodnota má být nastavena. Název musí být napsán v přesném tvaru, jaký je uveden v registru systému.
50
Programování v CAD –AutoLISP, Visual LISP hodnota - řetězec specifikující hodnotu, na níž je nastavena systémová proměnná název_proměnné. Následující příkaz nastaví systémovou proměnnou MaxArray na hodnotu 10 000: (setenv "MaxArray" "10000") vrací "10000". (setfunhelp c:název_příkazu [soubor_nápovědy [téma [příkaz]]]) Zaregistruje uživatelsky definovaný příkaz nápovědy tak, že příslušný soubor a téma nápovědy je vyvoláno pomocí takto vytvořeného příkazu. Argumenty příkazu znamenají: c:název_příkazu - řetězec specifikující název uživatelsky definovaného příkazu. Musí obsahovat předponu c:. soubor_nápovědy - řetězec specifikující název souboru nápovědy. Přípona názvu souboru není vyžadována. Je-li uvedena, AutoCAD hledá pouze soubor s odpovídajícím názvem i příponou. Jestliže přípona uvedena není, AutoCAD hledá soubor_nápovědy s přidanou příponou .hlp. Jestliže takovýto soubor není nalezen, je hledán soubor téhož jména s příponou .ahp. Jestliže není nalezen ani takovýto soubor, AutoCAD hledá soubor bez přípony. téma - řetězec představující ID Tématu nápovědy příkaz - řetězec identifikující typ hledání nápovědy. Příkaz vrací řetězec c:název, v neúspěšném případě pak nil. Tato funkce zkontroluje pouze to, jestli argument c:název obsahuje předponu c:. Naopak nezkontroluje, jestli funkce c:název existuje nebo jestli jsou ostatní uvedené argumenty korektně zadány. Následující příklad ilustruje použití funkce setfunhelp zadáním jednoduché funkce a asociováním funkce s tématem kružnice v souboru nápovědy AutoCADu (acad.hlp): (defun c:rada () (getstring "Stiskni F1 pro vyvolání rady na prázdný příkaz:") ) (setfunhelp "c:rada" "acad.hlp" "kružnice") Po načtení tohoto zápisu a spuštění příkazu rada na příkazovém řádku se po stisknutí F1 zobrazí nápověda pro téma kružnice. Tento příklad funguje, ale neukazuje skutečný účel. Ve skutečnosti by se měl vytvořit vlastní soubor s nápovědou a asociovat tento soubor a témata nápovědy s uživatelsky vytvořenými funkcemi. Další příklad definuje funkci test: (defun c:test()(getstring "\nTEST: " )(princ))
51
Programování v CAD –AutoLISP, Visual LISP Následuje asociování této funkce s voláním nápovědy (použitím HELP_PARTIALKEY - viz příkaz help) pro téma "úsečka": (setfunhelp "c:test" "acad.hlp" "úsečka" "HELP_PARTIALKEY") Nyní se, po spuštění příkazu test a stisku klávesy F1, zobrazí dialogové okno Témata nápovědy se slovem "line" v Rejstříku pro hledání nápovědy pro toto téma. Poznámka: Použití funkce defun pro vytvoření funkce ve tvaru C:XXX odstraní název funkce registrovaný pomocí funkce setfunhelp (jestliže existuje). Proto by se měl příkaz setfunhelp používat pouze až po použití příkazu defun (použitém pro vytvoření příkazu uživatelem). (setvar jméno_prom hodnota) Tato funkce přiřazuje systémové proměnné AutoCADu hodnotu (setvar "FILLETRAD" 0.5) . Nastavení poloměru zaoblení. (setview popis_pohledu [id_výřezu]) Nastaví specifikovaný výřez jako aktuální. V úspěšném případě vrací hodnotu argumentu popis_pohledu. Atributy funkce jsou: popis_pohledu - seznam definující entitu ve tvaru výstupu funkce tblsearch, která je aplikovaná na tabulku v dialogu POHLED id_výřezu - celé číslo identifikující výřez pohledu, který má být nastaven jako aktuální. Jestliže je tato hodnota 0, pak je jako aktuální pohled nastaven stávající výřez. Tuto hodnotu lze získat ze systémové proměnné CVPORT. (snvalid název_symbolu [návěští]) Ověřuje platnost znaků v názvu tabulky znaků. Funkce zkoumá systémovou proměnnou EXTNAMES k určení pravidel pro aktivní výkres. Jestliže hodnota EXTNAMES je 0, pak funkce snvalid potvrdí použití pravidel názvu symbolu dříve než AutoCAD2000. Jestliže je tato hodnota 1 (základní hodnota), pak funkce snvalid potvrdí použití pravidel pro rozšířené názvy symbolů s AutoCAD2000. Následující položky není možno použít jako názvy symbolů bez ohledu na nastavení syst. proměnné EXTNAMES: kontrolní a grafické znaky, nulové řetězce, svislé čárky jako první a poslední znak v názvu, AutoLISP není schopen omezit délku názvu symbolu, pokud EXTNAMES má hodnotu 1. Atributy název_symbolu - řetězec specifikující název symbolu, 52
Programování v CAD –AutoLISP, Visual LISP návěští - celé číslo určující možnost či nemožnost výskytu svislé čárky v argumentu název_symbolu. Neumožňuje výskyt svislé čárky kdekoli v argumentu název_symbolu, umožňuje výskyt svislé čárky kdekoli v argumentu název_symbolu (mimo první a poslední znak názvu) Vrací T, jestliže název_symbolu je platný název symbolu v tabulce, jinak vrací nil. Jestliže EXTNAMES má hodnotu 1, pak všechny znaky jsou povoleny kromě kontrolních a grafických znaků a následujících: < > / \ ":?*|,=`; Název symbolu může obsahovat mezery. Jestliže EXTNAMES má hodnotu 0, pak se názvy symbolů v tabulce mohou skládat z malých a velkých písmen abecedy, číslic, znaku "dolaru" ($), podtržítka a pomlčky. Příklady: EXTNAMES má hodnotu 1: (snvalid "hocus-pocus") vrací T (snvalid "hocus pocus") vrací T (snvalid "hocus%pocus") vrací T EXTNAMES má hodnotu 0: (snvalid "hocus-pocus") vrací T (snvalid "hocus pocus") vrací nil (snvalid "hocus%pocus") vrací nil Následující příklady obsahují v názvech svislé čárky: (snvalid "hocus|pocus") vrací nil Běžně je svislá čárka v názvu vyhodnocena jako neplatný znak. V následujícím příkladu je nastaven argument návěští na hodnotu 1, proto příkaz snvalid umožní vyhodnotit název se svislou čárkou jako platný (pokud ovšem tento znak není jako první či poslední): (snvalid "hocus|pocus" 1) => T (startapp aplikace [soubor]) Spustí Windows aplikaci. Vrací celé číslo větší než nula, v případě neúspěchu vrací nil. Argumenty funkce: aplikace - řetězec specifikující aplikaci, která se má spustit. Pokud tento argument neobsahuje celou cestu k aplikaci, pak se hledají adresáře aplikace v systémové proměnné PATH. soubor - řetězec specifikující název souboru, který se má otevřít. Následující zápis spustí Windows Notepad a otevře soubor acad.lsp: (startapp "notepad" "acad.lsp") vrací 33 Pokud nějaký argument obsahuje mezeru, musí být uvnitř dvojitých uvozovek.
53
Programování v CAD –AutoLISP, Visual LISP Například pro editaci souboru můj test.txt v Notepadu se použije následující syntaxe: (startapp "notepad.exe" "\"můj test.txt\"") (tablet kód [řada1 řada2 řada3 směr]) Opraví a nastaví kalibraci digitizéru (tablet). Parametr kód - celé číslo z následujících možností: Vrací aktuální kalibraci digitizéru. V tomto případě nesmí být uveden volitelný argument. Nastaví kalibraci podle následujících argumentů. V tomto případě je nutné zajistit nové nastavení kalibrace (řada1 řada2 řada3 směr). řada1, řada2, řada3 - body ve 3D. Tyto tři argumenty specifikují tři řádky transformační matice tabulky. Třetí člen v argumentu řada3(z) je vždy roven 1: tablet vrátí tuto hodnotu vždy jako 1, i když bude v argumentu řada3 nastavena jiná hodnota. směr - jeden bod ve 3D. Vyjadřuje vektor (vyjádřený v globálním souřadném systému), který je kolmý k rovině, která představuje plochu tabletu. Jestliže funkce tablet zhavaruje, pak vrací nil a nastaví systémovou proměnnou ERRNO na hodnotu, která indikuje důvod chyby. Toto může nastat, když digitizér není tablet. Příklad: Velmi jednoduchá transformace, jež se může provést příkazem tablet, je identita: (tablet 1 '(1 0 0) '(0 1 0) '(0 0 1) '(0 0 1)) (ver) Vrací řetězec obsahující aktuální verzi AutoLISPu. Tato funkce může být použita pro ověření kompatibility programů. Vrací řetězec v následující formě: "Visual LISP version (nn)", kde argument version je číslo stávající verze a nn je dvoupísmenný popis jazyku - viz následující možnosti: (de) němčina, (en) angličtina, (es) španělština, (fr) francouzština, (it) italština. (ver) vrací "Visual LISP 2000 (en)", nebo u starších verzí AutoCADu (ver) vrací "AutoLISP verze 11.0" . 54
Programování v CAD –AutoLISP, Visual LISP (vports) Funkce vrací seznam popisů aktuálních výřezů, identifikační číslo výřezu a umístění levého dolního a pravého horního rohu výřezu. Proměnná TILEMODE musí být nastavena na ON. Potom příkaz (vports) vrací pro danou konfiguraci výřezů ((5 (150 0.0) (300 150)) (2 (150 0.5) (300 300)) (3 (0.0 150) (150 300)) (4 (0.0 0.0) (150 150)))
2.6.14.3 Příkazy pro práci se seznamem jmen Seznam jmen (slovník, dictionary) obsahuje seznam jmen stylů, které nejsou obsaženy v tabulkách. Seznam jmen je negrafickým objektem ve výkrese. Díky seznamu jmen aplikace mohou přistupovat k negrafickým informacím. Např. obsahuje jméno stylu vykreslování, multičáry, skupin… (dictadd ejméno symbol nový_objekt) Přidá negrafický objekt do specifikovaného seznam jmen. ejméno - jméno seznamu jmen, do kterého se má objekt vložit, symbol - klíčové slovo objektu přidávaného do seznamu jmen; musí být jednoznačný výraz, který není dosud obsažen ve seznamu jmen, nový_objekt - negrafický objekt přidávaný do seznamu jmen. Každý přidávaný objekt musí být jednoznačný v daném seznamu jmen. Přidání stejné skupiny objektů pod různými klíčovými slovy by vyústilo ve vytvoření duplicitních jmen dané skupiny, což by při použití funkce dictnext vytvořilo nekonečnou smyčku. Vrací jméno entity patřící objektu přidanému do seznamu jmen. Příklad: 1. Vytvoření seznamu jmen jako seznam LISPu: (setq dictionary (list '(0 . "DICTIONARY") '(100 . "AcDbDictionary"))) 2. Vytvoření objektu ve seznamu jmen použitím funkce entmakex: (setq xname (entmakex dictionary)) 3. Přidání seznam jmen do pojmenovaného objektu seznamu jmen: (setq newdict (dictadd (namedobjdict) "Můj_seznam_jmen" xname)) 4. Vytvoření seznamu Xrecord: (setq datalist (append (list '(0 . "XRECORD") 55
Programování v CAD –AutoLISP, Visual LISP '(100 . "AcDbXrecord")) '((1 . "Moje data") (10 1. 2. 3.) (70 . 33)))) 5. Vytvoření objektu Xrecord (objekty Xrecord slouží ke shromažďování a správě libovolných dat): (setq xname (entmakex datalist)) 6. Přidání objektu Xrecord do seznamu jmen: (dictadd newdict "DATA_RECORD_1" xname) (dictnext ejméno [rewind]) Najde další položku v seznamu jmen. Argumenty funkce jsou: ejméno - jméno prohledávaného seznamu jmen, rewind - jestliže tento argument je přítomen (a nemá-li hodnotu nil), pak je seznam jmen přetočen na začátek a je zobrazena jeho první položka. Vrací další položku v seznamu jmen nebo nil, je-li dosažen konec seznamu jmen. Výstup je ve formě seznamu dvojic v DXF kódu a hodnot. Vymazané položky seznamu jmen nejsou vypisovány. Nastavení počáteční polohy ve seznamu jmen se provádí příkazem dictsearch. Získání jména seznamu jmen jako entity se provede příkazem namedobjdict. (dictremove ejméno symbol) Odstraní zápis ze specifikovaného seznamu jmen. Odstranění zápisu neznamená jeho vymazání z databáze.To se provádí příkazem entdel. Výjimkami jsou skupiny a styly multičár. Kódy zahrnující tyto položky vyžadují, že databáze a tyto seznamu jmen jsou aktualizovány, a proto dojde automaticky k výmazu těchto entit při odstranění (pomocí dictremove) ze seznamu jmen. Kde parametry: ejméno - jméno modifikovaného seznamu jmen, symbol - položka, jež se má odstranit ze seznamu jmen ejméno. Vrací název odstraněné entity. Jestliže je ejméno neplatné nebo symbol nebyl nalezen, vrací nil. Příklad: Následující zápis vymaže seznam jmen vytvořený v příkladu použití funkce dictadd: (dictremove (namedobjdict) "můj_seznam_jmen") vrací jméno např. <Entity name: 1d98950> (dictrename ejméno staré_jméno nové_jméno) Přejmenuje zápis v seznamu jmen, kde: ejméno - jméno modifikovaného seznamu jmen, 56
Programování v CAD –AutoLISP, Visual LISP staré_jméno - původní klíčové slovo, nové_jméno - nové klíčové slovo. Vrací hodnotu nové_jméno, pokud přejmenování proběhlo úspěšně. Jestliže se staré_jméno ve seznamu jmen nevyskytovalo nebo je nové_jméno neplatné či je již ve seznamu jmen použito, pak vrací nil. Příklad: Následující příklad přejmenuje seznam jmen vytvořený v příkladu příkazu dictadd: (dictrename (namedobjdict) "Můj_seznam_jmen" "Vedlejší_seznam_jmen") vrací "Vedlejší_seznam_jmen" (dictsearch ejméno symbol [setnext]) Vyhledá položku ve seznamu jmen, kde: ejméno - jméno prohledávaného seznamu jmen symbol - řetězec specifikující položku hledanou ve seznamu jmen setnext - jestliže je uveden a není nil, pak se při dalším volání příkazu Dictsearch vyhledá položku následující po položce vyhledané při předchozím použití této funkce. Funkce vrací vyhledanou položku, v případě neúspěchu vrací nil. (namedobjdict) Vrací jméno entity přiřazené základnímu seznam jmen. Seznam jmen je negrafickým objektem ve výkrese. Díky seznamu jmen aplikace mohou přistupovat k negrafickým informacím ve výkrese.
2.6.15 Funkce, podprogramy, lokální a globální proměnné (defun jméno seznam_argument_výraz ...) Definuje funkci danou jménem např. (defun funkce (x y)...) funkce přebírá dva argumenty, (defun funkce (/ a b)...) funkce má dva lokální symboly, (defun funkce ( )...) funkce nemá žádný argument ani lokální symbol. Příklad (defun add10 (x) (+ 10 x) ) vrací ADD10, potom (add10 5) vrací 15.
57
Programování v CAD –AutoLISP, Visual LISP C:XXX Funkce -- doplňování příkazů do AutoCADu Lokální a globální proměnné Lokální proměnné si uchovávají svou hodnotu jen po dobu běhu funkce, která je definovala. Jakmile tato funkce skončí, hodnoty lokální proměnné jsou automaticky zrušeny a systém uvolní paměť, kterou tato proměnná používala. Tato činnost je známá jako automatické čištění paměti a je typická pro většinu vývojových prostředí LISPu, například VLISP. Lokální proměnné využívají paměťový prostor efektivněji než proměnné globální. Další velkou výhodou lokálních proměnných je, že pokud jsou použity, je snadnější odladit chyby a spravovat vaše aplikace. U globálních proměnných si nikdy nejste jisti, kdy či v které funkci může být hodnota dané proměnné upravena; u lokálních proměnných je nalezení odpovědi snadnější. Obyčejně naleznete méně vedlejších účinků (když jedna část programu ovlivňuje proměnnou z jiné části programu). Vzhledem k výše uvedeným výhodám jsou v rámci cvičení používány téměř výhradně lokální proměnné. POZNÁMKA Pokud jste již někdy pracovali s AutoLISPem, možná jste si zvykli používat globální proměnné během vývoje aplikace kvůli zkoušení programu při jeho vývoji. Tato praktika nyní díky výkonným nástrojům VLISPu pro odladění chyb ztrácí opodstatnění. V AutoLISPu je umožněno (pomocí funkce defun) definovat funkce tak, aby mohly být přidány do AutoCADu jako nové příkazy. Funkce musí mít jméno ve tvaru C:XXX, kde XXX je jméno funkce napsané velkými písmeny. Funkce musí být definovaná bez argumentů, lokální proměnné jsou povoleny. Jako příklad je uvedena tvorba příkazu pro kreslení čtverce: (defun C:CTVEREC (/bod1 bod2 bod3 bod4 len) (setq bod1 (getpoint "Levý dolní roh: ")) (setq len (getdist bod1 "Délka jedné strany: ")) (setq bod2 (polar bod1 0.0 len)) (setq bod3 (polar bod2 (/ pi 2.0) len)) (setq bod4 (polar bod3 pi len)) (command "PLINE" bod1 bod2 bod3 bod4 "C") ) Lokální proměnné jsou deklarovány za znakem obráceného lomítka v příkazu defun uvozujícím funkci. První volání getpoint požádá uživatele o výběr počátečního bodu. Koncový bod pro nastavení délky strany je potom určen vzhledem k tomuto počátečnímu bodu. Potom se již dopočítají zbylé vrcholy čtverce a čtverec se vykreslí. 58
Programování v CAD –AutoLISP, Visual LISP Nebo příklad funkce s argumenty a lokálními proměnnými (defun ARGTEST ( arg1 arg2 / ccc ) (setq ccc "Constant string") (strcat ccc ", " arg1 ", " arg2) ) Použití funkce v programu (setq newstr (ARGTEST "String 1" "String 2") ) vrací "Constant string, String 1, String 2" S::XXX -- Automatické spouštění Tyto samospustitelné funkce je výhodné vkládat do acad.lsp, kde se sami spustí. Jsou to funkce speciální, jejich použití může někdy vyvolat konflikt s jinými funkcemi.
2.6.16 Menu Vytvořené funkce v LISPovských programech je možné dávat do menu AutoCADu a ty pak spouštět z menu, jako by to byly funkce AutoCADu. Soubory menu AutoCADu musí mít název a příponu. Význam přípon je následný: MNU Šablona souboru nabídky. MNC Kompilovaný soubor nabídky. Binární soubor, který obsahuje řetězce příkazů a syntaxi menu, jež definuje funkčnost a vzhled nabídky. MNR Soubor zdrojů nabídky. Binární soubor, který obsahuje bitmapy používané v nabídce. MNS Zdrojový soubor nabídky (vytvářený AutoCADem). MNT Soubor zdrojů nabídky. Tento soubor je vytvářen, pokud soubor MNR je nedostupný (např. pouze ke čtení). MNL LISP soubor nabídky. Soubor, který obsahuje výrazy AutoLISPu, které jsou používané v souboru nabídky a jsou načítány do paměti při načítání stejnojmenného souboru nabídky. (menucmd řetězec) Funkce přepíná submenu v menu AutoCADu. Argument řetězec má tvar sekce=submenu, kde sekce je S pro obrazovkové menu, B pro tlačítkové menu, I pro ikonové menu, 59
Programování v CAD –AutoLISP, Visual LISP P1-P10 pro roletové menu 1-10, T1-T4 pro tabletové menu 1-4, A1 pro pomocné tlačítkové menu, Submenu specifikuje, které submenu má být aktivováno. Jménem musí být buď jedno z návěští submenu (bez **), nebo jméno sekce hlavního menu. Úvodní znak $ se zde nepoužívá (menucmd "S=OSNAP") . (menugroup jméno_skupiny) Kontroluje, která skupina menu je načtena. Pokud se argument shoduje s načtenou skupinou menu, vrací argument jméno_skupiny menu, jinak vrací nil. Argument, jmeno_skupiny - řetězec reprezentující jméno skupiny menu.
2.6.17 Přístup k entitám a zařízením Přístup k AutoCADovským entitám, vstupním zařízením a ke grafické obrazovce zajišťují speciální funkce. Pomocí těchto funkcí je možné v souborech vyhledávat databázový záznam entity a jeho vektory. Jsou naimplementovány dva speciální typy dat: jméno entity a výběrová množina. Pomocí jména entity jako ukazatele je možné v souboru vyhledat databázový záznam entity a jeho vektory. Výběrová množina je množina obsahující jména entit. Jména entit a výběrové množiny jsou platné jen v průběhu práce s grafickým editorem a jsou platné pouze během jedné editace výkresu. Lze zapnout indexování entit. Indexy jsou potom trvalými identifikátory entit. AutoCAD pracuje s indexy jako s řetězci složenými z hexadecimálních čísel.
2.6.17.1
Funkce pracující s výběrovými množinami
(gc) Funkce uvolňuje nepoužitou paměť, viz příkaz ssget. (ssget [režim][bod1[bod2]] Pomocí této funkce získá programátor výběrovou množinu. Argument režim specifikuje typ výběru množin (Crossing, Window atp.). Argument bod1 a bod2 jsou seznamy, které specifikují výběrové body. Funkce bez všech argumentů žádá vybrání objektů. Výběrové množiny obsahují pouze hlavní prvky, nikoliv atributy nebo vrcholy křivek. Výběrové množiny používají dočasných souborů. Pro AutoCAD je 60
Programování v CAD –AutoLISP, Visual LISP možno otevřít 128 výběrových množin. Pokud je toto překročeno, odmítá AutoCAD vytvářet další množiny. Pokud jste dosáhli tohoto počtu, je třeba aktivovat funkci gc. Příklad: (ssget "C" '(0 0) '(1 1)) , (ssget "X" filtr_seznam) . Při režimu "X" prochází celý výkres a vytváří výběrovou množinu obsahující jména všech hlavních entit, splňující specifikovaná kritéria. Argument filtr určuje, která vlastnost entit bude filtrována. Např.: (ssget "X" (list (cons 0 "circle"))) vrací výběrovou množinu sestávající se ze všech kružnic výkresu (skupinový kód 0 specifikuje typ entity). Pro více definovaných podmínek je zápis takovýto: (ssget "X" (list (cons 0 "circle")(cons 8 "slabá"))). Skupinové kódy přijímané funkcí ssget jsou: Kód 0 2 3 6 7 8 38 39 62 66 210
Význam Typ entity. (Náhradní znaky jsou povoleny.) Jméno bloku. (Náhradní znaky jsou povoleny.) Kótovací entity. (Náhradní znaky jsou povoleny.) Typ čáry. (Náhradní znaky jsou povoleny.) Typ písma pro text a definici atributů. (Náhradní znaky jsou povoleny.) Jméno hladiny. (Náhradní znaky jsou povoleny.) Zdvih (reálné číslo). Bude vynechán v příští verzi. Tloušťka (reálné číslo). Číslo barvy (0 BYBLOCK, 256 BYLAYER). Jméno atributu pro odkazy na blok. 3D směrový vektor (seznam tří reálných čísel).
(ssgetfirst) Určí, které objekty jsou vybrány a uchopeny. Vrací seznam dvou výběrových množin ve tvaru výstupu funkce sssetfirst. První prvek seznamu je výběrová množina entit, které jsou uchopeny, ale nevybrány. Druhý prvek je výběrová množina entit, které jsou uchopeny i vybrány. Jeden nebo oba prvky výstupního seznamu této funkce mohou nabývat hodnoty nil. Touto funkcí mohou být analyzovány pouze entity vyskytující se v aktuálním výřezu či v aktuálním výkresu. Nemohou být analyzovány negrafické objekty a entity definované v jiném bloku. (sssetfirst uchopení [vybrání]) Nastaví, které objekty jsou vybrány a uchopeny. Výběrová množina objektů specifikovaná argumentem uchopení je uchopena, výběrová množina objektů specifikovaná argumentem vybrání je uchopena i vybrána. Jestliže jsou některé 61
Programování v CAD –AutoLISP, Visual LISP objekty v obou výběrových množinách, pak příkaz sssetfirst pouze uchopí a vybere výběrovou množinu specifikovanou argumentem vybrání (neuchopí výběrovou množinu specifikováno argumentem uchopení). Je nutné vytvořit platnou výběrovou množinu. Například, pokud je třeba ověřit, že pozadí výřezu (DXF kód 69) není zahrnuto ve výběrové množině. Nebo pokud je třeba ověřit, že vybrané objekty leží v aktuálním rozvržení - viz příklad: (setq ss (ssget (list (cons 301 (getvar "ctab"))))) Argument: uchopení - výběrová množina, která má být uchopena. Jestliže je tento argument rovný nil a argument pickset je specifikován, pak sssetfirst uchopí a vybere množinu pickset. Jestliže je gripset rovný nil a pickset není specifikován, pak sssetfirst "vypne" uchopení a výběrovou množinu stále udržuje "vybranou". vybrání - výběrová množina, která má být vybrána. Poznámka: Funkce ssgetfirst se nesmí použít, pokud AutoCAD vykonává jiný příkaz. (sslength vm) Tato funkce vrací celé číslo, které obsahuje počet entit ve výběrové množině vm (setq sset (ssget "L") (sslength sset) vrací 1 . (ssname vm index) Funkce vrací jméno entity výběrové množiny vm, pořadí určuje argument index. První element množiny má index 0. Nejdříve musí být vytvořena výběrová množina ss, (setq ent1 (ssname ss 0)) vrací jméno entity. (ssnamex výběrová_množina [index]) Zobrazí informace o tom, jak byla výběrová množina vytvořena. Touto funkcí mohou být analyzovány pouze entity vyskytující se v aktuálním výřezu či v aktuálním výkresu. Nemohou být analyzovány negrafické objekty a entity definované v jiném bloku. Atributy: výběrová_množina - výběrová množina, index - celé či reálné číslo specifikující element ve výběrové množině. První element výběrové množiny má index 0. V úspěšném případě vrací tato funkce jméno entity (určené indexem) spolu s daty, které popisují, jak byla entita vybrána. Pokud v příkazu není uveden argument index, pak funkce vrací seznam obsahující názvy entit všech elementů výběrové 62
Programování v CAD –AutoLISP, Visual LISP množiny, spolu s daty o tom, jak byla každá entita vybrána. Jestliže argument index má zápornou hodnotu či hodnotu vyšší, než je nejvyšší index ve výběrové množině, pak funkce vrací nil. Data získaná pomocí této funkce mají formu seznamu seznamů, které obsahují informace o každé entitě ve smyslu metody jejího výběru, nebo o polygonu, který byl použit pro výběr jedné či více entit. Každý podseznam, popisující výběr jednotlivé entity, se skládá ze tří částí: ID metody výběru (celé číslo větší než nula), jméno vybrané entity a specifická data výběrové metody popisující, jak byla entita vybrána: ((sel_id1 ename1 (data))(sel_id2 ename2 (data)) ... ) ID metody výběru 0 1 2 3 4
Popis metody Nespecifikováno (např. Všechny poslední atd.) Výběrový čtvereček Okno nebo WPolygon Přes okno nebo CPolygon Napříč
(ssadd [ejméno [vm]]) Pokud je funkce volaná bez argumentů, vytvoří novou prázdnou množinu. Pokud je volaná s argumentem ejméno, vytvoří novou množinu obsahující toto jméno entity. Pokud jsou volány všechny argumenty, je nový prvek přidán k již existující množině. (ssdel ejméno vm) Funkce maže z výběrové množiny vm jméno entity ejméno a vrací jméno výběrové množiny vm. (ssmemb ejméno vm) Tato funkce testuje, zda je jméno entity prvkem výběrové množiny.
2.6.17.2 Funkce operující se jmény entit Jak již bylo napsáno výše, každá entita AutoCADu má své jméno. Jméno je osmi místné hexadecimální číslo. Po dobu editace výkresu v AutoCADu se toto jméno nemění, ale při novém načtení výkresu ta samá entita dostane jiné jméno. entnext [ejméno]) Pokud je funkce volána bez argumentu vrátí, jméno první nesmazané entity v databázi. Pokud je volána s argumentem vrátí, první nesmazanou entitu následující v databázi za entitou ejméno. 63
Programování v CAD –AutoLISP, Visual LISP
(entlast) Vrací jméno poslední nesmazané entity. Funkce je často používána k získání jména nové entity, která byla právě přidána pomocí funkce command. (entsel [výzva]) Funkce vybírá entity požadující výběr pomocí bodu. Jako příklad může být uveden režim OSNAP. Funkce vrací seznam, jehož prvním prvkem je jméno vybrané entity a druhým prvkem jsou souřadnice výběrového bodu v aktuálním UCS. (nentsel [výzva]) Tato funkce zpřístupňuje definiční data entity uvnitř vkládané entity. Používá se jako entsel, ale je ji možno použít i na křivky a bloky. (nentselp [výzva] [bod]) Vykonává podobnou funkci jako příkaz nentsel, ovšem bez nutnosti výběru objektu uživatelem. Vrací jméno entity a souřadnice výběrového bodu. Atributy jsou: výzva - řetězec zobrazující se v příkazovém řádku. Pokud není uveden, zobrazí se text "Vyberte objekt:". bod - bod, ve kterém se provede vybrání objektu. Díky tomuto argumentu není třeba uživatelova vstupu při výběru entity. Nutno zadat ve tvaru '(x y z), kde x, y a z jsou souřadnice bodu. Pokud bod není uveden, je nutno objekt vybrat ručně. (handent index) Jméno entity se může měnit od jednoho editování k druhému, zatímco index je neměnný po celou dobu života entity. Funkce vrací jméno entity spojené s indexem. Argument index je řetězec obsahující index entity. Funkce vrací entity, které byly již smazány, funkce entdel je obnovuje. 2.6.17.3 Funkce operující s daty entit Funkce umožňují získat a modifikovat definiční data entit a tak zasahovat přímo do vzhledu výkresu. (entdel ejméno) Entita určená jménem, je v aktuálním výkresu buď smazána, nebo obnovena, pokud byla v některém předchozím kroku obnovena. Smazané entity jsou při opuštění grafického editoru zrušeny. Tato funkce pracuje pouze s hlavními entitami, atributy nebo vrcholy křivek nelze smazat nezávisle na jejich mateřských entitách. 64
Programování v CAD –AutoLISP, Visual LISP (entget ejméno [ext_data]) Funkce získá z databáze entitu a vrací seznam, obsahující definiční údaje této entity. Je-li přítomen argument ext_data - což je seznam jmen registrovaných aplikací, jsou vrácena i rozšiřující se data vztažena k těmto aplikacím. Seznam je ve tvaru LISPovského asociačního seznamu, jehož položky lze snadno získat pomocí funkce assoc. Obsah tohoto seznamu je následující: (setq ed (entget (setq e (entlast)))) . V tomto případě bude obsahovat proměnná e jméno entity a ed následující seznam. ((-1 . <Jméno entity: 6000003C>) (0 . "TEXT") typ entity (8 . "POPIS") hladina (6 . "TEČKOVANÁ") typ čáry (62 . 5) barva (5 . "7E") index (10 2.0 2.0 0.0) počáteční bod (40 . 3.0) výška (1 . "Text textu") vlastní text (50 . 0.5235) úhel otočení (41 . 1.0) koeficient šířky (51 . 0.0) úhel sklonu (7 . "STANDARD") typ písma textu (71 . 0) generované příznaky (72 . 0) úprava (11 . 0.0 0.0 0.0) zarovnávací bod (210 0.0 -0.642788 0.766044) směrový vektor ) Všechny body spojené s entitou jsou vyjádřeny v pojmech systému souřadnic entity ECS. Pro úsečky, body, 3D úsečky, 3D křivky, 3D plochy, 3D sítě a kóty platí, že ECS je totožný s WCS. Pro ostatní entity platí, že ECS může být odvozen z WCS a směrového vektoru (viz skupina 210). Potom (setq p (cdr (assoc 10 ed))) vrací (2.0 2.0 3.5) (entmake [eseznam]) Tato funkce vytváří novou entitu na výkrese. Je-li tato entita úspěšně vytvořena, funkce vrací seznam jejích definičních dat, v opačném případě vrací nil. Argument 65
Programování v CAD –AutoLISP, Visual LISP eseznam musí být podobný tomu, co vrací funkce entget. Pokud některé požadované informace vynecháte, následuje chybové hlášení. Pokud vynecháte volitelná data (např. hladinu), funkce entmake použije implicitní hodnotu. V následujícím příkladě je vytvořena červená kružnice daná středem a poloměrem. Hladina a typ čáry jsou implicitně nastaveny (entmake '( (0 . "CIRCLE") Jméno entity (62 . 1) Barva (10 4.0 4.0 0.0) Střed (40 . 1.0) Poloměr ) ) (entmakex [elist]) Vytvoří nové objekty či entity, přiřadí entitě jméno (ale nepřiřadí vlastníka) . Vrací jméno nové entity (v případě neúspěchu vrací nil). Umí definovat grafické i negrafické entity. elist - seznam dat pro definici vytvářené entity ve formátu podobném jako výstup funkce entget. Tento seznam musí obsahovat všechny informace nutné k definování dané entity. Jestliže je seznam neúplný, funkce vrací nil. Pokud chybí nepovinná data (např. hladina), je použita přednastavená hodnota. Příklad: (entmakex '((0 . "CIRCLE") (62 . 1) (10 4.0 3.0 0.0) (40 . 1.0))) vrací <Entity name: 1d45558> a vytvoří červenou kružnici (barva 62) o poloměru 1, se středem v bodě [4,4]. Informace o hladině a typu čáry nejsou uvedeny a proto se použijí přednastavené hodnoty. (entmod eseznam) Argument eseznam je ve tvaru seznamu získaného funkcí entget. Funkce entmod aktualizuje v databázi informace o entitě. Posloupnost změn údajů je takováto: v první fázi jsou získána data pomocí funkce entget, v druhé fázi se změní data (výhodná je funkce subst) a nakonec se pomocí funkce entmod aktualizují data v databázi.
66
Programování v CAD –AutoLISP, Visual LISP Například: (setq en (entnext)) Naplní en jménem první entity výkresu (setq ed (entget en)) Naplní ed údaji entity en (setq ed (subst (cons 8 "0") (assoc 8 ed) Změní v ed stávající hladinu na "0" ed ) ) (entmod ed) Realizuje změnu hladiny Funkci nelze použít k modifikaci výřezové entity. (entupd ejméno) Používá se pro zobrazení modifikovaných křivek nebo bloků na obrazovce, týká se pouze jedné entity a je obdobou funkce regen).
2.6.17.4 Funkce operující s rozšířenými daty entit Rozšířená data entit se používají v některých aplikacích AutoCADu jako např. v aplikaci ADE (AutoCAD Data Extension), kde u každé z entit je rozšířena databáze o položku jména výkresu. (regapp aplikace) Tato funkce připojuje jméno aplikace k aktuálnímu výkresu AutoCADu. Jméno aplikace je základním mechanismem pro seskupení, nastavení, obnovení a modifikaci rozšířených dat entit, která daná aplikace tvoří. Argument aplikace je řetězec s maximálně 31 znaky bez mezer. (xdroom ejméno) Tato funkce vrací množství prostoru pro rozšířená data entit, který je možný pro entitu ejméno. V případě neúspěchu vrací funkce nil. Prostor Xdata je limitován 16383 bytu na entitu (xdroom vjméno) vrací 16162 . (xdsize seznam) Tato funkce vrací velikost v bytech, která je přidělena seznamu, je-li přidán k entitě jako rozšířená data entit.
67
Programování v CAD –AutoLISP, Visual LISP Argument seznam musí být platný seznam pro Xdata, který musí obsahovat jméno aplikace, které bylo předem registrováno použitím funkce regapp. Argument seznam může začínat kódem -3, není to nutné, ale musí být vše v závorkách. Například (-3 ("MOJEAPL" (1000 . "SUITOFERMOR") (1002 . "{") (1040 . 0.0) (1040 . 1.0) (1002 . "}") ) ) .
2.6.17.5 Přístup k tabulkám symbolů Jedná se o tabulky následujících jmen: Layer, Ltype, View, Style, Block, Ucs, Vports, ve kterých je nastavení některých vlastností výkresu. (tablnext jméno_tabulky [převiň]) Tato funkce se používá k prohlížení tabulky symbolů. První argument je řetězec, který specifikuje požadovanou tabulku. Platná jména tabulek jsou Layer, Ltype, View, Style, Block, Ucs, Vports. Je-li uveden i druhý argument a není-li nil, je umožněn přístup k první položce tabulky, v opačném případě je umožněn přístup k druhé položce tabulky. Např.: (tablnext "LAYER" T) může vrátit ( (0 . "LAYER") (2 . "0") (70 . 0) (62 . 7) (6 . "PLNÁ") ) (tblobjname jméno_tabulky symbol) Vrací jméno entity vyskytující se ve specifikované tabulce symbolů, je-li symbol nalezen. Parametry funkce: jméno_tabulky - řetězec identifikující tabulku symbolů, která se má prohledat. Tento argument nerozlišuje malá a velká písmena. symbol - řetězec identifikující hledaný symbol Název entity získaný touto funkcí je možné použít ve funkcích entget a entmod. Následující příkaz vyhledává název bloku zapsaném jako "ESC-01": 68
Programování v CAD –AutoLISP, Visual LISP (tblobjname "block" "ESC-01") vrací <Entity name: 1dca368> (tblsearch jméno_tabulky symbol [nastav_další]) Tato funkce prohledává tabulku symbolů obdobně jako tablnext a hledá jméno symbolu určené argumentem symbol. Jakmile je nalezena položka určená symbolem, je vrácen seznam stejný jako u předešlého příkazu (tblsearch "style" "standard") . Pokud argument nastav_další je uveden a není nil, tak při následujícím použití funkce tblnext bude nastavena další položka v pořadí.
2.6.17.6 Přístup ke grafické obrazovce a ke vstupním zařízením (graphscr) Funkce přepíná z textové obrazovky na grafickou. (grclear) Tato funkce smaže aktuální výřez. (grdraw odkud kam barva [světelnost]) Funkce nakreslí v aktuálním výřezu mezi dvěma body vektor. (grtext [obdélník text [světelnost]]) Funkce umožňuje zápis do textových oblastí obrazovky. Funkce lze volat hodnotou argumentu obdélník, do kterého funkce zobrazí obsah argumentu text. Text bude zkrácen, jestliže je delší než šířka menu. (grread [odečet]) Funkce umožňuje odečítání hodnot ze vstupních zařízení, rovněž také grafického. Pokud je argument odečet uveden a není nil a se vstupním zařízením je pohybováno, umožňuje funkce ze zařízení získávat souřadnice. Tento princip je využíván v režimu vlečení. Funkce vrací seznam, jehož prvním členem je kód specifikující typ vstupu. Druhým členem seznamu je podle typu vstupu buď celé číslo, nebo seznam bodů. Následující tabulka uvádí kódy pro první člen seznamu: 2 znak klávesnice 3 výběrový bod 4 vybraná položka obrazovkového menu 5 druhý člen jsou souřadnice vlečení 6 vybraná položka tlačítkového menu 7 odečtená položka tabletového menu 1 8 odečtená položka tabletového menu 2 69
Programování v CAD –AutoLISP, Visual LISP 9 10 11 12
odečtená položka tabletového menu 3 odečtená položka tabletového menu 4 odečtená položka pomocného menu souřadnice spojené s výběrovým tlačítkem
2.7 Příkazy dialogového panelu Programování dialogových panelů je zejména vhodné pro vytvoření uživatelsky příjemného prostředí v AutoCADu. Program ovládání dialogového panelu se musí mít příponu souboru .dcl (dialog control language).V jednom souboru může být několik dialogových panelů. Podpůrné sobory pro panely jsou acad.dcl a base.dcl. Lze říci, že dialogový panel není nezbytně nutný pro programování ve VLISPu. Je to spíš taková nadstavba pro přehlednost zadávání hodnot proměnných. Vše, co lze zadat v dialogovém panelu, lze zadat i z příkazové řádky.
2.7.1 Funkce pro tvorbu dialogových panelů Tyto funkce se používají v .dcl souboru definice dialogového panelu a vytvářejí jeho vzhled a přestavují hodnoty proměnných dle nastavení uživatele. label = "string"; Definuje to co bude napsáno jako text na dialogovém panelu. Podle umístění v .dcl souboru může být text na dialogovém panelu napsán jako název celého dialogového panelu, jako název části dialogového panelu, jako poznámka nebo jako upozornění uživateli, co má napsat do příslušného okna. : text { } Definuje text napsaný na dialogovém panelu. Může mít formu poznámky, upozornění : text_part { } Definuje rozlehlejší část dialogového panelu s textem. : concatenation { } Slučuje texty napsané pomocí text_part do jedné řádky. Řádku automaticky protáhne, jak je třeba. : edit_box { } Definuje textové pole dialogového panelu. 70
Programování v CAD –AutoLISP, Visual LISP
key = "název"; Jméno proměnné, na které se přiřadí řetězec zapsaný v dialogovém panelu, nebo jméno tlačítka dialogového panelu. Na tato jména se odkazujte v souboru psaném v jazyce LISP, který má daný dialogový panel používat. : row { } Definování např. řádku tlačítek. : column { } Definování sloupce tlačítek. : button { } Definování tlačítka. : radio_button { } Definuje „rádio tlačítko“. To se dá použít místo tlačítka a zátržítka (toggle). Je to kruh, který, když je vyplněn, je „on“, jinak je „off“. : radio_column { } Vytvoří sloupec „rádiových tlačítek“, ze kterých může být označeno jen jedno. : radio_row { } Vytvoří řádku „rádiových tlačítek“, ze kterých může být označeno jen jedno. : spacer { } Vytvoření prázdného pole, které nic nezobrazuje. Používá se např. k oddělení sousedních polí. : dialog { } Definování dialogového panelu. Píše se na začátku definice. width = číslo; Určuje šířku např. tlačítka v jednotkách znaků. Parametr číslo je celočíselný. height = číslo; Určuje výšku např. tlačítka v jednotkách znaků. Parametr číslo je celočíselný. is_cancel = true/false;
71
Programování v CAD –AutoLISP, Visual LISP Je-li nastaveno true a uživatel stiskne klávesu „zrušit“, tlačítko je vybráno. Pouze jedno tlačítko dialogového panelu může mít nastaveno true. is_default = true/cancel; Je-li parametr true, tlačítko je automaticky vybráno – předvoleno. Implicitní tlačítko je vždy zobrazeno odlišně, např. zvláštní ohraničující čarou. Pouze jedno tlačítko v dialogovém panelu může být přednastaveno. fixed_width = true/false; Je-li nastaveno true, pole nezabere zvláštní prostor, který se zpřístupní v procesu rozmísťování / zarovnání. : boxed_column { } Ohraničí část dialogového panelu tenkým obdélníkem. Slouží pro zpřehlednění dialogového panelu. Dá se použít pro ohraničení polí pro zadávání tlačítek i poznámek. alignment = pozice; Přiřazuje entitě vlastnost. Argument „pozice“ může být např. slovo „centered“. Použije-li se při definování tlačítka ve sloupci, způsobí, že bude umístěno uprostřed sloupce. Možné výrazy argumentu „pozice“ jsou: pro použití ve sloupci – left (defaultní), right, centered pro použití v řádce – top, bottom, centered (defaultní). : toggle { } Definuje tzv. zatrhávátko. To funguje stejně jako tlačítko, tzn. Dává Booleovskou hodnotu „0“ nebo „1“. edit_width = číslo; Specifikuje šířku zadávacího okna v jednotkách znaků. Parametr číslo je celočíselný. : boxed_radio_row { } Vytvoří ohraničenou řádku „rádiových tlačítek“. : boxed_radio_column { } Vytvoří ohraničený sloupec „rádiových tlačítek“.
72
Programování v CAD –AutoLISP, Visual LISP 2.7.2 Funkce pro práci s dialogovými panely Tyto funkce se používají v souboru psaném v jazyce LISP, ve kterém má být daný dialogový panel použit. (action_tile klíč akce) Definuje jednu či více akcí, které se provedou, když se spustí tlačítko, jemuž přísluší zadaný klíč (key). Přiřadí akci k provedení v případě stlačení tlačítka v dialogovém okně. Nelze použít funkce AutoLISPu pomocí příkazu command. Atributy funkce klíč - název tlačítka, které spouští akci akce - akce, která se provede po stisknutí tlačítka klíč Vrací hodnotu T. Příklad: (action_tile "cancel" "(done_dialog) ") , po stisknutí tlačítka "cancel" v dialogovém okně se dialogové okno zavře. (add_list řetězec) Přidá nebo modifikuje řetězec v aktuálním seznamu dialogových oken. Před použitím tohoto příkazu je nutné otevřít seznam a spustit ho příkazem start_list. V závislosti na operaci specifikované v příkazu start_list se řetězec buď do aktuálního seznamu přidá či nahradí stávající položku seznamu. Vrací řetězec přidaný do seznamu, v případě chyby vrací nil. (client_data_tile klíč data) Připojuje zadaná data k prvku dialogového panelu. Atributy klíč - řetězec specifikující tlačítko v dialogovém okně (rozlišuje malá a velká písmena), data - řetězec pro asociování s prvkem dialogového panelu. (done_dialog [status]) Vymaže dialogový panel z obrazovky – ukončí jeho činnost. Vrací seznam souřadnic 2D bodu, jenž určuje, kde byl dialog uživatelem uzavřen. Argument status - kladné celé číslo, které je vráceno funkcí start_dialog, a to číslo 1 po stisknutí OK nebo číslo 0 po stisknutí tlačítka Storno. Význam hodnot argumentu status větších než jedna je určeno aplikací. Funkce done_dialog se musí volat zpětným voláním funkce nebo pomocí akce.
73
Programování v CAD –AutoLISP, Visual LISP (dimx_tile klíč) Funkce získávající rozměry daného prvku panelu. Rozměry jsou v jednotkách dialogového okna. Parametr klíč - řetězec specifikující zkoumaný prvek panelu. Rozlišuje malá a velká písmena. Vrací šířku prvku panelu. Tato hodnota je maximální možná. Protože souřadnice začínají od nuly, tato funkce vrací hodnotu o jedničku menší (X-1) než celkový rozměr ve směru osy x. Funkce dimx_tile a dimy_tile jsou určeny pro použití s funkcemi vector_image, fill_image a slide_image, které požadují absolutní souřadnice prvku panelu. Příklad: (setq tile_width (dimx_tile "my_tile")) (dimy_tile klíč) Získá výšku prvku panelu v jednotkách dialogového okna. Parametr klíč - řetězec specifikující zkoumaný prvek panelu. Rozlišuje malá a velká písmena. Vrací výšku prvku panelu. Tato hodnota je maximální možná. Protože souřadnice začínají od nuly, tato funkce vrací hodnotu o jedničku menší (Y-1) než celkový rozměr ve směru osy y. Funkce dimx_tile a dimy_tile jsou určeny pro použití s funkcemi vector_image, fill_image a slide_image, které požadují absolutní souřadnice prvku panelu. Příklad: (setq tile_heigh (dimy_tile "my_tile")) (end_image) Ukončí vytváření podoby aktivního dialogového okna. Vrací nil. Je doplňkem příkazu start-image.
(end_list) Ukončí zpracování seznamu aktivního dialogového okna. Vrací nil. Je doplňkem příkazu start-list. (get_attr klíč atributy) Vrací počáteční DCL hodnotu atributu zadané položky panelu. Parametry funkce klíč - název tlačítka v dialogovém okně, rozlišuje malá a velká písmena, 74
Programování v CAD –AutoLISP, Visual LISP atributy - jméno atributu, který se objevuje v DCL popisu tlačítka. (fill_image x1 y1 šířka výška barva) Nakreslí vybarvený obdélník tlačítka ve vyobrazení aktivního dialogového okna. Vrací číslo použité barvy. První (horní levý) roh obdélníku je určen souřadnicemi x1, y1, druhý (pravý dolní) roh je určen hodnotami šířka a výška (bráno relativně od prvního rohu). Počátek (0, 0) je totožný s levým horním rohem. Pravý dolní roh se může zadat též funkcemi dimx_tile a dimy_tile. Tato funkce musí být použita pouze mezi funkcemi start_image a end_image. Parametry funkce znamenají: x1 - x-ová souřadnice levého horního rohu obdélníka, musí být pozitivní, y1 - y-ová souřadnice levého horního rohu obdélníka, musí být pozitivní, šířka - šířka vyplněné plochy (v pixlech), relativně od x1, výška - výška vyplněné plochy ( v pixlech), relativně od y1, barva - číslo barvy AutoCADu nebo číslo logické barvy viz tabulka: Číslo barvy ADI mnemonic Popis barvy -------------------------------------------------------------------------------------------–2 BGLCOLOR barva pozadí okna AutoCADu –15 DBGLCOLOR barva pozadí dialogového okna –16 DFGLCOLOR barva "popředí" dialogového okna (textu) –18 LINELCOLOR barva čáry v dialogovém okně Příklad: (setq color -2) ; barva pozadí AutoCADu (fill_image 0 0 (dimx_tile "slide_tile") (dimy_tile "slide_tile") color ) (end_image) (get_tile klíč) Získá průběžný stav zadané položky panelu. Vrací aktuální hodnotu tlačítka v dialogovém okně. Parametr klíč - název tlačítka v dialogovém okně, rozlišuje malá a velká písmena.
75
Programování v CAD –AutoLISP, Visual LISP (load_dialog jméno_souboru) Funkce otevře a načte dcl soubor, kde je dialogový panel definován. Je-li soubor umístěn přímo v instalačním adresáři AutoCADu, stačí napsat jen jeho jméno. Tento příkaz je součástí příkazu unload_dialog. Argument jméno_souboru - řetězec (název) specifikující dcl soubor k otevření. Jestliže tento řetězec neobsahuje příponu souboru, je doplněna automaticky na .dcl. V případě úspěchu vrací kladné celé číslo dcl_id. Jestliže nelze otevřít soubor, pak vrací záporné celé číslo. Číslo dcl_id je použito při volání subsekvencí new_dialog a unload_dialog. Jinak se zadává i cesta k souboru, např.: (load_dialog "A:/různé příklady 02/CELEK/Dialog01.dcl")). (mode_tile klíč mód) Nastavuje stav položky dané klíčem (zatržení, ztmavení, stisknutí). Mód je celočíselný a znamená: 0 aktivní tlačítko 1 neaktivní tlačítko 2 nastavení tlačítka 3 vybrání obsahu tačítka 4 zamění vzhled „vysvícení“ on/off (new_dialog jméno_panelu jméno_prom_přiřazené_souboru [výzva [bod_umístění]]) Zobrazení dialogového panelu ve výchozím umístění. Vrací T (v úspěšném případě), jinak nil. Atributy příkazu: jméno_panelu - řetězec specifikující jméno dialogového okna jméno_prom_přiřazené_souboru - identifikační kód DCL souboru obsahujícího otvírané dialogové okno výzva - řetězec obsahující výraz AutoLISPu, který představuje akci. Jestliže uživatel nechce definovat žádnou akci, je nutné zde napsat prázdný řetězec (" "). Tento argument je vyžadován, jestliže je specifikován argument bod_umístění. Zde nastavené akce jsou provedeny tehdy, jestliže uživatel stiskne takové tlačítko v dialogovém okně, jemuž není přiřazena akce pomocí funkce action_tile nebo v DCL souboru. bod_umístění - seznam 2D souřadnic, který specifikuje x-ovou a y-ovou souřadnici umístění levého horního rohu dialogového okna na obrazovce. Jestliže je použit bod '(-1 -1), pak je dialogové okno otevřeno v základní poloze, tj. uprostřed okna AutoCADu. 76
Programování v CAD –AutoLISP, Visual LISP Např.: (new_dialog "PERO" dcl_id). (set_tile klíč hodnota) Nastavuje průběžný stav zadané položky panelu. Atributy funkce: klíč - řetězec specifikující položku v dialogovém okně, hodnota - řetězec charakterizující nově nastavenou hodnotu. (slide_image x1 y1 šířka výška název_sld) Zobrazí v aktuálním dialogovém okně rastrový obrázek. Vrací řetězec obsahující název_sld. Parametry funkce: x1 - odsazení od levého horního rohu obrázku ve vodorovném směru (v pixelech), musí být větší než nula, y1 - odsazení od levého horního rohu obrázku ve svislém směru (v pixelech), musí být větší než nula, šířka - šířka obrázku (v pixelech), výška - výška obrázku (v pixelech), název_sld - identifikace obrázku. Tento argument může být jméno obrazového souboru (.sld) nebo obrázek v knihovně obrázků (.slb). Specifikace argumentu název_sld se může provést stejným způsobem jako pro příkaz VSLIDE nebo pro menu soubor. Je nutné použít jeden z těchto formátů argumentu název_sld: název_sld nebo název_knihovny(název_sld). První (levý horní) roh obrázku (bod vložení) je umístěn v bodě (x1, y1), druhý (pravý dolní) roh je umístěn relativně vůči prvnímu rohu ve vzdálenosti (šířka, výška). Počátek (0, 0) je umístěn v levém horním rohu obrázku. Souřadnice pravého dolního rohu je možno získat pomocí funkcí (dimx_tile a dimy_tile). Příklad: (slide_image 0 0 (dimx_tile "slide_tile") (dimy_tile "slide_tile") "myslide") (end_image) (start_dialog) Zobrazí dialogové okno a začne akceptovat uživatelské vstupy. Funkce nemá žádné argumenty.Nejprve je nutné inicializovat dialogové okno pomocí příkazu new_dialog. Dialogové okno zůstává aktivní, dokud není zavolána funkce done_dialog. Běžně je funkce done_dialog asociována s položkou, jejíž akce je "accept" (obvykle tlačítko OK) či s položkou, jejíž akce je "cancel" (obvykle tlačítko Storno). 77
Programování v CAD –AutoLISP, Visual LISP Funkce start_dialog vrací nepovinný status (viz done_dialog). Základní hodnota je 1, pokud uživatel stiskne tlačítko OK, 0 po stisknutí tlačítka Storno nebo hodnota -1, pokud jsou všechna dialogová okna ukončena příkazem term_dialog. Jestliže je příkazu done_dialog přiřazen celočíselný status větší než 1, pak start_dialog vrací tuto hodnotu, což znamená, že dialog byl ukončen aplikací. (start_image klíč) Zahajuje tvorbu obrázku v podkladu dialogového okna. Následné volání funkcí fill_image, slide_image a vector_image umožní tvorbu obrázku až do použití příkazu end_image. klíč - řetězec specifikující název textového pole v dialogovém okně. Rozlišuje malá a velká písmena. Vrací argument klíč v případě úspěchu, jinak vrací nil. Poznámka: Nesmí se použít funkce set_tile mezi voláním funkcí start_image a end_image. (start_list klíč (funkce (index))) Některé dialogové panely mohou obsahovat i vícepoložkové seznamy – roletky. Tato funkce je za pomoci následujících příkazů zpracovává.Zahajuje modifikaci seznamu v okně seznamů, vrací název seznamu, s nímž pracuje. Následné volání funkce add_list umožní spuštění seznamu funkcí start_list až do použití příkazu end_list. Parametry funkce: klíč - řetězec specifikující textové pole v dialogovém okně. Rozlišuje malá a velká písmena. operace - celé číslo indikující typ operace prováděném v seznamu. Možnosti: Změní obsah vybraného seznamu Přidá nový prázdný seznam Vymaže starý seznam a vytvoří nový seznam (přednastavená volba) index - číslo indikující položku seznamu, která se má změnit. První položka v seznamu má index 0. Není-li tento argument uveden, předpokládá se hodnota 0. Tento argument je ignorován, jestliže start_list neprovádí změny (tedy např. vytváří nový seznam). Poznámka: Nesmí se použít funkce set_tile mezí voláním funkcí start_list a end_list. (term_dialog) Ukončí všechna aktivní dialogová okna jako kdyby uživatel uzavřel všechna tato okna sám. Pokud je nějaká aplikace ukončena a zároveň je otevřen nějaký DCL
78
Programování v CAD –AutoLISP, Visual LISP soubor, pak AutoCAD zavolá term_dialog automaticky sám. Tato funkce se používá především pro zavření dialogových oken naskládaných na sobě. Vždy vrací nil. (unload_dialog id_panelu) Funkce zavře soubor, ve kterém je dialogový panel definován. Důležité je jméno proměnné, pod kterým je soubor uložen, např.: (unload_dialog dcl_id). Není ovšem nezbytně nutné vymazávat DCL soubor z paměti, ledaže se zmenšuje paměť nebo je potřeba aktualizovat DCL definici dialogu z nového souboru. Tato funkce vždy vrací nil. Parametr Id_panelu - identifikátor DCL souboru získaný z předcházejícího volání funkce load_dialog. (vector_image x1 y1 x2 y2 barva) Kreslí vektor v zobrazení aktivního dialogového okna, které je otevřeno funkcí start_image, a to z bodu (x1, y1) do bodu (x2, y2). Počátek (0, 0) leží v levém horním rohu obrázku. Je možné získat souřadnice pravého dolního rohu voláním funkcí dimx_tile a dimy_tile. Atributy funkce: x1 - x-ová souřadnice prvního bodu, y1 - y-ová souřadnice prvního bodu, x2 - x-ová souřadnice druhého bodu, y2 - y-ová souřadnice druhého bodu, barva - číslo barvy AutoCADu. Vrací celé číslo reprezentující barvu vektoru. Příklad: (setq color -2) ; barva pozadí AutoCADu (vector_image 0 0 (dimx_tile "slide_tile") (dimy_tile "slide_tile") color) (end_image)
79
Programování v CAD –AutoLISP, Visual LISP
2.7.3 Ukázka definování dialogového panelu PERO : dialog { label = "Pero těsné"; : text { label = "Parametry pera"; } : edit_box { label = "&Průměr"; key = "prum"; edit_width = 6; } : edit_box { label = "&Délka"; key = "delka"; edit_width = 6; } : row { : spacer { width = 1; } : button { label = "OK"; is_default = true; key = "accept"; width = 8; fixed_width = true; } : button { label = "Storno"; is_cancel = true; key = "cancel"; width = 8; fixed_width = true;
//jméno dialogového panelu je: PERO //v hlavičce panelu bude napsáno: Pero těsné //nad definicí parametrů bude napsáno: Parametry pera // definuje textové pole Průměru hřídele //před polem pro zadání je napsáno „Průměr“
// definuje textové pole Délka pera
// definuje řádek pro tlačítka OK/Storno //mezera mezi tlačítky je „1“ // definuje tlačítko OK //text na tlačítku OK //nastaveno jako defaultní //hodnota je přiřazena na „accept“ //šířka tlačítka je „8“ //šířka tlačítka zůstává konstantní // definuje tlačítko Storno //toto tlačítko ukončí dialogový panel
} : spacer { width = 1;} } } 80
Programování v CAD –AutoLISP, Visual LISP 2.7.4 Ukázka spojení dialogového panelu se LISPovským souborem Soubor dialogového panelu sinus. sinus : dialog { label = "Přiklad zadávání hodnot"; : text { label = "Hodnoty pro sinusovku"; } : edit_box { // definuje textové pole Amplituda label = "&Amplituda"; key = "Ampl"; edit_width = 6; } : edit_box { // definuje textové pole Frequence label = "&Frequence"; key = "Freq"; edit_width = 6; } : row { // definuje řádek pro tlačítka OK/Storno : spacer { width = 1; } : button { // definuje tlačítko OK label = "OK"; is_default = true; key = "accept"; width = 8; fixed_width = true; } : button { // definuje tlačítko Storno label = "Storno"; is_cancel = true; key = "cancel"; width = 8; fixed_width = true; } : spacer { width = 1;} } }
81
Programování v CAD –AutoLISP, Visual LISP Soubor pro zadávání a přenos dat (defun C:PANEL ( / am fr Ampl1 Freq1);Volá dialog. panel a přiřazuje zadané hodnoty (setq Ampl1 15.0 ; nastavení proměnných pro zobrazení v okně freq1 20.0 ) (setq dcl_id (load_dialog "c:/home/sevcik/sinus.dcl")); otevření souboru panelů (new_dialog "sinus" dcl_id);volba dialogu
(set_tile "Ampl" (rtos Ampl1 2 2)); Nastaví počátečního stavu ampl a freq (set_tile "Freq" (rtos freq1 2 2)) ; Akce, které se mají provést, když se zvolí tlačítko OK, nebo Storno. ; Načítají se do panelu jako řetězce. ; Nad oběma musí být funkce done_dialog. (action_tile "cancel" "(done_dialog) ") (action_tile "accept" (strcat "(progn (setq am (atof (get_tile \"Ampl\")))" "(setq fr (atof (get_tile \"Freq\")))" "(done_dialog))" ) ) ;spuštění dialogu (start_dialog)
; Zavření souboru s dialogem (unload_dialog dcl_id) ;Tisk výsledků (print am) (print fr) )
82
Programování v CAD – Prostředí ActiveX
2.8 Prostředí ActiveX v AutoLISPu a Visual LISPu Prvky ActiveX umožňují rychlejší operaci s objekty z AutoLISPu a umožňují také interakci s ostatními aplikacemi z Windows. ActiveX prvky jsou použitelné i v dalších programovacích jazycích, jako například C++, Visual Basic, Delphi a další. Pakliže pracujete s ActiveX objekty, pracujete s těmi samými objekty, sounáležitostmi a metodami se kterými je možno pracovat i v jiných programovacích prostředích. Objekty jsou hlavními stavebními bloky ActiveX aplikace. Například entity AutoCADu, jako čáry, oblouky, křivky a kružnice, jsou dané objekty. Ale v schématu ActiveX programování jsou následující prvky reprezentovány též jako objekty: typy čar, typy popisu kót, organizační struktury jako hladiny, skupiny a bloky, display, pohled, výřez, výkresový prostor a prostor nákresu, výkres a aplikace AutoCADu jsou také objekty. ActiveX je daleko více flexibilní než standardní AutoLISP funkce entget, entmod, setvar. Například je-li potřeba zjistit poloměr kružnice: - AutoLISPu musíte dostat soupis entit, zjistit jméno dané kružnice a pak zjistit průměr kružnice vyjmutím z řetězce, (setq radius(cdr (assoc 40 (entget circle-entity)…), - v ActiveX funkci se jednoduše zeptejte na rádius kružnice: (setq radius(vla-get-radius circle-object)) Zkratky používané v označování funkcí: AX - ActiveX AutoLISP AL,VL AC – AutoCAD Visual LISP-ActiveX – VLA Visual Basic
2.8.1 Funkce ActiveX v AutoLISPu Nejprve, než můžete použít AX funkce s AL, musíte načíst kód podporující tyto funkce.Příkaz pro načtení AX funkcí: (vl-load-com) Jestliže AX není aktivní pak se AX funkce načte, je-li funkce aktivní, nestane se nic. Pozor aplikace AX musí začínat voláním vl-load-com, jinak program zhavaruje. Při používání AX musíte nejprve AutoCADové prvky převést na prvky AX. Převedou se použitím příkazu vlax-get-acad-object. (setq acadobject (vlax-get-acad-object)) 83
Programování v CAD – Prostředí ActiveX Funkce vlax-get-acad-object vrací ukazatel na AC objekt, ukazatel je uložen v proměnné acadObject. Tato vrácená hodnota existuje jako jediná VL data volaná VLA-object (AutoLISP ActiveX objekt). Pakliže se informujete na AC objekt v kombinaci AX funkcemi, musíte specifikovat typ VLA objektu. Pro tento způsob práce nemůžete použít příkazu entget pro získání entity a pak informace o vlastnostech této entity pomocí AX funkce. Entget funkce vrací objekt typu ename. Nelze použít tento objekt přímo s AX funkcemi, je nutné invertovat objekt na VLA-objekt použitím příkazu: vlax-ename->vla-object Tato funkce dovoluje konvertovat jména entit získaná pomocí entget na VLA objekty, aby bylo možné je použít s AX funkcemi. Příklad pro převedení jména entity na VLA objekt: (setq ename-circle (car (entsel "vyberte kružnici:"))) vrací např.<Entity name:27f0538> (setq vlaobject-circle (vlax-ename->vla-object ename-circle)) vrací Pro převedení VLA-objektů použijte: vlax-vla-object->ename (setq new-ename-circle (vlax-vla-object->ename vlaobject-circle)) vrací <Entity name: 27f0538> Pro zobrazení vlastností objektu je možné použít i Inspect Tool ve VL. Postup: Označte proměnou, která náleží objektu, a vyberte inspekt tlačítko ve VL konzole. Pro modifikaci vlastností objektů v AX pomocí AX metod. VL doplňuje okruh funkcí z programovacího jazyku AL, které umožňují přístup k AX objektům. Tyto funkce jsou předepsány s vla- , Např.: vla-addcircle, vla-get-ModelSpace, vla-getColor.
2.8.2 Klíč jmen funkcí vla- funkce korespondují s každou AX metodou, např.: vla-addCircle vyvolá Addcircle metodu, vla-get- funkce korespondují s každou vlastností, např.: vla-get-Color --získáte vlastnost barvy objektu, vla-put- funkce korespondují s každou vlastností a možností měnit vlastnost, např.: vla-put-Color mění vlastnost barvy objektu. VL také doplňuje okruh funkcí z AX, které jsou předepsány s vlax-. Tyto funkce jsou všeobecnější, některé z nich mohou být použity i u více metod, objektů, vlastností. 84
Programování v CAD – Prostředí ActiveX Např.: s vlax-get-property funkci můžete získat jakoukoliv vlastnost jakéhokoliv AX objektu v jakékoliv aplikaci, třeba z Microsoft Excel. Přehled základních obecných funkcí pro interakci s jinými aplikacemi: vlah-invoke-method, vlax-get-property, vlax-put-property. Příklad: (setq mycircle (vlax-invoke-method mspace 'AddCircle circCenter 3.0)) vrací např. , v tomto příkladu circCenter je proměnná obsahující pole tří čísel, identifikující střed kruhu, a 3.0 je poloměr kruhu. Metoda vrací VLA-objekt, kruh. Příkazy pro práci s entitami: (setq mycircle (vla-addCircle mSpace (vlax-3d-point '(3.0 3.0 0.0)) 2.0)) vrací Tento příkaz dodá kružnici na výkres. Jestliže nevíte, která funkce dodá kružnici na výkres podíváte se do ActiveX and VBA Reference (nápovědy). Tyto zápisy nejsou citlivé na velká, malá písmena: vla-addcircle je totéž co vla-AddCircle.
2.8.3 Použití funkcí ve Visual Basicu Funkce pro práci s entitami je možné najít ve ActiveX and VBA. Zápis funkcí je stejný jako ve Visual Basicu, například: dodání kružnice do výkresu: zápis ve VB RetVal = object.AddCircle(center, Radius) nahrazením proměnných jmen: mycircle = mspace.AddCircle(Center, Radius)
2.8.4 AutoLISP syntaxe: (setq myCircle (vla-addCircle mSpace (vlax-3d-point ' (3.0 3.0 0.0)) 2.0)) Výsledek je: data typu VLA-objekt, Parametr mSpace je vztažen k ModelSpace objektu(plocha, na kterou se kreslí). ModelSpace umožňuje přístup ke kreslícímu prostoru příslušného výkresu. Pakliže dodáváte kružnici do výkresu, musíte specifikovat střed a rádius. U VB je střed definován jako tříprvkové pole, a rádius je jako číslo. 85
Programování v CAD – Prostředí ActiveX Ale proměnné použité pro tento zápis mohou být nepoužitelné pro LISP uživatele. Proměnné jsou samo-definující se struktury, které mohou obsahovat rozdílné typy dat. Například čárky, čísla a pole mohou být reprezentovány proměnnými. Ale současně ukládaná informace o typu dat umožňuje proměnným parametrům použití v AX, protože pak je informace čitelná pro každou aplikaci AX.
2.8.5 Funkce prostředí ActiveX v AutoLISPu V následujícím textu jsou uvedeny některé příklady použití funkcí ActiveX v AutoLISPu, nebo Visual LISPu. Výpis všech definovaných funkcí lze najít v radě pro ActiveX.
2.8.5.1 Konverze dat z AutoLISPu na ActiveX data Příklad příkazů: vlax-make-variant vytvoří proměnnou, vlax-variant-type vrátí typ dat proměnné, vlax-variant-value vrátí hodnotu proměnné, vlax-variant-change-type změní typ dat proměnné. vlax-make-variant funkce akceptuje dva argumenty value a type. Value je hodnota přiřazená proměnné. Type je typ dat ukládaný v proměnné. Typy dat: vlax-vbEmpty nedodaná hodnota, vlax-vbNull neobsahuje žádná data, vlax-vbinteger obsahuje integer, vlax-vbLong obsahuje Long integer, vlax-vbSingle obsahuje číslo, vlax-vbDouble obsahuje dvě čísla, vlax-vbString obsahuje čárku, vlax-vbBoolean obsahuje Boolean hodnoty, vlax-vbArray obsahuje pole čísel. Příklad funkce, která vytvoří proměnnou variant typu integer a nastaví její hodnotu na 5: (setq varint (vlax-make-variant 5 vlax-vbInteger)) a vrací .
86
Programování v CAD – Prostředí ActiveX Číslo 2 je druh dat - integer a hodnota 5 je hodnota proměnné. Jestliže nedodáte druh dat, funkce sama dodá druh dat. Např.: (setq varint (vlax-make-variant 5)) vrací Funkce dodala druh 3 - Long integer. Jestliže nespecifikujete typ dat a hodnotu, vlaxmake-variant bude považovat proměnnou jako prázdný typ dat - vlax-vbEmpty.
2.8.5.2 Zabezpečená pole Pole používaná AX metodou musí být typu safearrays. Tato pole jsou "bezpečná" z toho důvodu, že nemůžete napsat více prvků, než je zvolená délka pole. Použitím vlax-make-safearray vytvoříte safearray a použitím vlax-safearray-put-element, nebo vlax-safearray-fill naplníte pole daty. Vlax-make-safearray funkce potřebuje minimálně dva prvky. První prvek je typ dat, která mají být uložena v poli. Druhy typů dat pro safearray: vlax-vbInteger, vlax-vbLong, vlax-vbSingle, vlax-vbDouble, vlax-vbString, vlax-vbObject, vlax-vbBoolen a vlax-vbVariant. Konstanty se přemění na hodnoty typu integer. Argumenty příkazu safearrays specifikují horní a dolní index. Můžete vytvořit jednodimenzionální nebo vícedimenzionální pole. Dolní index může být 0 nebo jakékoliv + - číslo. Příklad: příkaz vytvoří jedno rozměrové pole. Počáteční index je 0 koncový 2, (setq point (vlax-make-safearray vlax-vbDouble '(0 . 2))), vrací <safearray...>, pole obsahuje element0, element1, element2. Vytvoření dvou rozměrového pole: (setq mat2 (vlax-make-safearray vlax-vbString '(0 . 1) '(1 . 3))) vrací <safearray...> Vyplnění pole: (vlax-safearray-fill point '(100 100 0)), výsledek zjistíte příkazem: (vlax-safearray->list point) vrací (100.0 100.0 0.0)
87
Programování v CAD – Prostředí ActiveX Vyplnění matice (vlax-safearray-fill mat2 '(("a" "b" "c") ("d" "e" "f"))). Výsledek (vlax-safearray->list mat2) vrací (("a" "b" "c") ("d" "e" "f")). Vkládání jednotlivého prvku (vlax-safearray-put-element point 1 50) Nahrazení prvku z pole point na pozici 1 číslem 50, to jest 100 za 50. U matice (vlax-safearray-put-element mat2 0 3 "d") Nahrazení prvku z pole mat2 na pozici 0,3 prvkem d, to jest c za d. Použití safearrays s proměnnými: (setq circCenter (vlax-3d-point ' (3.0 3.0 0.0))) vrací Třetí prvek v poli nastaví se na nulu. Vytvoření proměnné obsahující 4 čísla: Vytvoření pole: (setq 4dubs (vlax-make-safearray vlax-vbDouble '(0 . 3))) Vyplnění pole: (vlax-safearray-fill 4dubs '(3.0 6.0 7.2 1.0)) Uložení safearray jako proměnné: (setq var4dubs (vlax-make-variant 4dubs) Matice nyní obsahuje proměnnou obsahující pole čísel.
2.8.5.3 Změna a zobrazení vlastností objektu Načtení vlastností objektů se provádí příkazem: (vla-get-property object) . Např.: vla-get-center vrací střed kružnice. Příklad na získání vlastností objektu a aplikování vlastností novému objektu: (setq mycircle (vla-addcircle mspace (vlax-3d-point (getpoint "zadej střed:")), 20.0)), touto funkcí vytvoříte kružnici o poloměru 20 a středu námi určeném. Funkce vlax3d-point konvertuje námi zvolený bod na data potřebná pro vla-addcircle. Vykreslení druhé soustředné kružnice pomocí vla-get-center o poloměru 10: (vla-addcircle mspace (vla-get-center myCircle) 10.0)
88
Programování v CAD – Prostředí ActiveX 2.8.5.4 Změna vlastností objektu (vla-put-property object new-value), funkce vla-put-center změní polohu středu kružnice. Příklad změny x-ové souřadnice kružnice: získání středu kružnice (setq myCenter (vla-get-center mycircle)) vrací Střed je vrácen jako proměnná typu safearray obsahující 3 čísla. Uložení středu kružnice jako pole čísel: (setq centerp (vlax-safearray->list (valx-variant-value mycenter))) vrací (17.8685 5.02781 0.0) Vytažení x-ové souřadnice: (setq newXaxis (- car centerp) 1)) vrací 16.8685 Výsledek je uložen jako proměnná newXaxis. Nahrazení původní x-ové souřadnice novou: (setq newcenter (list newXaxis (cadr centerp) (caddr centerp))) vrací (16.86085 4.52594 0.0) Obnovení kružnice s novou x-ovou osou: (vla-put-center myCircle (vlax-3d-point newcenter)) Použití předdefinovaných konstant jako např. barvy acRed. Pro změnu barvy kružnice použijete příkaz: (vla-put-color myCircle acRed) Určení objektů, které je možno obnovit a změnit Funkce použitelné pro testování přístupnosti objektů: vlax-read-enabled-p testování čitelnosti objektu vlax-write-enabled-p testování modifikovatelnosti objektu vlax-erased-p testování, je-li objekt smazán,či ne (vymazaný objekt může existovat nadále ve výkresové databázi) (vlax-read-enabled-p Vlastnosti_Cary) vrací T. (vlax-write-enabled-p Vlastnosti_Cary) vrací T Zjištění, zda je čára smazána: (vlax-erased-p Vlastnosti_Cary) vrací nil. Vymazání čáry: (vla-delete Vlastnosti_Cary) vrací nil.
89
Programování v CAD – Prostředí ActiveX Zjištění, zda je Vlastnosti_Cary nadále čitelná: (vlax-read-enabled-p Vlastnosti_Cary) vrací nil. Vylistování vlastností objektu a metody pomocí funkce vlax-dump-object: (setq Vlastnosti_Cary (vla-item mSpace (- (vla-get-count mspace) 1))) vrací Zjištění, zda je možno aplikovat požadovanou metodu na objekt, je-li daná čára kopírovatelná: (vlax-method-applicable-p Vlastnosti_Cary "copy") vrací T Zjištění, zda dané vlastnosti jsou vlastnostmi daného bloku: (vlax-property-available-p Vlastnosti_Cary "color") Získání identifikace objektu: (setq handle-circle (cdr (assoc 5 (entget ename-circle)))) vrací "4F" Pro získání ename přiřazeného k indexu: (handent handle-circle) vrací <Entity name: 27f0538> Pro získání VLA-objektu přiřazeného k handle: (setq vla-circle (vla-handleToObject AcadDocument handle-circle)) vrací
90
Programování v CAD – Prostředí ActiveX 2.8.5.5 Krátký příklad programu s funkcemi ActiveX: (vl-load-com) (setq acadObject (vlax-get-acad-object)) (setq acadDocument (vla-get-ActiveDocument acadObject00 (setq mSpace (vla-get-ModelSpace acadDocument)) (setq mycircle (vla-addCircle mSpace (vlax-3d-point '(3.0 3.0 0.0)) 2.0 ) ) Výsledek programu: 1. Načtení aplikace ActiveX. 2. Vrací cestu na objekt aplikace. 3. Vrací cestu na příslušný aktivní dokument, přístup k výkresu. 4. Vrací cestu na modelový prostor. 5. Nakreslí kružnici.
91
Programování v CAD – Reaktory
2.9 Reaktory V tomto textu je popsáno, jak se reaktory přiřazují k událostem a entitám ve výkresu. Reaktory slouží k tomu, aby AutoCAD upozornil vaši aplikaci v případě určité události. Pokud například uživatel přemístí entitu, ke které aplikace přiřadila reaktor, bude vaše aplikace na přesun entity upozorněna. Kód lze naprogramovat tak, aby se v uvedeném případě spustily jiné operace, například posun jiných entit spojených s přesunutou entitou či aktualizace textů zaznamenávající revize upraveného prvku výkresu. V podstatě se jedná o stejný efekt, jako byste vaši aplikaci vybavili pagerem a sdělili AutoCADu, aby v případě nějaké změny poslal aplikaci zprávu. Reaktor je objekt připojený k editoru výkresu nebo specifickým entitám v rámci výkresu. Když budete pokračovat v metafoře použití pageru, bude reaktor zařízením, které automaticky vytočí číslo vašeho pageru v okamžiku, kdy se něco děje. Pagerem je ve vaší aplikaci funkce AutoLISPu volaná reaktorem, taková funkce je známá jako funkce zpětného volání (callback). Existuje mnoho typů reaktorů AutoCADu. Každý typ reaktoru odpovídá jedné nebo více událostí AutoCADu. Reaktory jsou seskupeny do následujících kategorií: Reaktory editoru - upozorní vaši aplikaci pokaždé, když je vyvolán příkaz AutoCADu. Reaktory propojení - upozorní vaši aplikaci pokaždé, když je načtena nebo uvolněna z paměti aplikace ObjectARX. Reaktory databáze - odpovídá specifickým entitám či objektům v rámci výkresové databáze. Reaktory dokumentu - upozorní vaši aplikaci v režimu MDI na změnu v aktuálním výkresovém dokumentu, například otevření nového výkresového dokumentu, aktivaci okna jiného dokumentu a změnu stavu uzamknutí dokumentu. Reaktory objektu - upozorní vás pokaždé, když bude určitý objekt změněn, kopírován či smazán. Kromě reaktorů editoru obsahuje každá kategorie pouze jeden typ reaktoru. Reaktory editoru představují rozsáhlou třídu reaktorů: například reaktory DXF (upozorní aplikaci při importu či exportu souboru DXF) a reaktory myši (upozorňují na události spojené s myší - třeba poklepání). V rámci kategorií reaktorů existuje mnoho událostí, k nimž lze reaktor připojit. AutoCAD umožňuje uživatelům provádět množství různých akcí a je na vás, abyste určili akce, které vás zajímají. Potom můžete k vybrané události připojit svůj reaktor "automatický hlásič" a napsat funkci zpětného volání, která se spustí, jakmile daná událost nastane. 92
Programování v CAD – Reaktory Lze si představit příklad přesunu rohového bodu (vrcholu) hranice šrafované oblasti desky. Deska bude překreslena tak, aby její obrys zůstal přímočarý. Navíc budou na základě nové velikosti a tvaru přešrafováno. Při smazání hranice desky se odstraní i šrafování. Pro každou událost reaktoru je třeba naplánovat funkci, která bude spuštěna, když daná událost nastane. Následující pseudokód nastiňuje logickou posloupnost událostí, která by měla proběhnout, když uživatel přetáhne jeden z vrcholů křivky do nové pozice: Definování funkce ds:outline-changed Odstranění šraf. Určení, jak se hranice změnila. Napřímení hranice. Přešrafování. Konec funkce Má to však háček. Když uživatel začne přetahovat obrys vrcholu křivky, AutoCAD upozorní vaši aplikaci pomocí události :vlr-modified. V tomto okamžiku však uživatel teprve zahájil tažení jednoho z vrcholů křivky. Pokud okamžitě vyvoláte funkci ds:outline-changed, přerušíte akci, kterou uživatel právě provádí. Nebudete vědět, kde je nová pozice vrcholu, jelikož uživatel ji ještě nestačil vybrat. A konečně AutoCAD neumožní vaší funkci úpravu křivky, dokud ji uživatel ještě přetahuje. AutoCAD má totiž objekt křivky otevřen pro úpravy a v tomto stavu jej ponechá až do okamžiku, kdy uživatel dokončí změnu pozice objektu. Je třeba změnit přístup k problému. Zde je nová varianta řešení: Když uživatel zahájí změnu pozice vrcholu křivky, Volání funkce ds:outline-changed Definování funkce ds:outline-changed Nastavení globální proměnné pro uložení ukazatele na křivku upravovanou uživatelem Konec funkce Když je příkaz ukončen: Volání funkce ds:command-ended Definování funkce ds:command-ended Odstranění šraf Získání informací o předchozích umístěních vrcholů křivky Získání informací o nových umístěních vrcholů křivky Předefinování křivky (napřímení) 93
Programování v CAD – Reaktory Překreslení šraf Konec funkce Jakmile uživatel dokončí úpravu obrysu desky, AutoCAD upozorní vaši aplikaci pomocí události :vlr-commandEnded (v případě, že jste nastavili reaktor editoru). Použití globální proměnné identifikující křivku změněnou uživatelem je nutné, protože mezi funkcemi ds:outline-changed a ds:command-ended není žádná přímá spojitost. Ve vaší aplikaci jsou obě funkce vyvolány a provedeny nezávisle na sobě. Zmíněná globální proměnná tedy obsahuje důležitý údaj nastavený jednou funkcí a použitý druhou. Nyní zvažte případ, kdy uživatel smaže hranici desky. Jediným úkolem je zde odstranit i všechny šrafy. Tento záměr nastiňuje následující pseudokód: Jakmile uživatel začne mazat hranici: Volání funkce ds:outline-erased Definování funkce ds:outline-erased Nastavení globální proměnné s ukazatelem na reaktor připojený k smazané křivce Konec funkce Jakmile je mazání dokončeno, Volání funkce ds:command-ended Definování funkce ds:command-ended Odstranění šraf, které patřili k nyní již smazané křivce Konec funkce Uživatelé mohou mít na obrazovce více desek a mohou mazat více než jednu z nich. Musíte vymyslet řešení i pro tuto eventualitu. Reaktor spojený s určitou entitou je reaktorem objektu. Pokud ve výkresu existuje několik entit, může v něm existovat i několik reaktorů objektu - každý pro jednu entitu. Určitá editační operace (například použití příkazu vymaž) může spustit množství reakcí podle toho, kolik z vybraných entit obsahuje připojený reaktor. Reaktory editoru jsou na druhé straně používány jednotlivě. Vaše aplikace by měla připojit pouze jeden reaktor události :vlr-commandEnded. Posloupnost událostí pro obě úpravy - změnu vrcholu a smazání křivky končí akcemi, které je třeba provést v rámci funkce ds:command-ended. Určete, která sada akcí má být provedena pro každou variantu. Následující pseudokód nastiňuje logickou posloupnost událostí:
94
Programování v CAD – Reaktory Definování funkce ds:command-ended (druhá verze) Získání ukazatele na křivku (z globální proměnné) Podmínka: Pokud byla křivka upravena, pak: Odstranění šraf Získání informací o předchozích umístěních vrcholů křivky Získání informací o nových umístěních vrcholů křivky Předefinování křivky (napřímení) Překreslení šraf Konec podmínečného výrazu Pokud byla křivka smazána, potom: Odstranění šraf Konec podmínečného výrazu Konec podmínky Konec funkce Dalším krokem při plánování aplikace s reaktory je určit, jak a kdy budou reaktory připojeny. Je třeba připojit dva reaktory objektu pro hraniční křivku každé desky (jeden bude reagovat na událost úpravy a druhý na událost smazání) a jeden reaktor editoru, který upozorní vaši aplikaci, až uživatelé dokončí úpravu křivky. Reaktory objektu jsou připojeny k entitám, zatímco reaktory editoru jsou registrovány v rámci AutoCADu. Je třeba promyslet ještě jednu věc. Při přepočítání obrysu křivky (napřímení) po provedení úpravy uživatelem je nutné vědět, jaká byla konfigurace vrcholů před úpravou. Tato informace nemůže být zjištěna po úpravě křivky. V té době jsou k dispozici jen údaje o nové konfiguraci. Jak na to? Požadovaný údaj si můžete uchovat v globální proměnné, ale je tu jeden problém. Uživatelé mohou kreslit libovolný počet desek, přičemž každá z nich by vyžadovala novou globální proměnnou. Tím by vznikl pořádný zmatek. Problém uložení původní konfigurace můžete vyřešit pomocí další vlastnosti reaktorů Visual LISPu - schopnosti ukládat data přímo v reaktoru. Když uživatel poprvé kreslí desku, můžete k této hranici připojit reaktor spolu s údaji, které chcete uložit. V takovém případě bude nutné upravit hlavní funkci programu C:DESKA následovně: Definování funkce C:DESKA Provedení všeho, co je dosud nastaveno v aplikaci DESKA Připojení reaktoru objektu ke křivce pomocí těchto parametrů: Ukazatel na právě nakreslenou křivku 95
Programování v CAD – Reaktory Seznam dat, která chcete do reaktoru uložit Seznam událostí specifických pro křivku, které chcete sledovat spolu s funkcemi zpětného volání LISPu, které budou vyvolány Konec tvorby reaktoru objektu Připojení reaktoru editoru k výkresovému editoru pomocí následujících parametrů: Veškerá data, která chcete připojit k reaktoru (v tomto případě žádná) Seznam specifických událostí editoru, které chcete sledovat spolu s funkcemi zpětného volání LISPu, které budou vyvolány Konec tvorby reaktoru editoru Konec funkce Příklady jsou uvedeny v příloze.
96
Programování v CAD – Visual Basic
3 Visual Basic a programování v CAD aplikací 3.1 Úvod do Visual Basicu Basic byl prvním programovacím jazykem domácích počítačů a kalkulaček, používaný např. v počítačích Sinclair ZX81 v roce 1980. Ještě dnes si mnoho lidí spojuje Basic s Visual Basicem. Je pravdou, že z něj VB původně vycházel. Dnes už mnoho společného nemají. VB je plnohodnotným programovacím jazykem zcela srovnatelným např. s produktem Delphi firmy Inprise nebo podobnými produkty. Zdánlivá jednoduchost VB má ovšem jiný důvod a tím je zvýšení produktivity práce programátorů a vývojářských týmů. Visual Basic obsahuje nástroje a objekty pro používání databází (DAO, ADO, ODBC, OLEDB atd.). Součástí těchto nástrojů je také plnohodnotný jazyk SQL. VB také podporuje mechanizmy OLE, neboli OLE Automation (Object Linking and Embedding), pomocí nichž můžete používat objekty jiných aplikací (např. dokument Wordu), dále také mechanizmus DDE (Dynamic Data Exchange), který vám umožní výměnu dat mezi aplikacemi. Dále VB obsahuje mnoho objektů pro různé akce, např. komunikace v síti, s tiskárnami, grafické a multimediání prvky atd. Slovo Visual v názvu znamená vytváření programu vizuálně, tedy hlavně za pomocí myši a vyplňování různých dialogů. Není to až tak úplně pravda, za pomocí myši a dialogů vytvoříte grafické rozhranní aplikace, a max. nějaké základní úkoly. Pokud však chcete vytvořit trochu složitější aplikaci, bez psaní kódu se neobejdete.
3.1.1 Spuštění Visual Basicu v AutoCADu V AutoCADu 2000 a 2002 se spouští editor Visual Basicu z roletového menu Nástroje, Makro, Editor Visual Basic. Prostředí editoru je standardním Visual uživatelským rozhraním. Psaní uživatelského programu probíhá stejným způsobem jako psaní programu ve Visual LISPu. Příkazy jsou však pochopitelně odlišné. Srovnání funkcí jazyka AutoLISP s podobnými funkcemi a operátory nebo Visual Basicu Automation je v příloze 1. Příkazem z roletového menu Nástroje, Makro, Načíst projekt lze načíst binární program jmeno_projektu.dvb, program napsaný ve Visul Basicu. Potom příkazem z roletového menu Nástroje, Makro, Makra lze toto makro spustit, krokovat, upravit, vymazat z pameti.…
97
Programování v CAD – Visual Basic 3.1.2 Spuštění Visual Basicu v Inventoru V Inventoru verze 5 nebo vyšší se spouští editor Visual Basicu z roletového menu Nástroje, Makro, Editor Visual Basic. Prostředí editoru je standardním Visual uživatelským rozhraním. Psaní uživatelského programu probíhá stejným způsobem jako psaní programu ve Visual LISPu. Příkazy jsou však pochopitelně odlišné. Poznámka: pro přístup na referenci rozhraní nebo referenci VBA musíte nainstalovat Autodesk Inventor typu Úplná nebo Uživatelská instalace. Pokud zvolíte metodu Uživatelská, musíte stanovit, že chcete instalovat software development kit. Pokud Autodesk Inventor nainstalujete volbou metody instalace Minimální nebo Typická, musíte provést reinstalaci na typ Úplná nebo Uživatelská. Microsoft Visual Basic for Applications (VBA) nabízí programovací prostředí pro Autodesk Inventor. VBA můžete použít pro přístup k rozhraní Autodesk Inventoru a vytvořit tak programy, které budou automaticky opakovat úkony. Příkazem z roletového menu Nástroje, Makro, Načíst projekt lze načíst binární program jmeno_projektu.dvb, program napsaný ve Visul Basicu. Potom příkazem z roletového menu Nástroje, Makro, Makra lze toto makro spustit, krokovat, upravit, vymazat z pameti.…
3.2 Základy jazyka V této kapitole jsou uvedeny pouze základní pojmy používané v objektovém programování, základy jazyka VB, pro použití programování v souvislosti s CAD systémy.
3.2.1 Základní pojmy z VBA Projekt - soubor formulářů, modulů, tříd atd., jednoduše soubor různých částí, ze kterých se skládá celá aplikace. Na disku je projekt reprezentován souborem s příponou VBP. Tento obsahuje informace o všech součástech projektu, jako např. formuláře, objekty, a dále nastavení vlastností, např. verze, název atd. Formulář - je objekt, okno, které vytváří součást uživatelského rozhranní aplikace. Může obsahovat (a také většinou obsahuje) zdrojový kód. Na formulář můžete umísťovat libovolné prvky. Dále také může mít menu, titulek, minimalizační, maximalizační a uzavírací tlačítka. 98
Programování v CAD – Visual Basic Modul –je pouze "schránka", která obsahuje procedury, funkce a deklarace. Umožňuje definování globálních proměnných, uživatelských datových typů, procedur a funkcí. Standardní modul – modul obsahující pouze typy, deklarace, procedury a definice dat. Standardně jsou deklarace a definice na úrovni modulu public. Modul třídy – modul, který obsahuje definici třídy, včetně definic jejích vlastností a metod Třída - předloha pro vytváření instancí objektů. Jedná o vzor pro vytváření konkrétních objektů. Základní definice objektu. Třída představuje šablonu objektu, ze které se vytvoří instance objektu při běhu programu. Třída definuje vlastnosti objektu a metody určující chování objektu. ActiveX prvek - objekt, který může být součástí aplikace nebo může být samostatnou aplikací (v tomto případě má příponu OCX). ActiveX prvky se zobrazují v okně Toolbar. Stránky vlastností - Formulář, který používají ActiveX prvky pro komfortní nastavení svých vlastností mimo okno Properties. Objekt - naprogramovaný objekt s vlastnostmi. Metoda objektu- je v pojetí VB funkce resp. procedura, která se váže k nějakému objektu. Běžnou funkci můžete spustit, je-li globální, kdekoliv v programu jednoduše zapsáním jejího názvu. Např. MAX(a,b). Metoda se ve VB spouští napsáním názvu objektu, dále tečkou a názvem metody. Např. máte objekt dlgFile (CommonDialog), metoda ShowOpen se spouští takto: dlgFile.ShowOpen. Vlastnost objektu - Vytvoříme-li např. objekt Člověk, musíte jej nějak popsat. Např. věk, barva očí, výška atp. Můžete říct, že to jsou jeho vlastnosti. To samé mají i objekty. Např. objekt formulář má nějakou barvu, titulek, velikost atp. Vlastnosti každého objektu můžete měnit např. takto: titulek formuláře frmMain.Caption = "Můj formulář" a zjišťovat třeba Print frmMain.Caption
99
Programování v CAD – Visual Basic Instance objektu - konkrétní realizace objektu (je to vlastně paměťová proměnná). Událost - nastane po nějaké specifické akci uživatele nebo systému. Poté co nastane, spustí se kód, který napíšete do procedury svázané s touto událostí. Každý objekt ve VB může mít spoustu událostí (nemají však všechny stejné). Např. událost CLICK, klikne-li někdo na objekt, KEYPRESS, byla-li stisknuta klávesa apod. Protože je VB událostmi řízený programovací jazyk, veškeré akce jsou iniciovány událostmi. Např. nastavíte-li spuštění projektu z formuláře, spustí se hned několik událostí, např. Form_Load (pokud do ní napíšete nějaký kód). Procedura – pojmenovaný sled příkazů vykonávaný jako celek.(Funkce, Sub, Property). Procedury nemohou být vnořené. Klíčové slovo – symbol nebo slovo které je součástí programovacího jazyka. Dim -
se používá na deklaraci lokálních proměnných v proceduře nebo funkci, nebo k deklaraci lokálních proměnných na úrovni formuláře, modulu nebo třídy, například: Dim A As Integer .
Public - Používá se k deklarování procedur, dostupných všem ostatním procedurám ve všech modulech. Private -Volitelná. Používá se k deklarování procedur, dostupných pouze v tom modulu, ve kterém byla deklarace provedena. Static - Udává, že lokální proměnné procedury Function zůstanou mezi jednotlivými voláními uchovány.Atribut Static nemá vliv na proměnné, které jsou deklarovány mimo proceduru Function, ani ne v případě, jsou-li touto procedurou používány. ByVal - Udává, že argument je předáván hodnotou. Klíčové slovo ByVal v programu Microsoft Forms indikuje, že argument bude vydáván za hodnotu; takový je standardní význam ByVal v programu Visual Basic. V programu Microsoft Forms ale můžete použít ByVal s objekty ReturnBoolean, ReturnEffect, ReturnInteger nebo ReturnString. Pokud ByVal tak použijete, předávaná hodnota není jednoduchým datovým typem, ale ukazatelem na objekt. 100
Programování v CAD – Visual Basic ByRef - Udává, že argument je předáván odkazem. Varianta ByRef je výchozí nastavení v jazyce Visual Basic. Odkaz k aktuální instanci objektu. Me -
se používá k odkazu k aktuální instanci objektu v místě, kde se zpracovává kód programu. Všechny procedury, spojené s aktuálním objektem, mají přístup k objektu s odkazem Me. Použití Me je užitečné především pro předávání informací o aktuální instanci objektu proceduře v jiném modulu.
Konstanty - lze deklarovat s následujícími typy dat: Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String, nebo Variant. Protože již znáte hodnotu konstanty, můžete typ dat stanovit již v příkazu Const. Podrobnější informace o typech dat viz téma "Přehled typů dat " nápovědy programu Visual Basic. Jedním příkazem lze deklarovat i několik konstant. Chceme-li specifikovat typ dat, musíte ho uvést pro všechny konstanty. V následujícím příkazu se deklarují konstanty konVek a konPlat jako celočíselné hodnoty Integer. Const konVek As Integer = 34, konPlat As Currency = 35000 Pole - se deklarují stejně, jako jiné proměnné, pomocí příkazů Dim, Static, Private, nebo Public. Rozdíl mezi skalárními proměnnými (těmi, které nejsou poli) a proměnnými polí spočívá v tom, že obecně musíte stanovit velikost pole. Pole, jehož velikost je zadána, je pole s pevnou velikostí. Pole, jehož velikost lze měnit během zpracování programu, je dynamickým polem. Pole může být indexováno od 0 nebo od 1. Způsob indexování závisí na nastavení příkazu Option Base. Není-li specifikován příkaz Option Base 1, začínají se všechna pole indexovat od nuly. Deklarace pole o pevné velikosti V následujících řádcích kódu je deklarováno pole o pevné velikosti jako celočíselné pole (Integer) o 11 řádcích a 11 sloupcích: Dim MePole(10, 10) As Integer První argument představuje řádky, druhý argument sloupce. Deklarace dynamického pole Při deklaraci dynamického pole lze určit velikost pole až při zpracování kódu programu. K deklaraci pole se používají příkazy Static, Dim, 101
Programování v CAD – Visual Basic Private, nebo Public. Jak je uvedeno v následujícím příkladu, závorky se ponechají prázdné Dim sngPole() As Single Při deklaraci proměnných se obvykle používá příkaz Dim: Dim strJmeno As String Private Muj_Nazev As String Datový typ Variant - pokud u proměnné neuvedete typ, je automaticky použit Variant. Variant je obecný datový typ. Může obsahovat jakýkoliv datový typ, včetně strukturovaných a objektových. Dokonce jde tak daleko, že pokud máte pole "Variantů", každý prvek může obsahovat hodnotu jiného typu. Proměnná tohoto typu může dynamicky měnit svůj datový typ viz. příklad: Dim X As Variant X=4 X="Jirka" Set X=Form1 V případě, že proměnné typu Variant dosud nebyla přiřazena hodnota, má hodnotu Empty. Pokud obsahuje hodnotu numerického typu, je tato hodnota totožná s 0, v případě znakového typu je totožná s prázdným řetězcem. Výskyt lze testovat pomocí funkce IsEmpty() Variant může také nabývat hodnoty Null. A to v tom případě, že mu Null bylo přímo přiřazeno, nebo obsahuje výraz, jehož hodnota je Null (tento případ většinou může nastat při práci s objekty). Testovat lze pomocí IsNull(). I když je Variant velice flexibilní typ, není dobré jej používat všude. Nejlépe je ovšem nepoužívat jej vůbec, nebo jen v případech, kdy není jiného východiska. Práce s ním je totiž velice pomalá a zabírá mnoho místa v paměti. Typy - Používají se na úrovni modulu k nastavení výchozího datového typu pro proměnné a argumenty předávané procedurám a k nastavení vraceného typu pro procedury Function a Property Get, jejichž názvy začínají určenými písmeny. 102
Programování v CAD – Visual Basic Syntaxe: DefBool letterrange[, letterrange] . . . DefByte letterrange[, letterrange] . . . DefInt letterrange[, letterrange] . . . DefLng letterrange[, letterrange] . . . DefCur letterrange[, letterrange] . . . DefSng letterrange[, letterrange] . . . DefDbl letterrange[, letterrange] . . . DefDec letterrange[, letterrange] . . . DefDate letterrange[, letterrange] . . . DefStr letterrange[, letterrange] . . . DefObj letterrange[, letterrange] . . . DefVar letterrange[, letterrange] . . . Povinný argument letterrange má následující syntaxi: letter1[-letter2] Argumenty letter1 a letter2 určují množinu názvů, pro kterou je možno nastavit výchozí datový typ. Každý argument reprezentuje první písmeno názvu proměnné, argumentu, procedury Function nebo Property Get. V argumentu letterrange lze zadat kterékoli písmeno abecedy, přičemž se nerozlišuje, zda-li je písmeno velké nebo malé. DefStr A-Q Uživatelsky definované typy - Pokud vám nebude stačit žádný datový typ Visual Basicu, můžete si vytvořit svůj vlastní. Ten se vždy skládá z již definovaných a vytváří jakousi strukturu. Deklaruje se pomocí klíčového slova Type (je vhodné před název typu dát písmeno T jako Typ). Type TClovek jmeno As String * 20 prijmeni As String * 20 vek As Byte funkce As String End Type Proměnná tohoto typu se deklaruje stejně jako jiné proměnné. 103
Programování v CAD – Visual Basic Dim zamestnanec As TClovek Tato proměnná se potom používá podobně jako objektové proměnné. zamestnanec.jmeno="Jiri" zamestnanec.prijmeni="Novák" Samozřejmě, že typ ve struktuře může být také uživatelský. Type TAdresa ulice As String mesto As String psc As String * 5 End Type Type Tclovek jmeno As String prijmeni As String adresa As Tadresa End Type Použití vypadá následovně Dim zamestnanec As TClovek zamestnanec.jmeno="Petr" zamestnanec.adresa.ulice="Náměstí Republiky" Kolekce - Objekt Collection je uspořádaná množina položek, na kterou může být odkazováno jako samostatnou jednotku.Objekt Collection nám umožňuje odkazovat se na skupinu souvisejících položek jako na jediný objekt. Jedinou společnou vlastností položek objektu Collection, nazývaných členy, je jejich příslušnost ke společné kolekci. Členy objektu Collection nemusejí být nutně stejného datového typu. Kolekce může být vytvořena stejným způsobem, jako kterýkoliv jiný objekt. Například: Dim X As New Collection Jakmile je objekt Collection vytvořen, mohou do něj být přidávány nové členy pomocí metody Add, a odebírány pomocí metody Remove. Metoda Item vrací jednotlivé členy kolekce , celá kolekce může být zpracována pomocí cyklu For Each ... Next. 104
Programování v CAD – Visual Basic
3.2.2 Vytváření cyklů Mezi základní typy cyklů patří: FOR .. NEXT For pocitadlo = zacatek To konec [Step krok] [příkazy] [Exit For] [příkazy] Next [pocitadlo] Atributy pocitadlo je proměnná, která nabývá hodnot od zacatek po konec. Nepovinná část Step krok určuje, o kolik se bude pocitadlo zvětšovat. Standardně je to 1. Příkaz Exit For způsobí ukončení cyklu a skok na řádek za příkazem Next. Příklad: 'vypíše do okna Immediate hodnoty 1, 2, 3 For x=1 to 5 Debug.Print x If x=3 Then Exit For Next x DO .. LOOP VB nemá příkaz Until. Cykly, které jsou v jiných jazycích dělány pomocí Until a While, se ve VB dělají pomocí Do .. Loop. Do [{While | Until} podmínka] [příkazy] [Exit Do] [příkazy] Loop nebo Do [příkazy] [Exit Do] [příkazy] Loop [{While | Until} podmínka] Vykonává příkazy uvedené mezi Do a Loop, dokud platí podmínka uvedená za While, tzn. její vyhodnocení je True, nebo, v případě použití Until, 105
Programování v CAD – Visual Basic dokud není vyhodnocení podmínky True. While nebo Until mohou být uvedeny buď za Do, nebo za Loop. Obojí zároveň není možné. Stejně jako u For .. Next je i zde možno z cyklu vyskočit, a to pomocí Exit Do. Příkaz lze také použít bez Until i While, takže cyklus bude probíhat neustále. Ukončit půjde pouze pomocí Exit Do. Příklad: Dim x As Long 'Do okna Immediate vypíše hodnoty 1, 2, 3, 4 x=1 Do While x<5 Debug.Print x x=x+1 Loop 'Do okna Immediate vypíše hodnoty 1, 2, 3, 4 x=1 Do Debug.Print x x=x+1 Loop While x<5 WHILE .. WEND Příkaz je zjednodušenou obdobou příkazu Do .. Loop. While podmínka [příkazy] Wend Dokud platí podmínka, jsou vykonávány příkazy mezi While a Wend. Příklad: 'Vypíše do okna Immediate hodnoty 1, 2, 3, 4, 5 Dim x As Long x=1 While x<=5 Debug.Print x x=x+1 Wend
106
Programování v CAD – Visual Basic 3.2.3 Větvení programu VB má dva základní příkazy pro větvení programu. Příkaz If a příkaz Select. If je lépe použít pro méně větví, Select naopak pro více. IF .. THEN .. ELSE If podmínka Then [příkazy] [Else příkazy] nebo If podmínka Then [příkazy] [ElseIf podmínka-n Then [příkazy] [Else] [příkazy] End If Příkaz vykoná ten blok programu, pro nějž je platná podmínka. Podmínka-n v části ElseIf znamená, že tato část se může opakovat vícekrát. Ze syntaxe příkazu vyplývá, je-li příkaz na jeden řádek, nemusí být ukončen End If. Příklad: 'V závislosti na hodnotě x vypíše do okna Immediate buď "prvni" nebo "druhy" Dim x As Long If x=1 Then Debug.Print "prvni" Else Debug.Print "druhy" End If
SELECT Příkaz Select vykonává prakticky stejnou funkci jako If. Je lepší ho použít v případě více variant testované podmínky a ve stejném případě také pro lepší čitelnost zdrojového kódu. Select Case testovaný_výraz [Case seznam1 [příkazy-1]] [Case seznam2 [příkazy-2]] . . [Case Else 107
Programování v CAD – Visual Basic [příkazy-n]] End Select Atribut testovaný_výraz je proměnná nebo výraz, na jehož základě se program dále rozděluje na více bloků. Seznam1, seznam2 atd. jsou možné varianty testované proměnné nebo výrazu. Za každým slovem Case může být jedna hodnota nebo více hodnot oddělených čárkou. Můžete zadat také interval, např. 1 to 10. Pro lepší pochopení si opět pomůžete příkladem. Dim x As Long Randomize 'Inicializuje generátor náhodných čísel x = Int((4 * Rnd) + 1) 'Generuje náhodné celé číslo od 1 do 4 Select Case x Case 1 Debug.Print "prvni" Case 2,3 Debug.Print "prostredni" Case 4 Debug.Print "posledni" End Select Do této kapitoly by se daly zařadit ještě další příkazy, které existují ve VB. Nemá příliš velký význam uvádět jejich syntaxi a jak se používají, to můžete zjistit z nápovědy. Abyste alespoň věděli, kde hledat, jsou to tyto příkazy: Choose, IIf a Switch.
3.2.4 Dialogy MsgBox(text[, tlačítka] [, titulek] [, nápověda, kontext]) Tato funkce slouží pro zobrazení dialogu s textem a tlačítky, které si vyberete. Vrací hodnotu typu Integer, která indikuje, které tlačítko uživatel stiskl. Funkce může být volána i jako procedura. Atribut text je zpráva, která se zobrazí přímo v okně, tlačítka je číslo, které je součtem všech hodnot, určujících zobrazená tlačítka a ikony. Zde je nejlepší použít konstanty. titulek je zpráva, která se zobrazí v záhlaví okna. Pokud neuvedete tento parametr, zobrazí se v titulku název projektu. nápověda je cesta k souboru nápovědy. 108
Programování v CAD – Visual Basic kontext je číslo, které specifikuje část nápovědy, která se má zobrazit. Příklad: Dim i As Integer i=MsgBox("Ukončit program?", vbQuestion + vbYesNo, "Dotaz") If i=vbYes Then End End If Funkce InputBox Funkce zobrazí dialog s textovým polem a čeká na uživatele. Pokud stiskne OK, vrací řetězec, který je obsahem textového pole, tedy toho, co uživatel napsal, stiskne-li Cancel, je navrácená hodnota rovna "", prázdný řetězec. InputBox(zpráva[, titulek] [, default] [, x] [, y] [, nápověda, kontext]) Není třeba vysvětlovat parametry, které jsou stejné s funkcí MsgBox. Další parametry znamenají: default je hodnota, která je předvyplněna v textovém poli. x je hodnota na ose x obrazovky, kam bude umístěn levý horní roh dialogu. y je stejné jako x, pouze na ose y. Příklad: 'Zobrazí výzvu pro vložení jména Dim jmeno As String jmeno=InputBox("Vložte jméno", "Jméno") If jmeno="" Then MsgBox "Nebylo vloženo žádné jméno" Else MsgBox jmeno End If 'Zobrazí výzvu pro vložení data s nastaveným dnešním datem na pozici x=10, y=20 'Dnešní datum vrací funkce Now Dim datum As String 'pouze pro názornost, lépe samozřejmě použít typ date datum=InputBox("Vložte datum", "Datum", Now, 10, 20)
3.2.5 Procedury a funkce Výskyt:Form, MDIForm, Module, ClassModule, User Control, Property Page 109
Programování v CAD – Visual Basic Funkce: [Private|Public] [Static] Function jméno_funkce (argumenty) [As type] [Exit Function] End Function Procedura: [Private|Public] [Static] Sub jméno_funkce (argumenty) [Exit Sub] End Sub Private a Public stejně jako u proměnných určují, zdali jsou na úrovni daného modulu (nechápejte zde modul jako Module, ale pouze jako volné označení rámce vymezujícího kód v rámci nějakého prvku jako Form, PropertyPage nebo i Module.) privátní či veřejné. To znamená, že určují, zdali budou přístupné z vnějšku daného modulu. V další části se nachází slovo Static. V případě, že se objeví v deklaraci, znamená to, že všechny proměnné v ní deklarované jsou Static, čímž si uchovávají svou hodnotu i v době, kdy není daná funkce či procedura prováděna. Po indikátoru, který určuje, zdali se jedná o funkci či proceduru, následuje jméno funkce. Za jménem funkce jsou argumenty, které se mezi sebou oddělují čárkou. [Optional] [ByRef|ByVal] jméno_argumentu [AS datový_typ] Optional určuje, zdali je parametr nepovinný. Je li použito nepovinných parametrů, mohou být v deklaraci uvedeny až po posledním povinném argumentu. Testování, zdali byl parametr zadán, je možné provádět funkcí IsMissing(), která vrací hodnotu True, jestliže parametr nebyl zadán. Slova ByRef a ByVal stanovují, jakým způsobem bude parametr předán. V prvním případě je argument předán odkazem, což znamená, že je předán odkaz do paměti. Díky tomu je možné, aby funkce nebo procedura změnila její hodnotu. Přesto, že tento způsob je ve VB standardní, pro optimalizaci kódu je vhodnější zvolit druhou možnost. V tomto případě je předávána pouze kopie, takže při změně hodnoty argumentu se tato změna projeví jen na této kopii. Stejně jako u každé proměnné se definuje typ i u argumentů. V případě, že je vynechán, je automaticky přiřazen typ Variant. Stejně tomu je i u funkcí, kde se na rozdíl od procedur definuje i typ návratové hodnoty.
110
Programování v CAD – Visual Basic Jestliže je počet argumentů pohyblivý a použití klauzule Optional by bylo značně nepraktické, je možno použít pole parametrů. Tento typ parametrů se deklaruje slovem ParamArray. ParamArray jméno_pole_argumentů() Typ jeho prvků je vždy a jedině Variant. Pro jeho použití navíc platí pravidla, že může být uveden až jako poslední argument a předcházet mu mohou jedině parametry povinné. Když pak budete chtít ve funkci nebo proceduře procházet jednotlivé prvky pole, je nejlepší a nejrychlejší metoda znázorněná v příkladu: Public Function Suma(ParamArray pole()) As Long Dim Soucet As Long For Each prvek In pole Soucet = Soucet + prvek Next Suma = Soucet End Function Nedílnou součástí této kapitoly je i volání procedur a funkcí z kódu. Visual Basic zde nabízí několik možností. První dvě možnosti platí pro funkce, kde není důležitá návratová hodnota a pro procedury. jméno_funkce první_argument, druhý argument Call jméno_funkce(první_argument, druhý argument) U funkcí, kde je třeba získat návratovou hodnotu, se použije jednoduché přiřazení jako u proměnných. Je-li návratovým typem objekt, tak se nesmí zapomenout na klíčové slovo Set. Set jméno_proměnné = jméno_funkce(první_argument, druhý argument) Poslední dvě možnosti se týkají způsobu zadávání nepovinných parametrů. Některý z prostředních parametrů lze vynechat, může to vypadat takto (obě uvedená použití jsou ekvivalentní). Public Function Suma3(Optional a As Long, Optional b As Long, Optional c As Long) As Long ... Print Suma3(22,,6) Print Suma3(22,c:=6) 111
Programování v CAD – Visual Basic Z uvedeného je zřetelné, že buď hodnotu parametru prostě nenapíšete, nebo přiřadíme identifikátoru argumentu pomocí ":=" hodnotu.
3.2.6 Vlastnosti Výskyt:Form, MDIForm, Module, ClassModule, User Control, Property Page Vlastnosti objektu zvyšují čitelnost programu. Měli-li bychom realizovat například nastavení barvy pomocí metod, mohlo by to vypadat asi takto. x=Objekt.GetBarva() Objekt.SetBarva(x) Jelikož se navenek jeví jako proměnné příslušející nějakému objektu, je zápis přehlednější x=Objekt.Barva Objekt.Barva=x Ačkoli to tak nevypadá, nelze se vyhnout rozdělení kódu vlastnosti na dvě části (ve výjimečných případech dokonce na tři). První část se stará o zjištění hodnoty vlastnosti a druhá o její nastavení. Co se týče deklarace vlastností, ničím zásadním se od procedur a funkcí neliší, pouze identifikátor je Property Get|Let|Set. Dalším rysem je rozdíl v počtu argumentů mezi částmi, kde se hodnota zjišťuje a kde se nastavuje. U Property Get je n parametrů vlastnosti a její návratový typ musí být shodný s typem parametru n+1 u Property Let|Set. Tento poslední parametr se narozdíl od jiných nachází za rovnítkem a zprostředkovává předání hodnoty pro kód. Pro snadnější pochopení uvedu kód, na kterém uvidíte způsob použití vlastností. 'První část kódu je modul třídy s názvem Pole Private mMax as Long 'Maximální počet prvků v poli Private mPoleVar() As Variant 'Dynamické pole pro uložení prvků libovolného typu 'První vlastnost slouží pro určení počtu prvků pole. Public Property Get Maximum() As Long Maximum=mMax End Property Public Property Let Maximum(NoveMax As Long) mMax=NoveMax Redim Preserve mPoleVar(1 to mMax) 'Změna velikosti pole 112
Programování v CAD – Visual Basic End Property 'Tato vlastnost se stará o ukládání a získávání prvků pole. Jelikož může jít o proměnnou jednoduchého typu nebo o objekt má jak část Let tak i Set. Public Property Get PoleVariant(Index As Long) As Variant If Index<=mMax Then PoleVariant=mPoleVar(Index) End Property Public Property Let PoleVariant(Index As Long, NovyPrvek As Variant) If Index<=mMax Then mPoleVar(Index)=NovyPrvek End Property Public Property Set PoleVariant(Index As Long, NovyPrvek As Variant) If Index<=mMax Then Set mPoleVar(Index)=NovyPrvek End Property
3.2.7 Události Události dávají objektům schopnost, která jim umožňuje přenechat reakci na určitou akci či změnu stavu (může přicházet od uživatele, systému nebo od jiných objektů) na programátorovi. Ten může obsloužit událost libovolným způsobem. Samozřejmě nemusí na událost reagovat vůbec. Toto je znamenitý způsob, jak spolu mohou spolupracovat a reagovat na sebe nezávislé objekty. Součástí většiny ActiveX prvků ve VB jsou události, které vám umožní spojit s nimi kód a tím je také obsloužit. Ve vlastních objektech můžete vytvářet i vlastní události a to tak, že buď "přesměrujete" události jiných objektů a nebo uděláte svoji, která se třeba vyvolá při změně stavu. Příkladem je událost click používaná ve formuláři, viz dále Syntaxe Private Sub objekt_Click( ) Událost Click se skládá z následujících částí: Část objekt index
Popis Povinně. Platný objekt. Povinně. Index strany nebo karty v MultiPage nebo TabStrip, spojené s danou událostí. 113
Programování v CAD – Visual Basic Poznámky Ze dvou případů, ve kterých se vyskytne událost Click, se první případ vztahuje na prvky CommandButton, Frame, Image, Label, ScrollBar a SpinButton. Druhý případ se vztahuje na CheckBox, ComboBox, ListBox, MultiPage, TabStrip a ToggleButton. Rovněž se vztahuje na OptionButton v případě, že se jeho hodnota mění na True. • Následující příklady akcí vyvolávají událost Click: • Klepnutí na prázdnou plochu formuláře nebo nepřístupného ovládacího prvku (jiného než seznam) na formuláři. • Klepnutí na prvek CommandButton. Pokud příkazové tlačítko není ještě aktivní, vyskytne se před událostí Click událost Enter. • Stisknutí klávesy MEZERNÍK, když je prvek CommandButton aktivní. • Klepnutí na ovládací prvek levým tlačítkem myši. • Stisk klávesy ENTER na formuláři, který má příkazové tlačítko, jehož vlastnost Default je nastavena na True, pokud žádné jiné příkazové tlačítko není aktivní. • Stisk klávesy ESC na formuláři, který má příkazové tlačítko, jehož vlastnost Cancel je nastavena na True, pokud žádné jiné příkazové tlačítko není aktivní. • Stisk přístupové klávesy ovládacího prvku. Když je událost Click způsobena klepnutím na ovládací prvek, pořadí událostí, které vedou k události Click je: 1. 2. 3.
MouseDown MouseUp Click
Pro některé ovládací prvky nastává událost Click při změně vlastnosti Value. Používání události Change je upřednostňovanou technikou pro zjišťování nové hodnoty vlastnosti. Následují příklady akcí, které vyvolávají událost Click kvůli změně vlastnosti prvku: • Klepnutí na jinou stránku nebo kartu na prvcích MultiPage nebo TabStrip. Vlastnost Value pro tyto prvky odráží aktuální prvek Page nebo Tab. Klepnutí na aktuální stránku nebo kartu nemění hodnotu ovládacího prvku a nezpůsobuje událost Click. • Klepnutí na CheckBox nebo ToggleButton, stisk klávesy MEZERNÍK ve chvíli, kdy jeden z těchto ovládacích prvků je aktivní, stisk přístupové 114
Programování v CAD – Visual Basic klávesy pro jeden z těchto ovládacích prvků nebo změna hodnoty ovládacího prvku programovým kódem. • Změna hodnoty prvku OptionButton na True. Nastavení jednoho prvku OptionButton ve skupině na True nastavuje všechny ostatní ovládací prvky na False, ale událost Click se vyskytne pouze pro tlačítko, jehož hodnota se mění na True. • Výběr hodnoty pro ComboBox nebo ListBox tak, že nesporně souhlasí s položkou v rozbalovacím seznamu ovládacího prvku. Například pokud seznam není setříděný, první souhlasící položka pro znaky napsané v editační oblasti nemusí být jediná souhlasící položka v seznamu, takže výběr takové hodnoty nezpůsobuje událost Click. V setříděném seznamu můžete použít srovnávání se vkládanou hodnotou, chcete-li se přesvědčit, že vybraná hodnota je jediná souhlasící v textu, který uživatel vkládá. Událost Click není vyvolána v případě, že vlastnost Value je nastavena na Null. Poznámka: Klepnutí levým tlačítkem mění hodnotu ovládacího prvku a tedy vyvolává událost Click. Klepnutí pravým tlačítkem nemění hodnotu ovládacího prvku, takže událost Click nevyvolává.
115
Programování v CAD – Visual Basic 3.2.7.1 Příklad spojení VBA a prostředí AutoCADu Příklad funkce sinus Option Explicit ‘Nastavení překladače na nutnost deklarace proměnných Sub Sinusovka() 'Definice proměnných Dim Ampl As Single Dim pnt As Variant Dim alfa As Single Dim aline As AcadLine Dim startPoint(0 To 2) As Double Dim endPoint(0 To 2) As Double Ampl = AutoCAD.Application.ActiveDocument.Utility.GetReal("Zadejte velikost amplitudy: ") 'Zadani hodnoty amplitudy v AutoCADu pnt = AutoCAD.Application.ActiveDocument.Utility.GetPoint(, "Zadejte pocatek sinusovky: ") ' Zobrazí souřadnice bodu MsgBox "Souřadnice bodu v GSS jsou: " & pnt(0) & ", " & pnt(1) & ", " & pnt(2) ' Vrátí bod v souřadnicích GSS endPoint(0) = pnt(0) endPoint(1) = pnt(1) endPoint(2) = pnt(2) alfa = 0 While alfa < 4 * 3.14 'Kreslení sinusovky startPoint(0) = endPoint(0) startPoint(1) = endPoint(1) startPoint(2) = endPoint(2) endPoint(0) = startPoint(0) + 1 endPoint(1) = startPoint(1) + Ampl * Sin(alfa) endPoint(2) = startPoint(2) 'volání funkce pro vykreslení úsečky v AutoCADu Set aline = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint) aline.Update alfa = alfa + 0.1 Wend End Sub 116
Programování v CAD – Visual Basic 3.2.8 Rozdíly mezi standardním modulem a modulem třídy Standardní modul Tento modul neobsahuje žádné vizuální prvky, pouze zdrojový kód VBA. Slouží k vytváření deklarací, definic a procedur, které logicky nepatří do některého formuláře nebo jsou společné více formulářům. Modul je uložen v souboru s příponou .BAS. Kód ve standardním modulu nemusí být vázán jen na jedinou aplikaci. Pokud používáte vhodné odkazy, můžete daný standardní modul používat v mnoha aplikacích. Modul třídy Je podobný standardnímu modulu v tom, že obsahuje deklarace konstant, proměnných, definice procedur atd. Tyto definice se však týkají třídy, tj. definice (nového) objektu. Jednotlivé definice představují vlastnosti a metody nově definované třídy. Modul je uložen s příponou .CLS
3.2.8.1 Vytvoření třídy v modulu třídy Deklarace vlastností Každá vlastnost objektu se deklaruje v modulu třídy tak, že se uvede v deklarační části klíčové slovo Public a potom se vyjmenují jednotlivé vlastnosti. Syntaxe: Public Vlastnost1 As typvlastnosti1, Vlastnost2 As typvlastnosti2, … Poznámka: Je-li v modulu třídy deklarována v deklarační části proměnná s klíčovým slovem Dim, tato proměnná není vlastností objektu a je na úrovni modulu. To znamená, že je to lokální proměnná modulu třídy . Klíčové slovo Private má v tomto případě stejný význam jako klíčové slovo Dim. Definice metod Každá metoda (procedura či funkce) objektu se definuje s klíčovým slovem Public. Tělo procedury ohraničují příkazy začátku a konce procedury, přičemž deklarační příkaz může obsahovat definici formálních parametrů. Syntaxe: 117
Programování v CAD – Visual Basic Public Sub NázevProcedury (parametr1 As TypParametru1 ,…) End Sub Public Function NázevFunkce (parametr1 As TypParametru1, ...) As TypVrácenéHodnoty End Sub Poznámka: Je-li v modulu třídy definována procedura nebo funkce s klíčovým slovem Private, nejsou to metody daného objektu, ale jsou to procedury a funkce platné pouze pro tento modul. Událost Initalize Událost Initialize se většinou používá pro přípravu aplikace nebo objektu UserForm k použití. Proměnným jsou přiřazeny počáteční hodnoty a ovládací prvky se přesunou nebo změní tak, aby vyhovovaly inicializačním datům. Spustí se, když jsou všechny odkazy na výskyty objektu odstraněny z paměti nastavením všech proměnných, které odkazují na daný objekt na hodnotu „Nothing“, nebo když je poslední odkaz na objekt mimo rozsah. Syntaxe: Private Sub objekt_Initialize() Hodnota objekt zastupuje výraz objektu, který určuje objekt v seznamu. Událost Terminate Událost Terminate se spustí po uvolnění objektu. Není však spuštěna, pokud je výskyt objektu UserForm nebo třídy odstraněn z paměti v důsledku nestandardního ukončení aplikace. Například, pokud aplikace vyvolá příkaz End dříve, než jsou všechny existující výskyty třídy nebo objektu UserForm odstraněny z paměti, nebude událost Terminate pro danou třídu nebo objekt UserForm spuštěna. Syntaxe: Private Sub objekt_Terminate( ) Hodnota objekt zastupuje výraz objektu, který určuje objekt v seznamu.
118
Programování v CAD – Visual Basic 3.2.9 Vytvoření vlastní třídy V tomto příkladu je vytvořena v modulu třídy, třída objektu se jménem MojeTrida. V této třídě objektu jsou definovány čtyři metody a dvě vlastnosti. Dále je deklarovaná jedna proměnná dostupná jen pro tento modul a také jedna funkce a jedna procedura dostupná jen pro tento modul. Pro ilustraci jsou uvedeny i události Inicialize a Terminate. Option Explicit ' deklarace vlastností třídy Public promenna1 As Single, promenna2 As Double ' deklarace proměnné pouze v modulu třídy TestTridy Dim promenna3 As Variant ' příklad definice metody jako procedury Public Sub Procedura1() MsgBox "Probiha Procedura1 objektu třídy MojeTrida" End Sub ' příklad definice metody jako procedury Public Sub Procedura2(Apar1 As Single, Apar2 As Double) MsgBox "Probiha Procedura2 objektu třídy MojeTrida" End Sub ‘ příklad definice procedury platné pouze v tomto modulu třídy Private Sub procedura3() ….. End Sub ' příklad definice metody jako funkce Public Function Funkce1() As Single MsgBox "Probiha funkce1 objektu třídy MojeTrida" Funkce1 = 100 End Function ' příklad definice metody jako funkce s parametry Public Function Funkce2(AVal1 As Single) As Single MsgBox "Probiha funkce2 objektu třídy MojeTrida" Funkce2 = AVal1 End Function 119
Programování v CAD – Visual Basic
' nastavení vlastností objektu při inicializaci objektu třídy MojeTřída Private Sub Class_Initialize() MsgBox "Nastavuji vlastnosti objektu třídy MojeTrida" promenna1 = 1 promenna2 = 2 End Sub ' provede se po zrušeni instance objektu třídy MojeTrida Private Sub Class_Terminate() MsgBox "Ruším objekt třídy MojeTrida" End Sub 3.2.9.1 Použití vlastní třídy objektu V tomto příkladu je ve standardní modulu ukázáno, jakým způsobem se deklaruje instance objektu, nastavení a uvolnění instance objektu. Je zde také příklad, jak se volá vlastnost a metoda daného objektu. Option Explicit Dim myobj1 As MojeTrida MojeTrida Dim myobj2 As Object
' Deklarace instance objektu třídy ' Deklarace instance objektu obecné třídy objekt
Dim pom As Variant Public Sub test() ' Použití instance myobj1 Set myobj1 = New MojeTrida
' Nastaveni instance objektu třídy MojeTrida pom = myobj1.promenna1 ' Příklad vypsání vlastností objektu třídy MojeTrida MsgBox "Promenna1 = " & pom ' Vypsání hodnoty pom myobj1.Procedura1 ' Příklad voláni metody objektu třídy MojeTrida pom = myobj1.Funkce2(1) ' Příklad volání metody objektu třídy MojeTrida Set myobj1 = Nothing ' Uvolnění instance objektu třídy MojeTřída ' Použití instance myobj2 120
Programování v CAD – Visual Basic Set myobj2 = New MojeTrida MojeTrida pom = myobj2.promenna1 MsgBox "Promenna1 = " & pom myobj2.Procedura2 5, 5 Set myobj2 = Nothing
' Nastaveni instance objektu třídy ' Příklad vypsáni vlastností objektu třídy MojeTrida ' Vypsání hodnoty pom 'Příklad volání metody s parametry objektu třídy MojeTrida ' Uvolněni instance objektu třídy MojeTrida
End Sub
Použití vlastní třídy pomocí formuláře Tento příklad ilustruje, jakým způsobem se nechá zakomponovat vlastní třída objektu do formuláře. Nejprve se vytvoří formulář, který má tlačítka názvů jednotlivých metod třídy objektu MojeTrída, tlačítko Vlastnosti a Cancel. Jestliže se stiskne tlačítko některé z metod, metoda se provede. Stiskne-li se tlačítko Vlastnosti, vypíší se vlastnosti objektu třídy MojeTrida. Stisknutím tlačítka Cancel se formulář zruší. Option Explicit Dim myobj As Object
' Deklarace instance objektu obecné třídy objekt
Private Sub ButtonProcedure1_Click() myobj.Procedura1 ' Provede metodu objektu třídy MojeTrida End Sub Private Sub ButtonProcedure2_Click() Call myobj.Procedura2(5, 5) ' Provede metodu objektu třídy MojeTrida End Sub Private Sub ButtonFunction1_Click() Dim pom As Single pom = myobj.Funkce ' Provede metodu objektu třídy MojeTrida MsgBox "Funkce vratila hodnotu " & pom End Sub 121
Programování v CAD – Visual Basic Private Sub ButtonFunction2_Click() Dim pom As Single pom=myobj.Funkce2(10) ' Provede metodu objektu třídy MojeTrida MsgBox "Funkce vratila hodnotu " & pom End Sub Private Sub ButtonVlastnosti_Click() ' Provede výpis vlastností objektu třídy MojeTrida MsgBox "Vlastnosti objektu třídy MojeTrida jsou : " & " promenna1 = " & myobj.promenna1 & " promenna2 = " & myobj.promenna2 End Sub Private Sub ButtonCancel_Click() Unload Me ' Odstraní formulář z paměti End Sub Private Sub UserForm_Initialize() MsgBox " Inicializuji Formulář TestTridy a vytvářím instanci objektu třídy MojeTrida" Set myobj = New MojeTrida 'Vytváří instanci objektu třídy MojeTrida End Sub Private Sub UserForm_Terminate() MsgBox "Ruším Formulář TestTridy a instanci objektu třídy MojeTrida" Set myobj = Nothing ' Ruší instanci objektu třídy MojeTrida End Sub
3.2.9.2 Použití vlastní třídy Vytvoření a zrušení instance vlastní třídy Pokud není instance inicializována (při deklaraci nebo pomocí příkazu Set), pohlíží se na ni, jako by obsahovala hodnotu danou klíčovým slovem Nothing. Toto klíčové slovo může též požívat programátor k explicitnímu uzavření instance, tj. k uvolnění všech jejích paměťových zdrojů.
122
Programování v CAD – Visual Basic Syntaxe: Dim myobj As TřídaObjektu … Set myobj = New TřídaObjektu … Set myobj= Nothing Volání vlastností Při volání vlastnosti se používá tečkové konvence. Nastavení hodnoty vlastností se provede Objekt.Vlastnost = hodnota. Převzetí vlastnosti objektu se provede PřevzatáVlastnost = Objekt.Vlastnost. Volání metod Volání metod se podobně jako u volání vlastností provede tečkovou konvencí. Jedná-li se o funkci, potom je volání Výsledek = Objekt.Metoda (SeznamPřípadnýchParametů) nebo jedná-li se o proceduru Objekt. Metoda Seznam_Případných_Parametrů
3.2.10 Formulář 3.2.10.1 Funkce, objekty, vlastnosti a události ve formuláři Objekt UserForm je okno nebo dialog, který vytváří část uživatelského rozhraní aplikace. Vlastní formuláře mají vlastnosti, které určují vzhled, například pozici, velikost, barvu a způsoby jejich chování. Na formulář lze umísťovat různé druhy objektů, jako jsou například ovládací, minimalizační a maximalizační tlačítka, dále pak posuvníky, roletová menu atd. Ovládací prvky ve formuláři: Všimněte si podobnosti s příkazy dialogového panelu v AutoLISPu, nebo Visual LISPu. Label - ovládací prvek, který zobrazuje na formuláři popisný text, jako například nadpisy, názvy, obrázky nebo stručné instrukce. TextBox - je ovládací prvek, který se používá nejčastěji k zobrazení informací zadaných uživatelem. Je to v podstatě textové pole, do kterého se vpisují údaje. viz příklad Textbox.dvb ListBox - ovládací prvek, který zobrazuje seznam hodnot a umožňuje výběr jedné nebo více z nich. viz příklad Listbox.dvb 123
Programování v CAD – Visual Basic ComboBox - ovládací prvek, který kombinuje vlastnosti ovládacích prvků ListBox a TextBox. Uživatel má možnost vložit novou hodnotu jako u běžného prvku TextBox, nebo může podobně jako u prvku ListBox vybrat některou z existujících hodnot. viz příklad Combobox.dvb CheckBox - ovládací prvek, který poskytuje uživateli možnost volby mezi dvěma hodnotami jako například Ano/Ne, True/False nebo Zapnuto/Vypnuto. Zaškrtne-li uživatel CheckBox, zobrazí se zvláštní znak (podobný X) a aktuální nastavení pole znamená Ano, True nebo Zapnuto; Pokud uživatel CheckBox nezaškrtne, zůstává políčko prázdné a jeho hodnota je Ne, False nebo Vypnuto. OptionButton - ovládací prvek, který se používá k zobrazení, zda je vybrán jeden určitý prvek skupiny. ToggleButton - ovládací prvek, který se používá k indikaci toho, že je položka vybrána. Frame - ovládací prvek, který vytvoří skupinu ovládacích prvků, které spolu opticky a funkčně souvisejí. CommandButton - ovládací prvek který, zahajuje, ukončuje nebo přerušuje akci nebo řadu akcí. TabStrip – ovládací prvek, jedná se o tak zvané karty. Tyto karty sdružují ovládací prvky. ScrollBar – ovládací prvek, jedná se o klasický posuvník. SpinButton - ovládací prvek, který zvyšuje a snižuje hodnotu čísla. Image - ovládací prvek, zobrazí na formuláři obrázek. Image podporuje následující formáty: *.bmp *.cur *.gif *.ico *.jpg *.wmf. Na následujícím obrázku je znázorněno použití jednotlivých ovládacích prvků formuláře.
124
Programování v CAD – Visual Basic
Obr.3-1. Některé ovládací prvky formuláře
3.2.10.2 Vlastnosti prvků formuláře Jsou setříděné do skupin podle oblasti použití. Skupina různé Acceleratorprvku.
nastaví nebo získá přístupovou klávesu daného ovládacího
TabStop určuje, zda se může objekt stát aktivním, když na něj uživatel přejde klávesou tabelátor. HelpContextID – spojuje určité téma vlastního souboru nápovědy ve formátu Microsoft Windows s určitým ovládacím prvkem. 125
Programování v CAD – Visual Basic MouseIcon -
přiřazuje objektu vlastní ikonu.
MousePointer - specifikuje typ ukazatele, který se zobrazí, když uživatel umístí myš nad určitý objekt. Typy ukazatelů: šipka, záměrný kříž, ukazatel tvaru I atd. Tag -
ukládá doplňkové informace o objektu.
Skupina chování Enabled určuje, zda se může ovládací prvek stát aktivním a odpovídat na události generované uživatelem. AutoSize specifikuje, zda mění objekt automaticky velikost v souladu se svým celým obsahem. AutoTab - specifikuje, zda se vyvolá automatický tabelátor, jakmile uživatel vloží maximální přípustný počet znaků do ovládacího prvku TextBox nebo do textové části prvku ComboBox. HideSelection - Určuje, zda má zůstat vybraný text zvýrazněn i v případě, že prvek není aktivním. Locked -
určuje, zda lze ovládací prvek editovat.
MaxLength specifikuje maximální počet znaků, které může uživatel zadat do TextBox nebo ComboBox. SelectionMargin - určuje, zda může uživatel vybrat řádek textu klepnutím na oblast vlevo vedle textu.
Skupina obrázek Picture specifikuje bitovou mapu, která se zobrazí na objektu. PictureAlignment - udává umístění obrázku v pozadí. Možnosti umístění: střed, levý horní nebo dolní roh, pravý horní nebo dolní roh. PictureSizeMode – určuje zda se obrázek ořízne okolo formuláře nebo naopak zda se natáhne na celou plochu. 126
Programování v CAD – Visual Basic PictureTiling dlaždice.
umožňuje uspořádat obrázek na formuláři nebo stránce jako
PicturePosition - udává umístění obrázku relativně k jeho titulku. Skupina písmo Font –
nastavuje druh písma pro formulář
Skupina umístění Height, Width - výška nebo šířka objektu v bodech. Left, Top - vzdálenost mezi ovládacím prvkem a levým horním rohem formuláře, který jej obsahuje.
Skupina vzhled BackColor specifikuje barvu pozadí objektu. BorderColor -
specifikuje barvu okraje objektu.
BorderStyle specifikuje typ okraje, který použije daný ovládací prvek nebo formulář. Caption text, který se objevuje na objektu a identifikuje jej nebo jej popisuje. Např. název tlačítka nebo formuláře atd. ForeColor -
specifikuje barvu popředí objektu.
SpecialEffect - umožňuje nastavit vzhled objektu. Např. styl vrženého stínu, zda se objekt jeví jako vystouplý či propadlý atd.
3.2.10.3 Click -
Události ve formuláři vyskytne se v jednom z těchto dvou případů: Uživatel klepne na ovládací prvek myší Uživatel určí explicitní hodnotu pro ovládací prvek s více než jednou možnou hodnotou. viz kapitola události výše.
127
Programování v CAD – Visual Basic DblClick - nastane, ukáže-li uživatel na objekt a dvakrát rychle klepne tlačítkem myši. Error -
nastane, zjistí-li ovládací prvek (tlačítko) chybu a nemůže vrátit informaci o chybě volajícímu programu.
KeyPress - událost KeyPress může nastat po stisku libovolné z následujících kláves: Libovolné klávesy klávesnice, která představuje zobrazitelný znak. Kombinace klávesy CTRL s klávesou standardní abecedy. Kombinace klávesy CTRL s libovolným zvláštním znakem. BACKSPACE. ESC. Událost KeyPress se nevyskytuje za následujících podmínek: Stisknutí klávesy TAB. Stisknutí klávesy ENTER. Stisknutí šipky. Pokud stisknutí klávesy způsobí přesun aktivity z jednoho ovládacího prvku na další.
128
Programování v CAD – Visual Basic
3.3 Práce s objekty - kolekce Objekt Collection (kolekce) je uspořádaná množina položek, na kterou může být odkazováno jako na samostatnou jednotku. Jedinou společnou vlastností položek objektu Collection, nazývaných členy, je jejich příslušnost ke společné kolekci. Členy objektu Collection nemusejí být nutně stejného datového typu. Kolekce může být vytvořena stejným způsobem, jako kterýkoliv jiný objekt. Například: Dim X As New Collection Jakmile je objekt Collection vytvořen, mohou do něj být přidávány nové členy pomocí metody Add a odebírány pomocí metody Remove. Metoda Item vrací jednotlivé členy kolekce , celá kolekce může být zpracována pomocí cyklu For Each ... Next. Metoda Add: - přidání členu do objektu Collection. Syntaxe objekt.Add item, key, before, after
Syntaxe metody Add má následující kvalifikátor objektu a pojmenované argumenty: Objekt item key
before
Povinný. Objektový výraz, který se vyhodnotí jako objekt v seznamu Odpovídá. Povinný. Výraz libovolného typu, který zadává člen, jenž má být přidán do kolekce. Volitelný. Jednoznačný řetězcový výraz zadávající klíčový řetězec, který může být použit, namísto pozičního indexu. Slouží k přístupu ke členu kolekce. Volitelný. Výraz, který zadává relativní pozici v kolekci. Přidávaný člen umístěn před člen zadaný argumentem before. Pokud je zadáván numerický výraz, before musí být číslo v rozmezí od 1 do hodnoty Count, která je vlastností kolekce. Pokud je zadáván řetězec, before musí odpovídat hodnotě key zadané při přidávání 129
Programování v CAD – Visual Basic
after
členu, na nějž se odkazujete do kolekce. Je možné zadat hodnotu before nebo after , ale nikoliv obě dvě. Volitelný. Tento výraz zadává relativní pozici v kolekci. Přidávaný člen je umístěn do kolekce za člen, zadaný argumentem after. Pokud je zadáván numerický výraz, after musí být číslo v rozmezí od 1 do hodnoty Count objektu collection. Pokud je zadáván řetězec, after musí odpovídat hodnotě key zadané při přidávání členu, na nějž se odkazujete do kolekce. Je možné zadat hodnotu before nebo after.
Nezávisle na tom, zda jsou before a after argumenty řetězce nebo numerické výrazy, musejí odkazovat k existujícímu členu v kolekci. Jinak dojde k chybě. K chybě také dojde pokud zadaná hodnota key duplikuje key již existujícího členu v kolekci. Metoda Remove: odstranění členu z objektu Collection. Syntaxe objekt.Remove index Metoda Remove má následující kvalifikátor objektu a část: Objekt index
key
Povinný. Objektový výraz, který se vyhodnotí jako objekt na seznamu Odpovídá. Povinný. Výraz, který zadává pozici členu v kolekci. Jde-li o numerický výraz, index musí být v rozmezí od 1 do hodnoty Count, která je vlastností kolekce. Jde-li o řetězcový výraz, index musí odpovídat hodnotě argumentu zadanému při vkládání členu, na nějž se odkazujete, do kolekce.
Pokud hodnota zadaná jako index neodpovídá žádnému existujícímu členu v kolekci, dojde k chybě. Metoda Item: Vrací člen objektu Collection určený pozicí nebo klíčem. Syntaxe objekt.Item(index) Syntaxe metody Item má následující kvalifikátor objektu a části: Objekt
povinný. Objektový výraz, který se vyhodnotí jako objekt na seznamu Odpovídá 130
Programování v CAD – Visual Basic index
povinný. Výraz, který zadává pozici členu v kolekci. Jde-li o numerický výraz, musí být index číslo v rozmezí od 1 do hodnoty Count, která je vlastností kolekce. Jde-li o řetězcový výraz, index musí odpovídat hodnotě argumentu key, zadané při přidávání členu, na nějž se odkazujete, do kolekce.
Pokud hodnota zadaná jako index neodpovídá žádnému existujícímu členu v kolekci, dojde k chybě. Příkaz For Each...Next Pro každý prvek pole nebo kolekce opakuje uvedenou skupinu příkazů. Syntaxe For Each prvek In skupina[příkazy] [Exit For] [příkazy] Next [prvek] Pro demonstraci použití kolekce je přiložen jeden fungující příklad. Jedná se o jednoduché vykreslení obecného čtyřúhelníku v AutoCADu za použití kolekcí. V tomto programu jsou použité výše uvedené metody Add, Item a Remove. Příkaz For Each...Next použit nebyl. Ale byl použit při odlaďování programu pro vypsání všech hodnot zadané kolekce. Příklad kolekce pro vykreslení obecného čtyřúhelníku viz. příloha.
131
Programování v CAD –Pro/PROGRAM
4 Základy programování v Pro/Engineeru 4.1 Pro/PROGRAM Po otevření základního okna Pro/Engineeru je k dispozici základní roletové menu. V položce File zvolte možnost Open (pro otevření existujícího partu nebo assembly), nebo New pro vytvoření nové instance. Pokud zvolíte New a vyberete part, po otevření kreslícího okna je k dispozici v pravé horní části Menu manager pro Part. V tuto chvíli je přístupná pouze nabídka Feature, Set Up, Integrate a Copy From. Nabídka Program je neaktivní. Aktivní se stane po vytvoření alespoň základního partu (tělesa). Po načtení již hotové součásti pomocí nabídky File > Open, jsou v Menu manageru aktivní všechny položky kromě Copy From. Pokud zvolíte New assembly, je k dispozici Menu manager pro Assembly. V tomto režimu je již nabídka Program aktivní. Protože však není žádná sestava vytvořena, obsahuje výpis pouze název sestavy a několik základních, „prázdných“ příkazů, které zde nemají obsah. Načtením sestavy pomocí Open např. příklad_1_ sestava.asm jsou v Menu manageru aktivní opět všechny nabídky kromě Copy From. Jednou z aktivních položek je i položka Program, o které bude dále řeč jako o Pro/PROGRAMu.
4.1.1 O používání Pro/PROGRAMu Pomocí Pro/PROGRAMu lze vytvořit program, který řídí vytváření součásti nebo sestav editováním dat parametrických modelů. 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í.
4.1.2 Nabídka which design Na počátku je přístupný pouze popis, který existuje v modelu. Po editaci popisu je vytvořen soubor, obsahující nejnovější konstrukční specifikace. V tomto okamžiku tedy existují dva konstrukční popisy pro stejný model – konstrukce From model a konstrukce From file. Po úspěšném zahrnutí změn do modelu je konstrukční popis From file zrušen a je přístupný pouze popis From model. 132
Programování v CAD –Pro/PROGRAM V případech, kdy existuje konstrukční popis „from file“, zobrazuje nabídka WHICH DESIGN dvě volby: From model – načtení popisu z modelu From file – načtení popisu z existujícího souboru se jménem (např. asm001.als nebo part0001.pls). Konstrukce From model a konstrukce From file se mohou lišit: konstrukce From model zobrazuje platný stav modelu, zatímco konstrukce From file obsahuje všechny nové instrukce, které jste přidali během poslední editace.
4.1.3 Jak prohlížet konstrukci modelu K prohlížení popisu konstrukce modelu lze použít příkazů Show Design nebo Edit Design z nabídky PROGRAM. Show Design se zobrazuje v informačním okně, neumožňuje editaci. Edit Design zobrazí program v okně systémového editoru (např.Notepadu). V hlavičce konstrukčního popisu je položka REVNUM, která ukazuje poslední revizi modelu. Tuto hodnotu systém používá při zjišťování aktuálnosti popisu. Typický popis konstrukce může obsahovat cokoliv z uvedeného seznamu: vstupní proměnné a jejich platné hodnoty; relace; podmíněné příkazy IF-ELSE; seznam všech prvků, součástí nebo sestav, obsažených v dané konstrukci; příkazy EXECUTE (v režimu Assembly); příkazy INTERACT; potlačení a uspořádání konstrukčních prvků; příkaz MASSPROP.
4.1.4 Editace modelu Editování konstrukce umožní specifikovat změny modelu. Editor dovolí modifikovat jakoukoliv informaci o modelu, ale spoustu úprav systém ignoruje. O některých možných úpravách je zmíněno dále. Pro editaci modelu zvolte Edit Design z nabídky PROGRAM. Jestliže existují dva popisy konstrukce, musíte vybrat z nabídky WHICH DESIGN buď From model nebo From file. Jestliže editujete popis poprvé nebo po úspěšném promítnutí změn do modelu, nabídka WHICH DESIGN se nezobrazí a edituje se přímo konstrukce From model. Pokud v pracovním adresáři existuje popis konstrukce v souboru, potom se při pokusu editovat popis konstrukce pomocí From model objeví varování. To připomíná, že po ukončení editace bude soubor existující v adresáři přepsán. Pokud chcete provést editaci, (která nahradí stávající soubor), zadejte Y. Zadáním N editaci přerušíte.
133
Programování v CAD –Pro/PROGRAM 4.1.5 Relace Všechny relace, které lze vkládat do modelu Pro/Engineeru, je možné vkládat i do programu. Operátory, funkce a syntaxe relací jsou popsány v helpu, v kapitole Relace (Relations). Pokud je délka výrazu, který zapisujete do příkazu RELATIONS, delší než 80 znaků, ukončete aktuální řádek zpětným lomítkem \ a pokračujte v zápisu výrazu na dalším řádku. Pokud hodnoty kóty mohou nabývat záporných hodnot, musíte před název kóty vložit symbol dolar $ (např. místo d20 použijte $d20). V opačném případě nebude kóta aktualizována. Jestliže program přiřadí hodnotu kótě, která je již řízena relací v součásti nebo v sestavě, zobrazí se dvě chybová hlášení. Opravte příslušnou část popisu nebo odstraňte relace z programu a regenerujte model.
4.1.6 Vstupní parametry Na začátku popisu konstrukce mohou být zadány vstupní proměnné (INPUT variables). Typickým případem je dosazení hodnot do parametru, který je později použit v relaci nebo zadání jména modelu, které je pak použito v sestavě. Příkaz INPUT musí obsahovat jméno a typ proměnné. Jména proměnných musí vždy začínat písmenem. Jsou podporovány tyto typy proměnných: Number – hodnotou tohoto typu proměnných je číslo, String – hodnotou tohoto typu proměnných je řetězec znaků. Tyto proměnné dovolí zadat parametry nebo jména modelů, ale ne uživatelské atributy. Yes_No – hodnotou tohoto typu proměnných je buď Y nebo N. Není-li zadán typ proměnné, dosadí systém implicitně typ „Number“.
4.1.7 Vkládání výzev Kdykoliv je to třeba, systém vyzve uživatele k zadání hodnot vstupní proměnné. Standardní systémovou výzvu můžete nahradit výzvou, kterou sami definujete pro každou jednotlivou vstupní proměnnou. Tyto výzvy pak budou zobrazovány při běhu programu v situacích, kdy bude systém vyžadovat vstup hodnoty pro danou proměnnou. Pro vkládání výzev platí určitá pravidla: Výzva musí být uzavřena v uvozovkách. 134
Programování v CAD –Pro/PROGRAM Výzva musí následovat bezprostředně za definicí vstupní proměnné. 4.1.8 Podmíněné příkazy Seznam vstupních proměnných v Pro/PROGRAMu může obsahovat příkazy IF-ELSE-ENDIF. Tyto podmínky umožňují omezit hodnoty uživatelem zadávaných kót nebo např. umožňují zahrnout určitý prvek do konstrukce pouze po kladné odpovědi (Y) na dotaz. Podmínkové příkazy slouží i pro větvení konstrukce. Tyto příkazy umožňují řídit,zda konstrukční prvky nebo komponenty budou obsaženy v konstrukci modelu. Pro/Engineer vyhodnotí všechny podmínkové příkazy závislé na konstrukčních prvcích před regenerací každého konstrukčního prvku. Proto stačí v programech, ve kterých jsou podmínkové příkazy závislé na konstrukčních prvcích ovlivňovány prvky Evaluate, referenčními rozměry, atd., zadat pouze jediný příkaz Regenerate. Pokud však přidáte do programu podmínkový příkaz závislý na konstrukčním prvku, který je ovlivňován některým následujícím prvkem, potom systém vypíše chybové hlášení, že konstrukce je nekonsistentní.
4.1.9 Operace s prvky 4.1.9.1 Potlačení prvků součástí nebo sestav Prvky součástí nebo sestav, nebo celé komponenty mohou být potlačeny vložením slova SUPPRESSED bezprostředně za slovo ADD: ADD SUPPRESSED PROTRUSION. Podobně lze potlačený prvek obnovit zrušením slova SUPPRESSED z příkazu ADD FEATURE. Potlačení provedené v programu pracuje stejně jako potlačení provedené v Pro/Engineeru, tj. potlačené modely nejsou při vyvolání sestavy načteny. Proto také potlačené modely nebudou uloženy, pokud sestavu uložíte příkazem Save as.
4.1.9.2 Přeuspořádání a vymazání prvků Přeuspořádání nebo zrušení prvků součásti nebo sestavy a komponent se provede editorem zrušením nebo změnou odpovídajících podmínek ADD FEATURE součásti nebo sestavy. Základní prvek nemůže být přeuspořádán. Snažíte-li se zrušit člen znásobení nebo skupiny, systém změnu odmítne a zeptá se vás, jestli se má znovu editovat soubor.
135
Programování v CAD –Pro/PROGRAM 4.1.9.3 Úprava rozměrů prvku Rozměry prvků mohou být v programu změněny nahrazením příkazu kóty takto: MODIFY d# = hodnota Novou hodnotu kóty můžete zadat i pomocí příkazu RELATIONS. V případě, kdy hodnotu kóty modifikuje uživatel po výzvě systému (proměnná v příkazu INPUT), nelze kótu změnit v programu příkazem MODIFY.
4.1.9.4 Použití komentářů V programu můžete použít vysvětlující komentáře pro anotaci relací a příkazů ADD. Při vkládání komentáře použijte následující formát: /* komentář Text komentáře je tedy uveden znaky lomítko a hvězdička. V příkazu ADD musí komentář následovat bezprostředně po řádku „ADD …“, aby byl připojen k prvku a zobrazoval se v informačním okně.
4.1.9.5 Editace chyb Ihned po ukončení editace systém kontroluje editovaný soubor a detekuje všechny chyby, které zabraňují Pro/PROGRAMu, aby porozuměl obsahu souboru. Chyby mohou vzniknout např. takto: • příkaz IF nemá ukončení příkazem ENDIF nebo naopak, • jména proměnných v relaci nebo podmínce jsou nesprávně zapsána, • požadujete přeuspořádání potomka před rodiče, • rušíte rodiče jiných prvků. Jestliže soubor obsahuje chybu, objeví se nabídka PROG ERROR s aktivními volbami: Abort – zrušení změn, které jste během editace provedli a návrat ke stavu před editací. Edit – nová editace programu s cílem odstranit chyby. Chybová hlášení jsou umístěna přímo v textu, určují tedy umístění a typ chyby. Tyto zprávy budou při následném zpracování programu ignorovány. Vymazány budou při zjištění dalších chyb a umístění nových varování do textu programu nebo při ukončení práce s modelem.
136
Programování v CAD –Pro/PROGRAM 4.1.10 Zahrnutí změn do modelu Po dokončení editace programu se vás systém zeptá, zda má uložit změny do modelu. Pokud souhlasíte, zadejte Y. Odpovíte-li N, program nebude prováděn. Kdykoliv spouštíte program, otevřete program příkazem Edit Design. Ukončení editoru (nemusíte provést žádné změny) spustí provádění programu a vy budete vyzváni, zda se mají zahrnout změny do modelu. Při zahrnutí změn do modelu vás může systém vyzvat k zadání hodnot proměnných. Po zahrnutí změn konstrukce do modelu systém vymaže soubor s popisem konstrukce (from file) a pro prohlížení, editování a spouštění je dostupný pouze popis From model.
4.1.10.1 Zadávání hodnot vstupních proměnných Obsahuje-li popis konstrukce modelu vstupní proměnné, budete vyzváni k zadání jejich hodnot při každé regeneraci modelu nebo po zahrnutí nových instrukcí do modelu. Způsoby zadávání hodnot jsou vypsány v nabídce GET INPUT. Current Vals – program použije aktuální hodnoty a nebude vyžadovat vstup z klávesnice. Enter – po výzvě zadejte nové vstupní hodnoty. Výběr parametrů pro zadání nových hodnot se provádí zahrnutím jmen parametrů v nabídce INPUT SEL. Pro/PROGRAM vás vyzve k zadání nových hodnot pouze pro parametry, které jste označili zatrhnutím. Read File – při běhu programu se použijí vstupní hodnoty uložené v souboru. Zadejte jméno souboru, včetně přípony. Aktuální hodnoty parametrů můžete zkontrolovat příkazem Show Design > From model; v informačním okně se zobrazí seznam vstupních proměnných a jejich aktuálních hodnot.
4.1.10.2 Výběr a změna vstupních parametrů Z nabídky PART zvolte Program a pak PROGRAM > Edit Design. Systémový editor zobrazí platný Pro/PROGRAM pro daný model. Proveďte požadované změny v příkazu INPUT. Zahrňte změny do modelu. Zvolte GET INPUT > Enter. V nabídce INPUT SEL označte zatrhnutím vstupní parametry, jejichž hodnoty budete zadávat, potom zvolte Done Sel. 137
Programování v CAD –Pro/PROGRAM Po výzvě systému zadejte nové hodnoty a PROGRAM > Done/Return. Místo ručního zadávání hodnot proměnných můžete zvolit možnost načíst hodnoty ze souboru umístěného v pracovním adresáři pomocí Read File. Vstupní soubor by měl mít jednu vstupní hodnotu na řádku, a to v následujícím tvaru: parametr_name = hodnota nebo výraz Jestliže vstupní soubor obsahuje méně parametrů než je uvedeno v příkaze INPUT, systém ponechá pro chybějící parametry momentálně platné hodnoty. Má-li naopak soubor více proměnných než je potřeba, nebudou se nepotřebné parametry brát v úvahu. Protože program ignoruje parametry, které v něm nejsou využity, můžete vytvořit vstupní soubor, který bude sloužit jako globální zdroj vstupních dat pro více modelů. Při čtení hodnot proměnných ze souboru rozlišuje systém malá a velká písmena ve jménech proměnných.
4.1.11 Chyby při provádění programu Dojde-li k chybám při provádění programu, reaguje systém takto: 1. V režimu Part a Assembly Je-li chyba způsobena chybou konstrukčního prvku (např. rozměr nevyhovuje omezení definovanému v relacích), objeví se informační okno s popisem chyby, která je rovněž zapsána do souboru errors.lst.n. Potom lze editovat program From file (a opravit chyby) nebo From model (a začít od začátku). Je-li chyba způsobena geometrickou chybou, Pro/Engineer vstoupí do speciálního prostředí Resolve, které obsahuje nástroje pro nalezení a odstranění chyby. 2. V režimu Assembly: Dojde-li k chybě v sestavě (např. proto, že do sestavy byl vložen nevhodný člen), systém vás informuje, že selhalo nahrazení určitého členu a zeptá se, zda chcete znovu editovat program.
4.1.12 Chyby prvků Značné množství chyb není možné zjistit během editace, ale mohou způsobit, že výsledný model je nepoužitelný. Obecně tyto chyby se definují jako chyby, jejichž příčinou je neplatný seznam konstrukčních prvků. Tyto chyby většinou vznikají při 138
Programování v CAD –Pro/PROGRAM přeuspořádání nebo mazání prvků, které na sobě vzájemně závisí. Mohou také vzniknout po zadání nevhodných podmínek pro vytváření prvků, které dovolí vytvoření jistých prvků, ale nedovolí vytvoření jejich rodiče. Chyby plynoucí z neplatného seznamu prvků jsou zjištěny během vykonávání programu po zadání vstupních hodnot, ale předtím, než začne rekonstrukce geometrie modelu.
139
Programování v CAD –JAVA & Pro/Engineer
5 JAVA & Pro/Engineer 5.1.1 Základní rysy jazyka Java Java je objektově orientovaný programovací jazyk, což znamená, že můžete Javu využít k sestavování vlastních programů prostřednictvím dat a metod (funkcí), jež provádějí operace s těmito daty. V Javě se pod pojmem třída (class) rozumí soubor dat a metod, které popisují objekt, s nímž váš program pracuje. Objekt si můžete představit jako “věc“, jako je například grafický obrázek, dialogové okno nebo soubory. Programy Javy mohou uspořádávat třídy hierarchickým způsobem, to znamená, že můžete z existujících tříd vytvářet nové třídy, čímž se zlepšují nebo rozšiřují schopnosti stávajících tříd. Jakákoli struktura v Javě, s výjimkou několika málo primitivních typů, jako jsou čísla, znaky a booleovské typy ( true a false ), je objektem. Java přichází s rozsáhlým souborem tříd, jenž můžete používat ve vašich programech. Java je objektově orientovaný programovací jazyk a Pro/Engineer je program umožňující vytváření 3D modelů. V této části je uveden přehled příkazů a metod využívaných při programování jednoduchých i složitých programů pro řízení nebo tvorbu 3D modelu. Dědičnost – jeden ze základních pojmů z objektově orientovaných programovacích jazyků. Podtřída zdědí proměnné a metody nejen z vyšších tříd, ale také ze všech jejich předků. Posuďte následující kód: class A { public A( ) { // Constructor třídy A }
} class B extends A { public B( ) { //A je super třída B, B je podtřída A. } } Java nepodporuje mnohonásobné dědictví, ale toto omezení lze obejít například zápisem: interface A { public void doNothing( ); // Pouze deklarace metody 140
Programování v CAD –JAVA & Pro/Engineer } // Constructor B class B implements A { // Zavedení této metody public void doNothing( ) { } }
Polymorfismus – můžete nahradit odvozenou třídu kdykoli je její základní třída požadována. Metody hlavní a více násobné definice - můžete předefinovat super třídu s přesným popisem a vrátit její typ. Navíc můžete určit metody nebo konstruktory s různým popisem. Překladač nezávislý na platformě - když zkompilujete program Javy, kompilátor přeloží váš program do binárního kódu nezávislého na platformě (na typu používaného systému, např. Windows, UNIX, atd.). Pak použijete překladač a ten přeloží (upraví) binární kód tak, aby systém vašeho počítače dokázal s binárním kódem dále pracovat. Na rozdíl od standardního programu však binární kód Javy není specifický pro daný procesor. Jinými slovy řečeno, binární kód nekoresponduje s procesorem Intel Pentium nebo s procesorem Motorola. Aby mohl překladač spustit binární kód Javy, převede si posloupnost nul a jedniček, jenž byla původně na platformě nezávislá, na jinou posloupnost nul a jedniček, jimž procesor ve vašem počítači rozumí. Jinými slovy řečeno, překladač přemapuje binární kód na posloupnost nul a jedniček, které korespondují s daným, právě používaným procesorem, jako je například Pentium. Váš program je kompilován pouze jednou, ale překládán je pokaždé, když je program používán. Pozn.: tento překladač je součástí balíku JAVA, který je možno stáhnout na www stránkách firmy Sun Microsystem. Java na Internetu - Společnost Sun navrhovala Javu od samého začátku tak, aby se přesně hodila na potřeby Internetu. Applety jsou speciální programy v Javě, které se vykonávají uvnitř webovského prohlížeče. Na rozdíl od toho se aplikace Javy (což je aplikační program, odlišný od appletu) uvnitř prohlížeče nevykonávají. Jak se ukazuje, applety Javy se od nezávislých 141
Programování v CAD –JAVA & Pro/Engineer aplikací Javy příliš neodlišují. Můžete si začít vytvářet váš program v Javě od appletu k aplikací a přecházet kdykoli od jednoho k druhému. Předpokládejte například, že vytváříte novou aplikaci v Javě, která je zpočátku navrhována jako samostatná ( na Internetu nezávislá ) hra pro počítače Mac. Po ukončení vašich vývojových prací se rozhodnete, že chcete, aby tato hra mohla běžet na webovských prohlížečích. Vaše práce na přeměnu této aplikace do webovského appletu se redukuje na několik velice triviálních změn a doplnění jednoduchého kódu HTML. Současně zjistíte, že vaše hra bude běžet i na jiných počítačích než na počítačích typu Macintosh. Důležitou věcí, kterou si musíte zapamatovat, je to, že apllety Javy mohou běžet v prohlížečích po celém Webu, zatímco aplikační programy Javy tuto vlastnost nemají. vysoký výkon - Java je výkonný programovací jazyk, který je dynamický. Můžete zavádět třídy Javy během překládání programu. žádné ukazatele - Java vám nedovolí používat ukazatele (pointer) přímým voláním na paměťové místo. Avšak všechny odkazy na objekty jsou vlastně ukazatele, protože se odvolávají na umístění v paměti, které obsahují objekt. Proto nastavení jednoho objektu, který je roven jinému, nevytvoří novou verzi objektu. Například: String muj_retezec = tvuj_retezec V tomto příkladu nový objekt typu řetězce není vytvořen. žádný preprocesor - Java neobsahuje žádný příkaz preprocesoru jako C nebo C++. Proto nemůžete deklarovat globální konstanty jako v programovacím jazyku C. Místo toho můžete deklarovat prostor v objektu, ten může být static nebo final, který úspěšně deklaruje prostor jako constant.
5.1.2 Klíčová slova JAVA V této části jsou popsána klíčová slova nejčastěji používaná při použití J-Link. Následující klíčová slova specifikují přístup k datům: public – přístup ze tříd, podtříd, sad programů a prostředí private – přístup pouze z tříd protected – přístup z tříd, podtříd a sad programů package – přístup z tříd a sad programů. Toto je standardní přístup. 142
Programování v CAD –JAVA & Pro/Engineer Následující klíčová slova popisují proměnné nebo metody: static – tato metoda nebo proměnná není připojena k jednotlivému objektu, ale k celé třídě final – určuje třídu, metodu nebo prostor (pole), které nebude modifikováno u jiného objektu, static final deklaruje konstantu new – vytvoří novou třídu. Následující ukázka přibližuje vytvoření nové třídy: String muj_retezec = new String (“toto je muj retezec“) Až na jednotlivé objekty nemůžete použít klíčové slovo new k inicializaci J-Link objektů. instanceof – java instanceof operátor je způsob k určení, zda jednotlivý objekt může patřit ke specifikované třídě. Instanceof operátor produkuje Booleovské hodnoty, které určují zda objekt je člen třídy. Typický příklad je: if (<jmeno_objektu> instanceof <jmeno_tridy>) V J-Link by měl tento operátor být použít k rozeznávání mezi různými úrovněmi dědictví.
5.1.3 Řídící příkazy Výjimky umožňují testovat jisté události. K vytvoření řídícího příkazu použijte následující klíčová slova: try – vykoná kontrolní blok používající předdefinované řídící příkazy catch – specifikuje výjimku “catch“ v try bloku finally – specifikuje kontrolní blok aplikovaný po try bloku, bez ohledu na to, zda výjimka try nastala nebo nenastala i po ukončení bloku catch. Pozn. Tento blok se provede vždy bez ohledu na to jaký výsledek vrátí try a catch. Toto je nepovinná definice v programu. throw – okamžitě pošle zprávu programátorovy, která se týká zvláštní výjimky .
5.1.4 Instalace vývojového balíku Javy 5.1.4.1 Instalace vývojového balíku Javy z CD-ROM Vývojový balík Javy (Java Developer´s Kit - JDK) je soubor softwaru od společnosti Sun, který obsahuje všechno, co potřebujete k vytváření appletů Javy. Konkrétně obsahuje JDK kompilátor, debugger a prohlížeč appletů Javy pomocí 143
Programování v CAD –JAVA & Pro/Engineer něhož můžete spouštět applety Javy vně prohlížečů a dále dokumentaci a vzorové applety. Můžete si JDK stáhnout z webovského serveru společnosti Sun. Pokud programujete v prostředí Windows 95 nebo Windows NT, pak si můžete JDK nainstalovat z CDROMu. Spustíte samorozbalitelný soubor JDK102.EXE. Tento soubor po svém spuštění rozbalí všechny soubory potřebné pro vývojový balík Javy do adresáře Java na vašem pevném disku. K instalaci JDK proveďte následující kroky: Pokud používáte Windows 95 nebo novější verzi Windows NT, zvolte v nabídce start variantu Run. Poté Windows 95 zobrazí dialogové okno pro spuštění programu. Napište command a stiskněte Enter. Pokud používáte starší verzi Windows NT, zvolte v nabídce Programs Manager´s File variantu Run. Poté Windows NT zobrazí dialogové okno pro spuštění programu. Napište command a stiskněte Enter. Z úrovně příkazového promptu použijte následující příkaz změny adresáře k nastavení kořenového adresáře jako vašeho pracovního adresáře: C:\WINDOWS> CD \ Vložte CD-ROM do cd mechaniky. A aniž byste změnili váš pracovní adresář na pevném disku. Napište písmeno označující vaší CD mechaniku, dvojtečku, zpětné lomítko a jméno programu JDK102 a poté stiskněte klávesu Enter. Například, pokud je vaše CD mechanika označena jako disk D:, pak byste napsali: C:\> D:\JDK102 . Program po svém spuštění umístí všechny soubory patřící do vývojového balíku Javy na váš pevný disk. Program vytvoří konkrétně podadresáře: Java Java\lib
-hlavní adresář -obsahuje všechny knihovny tříd Javy, především soubor classes.zip, z něhož kompilátor Javy extrahuje třídy při kompilaci Java\bin -obsahuje vykonatelné programy Javy, jako jsou kompilátor, debugger a prohlížeč appletů Java\include -- obsahuje soubory záhlaví (header), jež odpovídají různým třídám Javy Poté, co nainstalujete vývojový balík Javy na váš pevný disk, potřebujete modifikovat dvě proměnné nastavující prostředí, abyste mohli programy JDK používat: PATH Použijte příkaz PATH, abyste do vaší příkazové cesty přidali adresář C:\JAVA\BIN.
144
Programování v CAD –JAVA & Pro/Engineer HOME Použijte příkaz SET k nastavení proměnné HOME tak, že bude obsahovat jméno disku a adresáře se soubory Javy, a to takto: SET HOME =C:\ Poznámka: Pokud Váš OS má soubor AUTOEXEC.BAT, aktualizujte příkaz PATH tak, aby v něm byl obsažen adresář C:\JAVA\BIN. Dále do souboru AUTOEXEC.BAT zařaďte příkaz SET a přiřaďte pomocí něj proměnné HOME cestu k adresáři se soubory Javy.
5.1.4.2 Stažení vývojového balíku Javy z Internetu Vývojový balík Javy je možný získat od společnosti Sun Microsystems. JDK obsahuje kromě kompilátoru Javy několik dalších doplňujících programů (jako např. debugger a prohlížeč appletů) a zdrojové kódy pro velké množství příkladů. Kopii JDK, specifickou pro daný počítač (tj. JDK pro Windows, Mac nebo Unix), můžete získat tak, že se vaším prohlížečem připojíte na webovský server Sunu: http://java.sun.com/products/JDK Webovský server vám nabídne aktuální seznam podporovaných platforem: • SPARC Solaris (2.2 nebo vyšší) • Intel x86 Solaris • Windows 95 nebo Windows NT • MacOS
5.1.5 Typy souborů Při vytváření souboru ve zdrojovém kódu Javy si musíte dávat pozor na konvence Javy při pojmenovávání souborů. Každý soubor Javy ve zdrojovém kódu musí mít příponu Java. Navíc musí jméno souboru odpovídat jménu veřejné (public) třídy, kterou soubor definuje. Například, jestliže váš soubor ve zdrojovém kódu vytváří třídu nazvanou MorphaMatic, pak se váš zdrojový soubor musí jmenovat MorphaMatic.java. Jak je z příkladu patrné písmena ve jméně souboru ve zdrojovém kódu musí přesné odpovídat jménu třídy, a to i včetně rozlišování mezi malými a velkými písmeny. Nakonec kompilátor Javy vytvoří soubor v binárním kódu. Tento soubor bude mít příponu class. V uvedeném případě bude mít příslušný soubor v binárním tvaru 145
Programování v CAD –JAVA & Pro/Engineer jméno MorphaMatic.class. Jak již bylo uvedeno, soubor s příponou class je právě ten soubor, který program přetáhne a následně vykoná. Vytvoření zdrojového ASCII kódu K vytvoření zdrojového souboru Javy můžete použít jakýkoli ASCII editor, jako jsou např. EDIT (MS-DOS), Notepad (Windows) nebo vi (UNIX). Při vytváření souboru Javy ve zdrojovém kódu musíte soubor pojmenovat po veřejné třídě, kterou soubor obsahuje, a to s příponou java. Následující příklad ukazuje vzor souboru Javy ve zdrojovém kódu se jménem MyFirst.java: import java.applet.*; import java.awt.*; public class MyFirst extends Applet // definice třídy appletu { // na toto místo přijdou proměnné a příkazy public void init( )
// metoda inicializace
{ // sem přijdou příkazy dané metody } }
Před spuštěním tohoto programu je třeba jej zkompilovat pomocí kompilátoru Javy. Přitom se vytvoří soubor MyFirst.class, který obsahuje instrukce v binárním kódu, které programy použijí k provedení programu.
5.1.6 Kompilace souborů Javy pomocí kompilátoru javac Pokud používáte vývojový balík Javy (JDK) od společnosti Sun, pak můžete zkompilovat vaše zdrojové soubory Javy z příkazového řádku s použitím kompilátoru javac, který je v balíku JDK obsažen. Pokud byste chtěli zkompilovat například zdrojový soubor Javy se jménem MyFirst.java, pak byste spustili kompilátor javac z příkazového řádku následovně: 146
Programování v CAD –JAVA & Pro/Engineer
C:\JAVACODE> javac MyFirst.java V tomto případě je systémový prompt na příkazovém řádku. Je zřejmé, že příkaz javac obsahuje jako parametr jméno zdrojového souboru MyFirst.java. V tomto případě, pokud se příkazem javac zdrojový kód úspěšně zkompiluje, kompilátor vytvoří binární soubor MyFirst.class, který poté můžete spustit.
5.1.6.1 Kompilátor javac Jak se již o tom hovořilo, kompilátor javac od společnosti Sun kompiluje váš zdrojový kód Javy a vytvoří binární soubor. Formát příkazu ke spuštění kompilátoru javac je následující: javac [options] filename.java … Kompilátor javac automaticky předpokládá, že vaše soubory ve zdrojovém kódu používají příponu java. Kompilátor javac ukládá výsledné soubory v binárním kódu pro každou třídu, která je ve vašich zdrojových souborech definována (na příkazový řádek za název kompilátoru javac můžete umístit více souborů ve zdrojovém kódu), v souborech s příponou class. Kompilátor javac automaticky ukládá výsledné (binární) soubory class do stejného adresáře, v němž se nacházejí zdrojové soubory Java. Můžete však na příkazovém řádku použít parametr –d, čímž si zadáte cílový adresář jiný. Kompilátor javac používá celkem šest parametrů. Parametry kompilátoru javac, zadávané na příkazovém řádku: Parametr Význam -classpath path Nastavuje adresář zdrojových souborů -d directory Nastavuje cílový adresář, kam javac ukládá binární soubory .class -g Spouští generování odlaďovacích tabulek používaných poté debuggerem -nowarn Vypíná varovná hlášení kompilátoru -O Optimalizuje kód tak, že aplikuje statické, finální a soukromé metody jako inline -verbose Tiskne hlášení udávající, který soubor ve zdrojovém kódu se právě kompiluje
147
Programování v CAD –JAVA & Pro/Engineer
5.1.7 Kompilace zdrojových souborů Javy pod Windows a Unix Pokud používáte vývojový balík Javy (JDK) od společnosti Sun na počítačích běžících pod Windows anebo pod UNIXem, používáte ke kompilaci vašich zdrojových souborů Javy program javac: C:\> javac MyFirst.java Windows 95 a NT mohou mít problém s rozlišováním malých a velkých písmen. Pokud používáte Windows 98 nebo NT a jména tříd se liší pouze velikostí písmene, pak kompilátor javac může omylem nerozlišovat mezi velkými a malými písmeny a bude předpokládat, že dvě jména lišící se pouze malými a velkými písmeny jsou totožná. Kompilátor například ohlásí u následujícího kódu chybu: /* file Test.java */ class Test { // zde je definice třídy }
/* file test.java */ class test { // zde je definice třídy void function(Test t) { // zde se provádí nějaká činnost } }
5.1.7.1 Spuštění aplikace Javy Po kompilaci zdrojového kódu MyFirst.java se vytvoří binární soubor MyFirst.class. A dále použijete příkaz java k přeložení a spuštění binárního kódu aplikace: C:\> java MyFirst.class a dojde k provedení programu. Překladač Javy Na příkazovém řádku je formát příkazu ke spuštění překladače java následující: 148
Programování v CAD –JAVA & Pro/Engineer C:\JAVACODE> java [parametry – překladače] název aplikace [argumenty] Kde: Parametr Význam -debug Připojuje debugger jdb -cs, -checksource Automaticky kompiluje pozměněné soubory ve zdrojovém kódu -classpath cesta Nastavuje adresář, který obsahuje zdrojové soubory třídy aplikace -mx x Nastavuje maximální velikost paměti pro aplikaci -ms x Nastavuje maximální velikost paměti pro aplikaci při spuštění -noasyncgc Vypíná automatické odklízeni odpadu v paměti -ss x Nastavuje maximální velikost stacku pro kód C v threadech -oss x Nastavuje maximální velikost stacku pro kód Javy v threadech -t Vypisuje posloupnost vykonaných instrukcí -v, -verbose Vypisuje hlášení na stdout (standardní výstupní zařízení) vždy, když je natažen soubor třídy -verify Spouští verifikátor k prostudování celého kódu -noverify Vypíná verifikaci -D Umožňuje předefinovat názvy vlastností název,vlastnosti= nová hodnota
5.1.8 Soubory typu třída Vysvětlení této problematiky na příkladu vytváření appletů. Při vytváření appletů v Javě se setkáte se soubory, které používají různé přípony. S vytvářením programu začněte tak, že umístíte příkazy vašeho programu do zdrojového kódu souboru majícího stejné jméno jako veřejná třída (public class), za nímž bude následovat přípona java. Předpokládejte, že veřejná třída appletu je definována následovně: Public class hello_java extends Applet V tomto případě musíte pojmenovat zdrojový soubor jako hello_java.java (u tohoto jména musíte použít pouze malá písmena). Po úspěšné kompilaci vašeho programu v Javě, v tomto případě programu hello_java.java, vytvoří váš kompilátor 149
Programování v CAD –JAVA & Pro/Engineer binární soubor s příponou class, tj. například hello_java.class, který kompilátor vytvoří, obsahuje binární kód (nuly a jedničky), který je poté vykonáván (například vaším prohlížečem nebo appletviewerem). Každý program Javy začíná jedním nebo více příkazy import. Krátce řečeno, tyto příkazy import sdělují kompilátoru, že váš program používá balík nebo knihovnu již dříve zkompilovaného programu. Tento program z knihovny obsahuje dodatečný kód, který program používá k provedení specifických úkolů. Jak dále poznáte, Java tento předem zkompilovaný kód extrahuje ze speciálního komprimovaného souboru nazvaného classes.zip. Pokud si prostudujete adresáře obsahující vývojové soubory Javy, naleznete mezi nimi soubor classes.zip.
5.1.8.1 Soubor classes.zip Většina vývojových prostředí Javy pracujících pod Windows95 nebo na platformě Macintosh používá soubor nazvaný classes.zip k uložení standardních knihoven (balíků) Javy v komprimovaném formátu. Jakmile v appletu použijete příkaz import k odkazu na konkrétní balík, kompilátor extrahuje jeho kód ze souboru classes.zip. Vývojové prostředí Javy komprimuje soubor classes.zip k úspoře prostoru na disku. Pokud dekomprimujete soubor classes.zip, pak zjistíte, že obsahuje řadu souborů mající příponu class. Pokud máte na disku dost prostoru, můžete kompilování urychlit jejich dekomprimováním. K dekomprimování souboru classes.zip budete muset použít nějaký dekomprimační program, jako je např. WinZip, který si můžete stáhnout z adresy www.winzip.com Zavedení programu vytvořeného v programovacím jazyce Java do software PRO/ENGINEER 2000i2
5.1.9 Nastavení J-Link Tato část popisuje jak nastavit prostředí pro Pro/Engineer, abyste mohli spouštět J-Link: • nastavení na počítači, • nastavení J-Link programu, • spouštění J-Link aplikace.
150
Programování v CAD –JAVA & Pro/Engineer
5.1.9.1 Nastavení na počítači Stáhnout Java Runtime Environment (JRE) z Sun Microsoftsystem nebo koupit a nainstalovat odpovídající Java kompilátor. Nastavit cesty (path) k místu tříd (classes) programovacího jazyku Java, k třídám JLink a k třídám vytvořeným vámi (vašim přeloženým zdrojovým programů). Stažení Java Development Kit a Java balíků J-Link byl testován na určitých verzích JRE. J-Link pracuje s jakoukoli verzí Java vyšší než 1.1.5. J-Link do současnosti nebyl testován na verzi 2.0. J-Link nebude pracovat s verzí 1.0. Stažení kopií zdarma je možno na: http://java.sun.com/products/ Nastavení pro Pro/Engineer J-Link je podporován pouze verzemi Pro/Engineer 2000i2 a vyšší. Není zde požadován žádný speciální set up, který by umožňoval běh J-Link v Pro/Engineeru. J-Link nepotřebuje žádnou licenci, jestliže používáte současný Pro/Engineer a máte JDK nainstalovaný na vašem počítači. Path a CLASSPATH proměnné Vaše cesta (path) k okolním proměnným musí být včetně JDK adresáře, který obsahuje příkazy jako java, jre, javac. Pro systémy UNIX, cesta (path) musí být včetně: <JDK loadpoint>/bin Pro systémy NT, 2000, 98, 95 cesta (path) musí být včetně: <JDK loadpoint>\bin Environment variable CLASSPATH označuje umístění balíků a tříd (class), které mohou být používány při běhu programu Java. Váš CLASSPATH by měla vždy být včetně cesty k souborům .zip poskytované s JDK a dvěma Java Archive (.jar) souborům poskytovaným s J-Link, které obsahuje třídy J-Link. Pro systémy UNIX, CLASSPATH musí být včetně: <JDK loadpoint>/lib/classes.zip <J-Link loadpoint>/java/cipjava.jar <J-Link loadpoint>/java/pfc.jar 151
Programování v CAD –JAVA & Pro/Engineer
Pro systémy NT,2000, 98, 95 CLASSPATH musí být včetně: <JDK loadpoint>\lib\classes.zip <J-Link loadpoint>\java\cipjava.jar <J-Link loadpoint>\java\pfc.jar Ujistěte se, že vaše proměnná CLASSPATH neobsahuje cestu ke starší verzi JDK, kterou J-Link nepodporuje !!!
5.1.9.2 Nastavení J-Link programu Můžete spouštět J-Link programy jako nezávislé, samostatné aplikace. Většina z požadovaných nastavení pro programy jsou nezávislá na programech samotných. To vám umožní převádět program aplikace na program modelu. Můžete spouštět J-Link programy jako nezávislé aplikace. Můžete spustit aplikaci kdykoli, nehledě na to, jestli pracujete na nějakém modelu v Pro/Engineeru. Registrační soubor (registry file) obsahuje klíčové informace, bez ohledu na prováděný program. Registry file obsahuje specifické informace o samotné aplikaci, kterou chcete uvést do činnosti. Registry file (nazvaný protk.dat) je jednoduchý textový soubor, kde se každá řádka skládá z jednoho předdefinovaného klíčového slova následovaného hodnotou. Standardní struktura souboru protk.dat: name java_demo startup java java_app_class MyJavaApp java_app_start start java_app_stop stop allow_stop true delay_start true text_dir c:\myJLinkApps\messagefiles end name - přiřadí jediné jméno J-Link aplikaci. To odliší aplikaci, když je zde více než jeden soubor protk.dat. Maximální délka jména je 31 znaků plus koncovka se třemi znaky.
152
Programování v CAD –JAVA & Pro/Engineer start up - určuje metodu, která je používaná ke komunikaci s aplikací (v tomto případě je to programovací jazyk Java). java_app_class - určuje jméno třídy (class) obsahující J-Link aplikaci spouštějící a ukončující metodu ( jedná se o přeložený zdrojový program - v tomto případě se jedná o soubor MyJavaApp.class) java_app_start - specifikuje spuštění vašeho programu java_app_stop - specifikuje ukončení vašeho programu allow_stop - jestliže nastavíte tuto hodnotu na true, můžete aplikaci zastavit během provádění programu. Jestliže toto pole chybí nebo je nastaveno na false nemůžete zastavit aplikaci a to bez ohledu na to, jak tato aplikace byla spuštěna. delay_start - jestliže nastavíte tuto hodnotu na true, Pro/Engineer nespustí tuto aplikaci automaticky, jakmile se spustí Pro/Engineer, ale ponechá vám možnost spustit J-Link aplikaci, kdy chcete. text_dir - specifikuje adresáře, které obsahují soubory používané J-Link (tato položka nemusí být uživatelem definována). end - označuje konec J-Link aplikace. Je možno přidat následnou zprávu, která definuje J-Link aplikaci. Všechny tyto aplikace budou spuštěny Pro/ENGINEERem.
5.1.9.3 Spouštění aplikace Spouštění a ukončování samostatné aplikace Jestliže pole delay_start v registry file je nastaveno na false, J-Link aplikace se spustí automaticky, kdykoliv zapnete Pro/ENGINEER. Jinak pro spouštění programu následujte tyto kroky: 1. z hlavního menu Pro/Engineeru vyberte Utilities – Auxiliary Applications , 2. vyberte jméno vámi vytvořené aplikace, 3. klikněte na tlačítko Start. • Start – aktivuje spouštěcí metodu. • Stop - aktivuje ukončovací metodu.
153
Programování v CAD –JAVA & Pro/Engineer Jestliže pole allow_stop v registry file je nastaveno na true, můžete kliknout na Stop v dialogovém okně Auxiliary Applications k zastavení aplikace. Jestliže kliknete na pole Start, aplikaci znovu spustíte (restartujete). V případě, že pole allow_stop je nastaveno na false, program (aplikace) běží, dokud není činnost Pro/Engineeru ukončena. Zavedení programu modelu Program modelu je konkrétní pevný (tuhý) model (díl nebo sestava). Pro/ENGINEER spustí startovací metodu pro program v případě,že je díl umístěn v paměti a ukončí metodu, jakmile je díl vymazán z paměti. Do programu modelu můžete přidat programovací logiku ke vzájemnému svázání s pevným modelem. Můžete vytvořit dialogové okno k ovládání regenerace částí nebo vytvoření funkcí specifických modelů, k vytváření zpráv nebo informací o modelu. Protože programovací jazyk Java je stavěn na nezávislém základu, vytvořený program může běhat na jakémkoli systému jako je UNIX, NT, Windows 95.
5.1.9.4 Spojení a běh J-Link aplikace s modelem Jedná se pouze o zavedení jednoho programu do činnosti – pouze pro jeden part nebo assembly. Spuštění pevného modelu, kterému chcete přiřadit a spustit J-Link aplikaci. Z menu PART nebo ASSEMBLY vyberte Program > J-Link. Jestliže je aplikace umístěna v Java archive (JAR), klikněte na Add File v dialogovém okně a vyberte příslušný JAR soubor. Jestliže je aplikace umístěna v .class souboru přejděte na bod 4. Vyberte Add a vložte následující informace do zobrazeného dialogového okna. • Application Name - jednoznačné jméno pro J-Link aplikaci. Maximální délka jména je 31 znaků plus koncovka ze tří znaků. • Class Name - Java třída, která obsahuje spouštěcí a ukončovací metodu pro JLink. Tato třída musí být umístěna v JAR souboru, který musíte přidat do seznamu nebo do adresáře, který je součástí CLASSPATH. • Start Method Name - metoda v Class Name třídě, která bude volána, kdykoli je model používán. • Stop Method Name - metoda v Class Name třídě, která bude volána, kdykoli je model vymazán.
154
Programování v CAD –JAVA & Pro/Engineer J-Link aplikace se okamžitě pokouší spustit. Jestliže se spuštění nepodaří, příčina je zapsána v Status column v dialogovém okně. Ačkoli individuální class soubory mohou být přiřazeny k modelu, tyto vazby nevytvoří závislost mezi modelem a programem. Proto Pro/PDM a Pro/INTRALINK (součásti Pro/ENGINEER) nejsou schopny zkoumat vztahy mezi třídou a modelem. Při vytváření závislosti byste měli začlenit všechny třídy (.class) a zdrojové kódy do zip souboru nazývaného Java archive file. JAR soubor je vytvářen pomocí příkazu Jar , který je součástí balíku JAVA (JDK – Java Development Kit). Programovací jazyky podporující Pro/Engineer 2000i2 a 2000i: JAVA verze JDK 1.1.5 až 1.1.8 C++ verze 4.2 až 5.0 Informace o programovacím jazyku je možno získat na Internetové adrese www.ptc.com Pro programování v programovacím jazyce Java je možno stáhnout Java balíky na Internetové adrese: http://java.sun.com/products/JDK
Struktura souboru protk.dat name startup java_app_class java_app_start java_app_stop delay_start allow_stop end
Select java Exercise4 startSelect stop true false
Postup pro zavedení programu na počítačích se systémem Windows 1. nastavit classpath na : C:\proe2000i2\text\java\pfc.jar;C:\proe2000i2\text\java\cipjava.jar; C:\jdk\lib\classes.zip;
155
Programování v CAD –JAVA & Pro/Engineer Zadání těchto cest je platné pouze za předpokladu, že Pro/Engineer je nainstalován v adresáři proe2000i2 na disku C a JDK1.1.8 nainstalován v adresáři jdk na disku C. ve Windows 95, 98 se to zapíše do autoexec.bat ve Windows NT, 2000 se to zapíše do environment variables 2. udělat shortcut na start Pro/Engineer a to z adresáře, kde je tento protk.dat (nebo vytvořit spouštěcí batch soubor pro spuštění aplikace). 3. spustit Pro/Engineer a natáhnout díl Exercise4.prt 4. spustit J-Link aplikaci #Utilities #Auxilliary Application .... #Select #Start – 5. Poté už vybrat #Utilities #Select a objeví se hláška: "Enter a string to be used a selection keyword" zadejte jedno z následujících curve, point, surface, axis, prt_or_asm, edge, csys, face a objeví se menu Get Select. A můžete ukazovat. Opustíte stiskem q. Pokud toto funguje, zkuste smazat soubory SelectButtonActionListener.class a Exercise4.class a zkuste je vytvořit sami příkazem: C:\>javac Exercise4.java Pokud ani zde nenastal žádný problém, tak si do tohoto souboru (Exercise4.java) přidávejte vlastní kód.
5.2 Přehled programovacích objektů Modely mohou být Pro/ENGINEER-ovské soubory typu part, assemblies, drawings, section a layouts. V současné době J-Link neposkytuje detailní přístup k většině těchto typů modelů, ale třídy a metody v balíku com.ptc.pfc.pfcModel poskytuje přístup k součástem, sestavám, výkresům a obrábění. Dostupné metody vám umožní provádět následující: získání vstupních informací o modelu, otevření, kopírování, přejmenování a uložení modelu.
156
Programování v CAD –JAVA & Pro/Engineer 5.2.1 Objekty modelu • pfcFamily.FamilyTableRow.CreateInstance • pfcSelect.Selection.GetSelModel • pfcSession.BaseSession.GetModel • pfcSession.BaseSession.GetCurrentModel • pfcSession.BaseSession.ListModels • pfcSession.BaseSession.GetByRelationId • pfcWindow.Window.GetModel Metoda pfcSelect.Selection.GetSelModel vrátí model, který byl interaktivně vybrán. Metoda pfcSession.BaseSession.GetModel vrátí model založený na jméně a typu, tak jako pfcSession.GetByRelationId vrátí model ze sestavy, který má specifické identifikační vlastnosti typu integer. Metoda pfcSession.BaseSession.GetCurrentModel vrátí aktivní model Metoda pfcSession.BaseSession.ListModels vrátí pořadí všech modelů v aktuálním nastavení.
5.2.2 Deskriptory • pfcModel.pfcModel.ModelDescriptor_Create • pfcModel.ModelDescriptor.SetGenericName • pfcModel.ModelDescriptor.SetInstanceName • pfcModel.ModelDescriptor.SetType • pfcModel.ModelDescriptor.SetHost • pfcModel.ModelDescriptor.SetDevice • pfcModel.ModelDescriptor.SetPath • pfcModel.ModelDescriptor.SetFileVersion • pfcModel.ModelDescriptor.GetFullName • pfcModel.Model.GetFullName Deskriptory modelu jsou informace objektu používané k popsání modelu a umístění v systému. Metody modelových deskriptorů vám umožňují nastavit specifické informace, které umožňují Pro/ENGINEERu nalézt určitý model, který chcete.
157
Programování v CAD –JAVA & Pro/Engineer Statická metoda pfcModel.pfcModel.ModelDescriptor_Create vám umožní specifikovat jako vkládaná data typ modelu, zadávané jméno a jméno vygenerované. Deskriptor vytvoří celé jméno modelu jako řetězec. Příklad: String FullName = InstanceName+”<”+GenericName+”>” Jestliže chcete zavést model, který není ve family table, vložte prázdný řetězec (“ “) jako argument generic name, aby se full name objektu vytvořilo správně.
5.2.3 Operace s modelem • pfcModel.Model.Backup • pfcModel.Model.Copy • pfcModel.Model.CopyAndRetrieve • pfcModel.Model.Rename • pfcModel.Model.Save • pfcModel.Model.Erase • pfcModel.Model.Delete • pfcModel.Model.Display Tyto operace jsou totožné s většinou příkazů dostupných v menu File. Pozn. Musíte zavolat metodu Display, jestliže chcete vytvořit nové okno pro model, protože model nebude zobrazen do té doby než použijete příkaz display. Metoda pfcModel.Model.Backup vytvoří zálohu modelu v paměti na disku v určeném adresáři. Metoda pfcModel.Model.Copy kopíruje model do nového okna. Metoda pfcModel.Model.Rename přejmenuje vybraný model. Metoda pfcModel.Model.Save uloží daný model na disk. Metoda pfcModel.Model.Erase vymaže vybraný model z paměti. Metoda pfcModel.Model.Delete odstraní vybraný model z paměti a z disku. Metoda pfcModel.Model.Display zobrazí vybraný model.
158
Programování v CAD –JAVA & Pro/Engineer 5.2.4 Vytvoření solid prvků pomocí objektů • pfcSession.BaseSession.CreatePart • pfcSession.BaseSession.CreateAssembly Metoda pfcSession.BaseSession.CreatePart a pfcSession.BaseSession.CreateAssembly vytvoří nový solid model se jménem, které určíte a vytvoří sestavu.
5.2.4.1 Informace o solidovém modelu • pfcSolid.Solid.GetRelativeAccuracy • pfcSolid.Solid.SetRelativeAccuracy • pfcSolid.Solid.GetAbsoluteAccuracy • pfcSolid.Solid.SetAbsoluteAccuracy Můžete nastavit relativní a absolutní přesnost jakéhokoliv modelu, který používá tuto metodu. Relativní přesnost je relativní k velikosti modelu. Například relativní přesnost 0.01 určuje, že model musí být přesný na 1/100 jeho rozměru. Absolutní přesnost je měřena v absolutních jednotkách (inch, centimetr a jiné). Při změně přesnosti musíte provést regeneraci modelu.
5.2.5 Vlastnosti • pfcSolid.Solid.GetMassProperty Funkce pfcSolid.Solid.GetMassProperty poskytuje informace o rozložení hmoty v prvku nebo sestavy. To může poskytnout informace vzhledem k souřadnému systému roviny, kterou pojmenujete nebo standardně jedné, jestliže vložíte null jako jméno. To vrátí třídu nazvanou MassProperty. Třídy obsahují následující pole • objem • plocha • hustota. Hustota má hodnotu 1.0 dokud není přiřazen nějaký materiál. • hmotnost • poloha těžiště • matice setrvačnosti • tenzor setrvačnosti 159
Programování v CAD –JAVA & Pro/Engineer • setrvačnost k těžišti • hlavní momenty setrvačnosti (vlastní hodnoty setrvačnosti k těžišti) • hlavní osy setrvačnosti (vlastní vektory setrvačnosti k těžišti) Ukázka kódu: Touto metodou získáte hmotnostní vlastnosti objektu z vybraného modelu. Hmotnost, objem a těžiště jsou pak vytištěna. import com.ptc.cipjava.*; import com.ptc.pfc.pfcSession.*; import com.ptc.pfc.pfcModel.*; import com.ptc.pfc.pfcBase.*; import com.ptc.pfc.pfcSolid.*; public class pfcSolidMassPropExample { public static void printMassProperties (Solid solid) { MassProperty properties; // struktura dat obsahuje hmotnostní vlastnosti. Point3D gravity_center; try { properties = solid.GetMassProperty(null); // nepovinný argument v této //metodě je jméno souřadného systému // použitého k výpočtu hmotnosti properties System.out.println("Hmotnost je : " + properties.GetMass()); System.out.println("Objem je : " + properties.GetVolume()); gravity_center = properties.GetGravityCenter(); System.out.println("Těžiště je umístěno v "); System.out.println("X: " + gravity_center.get(0) + " Y: " + gravity_center.get(1) + " Z: " + gravity_center.get(2)); } catch (jxthrowable x) { System.out.println("Exception caught: "+x); } } } 160
Programování v CAD –JAVA & Pro/Engineer
5.2.6 Metody pro part Výpis metod: • pfcPart.Part.GetCurrentMaterial • pfcPart.Part.SetCurrentMaterial • pfcPart.Part.ListMaterials • pfcPart.Part.CreateMaterial • pfcPart.Part.RetrieveMaterial • pfcPart.Material.Delete • pfcPart.Material.Save • pfcPart.Material.SetYoungModulus • pfcPart.Material.GetYoung Modulus • pfcPart.Material.SetPoissonRatio • pfcPart.Material.GetPoissonRatio • pfcPart.Material.SetShearModulus • pfcPart.Material.GetShearModulus • pfcPart.Material.SetMassDensity • pfcPart.Material.GetMassDensity • pfcPart.Material.SetThermExpCoef • pfcPart.Material.GetThermExpCoef • pfcPart.Material.SetStructDampCoef • pfcPart.Material.GetStructDampCoef • pfcPart.Material.SetStressLimTension • pfcPart.Material.GetStressLimTension • pfcPart.Material.SetStressLimCompress • pfcPart.Material.GetStressLimCompress • pfcPart.Material.SetStressLimShear • pfcPart.Material.GetStressLimShear • pfcPart.Material.SetThermConductivity • pfcPart.Material.GetThermConductivity • pfcPart.Material.SetEmissivity • pfcPart.Material.GetEmissivity 161
Programování v CAD –JAVA & Pro/Engineer • pfcPart.Material.SetSpecificHeat • pfcPart.Material.GetSpecificHeat • pfcPart.Material.SetHardness • pfcPart.Material.GetHardness Materiál součásti definuje hodnoty několika inženýrských konstant jako je Youngův modul pružnosti v tahu, ve smyky a další. Můžete přiřadit materiál k součásti, vytvořit nový materiál nebo načíst materiálová data ze souboru. Metoda pfcPart.Material.Save zapíše materiálová data do souboru, který může být přístupný pro každou součást v Pro/E. Metoda pfcPart.Material.Delete odstraní data o materialu. Metoda pfcPart.Part.GetCurrentMaterial vrátí seznam materiálů používaných u vybrané součásti. Metoda pfcPart.Part.SetCurrentMaterial vrátí seznam, do kterého můžete vložit vámi definovaný materiál. Metoda pfcPart.Part.ListMaterials vrátí seznam použitých materiálů v aktivním modelu. Metoda pfcPart.Part.CreateMaterials vytvoří seznam materiálů pro modelovaný díl. Metoda pfcPart.Part.RetrieveMaterial vrátí seznam materiálů použitých v aktivním modelu. Metoda pfcPart.Material.SetYoungModulus a pfcPart.Material.GetYoungModulus nastaví nebo vrátí Youngův modul pro specifikovaný materiál. Metody pfcPart.Material.SetPoissonRatio a pfcPart.Material.GetPoissonRatio nastaví nebo vrátí Poissonovo číslo daný materiál. Metody pfcPart.Material.SetShearModulus a pfcPart.Material.GetShearModulus nastaví nebo vrátí modul ve smyku pro daný materiál. Metody pfcPart.Material.SetMassDensity a pfcPart.Material.GetMassDensity nastaví nebo vrátí hustotu pro daný materiál. Metody pfcPart.Material.SetThermExpCoef a pfcPart.Material.GetThermExpCoef nastaví nebo vrátí koeficient teplotní roztažnosti materiálu. Metody pfcPart.Material.SetStructDampCoef a pfcPart.Material.GetStructDampCoef nastaví nebo vrátí koeficient útlumu pro daný materiál. Metody pfcPart.Material.SetStressLimTension a pfcPart.Material.GetStressLimTension nastaví nebo vrátí mezní napětí pro daný materiál. Metody pfcPart.Material.SetStressLimCompress a pfcPart.Material.GetStressLimCompress nastaví nebo vrátí mezní napětí pro lineární deformace materiálu. 162
Programování v CAD –JAVA & Pro/Engineer Metody pfcPart.Material.SetStressLimShear a pfcPart.Material.GetStressLimShear nastaví nebo vrátí mezní smykové napětí. Metody pfcPart.Material.SetThermConductivity a pfcPart.Material.GetThermConductivity nastaví nebo vrátí tepelnou vodivost pro daný materiál. Metody pfcPart.Material.SetEmissivity a pfcPart.Material.GetEmissivity nastaví nebo vrátí emisivitu (zářivost) materiálu. Metody pfcPart.Material.SetSpecificHeat a pfcPart.Material.GetSpecificHeat nastaví nebo vrátí specifické teplo materiálu. Metody pfcPart.Material.SetHardness a pfcPart.Material.GetHardness nastaví nebo vrátí tvrdost materiálu.
5.2.7 Geometrické termíny Rovina – ideální geometrická plocha, která má nekonečný rozměr Plocha – oříznutá rovina. Plocha má jednu nebo více obrysů. Obrys – uzavřená smyčka. Obrys se skládá z mnoha hran. Hrana – hranice oříznuté roviny 5.2.7.1 Typy hran LINE - přímá čára reprezentována třídou pfcGeometry.Line ARC - kruhová křivka reprezentována třídou pfcGeometry.Arc SPLINE - kubický spline reprezentován třídou pfcGeometry.Spline B-SPLINE - racionální B-Spline křivka nebo hrana reprezentovaná třídou pfcGeometry.Bspline COMPOSITE CURVE - kombinace dvou nebo více křivek reprezentované třídou pfcGeometry.CompositeCurve. Toto je použito pouze pro rovinné křivky. Následující křivky nejsou použity v solid geometrii a jsou rezervovány pro budoucí vývoj: CIRCLE (pfcGeometry.Circle) ELLIPSE (pfcGeometry.Ellipse) POLYGON (pfcGeometry.Polygon) ARROW (pfcGeometry.Arrow) TEXT (pfcGeometry.Text)
163
Programování v CAD –JAVA & Pro/Engineer
5.2.7.2 Typy ploch PLANE - rovinná plocha reprezentovaná třídou pfcGeometry.Plane CYLINDER - válcová plocha reprezentovaná třídou pfcGeometry.Cylinder CONE - kuželová plocha reprezentovaná třídou pfcGeometry.Cone TORUS - toroidní plocha reprezentovaná třídou pfcGeometry.Torus REVOLVED SURFACE - vytvořená otáčením křivky kolem osy. To je reprezentováno třídou pfcGeometry.RevSurface
164
Programování v CAD –Doporučená literatura
6 Doporučená literatura |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12| |13| |14|
AutoLISP: Programming for Productivity, William Kramer, Autodesk Press, ISBN 0-8273-5832-6. Učebnice AutoLISPu, Jiří Hlavenka, CCB Brno, 1993. Essential AutoLISP, Roy Harkow, Springer-Verlag, ISBN 0-387-94571-7. AutoLISP in Plain English: A Practical Guide for Non-Programmers, George O. Head, Ventana Press, ISBN:1566041406. LISP, 3rd Edition, Patrick Henry Winston and Berthold Klaus Paul Horn, Addison-Wesley Publishing Company, ISBN 0-201-08319-1. ANSI Common Lisp, Paul Graham, Prentice Hall, ISBN 0-13-370875-6. Looking at LISP, Tony Hasemer, Addison-Wesley Publishing Company, ISBN 0-201-12080-1. Common LISP, The Language, Second Edition, Guy L. Steele, Jr., Digital Press, ISBN 1-55558-041-6. Programování ve Visual Basicu, Jan Pokorný, Martin Kmoch, Koop. Herout,P.: Učebnice jazyka C, Koop. Racek,S.: Objektově orientované programování v C++, Koop. Herout,P.: Učebnice jazyka JAVA, Koop. Flanagan,D.: Programování v jazyce JAVA, Computer press. Chan,Griggith:1001 tipů JAVA, Unis publishing.
165
Programování v CAD –Přílohy
7 Přílohy 7.1 Tabulka srovnání funkcí jazyka AutoLISP a VB Následující tabulka podává srovnání funkcí jazyka AutoLISP s podobnými funkcemi a operátory Automation nebo Visual Basicu. Ekvivalenty AutoCAD ActiveX Automation jsou zde vyznačeny textem „AutoCAD.Application“ a ekvivalenty jazyka Visual Basic jsou uvedeny jako funkce nebo operátor. Funkce AutoLISPu
Ekvivalent Automation nebo Visual Basicu
+ (sečítání) - (odečítání) * (násobení) / (dělení) = (rovná se) /= (nerovná se) < (menší než) <= (menší nebo rovno) > (větší než) >= (větší nebo rovno) ~ (bitové not) 1+ (inkrement) 1- (dekrement)
+ (operátor sečítání) - (operátor odečítání) * (operátor násobení) / (operátor dělení) = (relační operátor rovná se) <> (relační operátor nerovná se) < (relační operátor menší než) <= (relační operátor menší nebo rovno) > (relační operátor větší než) >= (relační operátor větší nebo rovno) Operátor Not Použijte + (operátor sečítání) Použijte - (operátor odečítání)
abs acad_colordlg acad_helpdlg acad_strlsort action_tile add_list ads alert and angle
Abs (funkce) Není k dispozici V rejstříku online nápovědy vyhledejte HELP V rejstříku online nápovědy vyhledejte SORT Použijte Visual Basic Dialog Editor Použijte Visual Basic Dialog Editor AutoCAD.Application.ListADS (metoda) MsgBox (funkce) And (operátor) AutoCAD.Application.ActiveDocument.Utility. AngleFromXAxis (metoda) AutoCAD.Application.ActiveDocument.Utility .AngleToReal (metoda) AutoCAD.Application.ActiveDocument.Utility. AngleToString (metoda) Použijte funkce pro manipulaci s poli Není k dispozici
angtof angtos append apply
166
Programování v CAD –Přílohy arx arxload arxunload ascii assoc atan atof atoi atom atoms-family autoarxload autoload autoxload
AutoCAD.Application.ListARX (metoda) AutoCAD.Application.LoadARX (metoda) AutoCAD.Application.UnloadARX (metoda) Asc (funkce) Není k dispozici Atn (funkce) CDbl (funkce) CInt (funkce) V rejstříku online nápovědy vyhledejte IS Není k dispozici Není k dispozici Není k dispozici Není k dispozici
Boole boundp
Použijte logické operátory V rejstříku online nápovědy vyhledejte IS
car/cdr chr client_data_tile close command cond cons
Použijte funkce pro manipulaci s poli Chr (funkce) Použijte Visual Basic Dialog Editor Close (příkaz) Není k dispozici Select Case (příkaz) Použijte funkce pro manipulaci s poli nebo metodu AutoCAD.Application.kolekce.Addjménoentity Cos (funkce) Použijte konverzní funkce
cos cvunit defun dictadd dictnext dictremove dictrename dictsearch dimx_tile and dimy_tile
Není k dispozici AutoCAD.Application.ActiveDocument. Dictionaries.Add (metoda) AutoCAD.Application.ActiveDocument.Dictionaries. Item (metoda) AutoCAD.Application.ActiveDocument.Dictionaries. slovník.Delete (metoda) AutoCAD.Application.ActiveDocument.Dictionaries. slovník.Rename (metoda) AutoCAD.Application.ActiveDocument.Dictionaries. slovník.GetName a GetObject (metody) Použijte Visual Basic Dialog Editor 167
Programování v CAD –Přílohy
distance distof done_dialog
Není k dispozici Není k dispozici Použijte Visual Basic Dialog Editor
end_image end_list entdel
eq equal *error* eval exit exp expand expt
Použijte Visual Basic Dialog Editor Použijte Visual Basic Dialog Editor AutoCAD.Application.ActiveDocument.kolekce. objekt.Delete (metoda) AutoCAD.Application.ActiveDocument.kolekce. objekt.vlastnost (vlastnosti) Není k dispozici (Příklad u hesla Obnovení poslední entity v databázi .) AutoCAD.Application.ActiveDocument.kolekce. Addjménoentity (metoda) AutoCAD.Application.ActiveDocument.kolekce. Addjménoentity (metoda) AutoCAD.Application.ActiveDocument.kolekce. objekt.vlastnost (vlastnosti) AutoCAD.Application.ActiveDocument.kolekce.Item (metoda) AutoCAD.Application.ActiveDocument. SelectionSets (objekt/metody/vlastnosti) AutoCAD.Application.ActiveDocument.kolekce. objekt.Update (metoda) Není k dispozici Eqv (operátor) Error (objekt/metoda/vlastnosti) Není k dispozici Není k dispozici Exp (funkce) Není k dispozici ^ (operátor umocňování)
fill_image findfile fix float foreach
Použijte Visual Basic Dialog Editor Dir (funkce) Fix, Int, Cint (funkce) CDbl (funkce) For Each...Next (příkaz)
entget entlast entmake entmakex entmod entnext entsel entupd
168
Programování v CAD –Přílohy gc gcd get_attr get_tile getangle getcfg getcname getcorner getdist
getenv getfiled getint getkword getorient getpoint getreal
getstring getvar graphscr grclear grdraw grread grtext grvecs handent
Není k dispozici Není k dispozici Použijte Visual Basic Dialog Editor Použijte Visual Basic Dialog Editor AutoCAD.Application.ActiveDocument.Utility. GetAngle (metoda) AutoCAD.Application.Preferences.vlastnost (vlastnost) Není k dispozici AutoCAD.Application.ActiveDocument.Utility. GetCorner (metoda) AutoCAD.Application.ActiveDocument.Utility. GetDistance (metoda) AutoCAD.Application.Preferences.vlastnost (vlastnost) Použijte dialog Visual Basicu pro soubory AutoCAD.Application.ActiveDocument.Utility. GetInteger (metoda) AutoCAD.Application.ActiveDocument.Utility. GetKeyword (metoda) AutoCAD.Application.ActiveDocument.Utility. GetOrientation (metoda) AutoCAD.Application.ActiveDocument.Utility. GetPoint (metoda) AutoCAD.Application.ActiveDocument.Utility. GetReal (metoda) AutoCAD.Application.ActiveDocument.Utility. GetString (metoda) AutoCAD.Application.GetVariable (metoda) AppActivate AutoCAD.Application.Caption Není k dispozici Není k dispozici Není k dispozici Není k dispozici Není k dispozici AutoCAD.Application.ActiveDocument.prostor. objekt.Handle (vlastnost) 169
Programování v CAD –Přílohy help
V rejstříku online nápovědy vyhledejte HELP
if initget
itoa
If...Then...Else (příkaz) AutoCAD.Application.ActiveDocument. Utility.InitializeUserInput AutoCAD.Application.ActiveDocument.prostor. objekt.IntersectWith Str (funkce)
lambda last length list listp load_dialog load log logand logior lsh
Není k dispozici jménopole(UBound(jménopole)) UBound (funkce) ReDim (příkaz) IsArray (funkce) Použijte Visual Basic Dialog Editor AutoLISP není podporován přes Automation Log (funkce) And (funkce) Or (funkce) Imp (funkce)
mapcar max mem member menucmd menugroup min minusp mode_tile
Není k dispozici Max (funkce) Není k dispozici Použijte příslušnou kolekci Není k dispozici Není k dispozici Min (funkce) Použijte zápis < 0 Použijte Visual Basic Dialog Editor
namedobjdict (kolekce) nentsel
AutoCAD.Application.ActiveDocument.Dictionaries
inters
nentselp new_dialog not nth
AutoCAD.Application.ActiveDocument. SelectionSets. SelectionSet.SelectAtPoint (metoda) AutoCAD.Application.ActiveDocument. SelectionSets.SelectionSet.SelectAtPoint (metoda) Použijte Visual Basic Dialog Editor Použijte logické operátory Použijte zápis objekt(n) 170
Programování v CAD –Přílohy null numberp
IsNull (funkce) TypeName (funkce)
open or osnap
Open (funkce) Použijte logické operátory Není k dispozici (Systémovou proměnnou OSMODE je možné nadefinovat pomocí metody SetVariable.)
polar prin1 princ print progn prompt
AutoCAD.Application.ActiveDocument.Utility. PolarPoint (metoda) Není k dispozici Není k dispozici Není k dispozici Není k dispozici Není k dispozici
quit quote
Není k dispozici Není k dispozici
read read-char read-line redraw
Není k dispozici Input (funkce) Line Input (funkce) AutoCAD.Application.ActiveDocument. prostor.objekt.Update (metoda) AutoCAD.Application.ActiveDocument. RegisteredApplications.Add (metoda) Mod (funkce) For … Each, While, Není k dispozici AutoCAD.Application.ActiveDocument. Utility.RealToString (metoda)
regapp rem repeat reverse rtos
set set_tile setcfg setfunhelp setq setvar sin
Set (funkce) Použijte Visual Basic Dialog Editor AutoCAD.Application.Preferences.vlastnost (vlastnost) Není k dispozici Set (funkce) AutoCAD.Application.SetVariable (metoda) Sin (funkce) 171
Programování v CAD –Přílohy setview
ssnamex
AutoCAD.Application.ActiveDocument.Viewports. Viewport.SetView (metoda) Použijte Visual Basic Dialog Editor Není k dispozici Sqr (funkce) AutoCAD.Application.ActiveDocument. SelectionSets.Add (metoda) AutoCAD.Application.ActiveDocument. SelectionSets. SelectionSet.Delete (metoda) AutoCAD.Application.ActiveDocument. SelectionSets.SelectionSet.SelectOnScreen (metoda) Není k dispozici AutoCAD.Application.ActiveDocument. SelectionSets.SelectionSet.Count (metoda) Porovnejte ID objektu se členy kolekce SelectionSet AutoCAD.Application.ActiveDocument. SelectionSets.SelectionSet.Name (vlastnost) Není k dispozici
sssetfirst startapp start_dialog start_image start_list strcase strcat strlen subst substr
Není k dispozici Shell (funkce) Použijte Visual Basic Dialog Editor Použijte Visual Basic Dialog Editor Použijte Visual Basic Dialog Editor StrConv (funkce) & (operátor) Len (funkce) Není k dispozici Mid (funkce)
tablet tblnext
Není k dispozici AutoCAD.Application.ActiveDocument. kolekce.objekt.Item (metoda) AutoCAD.Application.ActiveDocument. kolekce.objekt.Name (metoda) AutoCAD.Application.ActiveDocument. kolekce.objekt.Name (metoda) Použijte Visual Basic Dialog Editor Není k dispozici
slide_image snvalid sqrt ssadd ssdel ssget ssgetfirst sslength ssmemb ssname
tblobjname tblsearch term_dialog terpri
172
Programování v CAD –Přílohy textbox
type
AutoCAD.Application.ActiveDocument. prostor.objekt.BoundingBox (vlastnost) Není k dispozici Není k dispozici Není k dispozici AutoCAD.Application.ActiveDocument.Utility. TranslateCoordinates (metoda) TypeName (funkce)
unload_dialog untrace
Použijte Visual Basic Dialog Editor Není k dispozici
vector_image ver vports (kolekce)
Použijte Visual Basic Dialog Editor AutoCAD.Application.Version (vlastnost) AutoCAD.Application.ActiveDocument.Viewports
wcmatch while write-char write-line
Like (operátor) While..Wend Print (funkce) Print (funkce)
xdroom xdsize xload xunload
Není k dispozici Není k dispozici AutoCAD.Application.LoadADS AutoCAD.Application.UnloadADS
zerop
Použijte zápis =0
textpage textscr trace trans
173
Programování v CAD –Přílohy
7.2 Příklad použití reaktorů 7.2.1 Reaktor objektu ; Příklad na použití reaktoru objektu, vykresluje kružnici s daným středem a poloměrem ; při její modifikaci vypíše novou velikost poloměru ; funkce pro vykreslení kružnice pomocí funkcí ActiveX (setq kruznice (progn (setq ctrPt (getpoint "\nZadejte stred kruznice: ") radius (distance ctrPt (getpoint ctrpt "\nRadius: ") ) ) (vl-load-com) ; načtení dynamické knihovny "C:\Program Files\ACAD2000\VLLIB.DLL", ; nutné pro funkci prvků ActiveX
; vlastní funkce ActiveX (vla-addCircle (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)) ) (vlax-3d-point ctrPt) radius ) ) ) ; touto závorkou je definitivně uzavřena funkce pro vykreslení ; Funkce zpětného volání Call back, která se spouští v případě činnosti reaktoru (defun print-radius (notifier-object reactor-object parameter-list) (vl-load-com) (cond ( (vlax-property-available-p notifier-object "Radius" ) (princ "polomer je ") 174
Programování v CAD –Přílohy (princ (vla-get-radius notifier-object)) ) ) ) ; konec funkce zpětného volání ; reaktor, v tomoto případě je použit reaktor objektu pojmenovaný circleReactor (setq circleReactor (vlr-object-reactor (list kruznice) "Circle Reactor" '((:vlr-modified . print-radius)) ) ; sleduje modifikaci objektu a spouští ; funkci zpětného volání print-radius ) ; konec reaktoru ; Funkce pro úklid reaktorů, slouží pro zamezení kolizí mezi reaktory (defun C:Uklid () (mapcar 'vlr-remove-all '(:VLR-AcDb-reactor :VLR-Editor-reactor :VLR-Object-reactor ) ) ) 7.2.2 Reaktor databáze ; Jednoduchý příklad na reaktor databáze, vykresluje kružnici s daným středem a ; poloměrem při jejím smazání se ozve zvukové znamení ; funkce pro vykreslení kružnice pomocí funkcí ActiveX (setq kruznice (progn (setq ctrPt (getpoint "\nZadejte stred kruznice: ") radius (distance ctrPt (getpoint ctrpt "\nRadius: ") ) ) (vl-load-com) ; načtení dynamické knihovny "C:\ACAD2000\VLLIB.DLL", ; nutné pro funkci prvků ActiveX
175
Programování v CAD –Přílohy ; vlastní funkce ActiveX (vla-addCircle (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)) ) (vlax-3d-point ctrPt) radius ) ) ) ; touto závorkou je definitivně uzavřena funkce pro vykreslení ; funkce zpětného volání je definována přímo v reaktoru ; reaktor databáze, obsahuje předdefinovanou funkci zpětného ; volání vlr-beep-reaction (setq DatReactor (vlr-acdb-reactor (list kruznice) '((:vlr-objectErased . vlr-beep-reaction)) ) ) ; konec reaktoru
; Funkce pro úklid reaktorů, slouží pro zamezení kolizí mezi reaktory (defun C:Uklid () (mapcar 'vlr-remove-all '(:VLR-AcDb-reactor :VLR-Editor-reactor :VLR-Object-reactor ) ) ) 7.2.3 Reaktor editoru ;Příklad na reaktor editoru, tento druh reaktoru není spjat s žádným objektem ;proto není nutné objekty definovat pomocí fce ActiveX. ; Funkce - při každém uložení se objeví upozornění na aktuální jméno souboru a ; jeho velikost 176
Programování v CAD –Přílohy (vl-load-com) ;načtení dynamické knihovny pro Activex prvky - nutné pro funkci ;reaktoru a funkci zpětného volání
; definice jednoduché vykreslovací funkce slouží pouze pro vytvoření objektu, ;který se ukládá (defun C:CTVEREC (/ bod1 bod2 bod3 bod4 len) (setq bod1 (getpoint "levy dolni roh")) (setq len (getdist bod1 "delka jedne strany")) (setq bod2 (polar bod1 0.0 len)) (setq bod3 (polar bod2 (/ pi 2.0) len)) (setq bod4 (polar bod3 pi len)) (command "_PLINE" bod1 bod2 bod3 bod4 "_c") ) ; Definice funkce zpětného volání (defun saveDrawingInfo (calling-reactor commandInfo / dwgname filesize) (setq dwgname (cadr commandInfo) filesize (vl-file-size dwgname) ) (alert (strcat "Velikost ukládaného souboru " dwgname " je " (itoa filesize) " bytů " ) ) (princ) ) ; definice reaktoru editoru - sleduje uložení souboru ; položka data je v tomto případě nastavená na nil - reaktor není asociován s ; žádným objektem pouze hlídá ukládání souboru (vlr-dwg-Reactor nil '((:vlr-saveComplete . saveDrawingInfo))) ; Funkce pro úklid reaktorů (defun C:Uklid () (mapcar 'vlr-remove-all 177
Programování v CAD –Přílohy '(:VLR-Editor-reactor) ) )
178
Programování v CAD –Přílohy
7.3 Příklad kolekce pro vykreslení čtyřúhelníka Sub obecctyr() ' Příklad kolekce pro vykreslení obecného čtyřúhelníku. Dim Kolekce As New Collection ' Tvorba objektu kolekce. Dim Num ' Počítadlo pro orientaci v kolekci. Dim Msgx As String ' Text před zadáním souradnice x. Dim Msgy As String ' Text před zadáním souradnice y. Dim hodnotax, hodnotay ' Proměnné hodnoty X,Y. Dim i ' Deklarace proměnné i. Dim point1(0 To 2) As Double ' Proměnný bod pro vykreslení v AutoCADu. Dim point2(0 To 2) As Double ' Proměnný bod pro vykreslení v AutoCADu. Dim aline As AcadLine For i = 1 To 4 Dim tecka As New bod ' Tvorba nové instance v třídě bod. Num = Num + 1 ' Přírustek počítadla. Msgx = "Zadej souradnice bodu X,Y " & CStr(i) & Chr(13) _ & "Cancel je konec" & Chr(13) _ & " X= " hodnotax = InputBox(Msgx, "zadej x") If hodnotax = "" Then Exit Sub ' Podmínka pro opustení procedůry. Msgy = "Zadej souradnice bodu X,Y " & CStr(i) & Chr(13) _ & "Cancel je konec" & Chr(13) _ & " Y= " hodnotay = InputBox(Msgy, "zadej y") If hodnotay = "" Then Exit Sub ' Podmínka pro opustení procedůry. tecka.x = CDbl(hodnotax) ' Put name in object instance. tecka.y = CDbl(hodnotay) tecka.z = 0 ' Čtyřúhelník je pouze v rovině. Kolekce.Add Item:=tecka, Key:=CStr(Num) ' Přidaní členu do kolekce. Set tecka = Nothing ' Zrušení přiřazení hodnoty tečka. Next i Set tecka = Kolekce.Item(1) ' Přiřazení tečce první člen Kolekce. 179
Programování v CAD –Přílohy
point1(0) = tecka.x ' Určení x-ové souřadnice prvního bodu. point1(1) = tecka.y ' Určení y-ové souřadnice prvního bodu. point1(2) = tecka.z ' Určení z-ové souřadnice prvního bodu. Num = Num + 1 Kolekce.Add Item:=tecka, Key:=CStr(Num) ' Přidání prvního členu kolekce na konec, aby byl čtyřúhelník uzavřený. For Num = 2 To Kolekce.Count ' Smyčka pro vykreslení čtyřúhelníku. Set tecka = Kolekce.Item(Num) point2(0) = tecka.x point2(1) = tecka.y point2(2) = tecka.z
Set aline = ThisDrawing.ModelSpace.AddLine(point1, point2) aline.Update point1(0) = tecka.x point1(1) = tecka.y point1(2) = tecka.z Next
For Num = 1 To Kolekce.Count ' Odstranění Kolekce. Kolekce.Remove 1 ' Automaticky odstraňuje první člen Kolekce. Next End Sub ' Konec procedury.
180
Programování v CAD –Přílohy
7.4 Ukázka Programu Java a Pro/Engineer Součást Exercise4.prt, na kterou je aplikován přiložený program vytvořený v programovacím jazyce JAVA.
Vytvořený vzorový program, který po natažení součásti do Pro/Engineeru umožní výběr curve, point, surface, axis, prt_or_asm, edge, csys, face, objeví se menu Get Select a můžete vybírat. Opuštění programu provedete stiskem klávesy q. /******************************************************************** *********\ FILE: Exercise4.java PURPOSE: Solution to the Session chapter exercise in the J-Link User Guide. 09-Apr-99 I-01-34 JCN $$1 Created. \******************************************************************** *********/ import com.ptc.cipjava.*; import com.ptc.pfc.pfcGlobal.*; import com.ptc.pfc.pfcSession.*; import com.ptc.pfc.pfcSelect.*; import com.ptc.pfc.pfcCommand.*; import com.ptc.pfc.pfcExceptions.*; 181
Programování v CAD –Přílohy
public class Exercise4 { public static Session session; public static UICommand selectCmd; public static SelectionOptions options; public static Selections selections; public static Selection selection;
public Exercise4 () {} public static void startSelect() { printMsg("J-Link selection exercise"); try { session=pfcGlobal.GetProESession(); } catch (jxthrowable x) { printMsg("Exception caught: Get ProESession: "+x); return; } try { selectCmd = session.UICreateCommand("SELECT", new SelectButtonActionListener()); } catch (jxthrowable x) { printMsg("Exception caught: UICreateCommand: "+x); } try { session.UIAddButton(selectCmd, "Utilities", "Utilities.psh_util_aux", "USER Select", "USER Highlight selections", "exercise4.txt"); } 182
Programování v CAD –Přílohy catch (jxthrowable x) { printMsg("Exception caught: UIAddButton: "+x); } } public static void stop () {}
/** * Action for Pro/E button "Select". Prompts the user for a string input, * uses the input as a SelectionOptions keyword. Uses the keyword to limit * the possible selections user can get. Highlights the selections made. * * Method must be static because it accesses the static data "session". */ public static void highlightSelections() { String option=""; boolean highlight=true; int code; while (true) { try { session.UIDisplayMessage("exercise4.txt", "USER Prompt", null); option=session.UIReadStringMessage(Boolean.FALSE); } catch(jxthrowable x) { printMsg("Exception caught: UIReadStringMessage: "+x); return; } if (option==null) break; 183
Programování v CAD –Přílohy if (option.equalsIgnoreCase("q")) break; try { options=pfcSelect.SelectionOptions_Create(option); options.SetMaxNumSels(new Integer(1)); } catch (jxthrowable x) { printMsg("Exception caught: SelectionOptions_Create: "+x); return; } try { selections=session.Select(options, null); highlight=true; } catch (XToolkitError xtk) { try { code = xtk.GetErrorCode(); if (code == -3) { // ErrorCode for user abort highlight=false; session.UIDisplayMessage("exercise4.txt", "USER error", null); } else if (code == -14) { // ErrorCode for user picking off the menu highlight=false; session.UIDisplayMessage("exercise4.txt", "USER error", null); } else { printMsg("Unacceptable XToolkit Error caught: "+code); return; } } catch (jxthrowable x) { printMsg("Exception caught: UIDisplayMessage: "+x); return; } } catch (jxthrowable x) 184
Programování v CAD –Přílohy { printMsg("Exception caught: Select: "+x); return; } if (selections !=null && highlight) try { selection=selections.get(0); selection.Highlight(com.ptc.pfc.pfcBase.StdColor.COLOR_HIGHLIGHT); } catch (jxthrowable x) { printMsg("Exception caught: Highlight: "+x); } } } private static void printMsg(String str) { System.out.println(str); } } /** * Non-public class which extends the J-Link UICommandActionListener. * This class overrides the OnCommand() method with the * highlightSelections() method from the contianing class. */ class SelectButtonActionListener extends DefaultUICommandActionListener { public void OnCommand () { Exercise4.highlightSelections(); } }
185
Programování v CAD –Přílohy
7.5 Pro/PROGRAM - příklady Komentář V následující části jsou uvedeny výpisy programů několika součástí. Part příklad 1 je válec s otvorem, uživatel může rozměry válce i otvoru modifikovat. Tato součást je vystavěna na základě definovaného souřadného systému. Part příklad 2 je hranol (s danými rozměry) v němž je z jedné strany otvor, jehož rozměry může uživatel modifikovat. Assembly příklad 1 sestava je sestava válece s otvorem (příklad 1) a hranol s otvorem (příklad 2) 7.5.1 Příklad 1 V modelovacím prostředí Pro/ENGINEERu byl vytvořen válec s otvorem. Rozměry byly modifikovány tak, aby bylo možné ve výpisu programu rozlišit, která kóta určuje délku a která průměr.
Výpis programu měl tuto podobu: VERSION REVNUM 172 LISTING FOR PART PRIKLAD 1 INPUT END INPUT 186
Programování v CAD –Přílohy
RELATIONS END RELATIONS ADD FEATURE (initial number 1) INTERNAL FEATURE ID 1 TYPE = DATUM PLANE NAME = RIGHT (následuje vytvoření dalších základních rovin a souřadného systému. Na jejich základě je potom jednoduchým způsobem vytvořen válec funkcí PROTRUSION a do jedné podstavy válce je vyříznut kruhový otvor příkazem CUT. Tato část programu zde byla vynechána, je shodná s částí, která bude uvedena později.) … MASSPROP END MASSPROP (Zde výpis programu končí.) Pokud bychom chtěli hodnoty kót modifikovat jednorázově, použili bychom příkazu MODIFY, který se uvede před modifikovanou kótu (např. MODIFY d3 = 40 přiřadí hodnotu 40 kótě d3, u příklad 1 tato kóta odpovídá hloubce řezaného otvoru. Aby hodnoty mohl zadávat uživatel, je nutné program upravit. Do části INPUT je nutné vepsat názvy proměnných a doprovodný text: INPUT POLVAL NUMBER "zadejte prumer valce:" DELVAL NUMBER "zadejte delku valce:" POLDIRA NUMBER "zadejte prumer diry:" DELDIRA NUMBER "zadejte hloubku diry:" END INPUT Text srozumitelný pro uživatele musí následovat ihned za definicí proměnné. V části programu RELATIONS, která následuje, je provedeno přiřazení uživatelských proměnných příslušným kótám. RELATIONS D0 = POLVAL D1 = DELVAL D2 = POLDIRA D3 = DELDIRA IF D2>D0 187
Programování v CAD –Přílohy D2 = D0-1 ENDIF IF D3>D1 D3 = D1 ENDIF END RELATIONS Proměnná POLVAL (průměr válce) odpovídá kótě d0 (jak lze z výpisu programu zjistit), DELVAL (délka válce) kótě d1, POLDIRA (průměr otvoru) kótě d2 a DELDIRA (hloubka řezaného otvoru) kótě d3. Podmínka IF D2>D0 D2 = D0-1 ENDIF , zajistí, že v případě, kdy uživatel zadá průměr řezu větší než průměr válce, je hodnota průměru řezu upravena. Podobně podmínka: IF D3>D1 D3 = D1 ENDIF omezí hloubku řezu maximálně na délku válce. Následuje výpis celého programu. VERSION REVNUM 174 LISTING FOR PART PRIKLAD 1 INPUT POLVAL NUMBER "zadejte prumer valce:" DELVAL NUMBER "zadejte delku valce:" POLDIRA NUMBER "zadejte prumer diry:" DELDIRA NUMBER "zadejte hloubku diry:" END INPUT RELATIONS D0 = POLVAL D1 = DELVAL 188
Programování v CAD –Přílohy D2 = POLDIRA D3 = DELDIRA IF D2>D0 D2 = D0-1 ENDIF IF D3>D1 D3 = D1 ENDIF END RELATIONS ADD FEATURE (initial number 1) INTERNAL FEATURE ID 1 TYPE = DATUM PLANE NAME = RIGHT FEATURE IS IN LAYER(S) : 01___PRT_ALL_DTM_PLN - OPERATION = SHOWN 01___PRT_DEF_DTM_PLN - OPERATION = SHOWN END ADD ADD FEATURE (initial number 2) INTERNAL FEATURE ID 3 TYPE = DATUM PLANE NAME = TOP FEATURE IS IN LAYER(S) : 01___PRT_ALL_DTM_PLN - OPERATION = SHOWN 01___PRT_DEF_DTM_PLN - OPERATION = SHOWN END ADD ADD FEATURE (initial number 3) INTERNAL FEATURE ID 5 TYPE = DATUM PLANE NAME = FRONT FEATURE IS IN LAYER(S) : 01___PRT_ALL_DTM_PLN - OPERATION = SHOWN 01___PRT_DEF_DTM_PLN - OPERATION = SHOWN 189
Programování v CAD –Přílohy
END ADD ADD FEATURE (initial number 4) INTERNAL FEATURE ID 7 TYPE = COORDINATE SYSTEM NAME = PRT_CSYS_DEF FEATURE IS IN LAYER(S) : 05___PRT_ALL_DTM_CSYS - OPERATION = SHOWN 05___PRT_DEF_DTM_CSYS - OPERATION = SHOWN END ADD ADD FEATURE (initial number 5) INTERNAL FEATURE ID 39 PARENTS = 1(#1) 5(#3) 3(#2) PROTRUSION: Extrude NO. ELEMENT NAME INFO STATUS --- ------------ ---------------1 Attributes One Side Defined 2 Section Sk. plane - Surface TOP of feat #2 (DATUM PLANE) Defined 3 Direction Defined 4 Depth Blind, depth = 100 Defined SECTION NAME = S2D0006 FEATURE IS IN LAYER(S) : 02___PRT_ALL_AXES - OPERATION = SHOWN FEATURE'S DIMENSIONS: d0 = 60.00 Dia d1 = 100.00 END ADD ADD FEATURE (initial number 6) INTERNAL FEATURE ID 60 PARENTS = 1(#1) 5(#3) 39(#5) 190
Programování v CAD –Přílohy
CUT: Extrude NO. ELEMENT NAME INFO STATUS --- ------------ ---------------1 Attributes One Side Defined 2 Section Sk. plane - Surface of feat #5 (PROTRUSION) Defined 3 MaterialSide Inside section Defined 4 Direction Defined 5 Depth Blind, depth = 50 Defined SECTION NAME = S2D0007 FEATURE'S DIMENSIONS: d2 = 50.00 Dia d3 = 50.00 END ADD MASSPROP END MASSPROP V hlavičce programu je položka REVNUM, která ukazuje poslední revizi programu. Po zavedení partu do modelovacího prostředí Pro/ENGINEERu lze z nabídky Part vybrat možnost Regenerate. Systém se ptá na hodnoty proměnných. Current Vals ponechá hodnoty, pro něž je model zobrazen, Read File umožní načíst hodnoty ze souboru (viz výše). Pokud uživatel zvolí možnost Enter, systém se zeptá, které z proměnných chce uživatel modifikovat. Výběr je nutné potvrdit Done. V dialogovém řádku se postupně zobrazí výzvy k zadání hodnot měněných proměnných. Po jejich zadání se model zregeneruje. Výpis programu pak obsahuje aktuální hodnoty jednotlivých kót.
191
Programování v CAD –Přílohy
7.5.2 Příklad 2 Part příklad 2 je hranol se čtvercovou podstavou, vytvořený bez použití základního souřadného systému. Do jedné z podstav je vyříznut válcový otvor. Rozměry hranolu jsou stanoveny pevně, lze je měnit ve výpisu programu použitím příkazu MODIFY. Rozměry řezaného válce se dají měnit uživatelsky. Proměnná POLO udává hodnotu průměru řezaného otvoru, proměnná HLOUB hloubku řezu. Podmínky, uvedené v části RELATIONS opět upravují hodnoty kót v případě, kdy uživatel zadá průměr řezu větší, než je délka podstavné hrany hranolu nebo pokud je hloubka řezu větší než výška hranolu. Tyto podmínky lze v programu upravit podle aktuálních potřeb uživatele.
Výpis programu: VERSION REVNUM 113 LISTING FOR PART PRIKLAD 2 INPUT POLO NUMBER "zadej prumer diry" HLOUB NUMBER "zadej hloubku diry" END INPUT RELATIONS D3 = POLO IF D3>D0 192
Programování v CAD –Přílohy D3=D0-1 ENDIF D6 = HLOUB IF D6>D2 D6=D2 ENDIF END RELATIONS ADD FEATURE (initial number 1) INTERNAL FEATURE ID 1 FIRST FEATURE: Extrude NO. ELEMENT NAME INFO STATUS ---------------------------------------------------------------------------1 Section Defined 2 Depth Blind, depth = 20 Defined SECTION NAME = S2D0004 FEATURE'S DIMENSIONS: d0 = 25.00 d1 = 25.00 d2 = 20.00 END ADD ADD FEATURE (initial number 2) INTERNAL FEATURE ID 26 PARENTS = 1(#1) CUT: Extrude NO. ELEMENT NAME INFO STATUS --- ------------ ---------------1 Attributes One Side Defined 2 Section Sk. plane - Surface of feat #1 (FIRST FEATURE) Defined 3 MaterialSide Inside section Defined 4 Direction Defined 5 Depth Blind, depth = 10 Defined
193
Programování v CAD –Přílohy SECTION NAME = S2D0005 FEATURE'S DIMENSIONS: d3 = 24.00 Dia d4 = 12.50 d5 = 12.50 d6 = 10.00 END ADD MASSPROP END MASSPROP Číslování sekcí (např.s2d0005) je vnitřní záležitostí Pro/ENGINEERu. Proto nemusí v každé části začínat číslování sekcí číslem 1. Naopak číslování kót začíná v každé součásti kótou d0.
194
Programování v CAD –Přílohy
7.5.3 Příklad 1 sestava Assembly příklad 1 sestava obsahuje sestavu tvořenou částmi příklad 1 a příklad 2, tedy válcem a hranolem s vyříznutými otvory. Protože part příklad 1 byl vytvořen za pomoci základních rovin a souřadného systému, je tento systém nadefinován i pro příklad 1 sestava. Ale podobně jako ve výpisu programu pro party chybí záznam, ze které roviny pokračuje modelování tělesa, ve výpisu assembly nejsou vypsány constrainy (v příklad 1 sestava jsou ztotožněny roviny těles).
Výpis programu: VERSION REVNUM 64 LISTING FOR ASSEMBLY PRIKLAD_1_SESTAVA INPUT END INPUT RELATIONS END RELATIONS ADD FEATURE (initial number 1) INTERNAL FEATURE ID 1 TYPE = DATUM PLANE NAME = ASM_RIGHT 195
Programování v CAD –Přílohy
FEATURE IS IN LAYER(S) : 01__ASM_ALL_DTM_PLN - OPERATION = SHOWN 01__ASM_DEF_DTM_PLN - OPERATION = SHOWN END ADD ADD FEATURE (initial number 2) INTERNAL FEATURE ID 3 TYPE = DATUM PLANE NAME = ASM_TOP FEATURE IS IN LAYER(S) : 01__ASM_ALL_DTM_PLN - OPERATION = SHOWN 01__ASM_DEF_DTM_PLN - OPERATION = SHOWN END ADD ADD FEATURE (initial number 3) INTERNAL FEATURE ID 5 TYPE = DATUM PLANE NAME = ASM_FRONT FEATURE IS IN LAYER(S) : 01__ASM_ALL_DTM_PLN - OPERATION = SHOWN 01__ASM_DEF_DTM_PLN - OPERATION = SHOWN END ADD ADD FEATURE (initial number 4) INTERNAL FEATURE ID 7 TYPE = COORDINATE SYSTEM NAME = ASM_DEF_CSYS FEATURE IS IN LAYER(S) : 05__ASM_ALL_DTM_CSYS - OPERATION = SHOWN 05__ASM_DEF_DTM_CSYS - OPERATION = SHOWN END ADD
196
Programování v CAD –Přílohy ADD PART PRIKLAD 1 INTERNAL COMPONENT ID 39 END ADD ADD PART PRIKLAD 2 INTERNAL COMPONENT ID 40 PARENTS = 39(#5) END ADD MASSPROP END MASSPROP I v režimu assembly lze měnit rozměry součástí. Z výpisu je vidět, že lze měnit pouze rozměry upravené pro změnu uživatelem, nikoliv pomocí příkazu MODIFY. Změnu provedete výběrem možnosti Regenerate v nabídce Assembly. Systém se otáže, které z těles bude modifikováno. Po výběru a potvrzení následuje proces regenerace partu, jak bylo zmíněno výše.
197