Archive

Posts Tagged ‘projektowanie parametryczne’

Parametryczny dach w GC

June 29th, 2010 Przemek Jaworski No comments

parametryczny_dach_viz3

Kontynuując poprzedni wątek tworzenia parametrycznych modeli, przejdźmy do zasad budowania kolejnych elementów w Generative Components. W tym rozdziale zapoznamy się  z budowaniem powierzchni krzywoliniowych, replikacji oraz panelizacji, a także z przygotowywaniem elementów do maszynowego wycinania.

Zanim jednak zbudujemy dach, zapoznajmy się z kilkoma podstawami za pomocą ćwiczeń :-)

W poprzednim odcinku skończyliśmy tworząc prostą krzywą BSpline, opartą na czterech punktach kontrolnych. Aby zrozumieć lepiej jak tworzyć więcej krzywych, na których np. możemy zbudować dach, musimy poznać replikację i zasady tworzenia kolekcji.

Otwórzmy więc GC i stwórzmy element (feature) za pomocą ikonki ‘Create Feature’ w górnym menu narzędzi. Po rozwinięciu pozycji ‘Point’ ukaże się nam mnóstwo metod, spośród których wybierzmy najprostszą – ByCartesianCoordinates. Rozwijając ją przyciskiem ‘+’ po lewej stronie, zobaczymy pola do wypełnienia :

CoordinateSystem : baseCS (to nasz podstawowy układ współrzędnych – ale możemy tutaj też wpisać inny, który wcześniej stworzymy).

XTranslation, YTranslation, ZTranslation : przesunięcie w osi X, Y i Z

Origin : opcjonalny parametr (punkt), przesuwający kartezjański środek układu współrzędnych w inne miejsce. Standardowo pole powinno pokazywać wartość null.

Normalnie, w pola te wpisujemy współrzędne, czyli np. X=1,Y= 5 , Z=8 itp. Możemy jednak zamiast współrzędnej podać funkcję , taką jak Series lub SeriesByCount(o tym za chwilę), lub grupę współrzędnych. Spowodują one zreplikowanie punktu i nie będzie on już tylko pojedynczym elementem, ale tzw. kolekcją. Istota pracy w GC opiera się na replikacji i kolekcjach, dzięki czemu możemy przeprowadzać operacje na wielu elementach w taki sam sposób, jak na jednym elemencie.

Jeśli w którymkolwiek momencie zamiast podawać jeden parametr, chcemy podać kilka, zamykamy je w klamrowych nawiasach { } , i stają się one kolekcją.

Przykład : stwórzmy nowy punkt metodą ByCartesianCoordinates

układ współrzędnych : baseCS

XTranslation : 1

YTranslation : 2

ZTranslation : {3,5,8}

Origin : null

po naciśnięciu OK otrzymamy.. trzy punkty ! To ilustruje ideę prostej replikacji. Co więcej, jeśli za YTranslation podamy {9,10,11} , współrzędne Y będą korespondować z wcześniej podaną kolekcją współrzędnych Z , czyli dostaniemy trzy punkty : {1,9,3}, {1,10,5} oraz {1,11,8}.

Warto wspomnieć, że można też te grupy współrzędnych skorelować w inny sposób. Poniższy ekran pokazuje jak odsłonić ‘ukryte’ właściwości elementu.

show settings

Po włączeniu opcji ’show settings properties’ pojawi się nam mnóstwo dodatkowych właściwości naszego punktu, których zazwyczaj nie będziemy używać, oprócz jednej, bardzo ważnej : Replication. To pole przyjmować może dwie wartości ReplicationOption.CorrespondingIndexing albo ReplicationOption.AllCombinations.

Jak łatwo się domyślić, pierwsza opcja stworzy trzy punkty, z każdego zestawu trzech współrzędnych. Jeśli mamy trzy współrzędne w polu X, i trzy współrzędne w polu Y, dostaniemy 3 punkty. Jeśli wpiszemy po trzy różne współrzędne w polach X, Y i Z – też dostaniemy 3 punkty. Jeśli wpiszemy 3 współrzędne w polu X i Y, a cztery w Z – dostaniemy… też trzy punkty! (ponieważ dodatkowa, czwarta współrzędna w polu Z nie koresponduje z żadną inną w pozostałych polach).

Druga opcja działa zupełnie inaczej – jako wynik produkuje wszystkie kombinacje danych współrzędnych. Czyli wpisując trzy różne współrzędne do pola X (na przykład {9,10,11} ) i trzy współrzędne do pola Y {3,5,8} , dostaniemy 9 punktów. Jeśli do pola Z wpiszemy też 3 współrzędne, np. {1,2,3} , dostaniemy 27 punktów.

Obie opcje można też włączyć edytując transakcję ‘ręcznie’ (prawy klik, ‘edit transaction’) i dopisując linię Replication = ReplicationOption.AllCombinations; albo ReplicationOption.CorrespondingIndexing;)

Bardzo ważną rzeczą w tworzeniu kolekcji, szczególnie za pomocą drugiej omówionej powyżej opcji jest indeksowanie. Jeśli wybierzemy z menu ikonę ‘edit feature’ (dłoń wskazująca na kwadrat) i najedziemy nad stworzony obiekt (tutaj punkt), wyświetli nam się nazwa obiektu oraz jego pozycja w kolekcji.

indexing

(tutaj wskaźnik pokazuje punkt [2][1] z kolekcji punktów point01). Tak jak wspominałem powyżej, całą kolekcję można traktować jako jeden punkt. Zilustrujmy to tworząc linię od układu współrzędnych baseCS do kolekcji point01 :

(>> Create Feature >> Line >> ByPoints,  jako StartPoint wybieramy baseCS – najlepiej umieszczając kursor w tym polu a potem najeżdżając na baseCS z naciśniętym CTRL. Jako EndPoint wybieramy point01 – kasując indeksy w kwadratowych nawiasach, tak żeby pole zawierało tylko point01)

