Categories
Ogólne

Plugins at the drawing side of Tekla

Drawing plugins are the great way for adding a lot of drawing primitives in a bunch. You can insert them in an automatic way with GH-Tekla Drawing link:

Categories
Ogólne

Drawing UDAs

With the help of Grasshopper-Tekla Drawing Link you can set or get drawing objects UDAs.

Categories
Ogólne

Coloring of drawing parts

New set of components needed for coloring of Tekla drawing parts from the Grasshopper.

Categories
Ogólne

Development of Grasshopper components

Longer video related to the development process of Grasshopper components.

Categories
Ogólne

Possibilites of GH Tekla Drawing Link

It is time to show some quick examples of the current Drawing Link possibilities. Mainly view creation and arrangement. Macro component can be used also in the model side, so check it out and download sample file from the GitHub:

https://github.com/LetsConstructIT/Grasshopper-TeklaDrawingLink/tree/main/samples

Categories
Ogólne

Installation of GH Tekla Drawing Link

Wow – I’ve gathered a lot of feedback related to Drawing link. Thanks for all of your input – we have to work together!
If you are still wondering how to install Grasshopper-Tekla Drawing link, new video is just for you.
But if you are more advanced user of official Live Link, then I have also something interesting – a workaround to quickly switch between different Tekla versions. It is a part of extended video, available on YouTube:

Categories
Ogólne

Beginning of the Grasshopper-Tekla Drawing Link

One year after starting of my blog I decided to … try one more time 🙂 Now, with the clear goal, to fill the gap between Grasshopper and Tekla drawing area. A lot of work ahead, so I need your help!

Please, look and try this repo:
https://github.com/LetsConstructIT/Grasshopper-TeklaDrawingLink

Categories
Ogólne

Visual Studio – instalacja

Wpis [part not set] z 8 w serii C# - podstawy

Zaprezentowany w poprzednim poście Fiddle jest bardzo szybkim sposobem na przedstawienie innym własnej koncepcji. Niestety, raczej małej koncepcji. Do wydajnej pracy nad dużym projektem potrzebujemy narzędzia odpowiedniej klasy, czegoś co umożliwi nam sprawne poruszanie się po wielu plikach źródłowych, co będzie w interaktywny sposób wspierać naszą pracę.

Wyobraź sobie, że szef w nagrodę zrzucił na Ciebie wykonanie dokumentacji warsztatowej dla obiektu złożonego z więcej niż 1000 elementów wysyłkowych. Masz ten komfort, że możesz wybrać: wolisz pracować na tysiącu niepowiązanych plikach .dwg czy skorzystać z jednego modelu zawierającego wszystkie elementy? Jeżeli jeszcze się zastanawiasz to dorzucam w gratisie automatyczne sprawdzanie kolizji pomiędzy elementami 😉

W programowaniu nasze BIM’owe rozwiązania są standardem od … bo ja wiem, 30 lat? W przypadku C# najpowszechniej używanym IDE, czyli kombajnem do programowania jest Microsoft Visual Studio, które zainstalujemy w najnowszej wersji sygnowanej rokiem 2022.

Przejdź na stronę Microsoftu i wybierz Pobierz Visual Studio, pod przyciskiem pojawi się lista wyboru. Do naszych zastosowań odpowiednia będzie wersja Community 2022.

Po chwili pobrany zostanie wstępny instalator programu, uruchom go, zaakceptuj wstępne warunki i poczekaj na pobranie brakujących plików.

Visual Studio jest wszechstronnym narzędziem, wykorzystywanym do wielu celów. Tego typu programy, które umożliwiają sprawne tworzenie kodu, jego kompilowanie i testowanie noszą nazwę IDE, czyli integrated development environment. W naszym wypadku wystarczy, że zainstalujemy zestaw .NET desktop development, który zawiera pakiety niezbędne do tworzenia programów działających stacjonarnie w C#. Jeżeli w przyszłości będziesz chciał rozwinąć skrzydła – bez obaw, w dowolnym momencie możesz wrócic do tego ekranu modyfikując instalację i wybrać brakujące składniki.

