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.

Wymiarowanie stropu nad garażem budynku wielokondygnacyjnego wspierane REX Robotools 2016

Większość obecnie projektowanych budynków mieszkalnych posiada garaż w kondygnacjach podziemnych. Z reguły poziomy te są w układzie płytowo-słupowym o siatce dostosowanej do układu miejsc parkingowych. Następnie mamy poziom parteru – często przeznaczony na usługi, który jest projektowany w układzie mieszanym, gdzie ściany nośne nie pokrywają się z siatką słupów garażu. Kolejne wyższe kondygnacje mieszkalne często wykonywane są jako murowane z trzonami żelbetowymi.Model budynku mieszkalnego „Tradycyjne” obliczenia takiej konstrukcji polegające na zbieraniu obciążeń „piętrami” i przykładaniu ich do belek i stropów niższej kondygnacji są bardzo pracochłonne, ale umożliwiają odwzorowanie przewidywanego spływu sił na poszczególne elementy konstrukcyjne. Mają również zaletę w postaci możliwości łatwego sprawdzenia i prześledzenia toku obliczeń przez innego konstruktora weryfikatora. Co jednak zrobić gdy chcemy używać przestrzennych modeli budynków mieszkalnych utworzonych w takich programach BIM jak Revit ? Czytaj dalej

Modelowanie świetlika dachu Centrum Handlowego wspierane REX Robotools

W naszym biurze często projektujemy budynki o skomplikowanej geometrii. Przykładem takiego obiektu jest prezentowane Centrum Handlowe Model konstrukcji zrobiłem w programie Revit. Konstrukcja została podzielona na 12 oddylatowanych części, które następnie zostały przesłane do robota. W między czasie zmieniły się założenia dotyczące wielkości obiektu, geometria dachu itd. Dość na tym, że zmiany zdecydowałem się wprowadzić w modelu robota.

Model Centrum Handlowego

Model Centrum Handlowego

Postaram się opisać jak przy pomocy REX RoboTools można łatwo zamodelować trudną geometrie dachu świetlika. Czytaj dalej

REX Robotools przegląd podstawowych komend część 1

Po dłuższej nieobecności postanowiłem zamieścić przykłady działania REX Robotools. Wpis ma związek z Autodesk University, które miało miejsce w Las Vegas w dniach 2-5 XII 2013, a prezentowane zrzuty zostały przygotowane dla Pana Rafała  z Autodesku prezentującego na tym forum przykłady aplikacji klienckich. Dlatego tym razem opisy na zrzutach są w języku angielskim :). Czytaj dalej

Stabilizacja – jak szybko przyłożyć siły stabilizacyjne do modelu konstrukcji w robocie


Przykładanie sił stabilizacyjnych do modelu konstrukcji jest zadaniem bardzo pracochłonnym. Wielokrotnie straciłem kilka godzin na żmudne odczytywanie wartości sił osiowych w słupach, obliczanie wartości sił poziomych, a następnie obciążanie konstrukcji. Pomysł usprawnienia tej powtarzalnej czynności zachęcił mnie do napisania programu automatyzującego ten proces. Jako dane wejściowe potrzebujemy selekcji elementów do których przykładamy stabilizację, numeru przypadku obciążeń z którego odczytujemy siły oraz współczynnika przez który są one przemnażane.

stabilizacja

Dzięki programowi REX Robotools w ciągu kilku sekund możemy utworzyć nowe przypadki obciążeniowe zawierające siły stabilizacyjne odpowiednio dla kierunku X i Y. Siły te możemy wykorzystać w kombinacjach obliczeniowych służących np. do wymiarowania słupów.

 

Robot – podział paneli przy użyciu REX RoboTools.

Modelując konstrukcję w Robocie nie powinniśmy stosować zbyt dużych paneli. Nie jest dobrym rozwiązaniem używanie jednego panela na płytę stropową całej kondygnacji. Powodów jest wiele, począwszy od kłopotów z siatkowaniem, trudniejszego zadawania obciążeń, a skończywszy na trudnościach z wymiarowaniem żelbetu – w szczególności z liczeniem ugięć. Co jednak zrobić gdy mamy już zamodelowaną konstrukcję, przyłożone obciążenia i zmiany geometrii byłyby pracochłonne?  Najłatwiej posłużyć się REX RoboTools moduł:  Podział paneli. Dowolną ilość paneli(nawet całą konstrukcję) możemy podzielić w zadanym kierunku i miejscu. Dodatkowo mamy możliwość wprowadzenia dylatacji. Często korzystam z tego modułu poprawiając „po Revitowe” modele. Program tworzy zupełnie nowe panele a obciążenia przyłożone do elementów są kopiowane na nowo utworzone obiekty. Uwaga: zwolnienia liniowe i warunki brzegowe nie są uwzględniane w wersji REX RoboTools 2014.

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.

 

 