(na tym etapie wyłączmy wspomnianą wcześniej opcję ’show settings properties’, żeby uniknąć niepotrzebnego zamieszania)

lines

Jako parametry wejściowe wpisaliśmy baseCS (pierwszy punkt), i point01 (drugi punkt), a w rezultacie dostaliśmy.. grupę linii ! Tak właśnie działa replikacja.

——————————–

Ok, czas przejść do czegoś, co przyspieszy nam trochę pracę nad kolekcjami.. przyjrzyjmy się funkcji Series i SeriesByCount.

Series (start, limit, increment) – tworzy kolekcję wartości liczbowych będących łańcuchem. Łańcuch zaczyna się od wartości start, i wypełnia się kolejnymi wartościami stopniowo zwiększanymi o increment, aż osiągnie limit). Przykład  : Series(1, 3, 0.4) to to samo co {1, 1.4, 1.8, 2.2, 2.6, 3.0}

SeriesByCount(start, final, count) – tworzy kolekcję wartości liczbowych zaczynających się od start, kończących na final, wypełnioną pośrednimi wartościami, w count krokach). Przykład: SeriesByCount(1, 15, 2) to to samo co {1,3,5,7,9,11,13,15}

Powyższe funkcje można wykorzystywać jako argumenty wejściowe do innych funkcji, np sinusoidy (Sin). SeriesByCount(0, 720, 50) stworzy łańcuch wartości wędrujący od zera do 720 w 50-ciu krokach.

Aby narysować w przestrzeni ciekawą krzywą bazującą na replikacji punktów, stwórzmy nowy skrypt, i nowy punkt ByCartesianCoordinates.

CoordinateSystem : baseCS

XTranslation : Sin(SeriesByCount(0,720,50))

(w GC argumenty wejściowe do funkcji Sin podajemy w stopniach, nie radianach)

YTranslation : Cos(SeriesByCount(0,720,50))

ZTranslation : SeriesByCount(0, 5, 50)

a potem dodajmy krzywą BSpline, stworzoną metodą ByPoints

Points : point01

MakePeriodic : false

Replikacja punktów

Rezultat : Krzywa spiralna (może np posłużyć jako baza do schodów!)

Dla dociekliwych : Możemy zreplikować stworzoną właśnie krzywą poprzez skopiowanie jej do kolekcji układów współrzędnych. Najpierw tworzymy jakąś grupę układów współrzędnych, np metodą BySphericalCoordinates (CoordinateSystem : baseCS,  Radius : 5 ,  Theta  : SeriesByCount(0,360,20),   Phi : -30 ), a potem tworzymy nową krzywą BSpline metodą CopyTransformGeometricContents ( CopyFrom : baseCS,    CopyTo : coordinateSystem01,  FeatureToCopy  : bsplineCurve01), kopiując spiralę do dziesięciu nowych orientacji. Rezultat poniżej :

spirals

——————————————

Po tej krótkiej demonstracji przejdźmy do czegoś bardziej zaawansowanego geometrycznie, czyli do powierzchni BSplineSurface. Powierzchnie BSpline są skonstruowane podobnie do krzywych BSpline (np. w tym sensie, że posiadają punkty kontrolne), przy czym oczywiście w sensie parametrycznym są dwuwymiarowe. Żeby nanieść na krzywą bspline punkt, wystarczy podać jeden parametr, w zakresie od 0 do 1. Żeby nanieść taki sam punkt (lub punkty) na powierzchnię BSplineSurface , należy podać dwa parametry – U i V. Oba przyjmują wartości od 0 do 1.

Stwórzmy nowy plik ( File >> New Transaction File ) i wybierając narzędzie ‘Create Point’ (żółta ikonka) stwórzmy cztery punkty.

Następnie stwórzmy element BSplineCurve metodą ByPoles (nie ByPoints!), wpisując w pole ‘Poles’ kolejno nazwy poszczególnych punktów. Najłatwiej jest to zrobić umieszczając w nim kursor i klikając w kolejne punkty z przyciśniętym klawiszem CTRL. W polu powinno się pojawić coś jak poniżej

{point01,point02,point03,point04,}

Resztę pól zostawmy ze standardowymi wartościami. Klikając ‘OK’ stworzymy krzywą jak poniżej :

bsplinecurve01

Krzywa została stworzona na płaszczyźnie XY (to znaczy że jest płaska), więc możemy teraz poprzemieszczać punkty w przestrzeni, tak, aby nadać krzywej pożądaną formę. Sposoby manipulowania uchwytami punktów pokazuje poniższa ilustracja :

manipulacje

Mając pierwszą krzywą w odpowiedniej konfiguracji przestrzennej dodajmy kolejne dwie krzywe, postępując w ten sam sposób (cztery punkty w przestrzeni, nowa krzywa BSpline metodą ByPoles, klikamy punkty z CTRL w polu ‘Poles’) i modelujemy je na kształt dachu.

krzyweBSpline

W wyniku powyższych operacji powinniśmy mieć teraz trzy krzywe : bsplineCurve01, bsplineCurve02 i bsplineCurve03. Zbudowane one są odpowiednio z punktów {point01,point02,point03,point04}, {point05,point06,point07,point08} i {point09,point10,point11,point12}.

Powierzchnie BSpline można budować na wiele sposobów, my użyjemy tutaj metody LoftCurves. Jako ‘Curves’ wprowadźmy trzy krzywe {bsplineCurve01,bsplineCurve02,bsplineCurve03}  (nawias klamerkowy wskazuje na to, że jest to kolekcja). Pole ‘Order’ powinno mieć wartość 4 lub 3.

powierzchnia

.. i w rezultacie otrzymujemy parametryczny dach!

