Archiwa kategorii: Programowanie dla inżyniera

Każdy inżynier powinien znać podstawy programowania.

Jak zrobić własną nakładkę na CAD’a ? Część 2

W tym wpisie postaram się przedstawić, jak przygotować się do pisania kodu prostej nakładki działającej w środowisku CAD. Zakładam, że czytelnikowi znane są podstawy programowania w C# i posiada zainstalowane środowisko Visual Studio. Przed rozpoczęciem kodowania musimy ściągnąć ze strony  autodesku (lub innej odpowiedniej dla naszego programu CAD) API umożliwiające dostęp do środowiska programowania. Dla autocada będzie to ObjectARX SDK, w którym znajdziemy wiele przykładów oraz dokładną dokumentację w tym również dla .NET. Warto korzystać z tej skarbnicy informacji, nawet jak planujemy pisać kod dla innego nieautodeskowego środowiska.

Rozpoczynamy nowy projekt wybierając typ Class Library oraz target Framework .NET 4.5. Do naszego projektu musimy podlinkować biblioteki z potrzebnym API, które znajdziemy w katalogu SDK (np. ..\ObjectARX 2017\inc) lub bezpośrednio w miejscu, gdzie mamy zainstalowany nasz program CAD.

Dla projektu w wersji dla AutoCada będziemy potrzebowali następujące assembly:

  • accoremgd.dll  czyli implementację AutoCAD Core Engine .NET Managed Wrapper
  • Acdbmgd.dll –  ObjectDBX .NET Managed Wrapper
  • Acmgd(acmgd.dll) – AutoCAD .NET Managed Wrapper
  • AcWindows (AcWindows.dll) – AutoCAD Windows Library.

Gdy uruchamiamy naszą nakładkę w ZWCAD będą to następujące pliki:

  • ZwDatabaseMgd  (ZwDatabaseMgd.dll) czyli implementacja ZRX .NET Managed Wrapper
  • ZwManaged (ZwManaged.dll)
  • ZWCAD (Interop.ZWCAD.dll)

W przypadku niektórych projektów potrzebne mogą być również inne assembly.

Jeśli macie taką możliwość, warto rozpocząć pisanie programu w wersji dla autocada, aby następnie później próbować go uruchomić w wersji dla innego programu. Należy dokonywać testów dla różnych platform po implementacji kluczowych funkcji, żeby upewnić się, czy dobrze one działają również w nie autodeskowym środowisku. W 95% przypadków kod będziemy mogli bez przeszkód przenieść, ale zdarzają się sytuacje braku implementacji w .NET części API. Pozostaje wtedy „ratowanie się” LISP’em, o czym napiszę w dalszych częściach.

Nasz „uniwersalny kod” powinien więc zaczynać się następująco:

#if ACAD //wersja dla AutoCada

using MgdAcApplication = Autodesk.AutoCAD.ApplicationServices.Application;
using MgdAcException = Autodesk.AutoCAD.Runtime.Exception;
using MgdAcDocument = Autodesk.AutoCAD.ApplicationServices.Document;
using MgdAcDocumentCollection = Autodesk.AutoCAD.ApplicationServices.DocumentCollection;
using MgAcAppServices = Autodesk.AutoCAD.ApplicationServices;
using MgdAcWindows = Autodesk.AutoCAD.Windows;

#endif

#if ZWCAD //Wersja dla ZwCada

using MgdAcApplication = ZwSoft.ZwCAD.ApplicationServices.Application;
using MgdAcDocument = ZwSoft.ZwCAD.ApplicationServices.Document;
using MgdAcException = ZwSoft.ZwCAD.Runtime.Exception;
using MgdAcWindows = ZwSoft.ZwCAD.Windows;

using MgdAcColors = ZwSoft.ZwCAD.Colors;
using MgdAcDocumentCollection = ZwSoft.ZwCAD.ApplicationServices.DocumentCollection;
using MgAcAppServices = ZwSoft.ZwCAD.ApplicationServices;

#endif

#if BCAD //wersja dla BricsCada

using MgdAcApplication =  Bricscad.ApplicationServices.Application;
using MgdAcDocument =  Bricscad.ApplicationServices.Document;
using MgdAcException =  Bricscad.Runtime.Exception;
using MgdAcWindows =  Bricscad.Windows;

