MicroStation – VBA makra

Rozšiřování funkčnosti MicroStationu pomocí maker ○ Miniaplikace Interpolace ○ Zavedení a spouštění maker


Rozšiřitelnost funkčnosti pomocí maker napsaných v programovacím jazyce VBA (Visual Basic for Applications) je nepochybně velká výhoda  MicroStationu. Vývojářský nástroj v něm integrovaný je naprosto shodný s nástroji jednotlivých aplikací kancelářského balíku Microsoft Office – stejný programovací jazyk, stejné vývojové prostředí, stejné možnosti (nahrávání, editace a spouštění maker. Takže kdo používá makra například v Excelu, může tak snadno činit i v MicroStationu.

Co je vlastně makro: Je to napsaná nebo nahraná posloupnost příkazů, která může být opakovaně spuštěna příkazem jediným. Makra umožňují například:

  • Definovat uživatelské funkce;
  • automatizovat sekvence opakujících se úkonů;
  • ovládat hostitelskou aplikaci, v našem případě MicroStation (upravovat nastavení, ovládat uživatelské rozhraní, vytvářet, otvírat nebo zavírat soubory,…);
  • propojit více aplikací používajících VBA (načítat data z Excelu nebo je do něj zapisovat,…);
  • přistupovat k Windows API a ostatním nízkoúrovňovým funkcím systému.

Pro interakci s uživatelem lze vytvářet vlastní formuláře a dialogy s běžnými ovládacími prvky.

Makra mohou být spuštěna ze seznamu maker nebo pro ně mohou být vytvořeny vlastní nástroje, nabídky nebo klávesové zkratky. Mohou být spouštěna automaticky v reakci ne nějakou událost, např. otevření nebo zavření souboru nebo změnu prvku kresby.

Síla maker je tedy velká. Z toho bohužel vyplývá i jedno nebezpečí: mohou obsahovat škodlivý kód, který může napáchat velké škody. Proto není dobré spouštět makra z neznámých nebo pochybných zdrojů.

Miniaplikace Interpolace

Jak může fungovat makro s implementací uživatelské funkce si ukážeme na jednoduché miniaplikaci pro interpolaci výšek.

Pro vynášení podélného profilu kanalizace potřebujeme stanovit výšku terénu pro šachtu v místě lomu stoky. Stoka je vedena v cestě, kterou máme zaměřenou:

218-01

Máme dvě možnosti: buď výšku odhadneme, nebo přesně spočítáme pomocí interpolace. V prvním případě se musíme trochu zamyslet a v duchu provést přibližný výpočet s přibližným výsledkem. Ve druhém musíme spočítat rozdíl výšek, změřit šířku cesty a vzdálenost šachty od jednoho okraje, podělit rozdíl výšek šířkou cesty, výsledek vynásobit vzdáleností šachty a přičíst k výšce.

V obou případech nám to zabere trochu času. Ale jako projektanti kanalizace to děláme často, pořád dokola měříme, počítáme nebo odhadujeme. Nakonec jsou to hodiny a hodiny práce. Přitom je to jednoduchý algoritmus, posloupnost úkonů. Přesně to, co můžeme řešit pomocí makra s uživatelskou funkcí.

Výsledná implementace takové funkce může vypadat například takto:

218-02

Máme uživatelský dialog Interpolace. Stisknutím tlačítka Interpolovat spustíme uživatelskou funkci. Pracuje tak, že nás vyzve k určení první výšky (kliknutím na text), druhé výšky a k určení bodu, jehož výška má být vypočítána. Předpokládá se, že tento bod leží na přímce mezi určenými výškami.

O stavu a průběhu funkce jsme informováni ve stavovém řádku:

218-03

Textové prvky, které určíme jako první a druhou výšku, musí být samozřejmě čísla, ale je jedno, jestli obsahují desetinnou čárku nebo tečku. Někteří geodeti používají pouze mezeru. I to naše funkce zvládne.

Menším problémem je stanovení vzdáleností. Šlo by určit text s výškou a pak bod, ke kterému patří. To ale znamená další 2 kliknutí navíc. Když zajistíme, aby vztažný bod textového prvku s výškou byl totožný s bodem, pro který výška platí, můžeme si je ušetřit. Pokud tomu tak není, provedeme malou úpravu: zkopírujeme všechny texty s výškami do nové pracovní vrstvy, změníme jejich vztažné body např. na vlevo nahoře, přesuneme je do reálných bodů a použijeme pro interpolaci:

218-04

Výsledek:

218-05

V případě potřeby můžeme zadávat další body pro výpočet výšky. Stisknutím přerušovacího tlačítka myši resetujeme funkci do výchozího stavu (určení 1. textového prvku). Opětovným stiskem přerušovacího tlačítka funkci ukončíme (spustí se implicitní nástroj).

V některých výškopisech bývají výšky uvedeny zkráceně, místo 250,25 pouze 50,25. Pokud chceme mít výsledek v nezkrácené podobě, použijeme základ. V uživatelském dialogu zaškrtneme políčko Použít základ, do textového pole ho zadáme a stiskem Enter vložíme do funkce:

218-06

A to je vše, co naše aplikace umí. Přidává do MicroStationu specifickou funkčnost, která řeší přesně to, co potřebujeme.

Zavedení a spouštění maker

Makra se v MicroStationu ukládají do souborů s příponou mvba. Jeden soubor může obsahovat jedno nebo více maker. V terminologii MicroStationu se nazývá projekt. Pro práci s projekty slouží VBA správce projektů, dostupný z nabídky Pomůcky – Makro – Správce projektů. Můžeme zde vytvořit nový nebo zavést či odpojit existující projekt, spouštět konkrétní makra v zavedených projektech, otevřít Visual Basic Editor (vývojářské prostředí) nebo nahrávat makra.

O tom, jak vytvářet makra nahráváním nebo zápisem kódu VBA, budu postupně psát v některých dalších dílech tohoto seriálu. Teď se zaměřím pouze na zavedení existujícího projektu a spuštění makra v něm obsaženém.

Zazipovaný soubor jskteinterpol.zip je k dispozici ke stažení (garantuji jeho nezávadnost).

Nevyžaduje žádnou speciální instalaci, stačí ho pouze rozbalit kdekoli na disku. Ve VBA správci projektů použijeme volbu Zavést projekt a vyhledáme ho. Zobrazí se v seznamu projektů. Buď na něho dvakrát klikneme, nebo použijeme nástroj Makra:

218-07

Zobrazí se dialog se seznamem dostupných maker. (Je možno ho otevřít i přímo z nabídky Pomůcky – Makro – Makra, klávesová zkratka Alt+F8.):

218-08

V projektu Interpolace je jediné makro – Main.Start. Dvojklikem nebo stisknutím tlačítka Run ho spustíme.

I tento postup si můžeme zjednodušit, pokud si vytvoříme vlastní nástroj – viz tento článek. Postačí nám jeden příkaz:

VBA RUN [název projektu]název makra

Konkrétně tedy:

VBA RUN [jskTeInterpol]Start

Je v tom jenom jeden malý háček: Aby příkaz fungoval, musí být složka, ve které je projekt umístěn, definována v konfigurační proměnné MS_VBASEARCHDIRECTORIES. Buď se tedy složka přidá do proměnné, nebo se projekt umístí do některé ze složek, které jsou v proměnné již definovány, což jsou složky vba v systémových a projektových datech.

Zanechat odpověď

Vyplňte detaily níže nebo klikněte na ikonu pro přihlášení:

Logo WordPress.com

Komentujete pomocí vašeho WordPress.com účtu. Odhlásit /  Změnit )

Google photo

Komentujete pomocí vašeho Google účtu. Odhlásit /  Změnit )

Twitter picture

Komentujete pomocí vašeho Twitter účtu. Odhlásit /  Změnit )

Facebook photo

Komentujete pomocí vašeho Facebook účtu. Odhlásit /  Změnit )

Připojování k %s