Teraz nadszedł dobry moment na to, żeby zastanowić się nad formą. Na tym etapie można bowiem manipulować punktami kontrolnymi i oceniać bezpośrednio skutki tych manipulacji w czasie rzeczywistym. Sugeruję poobracać model z każdej strony i modelować kształt dopóki nie będziemy z niego zadowoleni :-)

(w ikonkach na górze okna po kliknięciu drugiego narzędzia od lewej możemy zmienić tryb graficzny wyświetlania na Illustration bądź Smooth – to pomaga w estetycznej ocenie rozwiązania!)

—————————————–

Panelizacja

Oczywiście w takiej formie dach może istnieć tylko wirtualnie, ponieważ wytworzenie każdej powierzchni podwójnie zakrzywionej to nie lada wyzwanie. Aby to uprościć, spróbujmy go spanelizować – czyli podzielić na mniejsze komponenty, nadające się do wycięcia i fabrykacji.

Aby to zrobić musimy wypełnić dach punktami, które następnie posłużą jako wierzchołki czworokątów. Jak się za to zabrać ? Zacznijmy od pojedynczego punktu :

>> Create Feature >> Point >> ByUVParametersOnSurface (ta metoda umieści punkt na powierzchni używając parametrów U i V).

Surface : bsplineSurface01 (nasza powierzchnia)

U : 0.2

V : 0.4

Zmieniając wartości U i V możemy umieścić punkt w każdym miejscu powierzchni (pamiętając o tym, że muszą one być pomiędzy 0 i 1)

Jak stworzyć więcej punktów ? Oczywiście używając replikacji i funkcji Series() bądź SeriesByCount().

Wyedytujmy teraz transakcję tworzącą punkt (jeśli jej nie widzimy na liście transakcji, kliknijmy przycisk ‘Save’, żeby zapisać skrypt na dysku). W wyedytowanej transakcji zastąpmy linie definiujące wartości U i V następującymi wyrażeniami :

U = SeriesByCount(0, 1, 50);

V = SeriesByCount(0, 1, 25);

i dopiszmy dodatkowo :

Replication = ReplicationOption.AllCombinations;

W rezultacie, zamiast pojedynczego punktu, zobaczymy matrycę jak poniżej :

siatkaPunktow

(wygląda trochę na to, że punktów jest za dużo, więc sugeruję zmniejszyć ilość kroków w SeriesByCount do 25 i 12)

Zanim zabierzemy się za panelizację, ukryjmy naszą powierzchnię BSpline, żeby nie przeszkadzała w wizualnej ocenie paneli (inaczej będzie je trochę zasłaniać). Aby to zrobić, wybieramy narzędzie ‘Toggle Visibility’ (czarno-szara ikonka z ukośnymi kreskami toggle_visibility), najeżdżamy na powierzchnię (aż wyświetli się bsplineSurface01) i klikamy. Alternatywnie, możemy też kliknąć na nią w widoku symbolicznym.

Stworzenie siatki paneli mogłoby być dość skomplikowane, ale ratują nas tutaj twórcy GC, którzy przewidzieli popularność panelizacji, i stworzyli do tego specjalną metodę. Znajduje się ona w elemencie Polygon. Wybierzmy narzędzie ‘Create New Feature’, następnie ‘Polygon’ a potem ‘ByPointGrid’.

Points: point13 (albo poprostu nazwa punktu na powierzchni – może być inna. Zwróćmy uwagę, żeby po kliknięciu na punkt z CTRL usunąć nawiasy kwadratowe i klamerki – bo podajemy całą kolekcję, a nie jej część).

resztę pól pozostawiamy ze standardowymi wartościami,

Wynik to podzielony na panele uproszczony model krzywoliniowego dachu :

panelizacja

I tak oto otrzymaliśmy naszą panelizację!

Jak łatwo zauważyć przyglądając się dokładniej panelom, większość z nich będzie powyginana w różnych kierunkach (będą wyglądać jak ramki z elastyczną tkaniną w środku). Aby wymusić ‘płaskość’ paneli należy użyć podczas tworzenia opcji FacetOption.ForcePlanarQuads lub FacetOption.Triangulation.. W pierwszym przypadku panele ‘wyskoczą’ trochę z powierzchni i pojawią się między nimi luki – ale to normalne, tak jak w dachu Smithsonian Institute. Aby tego uniknąć należy zgłębić tajniki teselacji powierzchni krzywoliniowych.. ale to już temat na inny post :-)

Ciekawy efekt można też uzyskać wybierając opcję FacetOption.Diamond

panelizacja2

aby zmienić właściwości elementu, np. sposób teselacji, nie trzeba cofać transakcji i tworzyć jej od początku – zamiast tego użyj opcji edit feature edit_feature, i zmień odpowiedni parametr.

————————————–

Rozwijanie elementów na płaszczyznę

Aby przygotować elementy do fabrykacji, musimy stworzyć element o typie ‘FabricationPlanning’. Ten typ elementu zazwyczaj służy do takiego rozplanowania elementów na płaszczyźnie, aby były zupełnie płaskie i aby przy np. drukowaniu lub wycinaniu laserowym zachowały identyczne wymiary i kształt do oryginałów. Normalnie nie jest to proste, bo elementy są obrócone wokół kilku osi w przestrzeni, i aby umieścić je w płaszczyźnie poziomej, należy dokonać kilku obrotów.. wykonanie tego na kilkuset elementach nie należy na pewno do zadań  łatwych :-)

W naszym przypadku możemy użyć dwóch metod tworzenia FabricationPlanning : LayoutPolygons, oraz UnfoldPolygonsIntoPlanarStrips.

LayoutPolygons rozkłada każdy element osobno, w równych odstępach. Może to się przydać przy wielokątach umieszczonych w dziwnych konfiguracjach, lub niestykających się krawędziami. Przykładowe wartości do wypełnienia w polach to

CoordinateSystem : baseCS

Polygons : polygon01 (bez nawiasów klamrowych ani kwadratowych, tylko nazwa kolekcji wielokątów)