Po wybraniu zestawu i upewnieniu się, że w docelowej lokalizacji na dysku twardym masz wystarczająco miejsca wybierz Install i poczekaj na koniec procesu – chwilę to potrwa.

Ok, proces instalacji dobiegł końca, masz Visual Studio na komputerze. Widzisz teraz przed sobą okno zachęcające do zalogowania/zarejestrowania:

Jeżeli posiadasz już Microsoftowe konto to zachęcam do zalogowania się przy jego pomocy. Jeżeli jeszcze go nie posiadasz to … zarejestruj się. Dlaczego? Dostaniesz Visual Studio Community dożywotnio a nie na 30-dniowy okres testowy. Hmm, tylko czy aby nie ma tu jakiegoś haczyka?

Microsoft robi dużo żeby zachęcić ludzi do wejścia w świat programowania. To postępowanie wynika oczywiście z pobudek komercyjnych – z biegiem czasu zobaczysz jak szeroką paletę płatnych usług/narzędzi ma w swojej ofercie gigant z Redmond. Tę strategię porównałbym do dobrze nam znanego Autodesku, który oferuje darmowe wersje swoich programów na czas studiów. Przywiązuje w ten sposób przyszłych pracowników do swoich rozwiązań, kształtując niejako skillset kolejnych pokoleń inżynierów, którzy zawsze chętnie wrócą do tego co im znane, no może w sytuacji obowiązkowych subskrypcji zwrócą się w stronę chińskich klonów, ale to temat na inny wpis.

I tu dochodzimy do ograniczeń darmowych wersji dużych programów. W przypadku Autodesku są to zazwyczaj znaki wodne na wydrukach + monitorowanie użycia ich edukacyjnych wersji w środowiskach biznesowych. Microsoft nie jest tu wyjątkiem, wersja Community ma swoje ograniczenia, o których warto wiedzieć:

  • zawsze możesz przy jej pomocy brać udział w projektach open source (takich jak zbliżające się biblioteki LetsConstructIT)
  • możesz jako indywidualny programista tworzyć własne aplikacje, równiez komercyjne
  • jeżeli Twoja firma posiada mniej niż 250 komputerów oraz jej przychód nie przekracza 1 mln USD to możesz tworzyć przy jej pomocy aplikacje komercyjne
  • jeżeli pracujesz w większej firmie to stać ją na zakup wersji Professional za 2 tys złotych

Tak w skrócie wygląda polityka Microsoftu. Ograniczenia licencyjne wersji Community mogą wykluczyć ją z zastosowań w większych firmach, których dział finansów niechętnie patrzy na inwestycje w rozwój. Teoretycznym rozwiązaniem jest skorzystanie wtedy z mniejszego brata Visual Studio, czyli programu Visual Studio Code, który jest zawsze darmowy, a umożliwia prawie to samo co zwykły VS. Niestety prawie robi różnicę :/ Z perspektywy inżyniero-programisty największą bolączką będzie brak edytorów wizualnych do tworzenia okien dialogowych z wykorzystaniem WinForms / WPF oraz problemy z debugowaniem aplikacji wykorzystujących .NET Framework.

Ciąg dalszy historii będę prowadził w oparciu o Visual Studio. Wierzę, że korzyści które niedługo dostrzeżesz będą wystarczające aby przekonać Twoich zwierzchników, że warto (o ile jest taka potrzeba) zainwestować w środowisko programistyczne.

Categories
Ogólne

C# – przedsionek

Wpis [part not set] z 8 w serii C# - podstawy

Jesteś wciąż ze mną? Udało mi się wzbudzić Twoją ciekawość? Ok, to lecimy dalej 🙂

Chcę żebyś pokonał pierwsze demony, pierwsze wewnętrzne blokady, które szepczą Ci: “nie nadaję się”, “ja? programista? lol!”, “dobra, dobra, piątkowa wysyłka sama się nie zrobi”.

W tym celu napiszemy Twój pierwszy program … w przeglądarce. Skorzystamy z darmowego kompilatora online .NET Fiddle.

