INFORMATYKA TECHNICZNA Metody wprowadzania obiektów w programie AutoCAD za pomocą języka AutoLISP 1. WPROWADZENIE Cel ćwiczeń: zapoznanie z możliwościami wykorzystania systemów CAx w procesie automatyzacji zadań grafiki, przeanalizowanie możliwości wprowadzania obiektów z zastosowaniem języka programowania AutoLISP. 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. Tworzenie 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,3]. Wprowadzanie elementów graficznych w rysunku programu AutoCAD przy pomocy języka AutoLISP może być wykonywane na trzy sposoby [5,6]: wywołując funkcję command z argumentami będącymi odpowiednimi wywołaniami danego polecenia programu AutoCAD, wywołując funkcję entmake z argumentem w postaci listy kodów DXF wprowadzanego elementu, wywołując funkcję vla-add będącą metodą ActiveX (OLE) z odpowiednimi argumentami. 2. JĘZYK AutoLISP I ŚRODOWISKO VisualLISP AutoLISP jest specjalną odmianą języka programowania LISP (List Processing) pracującą w środowisku programu AutoCAD. Język AutoLISP pozwala na przetwarzanie zmiennych liczbowych, tekstowych i list, umożliwia obsługiwanie plików i wprowadzanie obiektów używając do tego celu interpretera graficznego programu AutoCAD. Ogromną zaletą języka AutoLISP jest możliwość tworzenia poleceń które w sposób automatyczny wprowadzają obiekty, np. na podstawie wyników z bazy danych czy danych zawartych w plikach tekstowych. Programy języka AutoLISP tworzone są w środowisku VisualLISP, które posiada własny edytor i kompilator. Rys. 1. Wybrane elementy środowiska VisualLISP
Język programowania AutoLISP i środowisko VisualLISP programu AutoCAD zostały wykorzystane do opracowania nowego polecenia które umożliwia wprowadzanie w obszarze modelu programu AutoCAD obiektów za pomocą funkcji command, entmake i vla-add [4]. Nowoopracowane polecenie it umożliwia automatyczne wprowadzenie w obszarze modelu testowych obiektów graficznych w postaci linii o zmiennej długości. Kod programu IT.LSP przedstawiony jest poniżej [4]. Rys. 2. Kod programu IT.LSP
Powyższy program działa w następujący sposób: - po pierwsze tworzone jest nowe polecenie programu AutoCAD it, które nie posiada żadnych parametrów wejściowych, - zmienna systemowa cmdecho odpowiadająca za wyświetlanie komunikatów programu AutoCAD w linii poleceń jest ustawiana na wartość równą 0 spowoduje to brak wyświetlania historii poleceń w trakcie działania programu, - pod wartość zmiennej pomocniczej STL odczytywane są bieżące ustawienia sposobu naprowadzania na punkty charakterystyczne obiektów (wartość zmiennej osmode ), - zmienna systemowa osmode ustawiana jest na wartość 16384 co spowoduje wyłączenie naprowadzania na stałe tryby lokalizacji obiektów, - funkcja (vl-load-com) pozwala na wywołanie funkcji pozwalających na programowanie obiektowe, do zmiennej globalnej _acad_ przypisywany jest dokument programu AutoCAD, natomiast do zmiennej _model_ przestrzeń modelu aktywnego rysunku, - następna część programu pozwala na wybranie metody wprowadzanych obiektów oraz inicjuje pomiar czasu wykonywania poleceń, - zdefiniowana pętla repeat pozwala na wprowadzenie obiektów typu linia za pomocą poleceń typu command, vla-add, czy entmake, - po wprowadzeniu obiektów w obszarze modelu programu AutoCAD następuje wyświetlenie czasu działania programu, - ostatnia operacja powoduje przywrócenie wartości początkowych zmiennym systemowym cmdecho i osmode. Efekt działania nowoopracowanego polecenia it przedstawia poniższy rysunek. Rys. 3. Działanie polecenia it (fragment wprowadzonych obiektów) 3. WYKORZYSTANIE FUNCJI COMMAND W środowisku bardziej doświadczonych programistów, używanie funkcji command jest traktowane jako działanie "mało profesjonalne", widziane jest jako przejaw nieznajomości języka programowania i jest zarezerwowane raczej dla początkujących użytkowników programu, głównie z następujących powodów [5,6]: używanie funkcji command nie jest właściwie programowaniem a jedynie tworzeniem trochę bardziej skomplikowanych skryptów, funkcja command ograniczona jest tylko do działań możliwych w ramach opcji polecenia które jest wywoływane,
składnia poleceń może zmieniać się w różnych wersjach programu AutoCAD, przez co zapewnienie zgodności wykonywania działań, nie jest całkowicie zapewnione, cześć poleceń wykorzystujących okna dialogowe, utrudnia, a czasem uniemożliwia zastosowanie funkcji command, wykorzystywanie funkcji command wymaga wprowadzenia dodatkowych czynności (wyłączenie trybów lokalizacji, echa linii poleceń, itp.) wywołanie funkcji command jest możliwe dla działań tylko w aktywnym obszarze. Pomimo powyżej wymienionych wad, stosowanie funkcji command usprawiedliwione jest w przypadku: gdy wykonanie działania nie jest możliwe (lub jest bardzo utrudnione) innymi sposobami, testowania programu, z założeniem zastąpienia command innym wyrażeniem w przyszłości. Wygląd linii poleceń programu AutoCAD, podczas działania polecenia it programu IT.LSP z wykorzystaniem metody wprowadzania obiektów za pomocą funkcji command, przedstawiony jest na poniższym rysunku. Rys. 4. Działanie programu wprowadzającego obiekty za pomocą funkcji command Czas wprowadzenia 1000 obiektów typu linia dla tego przypadku jest równy 0.624 [s]. 4. WYKORZYSTANIE FUNCJI ENTMAKE Jeszcze przed pojawieniem się środowiska VisualLISP, funkcja entmake była jedynym alternatywnym do funkcji command sposobem tworzenia elementów rysunku w języku AutoLISP. Przez fakt ingerowania bezpośrednio w rysunkową bazę danych, była ona znacznie szybsza od funkcji command. W skrócie działanie funkcji entmake sprowadza się do wywołania funkcji z argumentem w postaci listy par kropkowych (kodów DXF) rysowanego obiektu. Podczas wywołania funkcji entmake, część kodów DXF i wartości z nimi związanych niezdefiniowanych przez użytkownika, przyjmuje automatycznie wartości domyślne definiowane przez program AutoCAD. Funkcja entmake z założenia ignoruje stałe tryby lokalizacji i nie wyświetla w linii poleceń żadnych zgłoszeń. Wymaga za to znajomości struktury DXF rysunku i z tego powodu, używanie jej jest bardziej pracochłonne [5,6]. Dodatkowymi zaletami funkcji entmake są: możliwość tworzenia obiektów niedostępnych z poziomu funkcji command (np. bloki anonimowe),
możliwość tworzenia obiektów w innym obszarze niż aktualny (obszar modelu, obszar papieru), możliwość tworzenia obiektów w dowolnym układzie współrzędnych, możliwość tworzenia obiektów ze zdefiniowanymi cechami indywidualnymi (kolor, rodzaj linii, warstwa). Pewne ograniczenia funkcji entmake, utrudniają (a czasem uniemożliwiają) jej wykorzystanie w praktyce. Przykładem może być tworzenie skomplikowanych kreskowań, regionów, brył czy rzutni w obszaru papieru. Wygląd linii poleceń programu AutoCAD, podczas działania polecenia it programu IT.LSP z wykorzystaniem metody wprowadzania obiektów za pomocą funkcji entmake, przedstawiony jest na poniższym rysunku. Rys. 5. Działanie programu wprowadzającego obiekty za pomocą funkcji entmake Czas wprowadzenia 1000 obiektów typu linia dla tego przypadku jest równy 0.203 [s]. 5. WYKORZYSTANIE FUNCJI VLA-ADD Wraz z pojawieniem się języka VBA (Visual Basic for Application) opartego na języku programowania VB (Visual Basic), stworzony został model obiektów programu AutoCAD oraz umożliwiono dostępu do tego modelu z poziomu języka VisualLISP za pomocą funkcji vla-add. Wykorzystywanie metod służących do tworzenia obiektów rysunkowych stało się od tego momentu łatwiejsze w porównaniu z funkcją entmake oraz bardziej elastyczne niż za pomocą funkcji command. Wykorzystanie funkcji vla-add pozwala na: tworzenie obiektów w dowolnym obszarze rysunku (obszar modelu, obszar papieru, definicja bloku), tworzenie obiektów w dowolnym układzie współrzędnych, dostęp do rysunkowej bazy danych innych rysunków przez ObjectDBX, tworzenie obiektów podczas aktywności okna dialogowego (DCL). Ze względu na hierarchiczność obiektowego modelu rysunku programu AutoCAD, stosowanie metod tworzących obiekty, wymaga zrozumienia budowy tego modelu, przez co wydawać się może ono trudniejsze niż stosowanie funkcji entmake czy command [5,6]. Obiekty programu AutoCAD są zorganizowane w strukturę drzewiastą, przy czym obiektem podstawowym jest aplikacja (patrz poniższy rysunek).
Rys. 6. Fragment obiektowej struktury programu AutoCAD Obiektowy model programu AutoCAD można porównać do struktury organizacji danych na dysku komputera. Aplikacja programu AutoCAD odpowiada głównemu folderowi dysku, na niższym poziomie struktury znajdują się foldery odpowiadające dokumentom (w tym aktywnemu rysunkowi programu AutoCAD), na jeszcze niższym poziomie znajdują się podfoldery czyli obszar modelu i obszar papieru (w których zlokalizowane są graficzne obiekty rysunkowe programu AutoCAD). Wygląd linii poleceń programu AutoCAD, podczas działania polecenia it programu IT.LSP z wykorzystaniem metody wprowadzania obiektów za pomocą funkcji vla-add, przedstawiony jest na poniższym rysunku. Rys. 7. Działanie programu wprowadzającego obiekty za pomocą funkcji VLA-ADD Czas wprowadzenia 1000 obiektów typu linia dla tego przypadku jest równy 0.297 [s]. 4. WNIOSKI Podczas ćwiczenia przedstawiono metody wprowadzania obiektów w programie AutoCAD za pomocą języka AutoLISP i środowiska VisualLISP. Wybór konkretnej metody uzależniony jest od zadania który ma inżynier czy programista rozwiązać. Oczywistym jest ze początkujący użytkownik, nawet posługując się najprostszą techniką (command), napotka i tak dużo problemów z napisaniem bezbłędnie działającego
programu. Wystarczy zdać sobie sprawę że łączna ilość poleceń (wraz z ich często rozbudowanymi opcjami) oraz zmiennych systemowych, w najnowszej wersji programu AutoCAD, obejmuje ponad 3000 powiązanych ze sobą zagadnień. Bez podstawowej wiedzy na temat struktury formatu DXF oraz opanowania technik operacji na listach, nie jest możliwe efektywne wykorzystanie funkcji entmake. Podobnie rzecz ma się ze stosowaniem techniki ActiveX. Jeżeli podstawowym kryterium jest czas wykonywania programu należy wykorzystywać funkcje w następującej kolejności: entmake, vla-add a następnie command. Innym kryterium wyboru metody wprowadzania obiektów jest określenie możliwości programu. W większości (najprostszych) zastosowań, te same zadania mogą być realizowane zamiennie przez funkcje command, entmake czy metody AciveX. Jednak w szczególnych przypadkach, wykorzystuje się techniki które w ogóle mogą zrealizować zdefiniowane zadanie, mogą je wykonać najlepiej (najefektywniej, najszybciej) i jednocześnie są skonstruowane tak aby zbudować jak najmniej skomplikowany kod programu. Innymi słowy należy wykorzystywać wszystko to, co daje zakładany rezultat. LITERATURA [1] Czyżycki W., Lisowski E.: Automatyzacja zadań grafiki za pomocą Delphi. Helion 2002. [2] Dudek M.: AutoLISP. Praktyczny kurs. Helion 1997. [3] Jacek Warchulski, Marcin Warchulski, Przykłady automatyzacji zadań grafiki w programie AutoCAD, XIV Międzynarodowa Szkoła Komputerowego Wspomagania Projektowania, Wytwarzania i Eksploatacji, Jurata 10-14 maja 2010, Materiały konferencyjne, s. 515-522. [4] Jacek Warchulski, Marcin Warchulski, Program IT.LSP, Wojskowa Akademia Techniczna, Warszawa, 2012. [5] http://forum.cad.pl/autocad.html [6] http://www.kojacek.republika.pl