Xspacing : 1 (odstępy w rozłożonych wielokątach)

Yspacing : 1

UnfoldPolygonsIntoPlanarStrips rozkłada wielokąty w pasach, połączone krawędziami, co czyni je dużo łatwiejszymi do późniejszego montażu (np przy tworzeniu fizycznego modelu). Przykładowe wartości do wpisania w pola :

CoordinateSystem : baseCS (w którym układzie współrzędnych następuje umieszczenie płaskich elementów)

Polygons : polygon01 (jak poprzednio, bez klamerek i nawiasów)

BoundaryEdgeColor : 3 (kolor zewnętrznej obwódki – ma to znaczenie np przy przygotowaniu do wycinania laserowego, gdzie zewnętrzny obwód jest cięty, a wewnętrzne krawędzie tylko lekko nacinane)

InternalEdgeColor : 2 (zielony)

InterRowDistance : 1 (odstępy pomiędzy rozwiniętymi pasami, w metrach)

rozwiniecie

Tak oto otrzymujemy techniczny rysunek będący bezpośrednio podstawą do stworzenia zaprojektowanego dachu.

——————————————————————–

Oczywiście jest to dopiero początek, ponieważ samo wycięcie paneli nie jest zazwyczaj wystarczające. Oprócz szkła lub innego materiału potrzebujemy także strukturę, ramy, metalowe łączniki i inne detale. O tym jednak innym razem ;-)

Przykładowy przybliżony model z detalami i całą resztą mógłby wyglądać tak :

parametryczny_dach_viz1_

lub tak:

parametryczny_dach_viz2_

————————————————————————————————————

Smart Geometry 2010

April 2nd, 2010 Przemek Jaworski 2 comments

Pod koniec marca odbyły się w Barcelonie warsztaty i konferencja pod szyldem Smart Geometry – organizacji działającej of 2003go roku poprzez  promowanie nowoczesnych metod projektowania wspomaganego komputerowo. Czterodniowe kolaboracje ponad stu uczestników i około dwudziestu prowadzących miały miejsce w siedzibie Katalońskiego Instytutu Zaawansowanej Architektury (IaaC) i prowadzone były pod szyldem ‘Working Prototypes’. Impreza polegała na zaprojektowaniu oraz wykonaniu prototypów ilustrujących przybrany proces projektowy w skali 1:1, używając do tego celu wycinarek laserowych, ploterów CNC oraz drukarek trójwymiarowych i specjalistycznych robotów.

IaaC main space

Warsztaty podzielone były na dziesięć podgrup : Deep Surfaces (projektowanie powierzchni z tkanin), Nonlinear Systems in Biology and Design (badanie zachowań systemów symulujących biologię w architekturze), Manufacturing Parametric Acoustic Surfaces (tworzenie prototypów kształtujących przestrzeń akustyczną), High Tech Design – Low Tech Construction (testowanie bardzo prostych elementów konstrukcyjnych z zaawansowanymi technikami projektowania), Parametrics and Physical Interactions (podłączanie wirtualnych modeli komputerowych do sensorów światła, temperatury itp i tworzenie fizycznych kinetycznych prototypów reagujących na warunku otoczenia) , Curved Folding (użycie robotów do wycinania i zginania metalowych powierzchni pojedynczo zakrzywionych), Explicit Bricks (testowanie zaawansowanego robota do tworzenia struktur z cegieł), Rapid R&D to Rapid Assembly (projektowanie i wycinanie drewnianych elementów nadających się do natychmiastowego montażu) , Design to Destruction (użycie zaawansowanych analiz i symulacji do zaprojektowania najbardziej wytrzymałego wspornika – testowanego na koniec przez jego komisyjne obciążenie i zniszczenie(!) ) oraz Inflatable Fabric Envelopes (projektowanie i wycinanie podwójnych membran pneumatycznych do tworzenia struktur).

Jedną z najbardziej spektakularnych grup była ‘Explicit bricks’, gdzie do wycinania styropianowych cegieł użyto robota firmy KUKA.

KUKA robot

(wideo pokazujące proces cięcia można zobaczyć  tutaj)

styrofoam bricks

workshop space

Mnie przypadło w udziale organizowanie oraz prowadzenie pod-warsztatu zajmującego się fizycznymi interakcjami (Parametrics and Physical Interactions). Razem z Hugo Mulderem (Arup, Advanced Technology + Research Group) i Florą Salim (SIAL, RMIT Australia) prowadziliśmy uczestników przez proces  ’rozszerzania’ ich parametrycznych wirtualnych modeli  w celu połączenia ich z fizycznym światem. Celem było stworzenie instalacji, która reaguje na warunki otoczenia używając sensorów (światło, ruch, dźwięk), i uzewnętrznia swoje reakcje za pomocą silników, światła, multimedialnych projekcji i kinetyki (fizycznego ruchu). Podsumowanie warsztatu i krótkie, lecz treściwe omówienia projektów można zobaczyć w poniższym filmie :

Więcej informacji o Smart Geometry można znaleźć na stronie  www.smartgeometry.org

parametric acoustic surfaces

Powyżej: Manufacturing Parametric Acoustic Surfaces

parametric membranes

Deep Surfaces

curved folding

Curved Folding

high tech design, low tech construction

High Tech Design – Low Tech Construction

parametrics and physical interactions

Model kinetycznie zacienianego dachu stworzony w podgrupie Parametrics and Physical Interactions

Pierwsze kroki w Generative Components

March 8th, 2010 Przemek Jaworski 6 comments

