pátek 26. června 2015

Využití LISPu v příkazové řádce AutoCADu 3.

Předchozí texty o využití LISPu v příkazové řádce najdete zde:

Využití LISPu v příkazové řádce AutoCADu 1.

Využití LISPu v příkazové řádce AutoCADu 2.

Nyní zkusíme do příkazového řádku nadefinovat jednoduchou funkci.

Představme si, že pracujeme na projektu s kreslícími jednotkami odpovídajícími milimetrům, ale potřebujeme do projektu dokreslit komponentu jejíž podklady jsou kótované v palcích. I když existuje i jiné řešení, zkusme to vyřešit vlastní funkcí nadefinovanou pomocí LISPu. Potřebujeme k tomu znát funkci defun, která definuje funkci (define function) její syntaxe je (defun _jmenofunkce (argumenty / lokální proměnné)) Lokální proměnné nyní potřebovat nebudeme, takže se jimi nemusíme zabývat. Druhou věc, kterou potřebujeme vědět je, že LISP používá takzvanou obrácenou logiku (to je důvod, proč je tak populární:-)) Ta spočívá v tom, že se nejprve píše jméno funkce a pak její argumenty. A protože i násobení (*) je funkce, tak budeme-li chtít převést palce na milimetry a počet palců tedy vynásobit 25.4 musíme napsat (* pocet_palcu 25.4)

Naše funkce bude tedy vypadat následovně:

(defun mmp (palce) (* palce 25.4))

image_thumb[35]_thumb

mmp je jméno funkce. Funkce má jeden argument palce, který v dalším kroku vynásobíme konstantou 25.4. Na konci nezapomeňte na dvě uzavírací závorky. První uzavírá funkci násobení, druhá definici funkce mmp.

Nyní zavoláme příkaz na kreslení čáry / stěny …, zadáme výchozí bod (můžeme použít v předchozím příkladu definovaný pt), zadáme směr a namísto délky zadáme například (mmp 10). AutoCAD nakreslí čáru / stěnu o délce 254 mm.

image_thumb[37]_thumb

image_thumb[38]_thumb

V tomto textu jsem popsal jen několik nejzákladnějších funkcí AutoLISPu. Pomocí AutoLISPu a Visual LISPu lze psát ale i rozsáhlejší programy s cykli, rozhodovacími procedurami a dialogovými panely. Všechny funkce LISPu si můžete nechat vypsat do příkazové řádky pomocí příkazu lsp a následným výběrem Function. AutoCAD v sobě obsahuje jednoduché vývojové prostředí pro psaní funkcí v tomto jazyce, které spustíte příkazem vlide nebo vlisp. Nečekejte ovšem žádné Visual Studio. Jedná se spíše o trochu vylepšený poznámkový blok.

pátek 19. června 2015

Využití LISPu v příkazové řádce AutoCADu 2.

V předchozím příspěvku jsme popsali několik jednoduchých příkazů LISPu, které můžeme využít v příkazové řádce AutoCADu. Nyní se koukneme na to, jak pomocí LISPu manipulovat s výběrovými množinami.

Do příkazové řádky  zadáme tuto sekvenci:

(setq vyber1 (ssget))

image_thumb[19]

a na výzvu, která se objeví po odeslání sekvence vybereme jeden nebo více objektů. Tímto jsme do proměnné vyber1 uložili jednu nebo více vybraných entit. Ssget značí Selection Set Get.

image_thumb[21]

Nyní zadejte opět například příkaz pro posun či kopírování a na výzvy po výběry objektů zadejte !vyber1. Vyberte bod a na další výzvy po vzdálenosti zadejte !vzd (viz předchozí příspěvek).

image_thumb[23]

image_thumb[25]

image_thumb[27]

Tímto způsobem si můžeme ve výkresu do proměnných uložit několik entit najednou, které pak můžeme i najednou editovat. Přitom syntaxi můžeme zadat do příkazového řádku i ve chvíli, když už jsou entity vybrané. Například posouváme více entit a po jejich výběru nás napadne, že všechny tyto entity budeme pravděpodobně muset ještě jednou editovat. Stačí při vybraných entitách zadat např (setq vyber2 (ssget)). Tentokrát nejsme vyzváni k výběru žádných objektů, ale do proměnné vyber2 se uloží právě vybrané entity. Ty pak můžeme pomocí !vyber2 znovu vybrat a manipulovat s nimi.