Chcemy napisać program, który będzie obliczał moment bezwładności prostokąta. Podstawy wytrzymałości materiałów, czyli (b*h^3)/12.

Przejdź do Fiddle i zastąp domyślną zawartość edytora poniższym kodem:

using System;
                    
public class Program
{
    public static void Main()
    {
        double b = 30;
        double h = 60;
        
        double momentOfInertia = (b*Math.Pow(h,3))/12;
        
        string message = string.Format("Moment bezwładności wynosi {0:N2}", momentOfInertia);
        Console.WriteLine(message);
    }
}

Po wybraniu przycisku Run zobaczysz w dolnej części rezultat działania naszego programu, czyli komunikat o wartości obliczonego momentu bezwładności prostokąta.

“Eee, takie rzeczy to ja mogę na moim Casio zrobić w trzy sekundy, co Ty w ogóle pokazujesz?”

Przyznaję, powyższy kod nie należy do skomplikowanych, ale stanowi bazę historii, którą planuje opowiedzieć w trakcie kolejnych postów, więc proszę – bądź wyrozumiały 🙂

C# jest językiem silnie typowanym, co możemy zaobserować w linijkach 7, 8. Zmienne, które tworzymy muszą posiadać określony typ, czyli rodzaj danych, która będzie się kryła pod daną nazwą. W powyższym przypadku zdecydowałem się na wykorzystanie typu double, który służy od deklaracji liczb zmiennoprzecinkowych.

Dobór nazw zmiennych jest wyborem programisty, to on ma być w stanie zrozumieć co dzieje się w danym miejscu kodu po dłuższej przerwie. Dlatego użyłem nazw b oraz h – są one czytelne dla inżynierów znających rozpatrywany problem. Gdybym zdecydował się na nazwy zmienna1 oraz zmienna2 to po tygodniu nie miałbym pojęcia z czym kojarzyć te pojęcia.

Zwróć uwagę na linijkę 10 i zapis momentOfInertia. Zapisanie frazy w sposób ciągły, zaczynając od małej litery a następnie stosując wielką literę dla kolejnych słów to przykład notacji ‘camelCase’, która jest podstawą w C# oraz Javie. Będziemy jej używać do nazywania zmiennych o charakterze lokalnym, które żyją wyłącznie w ramach danej metody.

Hej, czy ja powiedziałem ‘metody’? Co to ta ‘metoda’?

O metodach pomyśl jak o funkcjach, czyli zamkniętych zbiorach procedur, które coś robią. Słowo coś jest tutaj idealne – metoda może, ale nie musi zwracać wartości. Spójrz na linijkę 5’tą. Widzisz tam zbiór nic nie mówiących słów: public static void Main(), które powinieneś zinterpretować jako:

  • public – ta metoda jest jawna, publiczna, widoczna dla innych aplikacji,
  • static – metoda jest statyczna, można jej użyć ‘z palca’, bez nadmiernej pracy przy tworzeniu obiektów (o nich w kolejnym poście),
  • void – metoda zwraca czarną otchłań, w której pogrążył się (tymczasowo) Gandalf; ta metoda tylko ‘coś’ robi, nie zwraca żadnej wartości,
  • Main() – metoda nazywa się Main

Zastanawiasz się pewnie teraz jak stworzyć metodę, która zwróci wartość. Właśnie taki jest mój plan, o spójrz na ten listing:

using System;
                    
public class Program
{
    public static void Main()
    {
		double momentOfInertia = GetMomentOfInertia();
        
        string message = string.Format("Moment bezwładności wynosi {0:N2}", momentOfInertia);
        Console.WriteLine(message);
    }
	
	public static double GetMomentOfInertia()
	{
        double b = 30;
        double h = 60;
        
        double momentOfInertia = (b*Math.Pow(h,3))/12;
		
		return momentOfInertia;
	}
}