Po dwóch tutorialach opisujących podstawy prostego programowania w środowisku Processing, zajmiemy się parametrycznym projektowaniem z użyciem środowiska CAD – Generative Components. GC obok Grasshoppera jest jednym z najbardziej popularnych narzędzi do tworzenia parametrycznych projektów (od niedawna dostępne za darmo na stronie http://www.bentley.com/getgc)

W Generative Components praca opiera się głównie na transakcjach – czyli podstawowych krokach tworzących parametryczny model. Zapisane są one w głównym oknie programu, które jest także przez niektórych nazywane ‘transaction player’, bo w istocie, służy ono właśnie do odtwarzania tych transakcji jedna po drugiej.

W pewnym sensie transakcje zapisane są w konwencji ‘akcji’, lub też ‘historii’ zdarzeń podczas konstruowania modelu, co jest czasem krytykowane (w Grasshopperze mamy do czynienia z jednym, finalnym modelem), ale w rzeczywistości pomaga jednak w pracy nad dużymi i skomplikowanymi modelami. Nie wiadomo zresztą do końca jak to będzie wyglądać w przyszłości, gdyż Bentley idzie powoli w kierunku nowych rozwiązań.

podstawowy układ okien w GC

Wśród okien widocznych po otwarciu Generative Components widzimy także okno z diagramem symbolicznym (po lewej stronie, na dole). Służy ono do przeglądania logicznych połączeń i hierarchicznych zależności pomiędzy elementami, a szczególnie pomocne bywa podczas tworzenia nowych komponentów (ale o tym kiedy indziej).  Niektórzy jednak nie używają tego okna prawie wogóle, lub sporadycznie podczas poszukiwania błędów w modelu (’nieudane’ elementy pojawią się tutaj na czerwono), więc jest to po części kwestia wyboru – można sobie w GC dać bez niego radę.

Przejdźmy do podstawowych elementów parametrycznego modelu.

Układ współrzędnych

Najważniejszym układem współrzędnych jest baseCS , który widzimy w oknie zaraz po otwarciu GC.

baseCS coordinateSystem

Jest to globalny układ współrzędnych, do którego odnoszą się wszystkie współrzędne punktów, wektorów itp. Graficznie przedstawiony jest jako czerwony punkt (origin), trzy kwadraty (XYPlane, YZPlane, XZPlane), i trzy wektory pokazujące graficznie oś X, Y i Z . Żółty kwadrat pokazuje obecnie aktywną płaszczyznę odniesienia – zawsze na początku jest to XYPlane, czyli pozioma powierzchnia przechodząca przez punkt 0,0,0

Punkt

Punkt to najbardziej podstawowy element parametrycznego modelu. Istnieje wiele metod tworzenia punktów, jedną z najprostszych jest ByCartesianCoordinates(coordinate system, x,y,z). Spróbujmy zatem stworzyć taki punkt. Aby to zrobić, klikamy na ikonę ‘create feature’ (w GC wszystkie obiekty nazywane są ‘features’), i z listy wybieramy ‘Point’. Po wybraniu punktu, lub generalnie po wybraniu obiektu który chcemy stworzyć, otworzy nam się druga pod-lista, która pokaże ‘metody’ jego tworzenia. Zazwyczaj jest ich tam trochę, każda potrzebuje trochę innych danych/zmiennych/obiektów wejściowych. My skupimy się teraz na najprostszej, czyli ‘ByCartesianCoordinates’. Po jej wybraniu, pokazuje się nam lista parametrów wejściowych.

tworzenie nowego obiektu

Jako układ współrzędnych, w którym ma się znaleźć nasz punkt, wpisujemy ‘baseCS’ (tak, to jest nasz globalny układ współrzędnych – ale możemy to później zmienić). Należy zwrócić uwagę na duże i małe litery, gdyż np. ‘BaseCS’ nie będzie już działać).

W kolejnych polach wpisujemy współrzędne punktu, dajmy na to X =3 , Y = 2 , Z = 5

Ostatni parametr, zaznaczony na niebiesko jest nieobowiązkowy, więc nie musimy tam nic wpisywać.

Pod spodem widzimy jeszcze pola takie jak ‘name of new feature’, gdzie możemy wpisać np ‘pierwszyPunkt’ , albo ‘poczatekLinii’, lub też zostawić standardową nazwę jaką podpowie nam system (point01). Zdecydowanie warto wpisywać tutaj arbitralne nazwy adekwatne do tego czym jest dla nas dany obiekt, gdyż dużo łatwiej jest się potem połapać w modelu, szczególnie wtedy kiedy jest on już bardzo skomplikowany.

Klikamy zatem ‘OK’ po prawej stronie na dole, i widzimy coś takiego :

mojPunkt

Jest to nasz punkt i jego parametry w modelu (po prawej widzimy go jako żółte kółko). Punkt został stworzony, a transakcja została dodana automatycznie do skryptu – możemy ją zobaczyć klikając dolną zakładkę ‘transaction file’, i odświeżając lub zapisując skrypt (odpowiednie ikony są pokazane strzałkami).

gc07

Tak więc w transakcji nr 1 stworzyliśmy punkt.  Jest to jednak tylko  jeden ze sposobów tworzenia punktów, spróbujmy więc czegoś innego. Na górze widzimy ikonkę ‘create point’ (linia z żółtym kwadratem). To narzędzie pozwoli wstawić nam punkt bezpośrednio w oknie widoku, przy czym punkt zostanie umieszczony na aktywnej płaszczyźnie odniesienia – w tym przypadku płaszczyźnie XY, pokazanej żółtym kwadratem na układzie współrzędnych baseCS. Po kliknięciu na ‘create point’ możemy wstawić go klikając w oknie widoku. Po tym przechodzimy do zakładki ‘transaction file’ i odświeżamy ich stan, lub zapisujemy zmiany.

gc08

Na dole widzimy diagram symboliczny z dwoma punktami. Drugiemu system automatycznie przypisał nazwę point01, ale możemy to zmienić edytując drugą transakcję.

Edytowanie transakcji

Teoretycznie można pracować w GC bez edytowania skryptu, ale na dłuższą metę jest to bardzo ograniczające. Tak więc dokonajmy prostej edycji – kliknijmy prawym przyciskiem myszki na drugą pozycję w transaction playerze, i wybierzmy ‘edit transaction’, po czym zmieńmy ‘point01′ na np. ‘drugiPunkt’

