Programujeme v .NET - 2.díl: COM reference a spojení s Catia
Publikováno: 22. října 2013 | Zobrazeno: 6486x
V dnešním dílu seriálu navážeme na první článek o VB.NET, kde jsme si ukázali vývojové prostředí Visual studia XE 2008, základní navigaci, vysvětlili si dva základní typy aplikací a předvedli, jak se vytvoři a uloží nový projekt typu Windows form application.
Možná se ptáte, proč musíme něco takového dělat, v integrovaném VBA editoru se přece nic takového dělat nemusí. Ano, nemusí, a je to právě kvůli tomu, že VBA editor je integrovaný do prostředí Catia a tento krok se provede již při její instalaci. Ale nenechte se odratit, kromě této "nutnosti" u VB.NET nejdeme ve srovnání s VBA jen výhody.
Reference vytvoříme následovně. V solution exploreru klikneme pravým tlačítkem na vrcholový objekt ve stromu -
Zde dále vybereme sekci
Pro začátek vybereme pouze červeně označené. Ty nám budou stačit pro základní operace (práce s dokumenty, výběr, procházení sestav, ...). Pokud ale budeme chtít pracovat např. s modulem Part Design, musíme si navíc přidat COM objekt
Pokud se podařilo, máme v tuto chvíli COM objekty nalinkované a můžeme se vrátit zpět do editoru kódu. Tady je potřeba udělat poslední věc, a sice říct naší aplikaci (třídě s formulářem), že tyto reference budeme používat. Deklarace se provede pomocí klíčového výrazu
Můžete si také vytvořit makra speciálně kompilovaná pro konkrétní verze. K tomu stačí provést vždy před kompilací projektu provést přeregistraci na jinou verzi.
Ze zkušeností můžu říct, že makra kompilovaná na nižší verzi fungují bez problémů na vyšší verzi. Momentálně kompiluji na R19SP9 a na R20 i R21 makra fungují. COM objekty se ale přeci jen verzi od verze mění a kompatibilita není 100%.
Poznámka:V integrovaném VBA, máme vždy jistotu, že makro bude používat aktuální reference - editor je totiž spuštěný uvnitř Catia, takže používá reference právě této spuštěné verze.
Pro vlastní spojení s Catia musíme získat vrcholový objekt
Dále vytvoříme funkci, která se pokusí získat objekt Catia. Použijeme zde ošetření pomocí konstukce
Abychom si funkci mohli vyzkoušet, vytvoříme proceduru hlavního programu, která funkci PripojCatia použije a řekne nám, jestli je Catia spuštěná či nikoliv. Do formu přidáme tlačítko pojmenované
Kód hlavního bloku:
A teď už to jen vyzkoušet. Spustíme makro a klikneme na tlačítko. Pokud je Catia spuštěná, měl by se objevit informační Message box, v opačném případě výstraha.
Pokud se připojení nedaří ani pokud je Catia spuštěná, může být příčina v nesprávné registraci. Pak stačí jen Catii znovu zaregistrovat, viz popis na začátku článku.
A to je celý postup. Catia je připojená a s objektem
Pro úplnost ještě celý kód:
Autor článku: Jan Cinert
Příště: Vytvoření roletového menu s funkcí Window
COM reference
Abychom mohli začít s vlastním programováním, je třeba udělat ještě velmi důležitou věc - vytvořit reference na potřebné COM objekty (popis na Wikipedii), pomocí kterých budeme Catii prostřednictvím makra ovládat.Možná se ptáte, proč musíme něco takového dělat, v integrovaném VBA editoru se přece nic takového dělat nemusí. Ano, nemusí, a je to právě kvůli tomu, že VBA editor je integrovaný do prostředí Catia a tento krok se provede již při její instalaci. Ale nenechte se odratit, kromě této "nutnosti" u VB.NET nejdeme ve srovnání s VBA jen výhody.
Reference vytvoříme následovně. V solution exploreru klikneme pravým tlačítkem na vrcholový objekt ve stromu -
MojeMakro
- a z kontextového menu vybereme Properties. V Editoru se otevře další záložka, kde jsou přístupná další nastavení a vlastnosti projektu.
Zde dále vybereme sekci
References
, kde můžeme přidávat COM a .NET reference. Pro přidání referencí klikneme na tlačítko Add
a z nabídky vybereme možnost Reference. Otevře se další okno s několika záložkami. Pro nás je důležitá druhá záložka COM, kde jsou k dispozici všechny reference dostupné v systému. Abyste se nemuseli trápit s tím, které z referencí vybrat (jen pro Catii je jich tu skoro 100), na dalším obrázku jsou označené barevně ty, které budeme potřebovat. Červenou barvou jsou označeny základní a bezpodmínečně nutné, modrou barvou pak ty pro nejčastěji používané moduly. Z některých názvů referencí se dá poznat, pro který modul jsou určené a budeme je tedy pro makro potřebovat, u některých to poznat není. Když hledáme referenci pro konkrétní modul a nevíme která to je, postupujeme metodou pokus-omyl. Přidáme referenci, otestujeme zda obsahuje objekty které potřebujeme, a pokud se netrefíme, zase ji odebereme.
Pro začátek vybereme pouze červeně označené. Ty nám budou stačit pro základní operace (práce s dokumenty, výběr, procházení sestav, ...). Pokud ale budeme chtít pracovat např. s modulem Part Design, musíme si navíc přidat COM objekt
CATIA V5 Part Interfaces Object library
, který obsahuje potřebné objekty (Body, GeoSety, Feature). Po potrzení výběru bychom v seznamu měli mít minimálně tyto čtyři reference.
Pokud se podařilo, máme v tuto chvíli COM objekty nalinkované a můžeme se vrátit zpět do editoru kódu. Tady je potřeba udělat poslední věc, a sice říct naší aplikaci (třídě s formulářem), že tyto reference budeme používat. Deklarace se provede pomocí klíčového výrazu
Imports
úplně na začátku kódu.
' import CATIA COM objektu
Imports INFITF
Imports MECMOD
Imports ProductStructureTypeLib
Imports KnowledgewareTypeLib
Co když mám více verzí Catia?
Pokud máme nainstalováno více verzí Catia, vytvoří se reference z té verze, která je aktuálně registrovaná v systému. Většinou to je ta naposledy instalovaná (při instalaci se vždy registruje). Pokud máme jen jednu verzi, není třeba to řešit. U více verzí si můžeme vybrat, kterou použijeme pro kompilaci. Registrace se provede příkazemcnext.exe /regserver
v adresáři /code/bin příslušné verze.
Můžete si také vytvořit makra speciálně kompilovaná pro konkrétní verze. K tomu stačí provést vždy před kompilací projektu provést přeregistraci na jinou verzi.
Ze zkušeností můžu říct, že makra kompilovaná na nižší verzi fungují bez problémů na vyšší verzi. Momentálně kompiluji na R19SP9 a na R20 i R21 makra fungují. COM objekty se ale přeci jen verzi od verze mění a kompatibilita není 100%.
Poznámka:V integrovaném VBA, máme vždy jistotu, že makro bude používat aktuální reference - editor je totiž spuštěný uvnitř Catia, takže používá reference právě této spuštěné verze.
Rutina pro spojení s Catia
Nyní máme připravené vše potřebné a můžeme se vrátit k samotnému programu. Ještě předtím si ale trochu poupravíme název třídy a titulek hlavního formuláře - podle obrázku. Titulek formuláře je jeho vlastnostText
, název třídy formu změníme ve stromu solution exploreru.
Pro vlastní spojení s Catia musíme získat vrcholový objekt
CATIA
typu application. Nejprve si tedy vytvoříme potřebnou proměnou.
Dim CATIA As Application
Dále vytvoříme funkci, která se pokusí získat objekt Catia. Použijeme zde ošetření pomocí konstukce
Try - Catch
, které je nutné pro případ, že Catia není spuštěná - funkce GetObject selže. V tom případě vrátíme False.
' funkce pro spojeni s Catia
Function PripojCatia() As Boolean
Try
CATIA = GetObject(, "CATIA.Application")
Return True
Catch ex As Exception
Return False
End Try
End Function
Abychom si funkci mohli vyzkoušet, vytvoříme proceduru hlavního programu, která funkci PripojCatia použije a řekne nám, jestli je Catia spuštěná či nikoliv. Do formu přidáme tlačítko pojmenované
Button_TestSpojeni
, které bude hlavní program spouštět.
Kód hlavního bloku:
Sub TestSpojeni() Handles Button_TestSpojeni.Click
If PripojCatia() Then
MsgBox("CATIA je spuštěna.", MsgBoxStyle.Information, "COM")
Exit Sub
Else
MsgBox("CATIA není spuštěna!", MsgBoxStyle.Critical, "COM")
End If
' dalsi prikazy
' ...
End Sub
A teď už to jen vyzkoušet. Spustíme makro a klikneme na tlačítko. Pokud je Catia spuštěná, měl by se objevit informační Message box, v opačném případě výstraha.
Pokud se připojení nedaří ani pokud je Catia spuštěná, může být příčina v nesprávné registraci. Pak stačí jen Catii znovu zaregistrovat, viz popis na začátku článku.
A to je celý postup. Catia je připojená a s objektem
CATIA
můžeme pracovat úplně stejně jako ve VBA.
Pro úplnost ještě celý kód:
' import CATIA COM objektu
Imports INFITF
Imports MECMOD
Imports ProductStructureTypeLib
Imports KnowledgewareTypeLib
Public Class MainForm
Dim CATIA As Application
Function PripojCatia() As Boolean
Try
CATIA = GetObject(, "CATIA.Application")
Return True
Catch ex As Exception
Return False
End Try
End Function
Sub TestSpojeni() Handles Button_TestSpojeni.Click
If PripojCatia() Then
MsgBox("CATIA je spuštěna.", MsgBoxStyle.Information, "COM")
Exit Sub
Else
MsgBox("CATIA není spuštěna!", MsgBoxStyle.Critical, "COM")
End If
' dalsi prikazy
' ...
End Sub
End Class
Autor článku: Jan Cinert
Příště: Vytvoření roletového menu s funkcí Window