Przeorganizowałem nasz program wydzielając z niego nową metodą – GetMomentOfInertia(). Ta metoda zwraca liczbę zmiennoprzecinkową typu double, co jest zdefiniowane w dwóch miejscach:

  • deklaracja metody składa się z public static double GetMomentOfInertia() i to właśnie pogrubiona cześć mówi kompilatorowi czego należy się spodziewać po tej metodzie,
  • w linii 20 użyłem słowa return kończąc działanie metody zwrotem wyznaczonej wartości.

Patrzę na ten przykład i dochodzę do wniosku, że fajnie, fajnie, mamy program, który za każdym razem zwraca tę samą wartość. Spójrz na linijki 15 i 16 – znajduje się ‘sztywne’ przypisanie wartości do zmiennych b i h. Przyznaję, mało użyteczny sposób.

Gdy pomyślisz o metodach jak o funkcjach matematycznych to szybciej zrozumiesz koncept argumentów metod, czyli wartości wejściowych, które ustawiają początkowe warunki dla wykonywanego kodu. Dobrze by było, gdyby metoda GetMomentOfInertia była gotowa przyjąć dwa argumenty opisujące nasz problem. Tylko jak to zrobić?

using System;
                    
public class Program
{
    public static void Main()
    {
		double momentOfInertia1 = GetMomentOfInertia(30, 60);
		double momentOfInertia2 = GetMomentOfInertia(20, 50);
        
        string message1 = string.Format("Moment bezwładności 1 wynosi {0:N2}", momentOfInertia1);
        Console.WriteLine(message1);
        string message2 = string.Format("Moment bezwładności 2 wynosi {0:N2}", momentOfInertia2);
        Console.WriteLine(message2);
    }
	
	public static double GetMomentOfInertia(double b, double h)
	{
        double momentOfInertia = (b*Math.Pow(h,3))/12;
		
		return momentOfInertia;
	}
}

Analizę tego przykładu zacznij od linijki 16’tej – w deklaracji metody, wewnątrz nawiasów pojawiła się informacja o oczekiwanych argumentach, czyli: (double b, double h). Dzięki zmianie sztywnych wartości z wnętrza metody na rzecz jej argumentów możemy zacząć wykorzystywać ją wielokrotnie, dla róznych wartości początkowych. Dlatego zawartość naszej początkowej metody Main() została wzbogacona o wyznaczenie wartości drugiego momentu bezwładności.

—————

I teraz proszę, odpowiedz sobie na pytanie, czy powyższe wywody przekraczają zdolności poznawcze inżyniera budownictwa po 5-letnich studiach w trakcie których poznawał tensory, całki potrójne, kombinatorykę wg eurokodów, półkę plastyczną, itd. No właśnie, dlatego proszę Cię, jeśli dalej myślisz ‘programowanie jest dla mnie za trudne’ to spójrz na swoją drogę, na to ile już potrafisz, co przeszedłeś. Ja nie mam wątpliwości, że ‘ogarniesz’ 😉

Jeżeli czujesz niedosyt – to wspaniale, dopiero się rozkręcamy!

Categories
Ogólne

Języki programowania

Wpis [part not set] z 4 w serii Motywacja

Java, C++, C#, Visual Basic, Python, JavaScript, … – dlaczego tego tyle jest?

Heh, a dlaczego ludzie porozumiewają się w 7 tysiącach języków? 🙂

Informatyka to stosunkowo młoda dziedzina, która stale ewoluuje. Wraz z ciągłym rozwojem okazuje się, że rozwiązania z poprzednich lat nie zdają egzaminu zwiększonego popytu na usługi, stale rosnącej grupy użytkowników komputerów/sieci. W odpowiedzi na nowe potrzeby powstają nowe języki programowania lub istnieje konieczność znacznej modyfikacji już istniejącego języka, która wyklucza wsteczną kompatybilność z poprzednią wersją.

Wyobraź sobie, że jako administrator NASA planujesz program Apollo. Wiesz, że potrzebujesz zestawu narzędzi wspomagających obliczenia trajektorii lotu, że lot na księżyc powinien w maksymalnym stopniu polegać na przetestowanych procedurach. Zastanawiasz się w jakim języku zlecić stworzenie odpowiednich programów. W tym czasie jedynym sensownym rozwiązaniem jest Assembler – skomplikowany, niskopoziomowy język programowania. Wydajesz więc miliony $$ amerykańskich podatników na rozwój oprogramowania w tym języku.