gc09

Tytuł transakcji może być dowolny, np ’stworzenie kolejnego punktu’ (zamiast ‘Add point01′) – tutaj też dobrze jest edytować tekst, żeby uczytelnić skrypt.

Jak widać, konstrukcja transakcji jest dość prosta. W pierwszej linii posiada słowa kluczowe transaction i modelBased ,  a potem tytuł. Zawartość zawsze znajduje się w nawiasach. Jako, że transakcja może zawierać w sobie wiele obiektów, każdy z nich również zamyka swój opis w nawiasach { … }. Słowo kluczowe feature zaczyna opis obiektu. Po nim następuje jego nazwa (razem z nazwą przestrzeni nazw, to jest lekko skomplikowane, ale .. uhm, podobno ułatwia sprawę ;-) , a następnie typ deklarowanego obiektu- w tym wypadku Bentley.GC.Point

Jak widać na poprzednim zrzucie ekranu, drugi punkt posiada ‘uchwyty’ – służą one do manualnego manipulowania punktem w kierunkach X,Y lub Z. Widać je tylko na drugim punkcie, ponieważ posiada on słowo <free> przed wartością współrzędnej. Możemy dodać <free> przed wartości w pierwszej transakcji (ale muszą one znajdować się wtedy w okrągłym nawiasie), żeby włączyć uchwyty dla pierwszego punktu. Manipulować można nimi za pomocą narzędzia ‘move’ move . Spróbuj użyć go, najeżdżając na jeden z uchwytów, klikając a potem przeciągając myszkę – punkt powinien przesuwać się w przestrzeni zgodnie z pozycją kursora.

Krzywa BSpline

Kolejnym obiektem, którego prawdopodobnie będziemy używać dość często jest krzywa Bspline. Jest to krzywa sklejana beziera, czyli złożona krzywa stworzona przez połączone fragmenty prostszych krzywych. Mówiliśmy o nich wcześniej w tym tutorialu. Krzywą taką można skonstruować na dwa sposoby – z punktów kontrolnych (metodą .ByPoles), lub z węzłów znajdujących się na krzywej ( .ByPoints). Generalnie polecam pierwszą metodę, gdyż łatwiej jest wtedy kontrolować  styczność i pochodne krzywizny – w drugiej metodzie, gdy punkty są bardzo daleko od siebie, a potem nagle bardzo blisko, krzywa może wykonywać niespodziewane ‘zakręty’ albo pętle w przestrzeni.

Spróbujmy więc stworzyć taką krzywą dwoma opisanymi tutaj metodami. Stwórzmy zatem nowy szkic, wybierając File >> New Transaction File. Upewnijmy się, że naszą aktywną płaszczyzną jest baseCS.XYPlane, po czym wybierzmy narzędzie ‘place point’ i wstawmy do projektu cztery bądź więcej punktów, jak poniżej.

aktywna plaszczyzna

gc11

Następnie klikamy ikonę ‘create feature’ aby stworzyć krzywą, i z dostępnego menu wybieramy ‘BSplineCurve’ a potem ‘ByPoles’, jak poniżej.

Następnie klikamy ikonę ‘create feature’ aby stworzyć krzywą, i z dostępnego menu wybieramy ‘BSplineCurve’ a potem ‘ByPoles’, jak poniżej.

tworzenie krzywej BSpline

gc13

Tak oto stworzyliśmy pierwszą krzywą BSpline. Możemy teraz pomanipulować trochę punktami za pomocą narzędzia ’move’ (move) i poobserwować zachowanie krzywej. Zwróćmy uwagę na fakt, że początek i koniec krzywej są styczne do linii stworzonej przez dwa pierwsze lub dwa ostatnie punkty kontrolne.

Dobrze jest spróbować też drugi wspomniany wcześniej sposób tworzenia krzywej (.ByPoints) i porównać różnice. Przy jednym, i drugim, punktów kontrolnych może być oczywiście więcej.

—————————————————————————————–

Tyle narazie jeśli chodzi o podstawy – a w następnym tutorialu zajmiemy się wykorzystaniem krzywych BSpline do stworzenia parametrycznego dachu  z prawdziwego zdarzenia :-)

Projektowanie komputacyjne

February 1st, 2010 Przemek Jaworski No comments

23 października w ramach Szczecińskiego Westivalu, wygłosiliśmy razem z Michałem Piaseckim wykład pod tytułem ‘projektowanie komputacyjne’. Przy okazji publikacji tekstu wykładu w materiałach organizatorów Westivalu, postanowiliśmy także opublikować go online.

 

Projektowanie komputacyjne w architekturze  

 

Projektowanie komputacyjne to zagadnienie, które w ostatnim czasie szybko zyskuje na popularności. Obecnie dobrze zakorzenione w przemyśle samochodowym i lotniczym, powoli zaczyna wkraczać także jako narzędzie do świata architektury. Dlaczego? Ponieważ technologie projektowania wspomaganego komputerowo, oraz przede wszystkim fabrykacji stają się coraz bardziej dostępne i tańsze, a co za tym idzie, wzrasta dostępność produkcji niestandardowych elementów na masową skalę (tzw. ‘mass customization’).

Jak pisał Adrian Beukers i Ed van Hinte w swoim eseju ‘Lightness’ (‘Lekkość’), ‘W naturze kształt jest tańszy niż materiał’, zwracając uwagę na to, że koszt wytworzenia formy może być dużo niższy, jeśli znajdziemy optymalne rozwiązania strukturalne lub topologiczne opisujące problem projektowy. Nie jest już dzisiaj niczym zaskakującym, że dokonując strukturalnej optymalizacji topologii połączeń w mega-konstrukcjach można zaoszczędzić do 50% materiału.