Pokud potřebujeme znovu vybrat poslední výběr (aniž bychom si ho uložili do proměnné pomocí funkce ssget) zadáme na výzvu po výběru objektů pr (previous) ( v lokalizovaném AutoCADu s poddtržítkem _pr). Potřebujeme-li vybrat do výkresu naposled přidanou entitu napíšeme na výzvy po výběru objektů la  / _la (last). Potřebujeme-li vybrat všechny viditelné objekty můžeme namísto výběru myší z jednoho rohu obrazovky do druhého napsat all / _all.

Potřebujeme-li si do proměnné uložit bod, použijeme na to funkci getpoint. Syntaxe je následující:

(setq pt (getpoint "Vyberte bod"))

anebo pokud Vám nevadí, že budete ochuzeni o výzvu k vybrání bodu tak jednoduše (setq pt (getpoint))

image_thumb[29]

image_thumb[31]

Tímto způsobem uložíme souřadnice bodu do proměnné pt. Ověřit si to můžeme zapsáním !pt do příkazové řádky. Výsledek bude podobný tomuto

image_thumb[33]

Proměnnou pt pak můžeme využít pokaždé, když budeme AutoCADem vyzváni k zadání bodu .

pátek 12. června 2015

Využití LISPu v příkazové řádce AutoCADu 1.

V AutoCADu se po léta vyskytuje programovací jazyk AutoLISP a od verze 2000 VisualLISP (šel doinstalovat i do verze R14). Jazyk se dnes již nevyvíjí a z dnešního pohledu má spoustu nevýhod. Jeho obrovskou výhodou ale je, že na jednom řádku vyřešíte to, co v C# na deseti, což souvisí s jeho nedokonalostí.

Pro začátek stačí o LISPu vědět jen pár věcí:

- LISP není case sensitive - nerozlišuje tedy velká a malá písmena

- každá funkce musí být uzavřena v závorkách

- LISP používá takzvaný dynamický typový systém. To znamená, že v LISPu není třeba deklarovat datový typ proměnných a že v proměnné mohu mít jednou uloženo celé číslo a pak do ní vložit třeba text.

- pro dekladrování proměnné slouží funkce setq

napišme do příkazové řádky například tuto sekvenci a odešleme ji Enterem:

(setq a 550 b 98)

image

Tímto řádkem jsme do proměnné "a" uložili hodnotu 550 a do proměnné "b" hodnotu 98. Můžeme si to ověřit zadáme-li do příkazového řádku !a nebo !b

image

Nakresleme si teď nějakou entity a zadejme příkaz pro posun nebo kopírování. Vybereme objekt, vyberme bod (base point), zadejme směr a na výzvu po vzdálenosti místo čísla napišme “!a”. Entita se posune či zkopíruje o 550 jednotek.

image

image

Vyberme znovu nějakou entitu zadejme příkaz pro rotaci, vyberme střed otáčení a na výzvy po velikosti úhlu zadáme místo číselné hodnoty "!b". Entita se otočí o 98° (jsou-li jako úhlové jednotky nastaveny stupně). Proměnné jsou platné po celou dobu otevření výkresu a můžeme je tedy kdykoliv použít.

image

image

Nyní napíšeme do příkazového řádku toto:

(setq vzd (getdist "Vyber dva body"))

image

Na výzvu "Vyber dva body" vybereme dva body a vzdálenost mezi nimi se nám uloží do proměnné vzd. Výzva za getdist není povinná a body můžete vybrat i bez výzvy. Napíšeme-li teď do příkazové řádky !vzd objeví se vzdálenost, která je v této proměnné uložena a tu pak můžeme používat v dalších příkazech. Asi není nutno nějak obšírněji vysvětlovat, že getdist znamená get distance.

úterý 2. června 2015

Zdravotechnika v AMEP–první výsledky

I když je katalog Českých tvarovek a trubek pro vodu a kanalizaci zatím poměrně málo rozsáhlý, již nyní se s jeho pomocí dají dělat jednodušší projekty včetně výpisů. Níže je několik printscreenů projektu vody a kanalizace pro jeden menší bytový dům, který jsem dělal v AMEP právě pomocí katalogu, který si můžete stáhnout zde.

image

ZTI03

ZTI09

ZTI05

ZTI04

ZTI06

ZTI07

ZTI10

ZTI08

image

 

Katalog trubek a tvarovek si můžete stáhnout zde nebo ze stránky download. Po jeho instalaci, která je popsána zde nezapomeňte ještě provést regeneraci katalogu výběrem Regenerate Catalog a následně vybrat All.

 image_thumb[1]