Gdy opada kurz wzbity przez lądownik księzycowy wśród programistów rośnie na popularności COBOL, oferujący wyższą efektywność pracy, będący mniej siermiężny niż Assembler. Świetnie, tylko, że ogromne fundusze zostały władowane w rozwiązanie napisane w Assemblerze i teraz co, przepisujemy program Apollo na nowy język?

Albo inny przykład z naszego poletka. Efektywność energetyczna starych kamienic w centrach miast pozostawia wiele do życzenia. Spełnienie przez nie aktualnie wymaganych współczynników przenikania ciepła jest często niemożliwe. Czyli co? Burzymy i w to miejsce stawiamy obiekt z trójwarstwowymi ścianami? Czy może bardziej delikatnie: obklejamy dawną cegłę styropianem, metoda lekka-mokra i malujemy na pstrokate kolory tak powszechne na naszych osiedlach? Nie zawsze to co nowsze jest na tyle dobre, aby wymazać gumką poprzednie rozwiązania, zwłaszcza jeżeli poniesiono już ogromne nakłady kapitału.

Co roku pojawiają się kolejne języki programowania, które odpowiadają na specyficzne potrzeby grupy programistów. Jednocześnie niezbędne jest utrzymywanie i rozwijanie już napisanych programów – Ty jako użytkownik oczekujesz ciągłego rozwoju narzędzi z których korzystasz. Dlatego pojawianie się nowego języka nie usuwa z użycia poprzednich rozwiązań – ani programiści nie zmienią swojej specjalizacji na pstryknięcie palcami ani kod magicznie nie zostanie przetłumaczony na nowy język. Nie wspominając o testach skomplikowanych systemów.

Popularność języków programowania

Jeżeli ciekawi Cię, który język programowania jest najpowszechniej wykorzystywany to możesz odwiedzić stronę firmy TIOBE, która co miesiąc tworzy zestawienie języków ze względu na powszechność użycia. W chwili pisania tego posta TOP 3 to: Python / C / Java