Projektowanie komputacyjne, poprzez użycie różnych technik takich jak algorytmy genetyczne i sztuczna inteligencja, razem z metodą elementów skończonych, lub innymi technikami optymizacyjnymi, może pomóc zdefiniować problem projektowy w zupełnie inny sposób i znaleźć nową, często zaskakującą odpowiedź. Czy jest to problem czysto geometryczny, tak jak panelizacja podwójnie zakrzywionych powierzchni, czy też strukturalny, jak minimalizacja stresów w przestrzennej kratownicy, z pomocą mogą przyjść programy lub skrypty pisane w różnych językach oraz narzędzia do modelowania parametrycznego, takie jak Generative Components oraz Rhino Grasshopper. Modelowanie parametryczne pozwala na definiowanie hierarchicznych zależności pomiędzy obiektami geometrycznymi zamiast statycznego układu brył w przestrzeni, do którego przyzwyczajone są osoby korzystające z bardziej standardowych narzędzi CAD. Modelowanie parametryczne, które pozwala na szybkie przeglądanie wersji potencjalnych rozwiązań, jest dzisiaj coraz powszechniej stosowane w projektowaniu stadionów, wieżowców, części fasad, dachów jak i niewielkich detali konstrukcyjnych.

Terminologia związana z projektowaniem komputacyjnym podlega ciągłej transformacji, ponieważ dziedzina jest nowa i wciąż szybko się rozwija. Dosyć szeroko przyjęte jest odróżnianie “projektowania parametrycznego” od “projektowania generatywnego”:

Projektowanie parametryczne to proces w którym wynikowa forma jest zazwyczaj jedną iteracją (przebiegiem) informacji geometrycznych przez ‘drzewo’ hierarchicznych zależności pomiędzy elementami. Po wykonaniu takiej iteracji, otrzymujemy parametryczny model, który jest topologicznie statyczny, możemy za to zmieniać jego geometrię (skalować, rozciągać, manipulować parametrami).

 wf_smithsonian_

Projektowanie generatywne to proces w którym forma jest generowana na podstawie wielokrotnych iteracji, zazwyczaj dodawania/odejmowania elementów, lub dzielenia ich na mniejsze pod-elementy. Za narzędzia używane w projektowaniu generatywnym można uznać algorytmy genetyczne, sieci neuronowe, oraz wszystkie algorytmy wykorzystujące procesy symulacji sztucznego życia, takie jak automaty komórkowe, systemy samo-organizujące się, systemy cząsteczek-agentów, oraz pomocniczo systemy bazujące na metodzie elementów skończonych (finite element analysis), takie jak dynamiczna relaksacja.

wzrost fototropicznyProjektowanie komputacyjne w praktyce architektonicznej

Jednymi z pierwszych spektakularnych projektów wykonanych z użyciem projektowania parametrycznego był Swiss Re (tzw. ‘ogórek’) w Londynie, autorstwa biura Foster+Partners (2004), Centrum handlowe O2 w Birmingham (Future Systems 2003) oraz Kunsthaus w Graz w Austrii (Peter Cook + Colin Fournier 2003). Technikami projektowania parametrycznego posługuje się dzisiaj wiele znanych biur architektonicznych i inżynierskich, takich jak HOK Sport, Arup, Grimshaw+Partners, Zaha Hadid architects, Frank Gehry czy Aedas.

examples_
 
Również duża ilość projektów generatywnych doczekała się już realizacji. Przykładem może tu być szklane zadaszenie dziedzińca British Museum, gdzie użyto algorytmu dynamicznej relaksacji dla zoptymalizowania sił i wielkości paneli. Innym jest realizowne obecnie zadaszenie stacji metra w Neapolu projektu Rogers Stirk Harbour + Partners. W tym projekcie konstruktorzy – firma Expedition Engineering – postanowili wykorzystać algorytmy genetyczne, żeby zoptymalizować dystrybucję elementów strukturalnych zadaszenia ze względu na ilość światła dziennego penetrującą wnętrze stacji. Optymalizacja z użyciem ewolucji polega na hodowaniu kolejnych generacji potencjalnych rozwiązań w których osobniki stosunkowo dobrze spełniające zadane kryteria przekazują swoje cechy kolejnym. W tym przypadku optymalizowano na przestrzeni 70 generacji, każda po 400 osobników.

rogers_stirk_harbour_neapol_

Obszarem zastosowań algorytmów generatywnych jest również urbanistyka, ponieważ użycie zasad samo-organizacji może pomóc w odnalezieniu układów przestrzennych które są lepsze od tych zaprojektowanych tradycyjnymi metodami na przykład pod względem komunikacyjności lub dystrybucji ze względu na nasłonecznienie. ‘Agentom’, które reprezentują bloki zabudowy, można na przykład zadać zadanie znalezienia pozycji i orientacji umożliwiającej najlepsze skorzystanie z dostępnych widoków, oraz dostępu do naturalnego światła. Poprzez lokalne negocjacje na niskim poziomie hierarchii, otrzymujemy globalne (całościowe) rozwiązanie uwzględniające interesy każdego z podmiotów symulacji.

Układ, którego globalny stan jest czymś więcej niż sumą lokalnych stanów wszystkich jego elementów nazywany jest układem emergentnym. Emergencja to zjawisko związane z wykorzystaniem prostych reguł działania na lokalnym poziomie (interakcji pomiędzy pojedycznymi agentami), do stworzenia ‘kolektywnej’ inteligencji na globalnym poziomie całego stanu układu.

Cyfrowe wspomaganie wytwarzania

