Dr inż. Jacek WARCHULSKI Dr inż. Marcin WARCHULSKI Mgr inż. Witold BUŻANTOWICZ Wojskowa Akademia Techniczna Instytut Systemów Mechatronicznych WYKORZYSTANIE PLATFORMY FireMonkey DO AUTOMATYZACJI ZADAŃ GRAFIKI W PROGRAMIE AutoCAD Streszczenie: W referacie przedstawiono możliwości wykorzystania systemów CAx w procesie automatyzacji zadań projektowych. Opracowano przykłady z zastosowaniem interfejsu automatyzacji OLE oraz platformy FireMonkey pakietu RAD Studio XE2. USE OF FireMonkey PLATFORM TO AUTOMATION OF GRAPHIC TASKS IN AutoCAD APPLICATION Abstract: In this paper the possibilities of using CAx systems in the automation process of design tasks are described. The authors present examples prepared using OLE Automation interface and FireMonkey platform of Embarcadero RAD Studio XE2 environment. 1. WPROWADZENIE Program AutoCAD ma wielu użytkowników i zajmuje znaczące miejsce w graficznym zapisie konstrukcji. W programie AutoCAD istnieją możliwości programowania czynności związanych z obsługą danych, automatyzacją zadań grafiki, wykonywaniem i dzieleniem informacji o rysunku z innymi aplikacjami. Napisanie programu do realizacji szczegółowego zadania zwykle wymaga na początku większego nakładu pracy, jednak wysiłek ten przy późniejszym wielokrotnym wykorzystaniu napisanego programu jest opłacalny. Pisanie aplikacji dla programu AutoCAD w środowisku Windows jest możliwe za pomocą wbudowanych w niego narzędzi programistycznych(np. środowisko programowania VisualLISP oparte na języku AutoLISP) i języków programowania ogólnego zastosowania (Delphi czy C++) [1,2]. W związku z wydaniem przez firmę Embarcadero najnowszej wersji oprogramowania RAD Studio XE2 wraz z nową platformą FireMonkey [7], przetestowano możliwość współpracy tej platformy z systemem CAx. Rys. 1. Oprogramowanie RAD Studio XE2 981 2. PLATFORMA FireMonkey W środowisku RAD Studio XE2 użytkownicy mają do wyboru dwie platformy komponentowe. Oprócz biblioteki VCL (Visual Component Library) znanej z wcześniejszych wersji Delphi i C++ Buildera, pojawiła się nowa platforma komponentowa FireMonkey. Platforma FireMonkey, wychodząc naprzeciw oczekiwaniom programistów, pozwala na kompilację aplikacji z jednego kodu dla wielu systemów operacyjnych. Rys. 2. Wybór platformy VCL i FireMonkey Ponieważ systemy operacyjne różnią się znacznie pomiędzy sobą, stworzenie środowiska, które z tego samego kodu będzie tworzyło kod natywny dla różnych systemów operacyjnych jest bardzo trudne. Stąd narodziła się idea, aby korzystając ze standardu kart graficznych, rozdzielić obsługę grafiki od kompilacji kodu „niegraficznego”. Zdecydowano się powierzyć obsługę grafiki w tworzonej aplikacji karcie graficznej (a nie procesorowi) – tak jak ma to miejsce w przypadku gier komputerowych. Dzięki tej operacji, kompilacja kodu pod różne systemy operacyjne stała się znacznie prostsza. Rys. 3. Kompilacja projektu na różne systemy operacyjne 982 Biblioteka FireMonkey powstała z myślą o kompilacji pod różne systemy operacyjne. Grafika jest tworzona z wykorzystaniem technologii Direct2D, Direct3D, OpenGL, a komponenty niegraficzne i cały kod są kompilowane (cross-compiling) przez kompilatory dedykowane poszczególnym platformom sprzętowym. W wersji RAD Studio XE2 mamy możliwość kompilacji pod następujące systemy operacyjne: Windows 32-bitowy, Windows 64-bitowy (tylko Delphi) oraz OSX (Macintosh). W przypadku platformy FireMonkey nie zmienił się język programowania – możemy wykorzystać zarówno w Delphi, jak i C++. Co więcej, w FireMonkey znajdziemy oprócz takich samych komponentów jak w przypadku klasycznej biblioteki VCL, również wiele innych, nowych elementów. Dzięki temu, każdy programista użytkujący bibliotekę VCL powinien poradzić sobie z przeniesieniem własnych projektów na platformę FireMonkey. Istotną zmianą w stosunku do biblioteki VCL jest bogactwo graficzne platformy FireMonkey. Wykorzystując możliwości oferowane przez kartę graficzną, możemy w nieskomplikowany sposób wprowadzać animację obiektów, np. każdy obiekt posiada parametr „przeźroczystość” (od 0 do 1) oraz każdemu komponentowi możemy przypisać efekty wykorzystujące „shaders” (np. cień, rozmycie, odbicie, zwielokrotnienie, sepia itp.). Animacje i efekty są obiektami, a jako takie mają własne atrybuty i zdarzenia, są także w pełni programowalne. Cały interfejs użytkownika jest wektorowy, a przez to łatwo skalowany. Projekty mogą być budowane w standardzie High Definition (2D, wysoka jakość) lub 3D (trójwymiarowa „scena”). Przykładowy fragment kodu programu [5], pozwalającego na wyświetlenie i obrót obiektu typu powierzchniowego za pomocą platformy FireMonkey, przedstawiony jest na poniższym rysunku. Warto zauważyć że w przypadku nowej platformy wykorzystującej procesor graficzny (GPU), a nie procesor komputera(CPU) jest to „tylko” jedna linia kodu. Rys. 4. Fragment kodu programu pozwalającego na obrót obiektu przestrzennego względem osi z dla platformy FireMonkey Rys. 5. Wygląd i działanie program testującego wykorzystanie platformy FireMonkey (wizualizacja obiektu 3D) 983 3. PRZYKŁAD WYKORZYSTANIE PLATFORMY FireMonkey W PROCESIE AUTOMATYZACJI ZADAŃ GRAFIKI Automatyzacja zadań grafiki możliwa jest między innymi za pomocą wykorzystania interfejsu automatyzacji OLE. Przez pojęcie automatyzacji OLE (OLE Automation) definiuje się możliwość programowego sterowania obiektami innego programu oraz protokół, za pomocą którego dany program może uzyskać dostęp do obiektu znajdującego się w innym programie. Automatyzacja umożliwia zatem sterowanie jedną lub wieloma aplikacjami przy użyciu innych aplikacji. Aplikację sterowaną nazywa się serwerem ze względu na to, że to ona udostępnia obiekty automatyzacji OLE. Natomiast aplikację sterującą, wykorzystującą obiekty aplikacji sterowanej, nazywa się klientem [1]. Aby można było korzystać z metod i obiektów interfejsu, używając programu zewnętrznego, niezbędne jest nawiązanie połączenia z serwerem OLE programu AutoCAD 2012. Można to zrealizować za pomocą wywołania funkcji CreateOleObject, która tworzy obiekt udostępniający obiekty programu AutoCAD. Z programu zewnętrznego można uzyskać dostęp do aktualnie otwartego rysunku (otwartego dokumentu) za pomocą funkcji GetActiveOleObject, która udostępnia obiekty aktywnego programu. Uzyskanie połączenia z serwerem OLE dla programów pisanych w Delphi przedstawiono w module PolaczAutoCAD. W module tym procedura PolaczZACAD pozwala uzyskać dostęp do uruchomionego obiektu aplikacji. Zmodyfikowany kod modułu PolaczAutoCAD, który umożliwia dostęp do interfejsu automatyzacji w wersji 2012 programu AutoCAD, przedstawia się następująco [1,3,4]: Rys. 6a. Kod modułu PolaczAutoCAD 984 Rys. 6b. Kod modułu PolaczAutoCAD W powyższej procedurze definiowane są główne zmienne umożliwiające dostęp do obszaru modelu programu AutoCAD: AcadApp – jest to główny obiekt (aplikacja programu AutoCAD) AcadDoc – jest to aktywny dokument programu AutoCAD AcadDwg – jest to przestrzeń modelu aktywnego dokumentu programu AutoCAD. Przykład automatyzacji dotyczył będzie wprowadzania w obszarze modelu programu AutoCAD: – obiektów typu okrąg o losowym położeniu środka i losowym promieniu lub – obiektów typu linia o początku o współrzędnej (0,0,0) i losowym punkcie końcowym. Wygląd i działanie programu [6] testującego wykorzystanie platformy FireMonkey pokazane jest na rysunku 7, natomiast fragment kodu procedury wprowadzającej obiekty w programie AutoCAD pokazano na rysunku 8 [6]. Rys. 7. Wygląd i działanie programu testującego wykorzystanie platformy FireMonkey (wprowadzanie obiektów w przestrzeni modelu programu AutoCAD) 985 Rys. 8. Fragment kodu procedury wprowadzającej obiekty w obszarze modelu programu AutoCAD Powyższa procedura powoduje wprowadzenie w obszarze modelu obiektów typu okrąg lub linia. Procedura ta działa w następujący sposób: po pierwsze deklarowane są zmienne pomocnicze definiujące wprowadzane okręgów albo linii jako zmienne typu OLEVariant, w pętli o definiowanej długości (poprzez zmienną ILE) wprowadzane są obiekty (okręgi lub linie) w przestrzeni modelu programu AutoCAD, po zakończeniu operacji graficznych następuje pomiar czasu wprowadzania obiektów (poprzez użycie zmiennych Start i Stop), ostatnia operacja powoduje powiększenie rzutni, tak aby widoczne były wszystkie wprowadzone wcześniej obiekty. 986 4. WNIOSKI Do uzyskiwania dostępów do obiektów serwera automatyzacji (programu AutoCAD) służą interfejsy zwane interfejsami automatyzacji. Interfejs automatyzacji OLE udostępnia obiekty rysunkowe, elementy informacyjne, dokumenty, konfiguracje użytkowników i inne elementy programu AutoCAD. Wybór konkretnego interfejsu uzależniony jest od zadania, które ma inżynier czy programista rozwiązać. W referacie przedstawiono przykład wykorzystania systemów CAx w procesie automatyzacji zadań grafiki z wykorzystaniem platformy FireMonkey. W jednym projekcie nie można ze sobą łączyć dwóch różnych platform komponentowych – projekty mogą być tworzone albo za pomocą biblioteki VCL, albo FireMonkey. Ponieważ obydwie platformy używają tych samych języków programowania, projekty niezawierające komponentów graficznych czy bezpośrednich odniesień do Windows API (Application Programming Interface) mogą zostać bezpośrednio przeniesione do platformy FireMonkey. Dostawca pakietu RAD Studio XE2, firma Embarcadero, nie wspiera bezpośrednio „konwersji” projektów pomiędzy platformami zalecając stworzenie środowiska graficznego GUI (Graphical User Interface) od nowa. Aczkolwiek, użytkownik planujący migrację projektów może skorzystać z narzędzi [8], które wspierają tego rodzaju migrację i pozwalają konwertować standardowe komponenty graficzne projektów VCL na ich odpowiedniki w FireMonkey. Pojawienie się platformy FireMonkey nie wyklucza użycia platformy VCL. Wśród programistów istnieje przekonanie, że platforma VCL przestanie być rozwijana dzień po tym jak firma Microsoft przestanie sprzedawać system operacyjny Windows. Przez wiele lat użytkownicy Delphi i C++ Buildera tworzyli oprogramowanie w VCL dla systemów Windows dostarczając różnego typu rozwiązania. Przeniesienie dużych projektów na platformę FireMonkey może być bardzo kosztowne, a przez to nieopłacalne z biznesowego punktu widzenia. VCL jest i będzie cały czas dostarczany programistom w celu umożliwienia dalszego rozwoju takich aplikacji. Z drugiej strony, komponenty „niewizualne” są przecież pisane w Delphi lub C++ i ich kod w dużym stopniu pokrywa się dla obydwu platform, co redukuje koszt utrzymywania równoległych platform komponentowych. Można zatem zadać sobie pytanie: której platformy używać? Nie ma konieczności przenoszenia projektów z VCL do FireMonkey. Istniejące projekty można dalej rozwijać w VCL. Natomiast, jeżeli w projekcie istotne znaczenie ma wieloplatformowość czy wykorzystanie wyrafinowanego interfejsu użytkownika (efektowniejsza grafika) – warto zastanowić się nad migracją projektów do FireMonkey. Z samą platformą FireMonkey też warto się zapoznać i przy rozpoczynaniu nowych projektów świadomie zdecydować, która platforma będzie użyteczniejsza. LITERATURA [1] Czyżycki W., Lisowski E.: Automatyzacja zadań grafiki za pomocą Delphi, Helion, 2002. [2] Dudek M.: AutoLISP. Praktyczny kurs, Helion, 1997. [3] Warchulski J., Warchulski M.: Wykorzystanie systemów CAx do wizualizacji danych ze strzelań rakietowych, XIII Międzynarodowa Szkoła Komputerowego Wspomagania Projektowania, Wytwarzania i Eksploatacji, Jurata 11-15 maja 2009, materiały konferencyjne, s. 391-398. [4] Warchulski J., Warchulski M.: Przykłady automatyzacji zadań grafiki w programie AutoCAD, XIV Międzynarodowa Szkoła komputerowego wspomagania 987 [5] [6] [7] [8] projektowania, wytwarzania i eksploatacji, Jurata 10-14 maja 2010, materiały konferencyjne, s. 515-522. Warchulski J., Warchulski M.: Program „Test FireMonkey.exe”, Wojskowa Akademia Techniczna, Warszawa 2012. Warchulski J., Warchulski M.: Program „AutoCAD FireMonkey.exe”, Wojskowa Akademia Techniczna Warszawa, 2012. www.embarcadero.com http://www.midaconverter.com/ 988