Powyższy ranking nie do końca odpowiada na pytanie, które technologie są obecnie najbardziej poszukiwane na rynku pracy. W celu próby uzyskania odpowiedzi na takie pytanie polecam skorzystać z wyszukiwarki ofert pracy na portalu NoFluffJobs. Po wykonaniu paru kliknięć otrzymasz wyniki:

  • JavaScript – 677 ofert pracy
  • Java – 635
  • Python – 471
  • .NET (C#) – 292

Czyli co, uczymy się Javy* bo w sumie to 1300 ofert pracy? 😉

Porównywanie liczby aplikacji napisanych w C do obecnego popytu na programistów JavaScript porównałbym do liczby budynków w tradycyjnej technologii murowanej a zapotrzebownaia na konstrukcje szkieletowe. Wierzę, że teraz czujesz, że wybór języka, którego chcesz się nauczyć warto rozłożyć na czynniki pierwsze.

Języki programowania w budownictwie

Jestem zwolennikiem stopniowego zdobywania nowych umiejętności, najlepiej w ramach 8 godzin pracy. To założenie stanowi podstawowe założenie całego Let’s construct IT i rzutuje na wybór C# jako naszego głównego języka.

Dlaczego, zapytasz. Rozważmy dwa scenariusze dla początkującego, który pracuje w biurze projektowym, często łapie nadgodziny a po powrocie do domu czeka na niego dziecięce pandemonium:

  • ‘kurczę, ta JavaScript jest wszędzie, znajomy w to wszedł, bootcampy kuszą już za ~10k PLN, ofert pracy bez liku, wchodzę w to!’
    Super, tylko na jak długo wystarczy Ci motywacji, żeby uczyć się w czasie wolnym po 8 godzinach przepychanek z architektem, próbach dalszej optymalizacji tego już optymalne i odpowiadaniu na telefony z budowy, gdy znów coś się spier*? To kwestia indywidualna, ale moje doświadczenie wskazuje, że po 4 kawie zasób energetyczny nie odnawia się już liniowo, zaczynasz po prostu robić bokami.
  • ‘hmm, mamy w biurze x AutoCADów, y Revitów, z Tekli. Słyszałem, że można rozszerzyć możliwości tych programów, że mają jakieś API, może spróbuję, zobaczę jak i co.’
    To była moja droga (więc oczywiście musi być najlepsza, schemat identyczny jak z dziećmi 😛 ), sensowna choć dłuższa. W stosunku do pierwszego podejścia użyłbym porównania: sprint vs bieg długodystansowy. Nie każdy potrafi/ma warunki to szybkiego biegu. Życiowe ‘opony, które chwilowo trzymają nas za kolana skłaniają do rozłożenia tego wysiłku w dłuższym czasie.

Dlatego zachęcam do zapoznania się z tabelą zbierającą znane mi programy budowlane oraz języki programowania z których można korzystać w celu tworzenia wtyczek. Jeżeli poniższa lista jest niepełna/zawiera błędy daj mi znać 🙂

ProgramJęzyki API
AutoCAD + klonyAutoLisp, C++, C#
RevitC#, C++, Python
Tekla StructuresC#
AllplanPython
ArchiCADC++
Autodesk RobotC#, C++
RFEMC#, Python
AxisVMC#, C++, Python, Delphi
SCIA EngineerC#, Python

W powyższej tabeli nie uwzględniłem VBA czyli Visual Basica wkomponowanego w pakiet Office, w biurach projektowych wykorzystywanego głównie z poziomu Excela. Proszę, nie wchodź w to świadomie, to droga w jedną stronę, jego czas się skończył.

Druga ważna uwaga to fakt, że C# w powyższym zestawieniu może być zastąpiony VB.NET. Oba języki wykorzystują to samo środowisko uruchomieniowe .NET. Jednak liczba materiałów/samouczków/dokumentacji/ofer pracy zdecydowanie przechyla tę szalę (C# vs VB.NET) na rzecz C#.

C++

Pomimo faktu, że niemal każdy z dużych programów budowlanych jest napisany w tym języku – odradzam wybierania go jako pierwszy wybór. C++ jest z cała pewności ‘hard to master’, niestety nie spełnia pierwszej cześci tej maksymy, czyli ‘easy to learn’.

Python

Rozsądny wybór o ile zestaw programów z których korzystasz w biurze go wspiera. Python jest na fali, można w nim postawić stronę internetową, serwer, aplikację desktopową i wtyczkę do Allplana. Duża społeczność inżynierów i bibliotek matematycznych jest kolejną zaletą. Od niego zaczynałem, daaaaaaawno temu. Wspomnienia mam pozytywne 🙂

Punktem odniesienia Pythonowego ‘budowlano-programisty’ jest Łukasz Laba, którego w sieci można znaleźć pod adresem https://github.com/lukaszlaba

C#

Najcześciej spotykany język API w budownictwie. Odpowiedź Microsoftu na sukces Javy, która pozwoliła firmie z Redmond stworzyć cały ekosystem usług. Wykorzystywany wszędzie, dla mnie podstawowe źródło dochodów.

I to właśnie w C# będę przedstawiał zdecydowaną większość treści na tym blogu, choć w późniejszej fazie może zdarzyć coś frontendowego.

*Java vs JavaScript

To dwa diametralnie różne języki programowania. Zbieżność nazw wynika z zabiegu marketingowego, który został podjęty w 1995 roku przez firmę Netscape (łapka w górę kto pamięta tego dinozaura). W dużym uproszczeniu JavaScript jest królem frontendu, czyli stron WWW. Java z kolei … jest wszędzie (pamiętny ekran w trakcie instalacji), natomiast najcześciej spotykany jest po stronie backendu przeróżnych poważnych organizacji, czytaj banków.

Pamiętaj, nie bądź noob’em: Java != JavaScript 😉