Wszystkie powyżej opisane techniki zyskują coraz szersze zastosowanie w architekturze, ponieważ znacząco rozwijają się możliwości cyfrowego wspomagania wytwarzania, czyli tzw. cyfrowej fabrykacji. Projektowanie parametryczne i generatywne pozwala automatycznie dostosować elementy projektu do wybranej technologii fabrykacji. Takie ‘dopasowanie’ do fabrykacji, staje się poprostu jeszcze jednym kryterium optymalizacji. Najczęstszym przykładem jest tutaj np. podzielenie dowolnej przestrzennej, podwójnie zakrzywionej formy/powierzchni na elementy płaskie (np szklane panele), współdzielące ze sobą krawędzie (bez pomocy generatywnych procesów jest to bardzo trudne lub wręcz niemożliwe). Można też optymalizować obiekty tak, aby zużywały jak najmniej materiału. Technologie cyfrowego wspomagania wytwarzania dzielą się na addytywne, subtraktywne i formatywne.

Technologie addytywne polegeją na nakładaniu i łączeniu kolejnych warstw materiału. Popularna nazwa tych technik to “druk 3d”. Dzisiaj można drukować na drukarkach proszkowych, nylonowych (drukujących plastikiem), lub nawet takich które układają na sobie warstwy metalu. Nowością (jeszcze niedostępną komercyjnie) jest olbrzymia drukarka budowana przez firmę D-Shape, która może drukować cementem w dużej skali (obszar roboczy to 3×3x3 m). Koszty druku 3d szybko maleją a produceni drukarek zapowiadają technologie, które spowodują, że druk 3d będzie niebawem tak popularny jak druk 2d – używający kartek i atramentu. Byłaby to prawdziwa rewolucja w projektowaniu produktu. W architekturze druk 3d jest na razie wykorzystywany do produkcji modeli.

3d_printing_

 

Technologie subtraktywne to te które polegają na odejmowaniu materiału. Przykładami jest frezowanie CNC i cięcie laserowe. Ograniczenia materiałowe są w tym przypadku niewielkie a skala wykonywanych elementów może sięgać kilkunastu metrów, stąd to te technologie są najczęściej wykorzystywane w architektonicznych realizacjach.

 cnc

 
Technologie formatywne to na przykład użycie robotów do układania elementów konstrukcji. Dobrym przykładem jest tutaj parametryczna ściana winnicy, projektu duetu Gramazio & Kohler, stworzona za pomocą robota firmy KUKA.

kuka
 
Projektowanie komputacyjne może ale nie musi wiązać się z estetyką dominującą obecnie wśród niektórych star-architektów. Jednym z najważniejszych aspektów omówionych technik jest optymalizacja, która zapewnia bardzo dobre wykorzystanie budżetu projektu oraz stworzenie przestrzeni funkcjonującej w odpowiedni sposób. Wzbogacenie polskich pracowni architektonicznych o narzędzia parametryczne i generatywne oraz wprowadzenie tej tematyki na uczelnie jest jednym z warunków, które polska architektura powinna spełnić by pozostać konkurencyjna na rynku międzynarodowym.

 

Przemysław Jaworski (Foster+Partners, SMG) www.projektowanieparametryczne.pl

Michał Piasecki (Bartlett, UCL) www.michalpiasecki.com

Wstęp do Generative Components

May 28th, 2009 Przemek Jaworski 3 comments

W dniach 29-31 maja na Wydziale Architektury Politechniki Wrocławskiej odbyły się warsztaty poświęcone Generative Components i projektowaniu parametrycznemu. Podczas trzech dni studenci poznali podstawy tworzenia krzywych i powierzchni podwójnie zakrzywionych, oraz używania  ich ze zmiennymi parametrami sterowanymi np. suwakami, lub punktami kontrolnymi. Szczególną uwagę poświęcono też zagadnieniu fabrykacji, czyli rozwijaniu powierzchni na płaszczyznę i dzieleniu elementów na płaskie, ‘wycinalne’ części.

Głównie skoncentrowaliśmy się na :

- replikacji punktów, linii, krzywych i płaszczyzn – czyli operowaniu na jednym obiekcie , który ma kilka lub więcej ‘instancji’. Generalnie, chodzi o odpowiednie wykorzystanie funkcji Series( początek, koniec, krok ).

- dziedziczeniu cech geometrycznych, czyli hierarchii połączeń w modelu. Punkty kontrolne sterują krzywymi, krzywe sterują powierzchniami, powierzchnie sterują panelami itp. Ta cecha była też wykorzystana do stworzenia reagującej na słońce  fasady, gdzie każdy element dziedziczy swoją orientację porównując swoje początkowe ustawienie z kierunkiem padania promieni słonecznych.

- tworzeniu powierzchni krzywoliniowych, i budowaniu na ich podstawie siatek punktów za pomocą listy parametrów UV (w dwuwymiarowym łańcuchu na przykład).

- fabrykacji stworzonych elementów.

m-star21m-star11

Praca Macieja Starowicza, krzywe BSpline użyte jako materiał do stworzenia wzoru perforacji fasady budynku.

amfiteatr3Praca Karoliny, parametryczny amfiteatr dostosowujący się do rzeźby terenu.

kasiadudycz2Katarzyna Dudycz, eksperymentalna forma konstrukcji dachu.

jakubJakub Szkiłądź, przekrycie części miasta organiczną strukturą o dużej skali.

kasiafilipiakKasia Filipiak, przestrzenna forma i jej rozwinięcia na płaszczyznę.

olga2

Olga Woronowicz, parametryczny dach. Topologia podziałów rozrysowana na płaszczyźnie, a następnie podniesiona na krzywoliniową powierzchnię jako pionowa projekcja. Czworokąty powstały jako połączenie punktów na krzywych bspline będących offsetem krawędzi dachu, wypełnienie środka środka już za pomocą arbitralnych trójkątów.

szalet1

szalet2

Izabella Cichońska, projekt szaletu miejskiego. Wykorzystano tutaj łatwo rozwijalne, pojedynczo zakrzywione powierzchnie .

fabrykacja02elementy projektów przygotowane do fabrykacji.

(…)

imgp9924

imgp9923

imgp9922

imgp9920

imgp9915