WYKORZYSTANIE PLATFORMY FireMonkey DO AUTOMATYZACJI

advertisement
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
Download