Horror analityczny, czyli co można zrobić z modelem w Revicie od architektów.

Najlepiej nic nie robić, tylko stworzyć własny model? Ale zacznijmy od początku. Dostałem model budynku zrobiony przez architektów w Revicie. Mam 2 tygodnie czasu na wydanie pierwszych rysunków fundamentów na budowę. Projekt budowlany – 0 obliczeń. Jest przynajmniej zestawienie obciążeń. Przyłożyć do modelu i możemy wymiarować fundamenty. Zmieniam dziedzinę na koordynacje, ustawiam parametry ścian i stropów- konstrukcja, odblokowuje model analityczny i transfer do robota. To, co zobaczyłem nie napawa mnie optymizmem. Model BubudynkuTEGO nie da się wykorzystać. Poprawiać model analityczny wszystkich elementów w Revicie ? Miałoby to sens tylko jeśli projekt byłby na innym wcześniejszym etapie. Dobra – 6 kondygnacji, coś tam się powtarza… Jestem szybki – w  dwa dni zrobię model w robocie od początku. No tak, ale nie oto w tym chodzi. Mam przecież REX RoboTools. Moduł Dopasuj. REX_Robotools_dopasujTryb dopasowania – do poziomów. Najpierw zaznaczam wszystkie stropy. Pobieram elementy bazowe. Następnie zaznaczam wszystkie ściany. Pobieram elementy do dopasowania. Jeszcze tylko ustawienia max tolerancji – 0.5 m. Klikamy dopasuj element i … gotowe. Wszystkie ściany zostały dociągnięte do odpowiednich poziomów stropów. Następnie wybieram ściany leżące na jednej kondygnacji – teraz ściany są elementami bazowymi. Element do dopasowania to strop. Tryb dopasowania – do segmentów. Czynność powtarzam dla każdej kondygnacji. Jeszcze wygenerujemy w RoboTools schody. Przecież te z Revita nie mają modelu analitycznego. Rzut oka na model. Jeszcze poprawka otworów na drzwi. Zaznaczam kontur i panel. REX RoboTools moduł Drzwi i mamy wycięcie w ścianie w miejscu otworu. Strop nad garażem płytowo-słupowy. Zaznaczam węzły w słupach i generuje używając RoboTools grzybki oraz pogrubienia w miejscu słupów w płycie fundamentowej i stropowej. Pora na obciążenia. Przykładam kolejno obciążenia do jednej płyty stropowej a następnie kopiuje automatycznie wszystkie przypadki obciążenia na kondygnacje powtarzalne używają modułu Kopiowanie obciążeń RoboTools. W sumie 15 minut i mamy gotowy model. Happy end?

Płyta fundamentowa zwymiarowana. Teraz łączniki do słupów. Zaraz – dlaczego siły osiowe w słupach są takie małe. I tu zaczyna się horror. Sprawdzam przyłożone obciążenia. Ciężar własny- jedno z podstawowych obciążeń w konstrukcjach żelbetowych i jedyne które ustawiłem jako przechodzące automatycznie  z Revita. Siły osiowe w słupach od tego przypadku są b. małe. Sprawdzam materiał jaki był ustawiony w modelu Revita zrobionym przez architektów – żelbet – CW= 0,08 kN/m3. Wszystko jasne. A co by było gdybym tego błędu nie wyłapał… No cóż najlepiej wysłać obliczenia w chmurę, ale to już temat na następny wpis.

Podstawowe narzędzie pracy – REVIT.

Nie mogę powiedzieć że wybrałem Revita spośród innych systemów BIM. Po prostu dostałem ten program jako crossgrade z autocada. Tak zaczęła się moja współpraca, która trwa już kilka lat temu. Skoro już go miałem to wypadało spróbować w nim pracować. W tej chwili Revit jest dla mnie podstawowym narzędziem pracy. Wiem, że umiem wykorzystać tylko część jego możliwości, ale jest to wystarczające do zadań które wykonuję. Najważniejsze dla mnie jest to, że mam zsynchronizowane deskowania z modelem obliczeniowym konstrukcji. Jeśli architekt jak zwykle wprowadzi duże zmiany do projektu na tydzień przed jego oddaniem mam możliwość szybkiego zaktualizowania konstrukcji, wygenerowania modelu i opracowania wyników.