#endif

W kolejnej części cyklu napiszemy nasz pierwszy program usprawniający rysowanie konstrukcji żelbetowych.

 

Jak zrobić własną nakładkę na CAD’a ? Część 1

Wstęp.

O użyteczności dla projektanta programu typu CAD decyduje dostępność i możliwość zainstalowania nakładek. Na „czystym” cadzie praca jest oczywiście możliwa, jednak jest ona bardzo nieefektywna. Na rynku występuje wiele nakładek (dyskusja na ich temat na forum) o mniej lub bardziej zaawansowanych funkcjonalnościach. Najprostsze z nich oferują wsparcie w rysowaniu konstrukcji żelbetowych i stalowych w 2D. Ceny ich niejednokrotnie przekraczają kwotę za jaką możemy nabyć tani „klon” autocada. Czy jest zatem sens samemu pisać podobny program? Jeśli dostępne narzędzia w 100% nas zadowalają, to oczywiście nie. Ale ponieważ możliwości prostych nakładek zdecydowanie mi nie wystarczały, a, jak wiecie, lubię ułatwiać sobie ( i innym) pracę, postanowiłem napisać własną nakładkę.

Czego zatem potrzebujemy, żeby rozpocząć pracę? Najpierw musimy zdecydować się na język programowania. Do dyspozycji mamy oczywiście autolispa z DCL – ten bardzo popularny wśród nakładek język, będący klonem lispa, jest niestety dość archaiczny, a jego składnia mało czytelna.  Kolejny język to Visual Basic lub VBA, które od razu odrzuciłem. Na szczęście możemy również wybrać moją ulubioną platformę .Net i C#. O słuszności  wyboru tego ostatniego jako podstawowego języka naszej nakładki przekonałem się niejednokrotnie, o czym napiszę później.

Skoro już wiemy w jakim języku będzie nasz program nasuwa się pytanie, czy w każdym systemie CAD będziemy mogli go uruchomić i czy dla różnych programów CAD potrzebne są inne wersje naszej nakładki? Podstawowy program to oczywiście pełny Autocad (w wersji LT NIE MA możliwości uruchomienia zewnętrznych programów). U mnie w biurze używamy ZwCada, stąd program musiał również uruchamiać się w tym środowisku CAD. I tu miła wiadomość. Uda nam się pracować na jednej wersji kodu dla wielu platform. Program musimy jednak kompilować osobno dla każdego obsługiwanego środowiska CAD, dołączając za każdym razem inne biblioteki  (plików tych NIE kopiujemy do katalogu naszej nakładki). Z reguły nie znajdziemy opisu do API danego CADa i musimy posługiwać się potężną bazą wiedzy Autodesku oraz licznymi przykładami na wielu blogach i forach.

Programowanie dla inżynierów – wstęp

Naukę programowania najlepiej zacząć od „Wprowadzenia do algorytmów” Cormena. W przedmowie  tej 1300 stronicowej monografii czytamy ” Przedstawiliśmy w niej dogłębną analizę wielu algorytmów, przy czym staraliśmy się zrobić to w sposób zrozumiały dla każdego…” A dalej „Algorytmy są opisane w języku naturalnym oraz w pseudokodzie, który jest zrozumiały dla każdego, kto ma choć odrobinę praktyki programistycznej”.

Czy programowanie jest naprawdę „dla każdego”? Wszyscy inżynierowie spotkali się z nim podczas swojej edukacji, a ten krótki kontakt albo odstraszył ich od studiowania zagadnień informatyki, albo zachęcił. Moim zdaniem promowanie kodowania „dla każdego” nie jest dobrym pomysłem. Już widzę te powstałe „genialne” produkcje, będące wykonaniem któregoś z tutoriali, tylko w nieco inny sposób przez tak zwanych „google-programistów” umiejących przerobić kawałki kodu znalezione w sieci.

Jeżeli jednak odkryjemy w sobie chęć wzięcia programowania na poważnie i kiedy dodamy do tego radość płynącą z aplikacji, która działa dokładnie tak, jak sobie zaplanowaliśmy, trudno porównać to do czegokolwiek innego. Pamiętajmy, że siłą inżyniera jest jego wiedza i doświadczenie.