Inleiding
Al eerder heb ik in een artikel in CADmagazine de globale werking van GenerativeComponents beschreven. Toch is de werking van GenerativeComponents het beste te beschrijven aan de hand van een concreet voorbeeld. In dit artikel volgt dan ook de beschrijving van een uitgewerkt voorbeeld. Meer gedetailleerde instructies en aanwijzingen – om zelf met de software aan de gang te gaan – zijn te vinden op www.cadmagazine.nl
Wat is GenerativeComponents?
Om nog even kort terug te grijpen op het vorige artikel: GenerativeComponents is een belangrijke nieuwe ontwikkeling van Bentley op het gebied van …
Een groep vooraanstaande ontwerpers van bekende Architecten- en Ingenieursbureaus onder leiding van Robert Aish, Bentley’s Director of Research, houdt zich bezig met de ontwikkeling van ontwerpgereedschap dat het mogelijk moet maken de ontwerpvoorwaarden te beschrijven en variaties te onderzoeken. Vastgelegd worden daarbij enerzijds de ontwerpregels die de ontwerper in zijn ontwerp van belang vindt en anderzijds de relaties die tussen structuuronderdelen in het bouwwerk bestaan. Bentley en Robert Aish hebben deze techniek de naam GenerativeComponents gegeven.
Met GenerativeComponents wordt 3D-geometrie parametrisch ingebracht in een MicroStation DGN. Door middel van het invoeren van een aantal basisparameters en het combineren van deze parameters met vooraf gedefinieerde gedragsregels, ontstaan zogeheten ‘features’, die onderling weer gecombineerd kunnen worden en waarbij aan de combinaties weer nieuwe gedragregels gekoppeld kunnen worden.
Het 3D-model is uiteindelijk opgebouwd uit een aantal componenten die met behulp van zogeheten’ transacties’ tot stand gekomen zijn.
Het model heeft dus een soort logische hiërarchie, die globaal als volgt omschreven kan worden:
- Het model, dat het resultaat is van alle transacties
- De transacties die de afzonderlijke stappen in het ontwerpproces weergeven
- De stappen, een verzameling van ‘features’ die tezamen het model vormen
- De relaties tussen de verschillende features en de ingevoerde parameters
De interface waarmee de GenerativeComponents software werkt kent een symbolic view (Symbolic Dependancy Graph) en een 3D model view. Met behulp van de Symbolic View is het mogelijk de relaties tussen de componenten in beeld te brengen en eventueel te wijzigen. Wijzigingen hebben in de regel tot gevolg dat het transactionscript opnieuw “afgespeeld” moet worden (vanaf het begin doorlopen).
De opzet van een model voor GenerativeComponents is gebaseerd op zogeheten TransactionScripts. Dit betekent dat alle handelingen en bewerkingen geregistreerd en opgeslagen worden. Dit betekent ook meteen dat de bewerkingen “teruggedraaid” kunnen worden of later “opnieuw afgespeeld”.
In onderstaand voorbeeld worden enkele van de mogelijkheden toegepast. Dit eenvoudig model is opgezet naar voorbeeld van een van de vele voorbeeldscripts die door Bentley en door geïnteresseerde gebruikers (“early adapters”) gemaakt zijn, in dit geval van Axel Kilian.
De opdracht en de basispunten
De bedoeling is een eenvoudig bouwwerk te creëren, met een min of meer rechthoekige plattegrond, waarbij een van de lange gevels zowel horizontaal als verticaal gekromd is.
Bovendien moeten zowel de hoogte van het bouwwerk als de kromming van de gevel traploos variabel zijn.
De basis van een model van is de toepassing van een aantal basispunten om de vorm te sturen en een aantal punten die daarvan afgeleid zijn. Voor deze opgave zijn dus deze basispunten nodig en zullen een aantal afgeleide vormen en puntenseries gebruikt worden. Allereerst zijn een aantal punten in het grondvlak nodig. Voor de gekromde gevel worden 5 punten op zigzagwijze geplaatst. Deze zullen de basis vormen van de Bspline die de vorm van de gevel bepaalt. Twee andere punten bepalen de (rechte) andere lange gevel en daarmee zijn ook de (rechte) kopgevels bepaald. Tot slot bepalen drie andere punten de hoogte van het bouwwerk en de uitstulping van de gekromde gevel.
Punten 8 en 9 behoren precies boven punten 1 en 6 te liggen: deze geven de hoogte van het bouwwerk aan en worden in dit geval even hoog gedefinieerd. Punt 10 ligt precies op halve hoogte tussen punt 1 en punt 9 en ligt daarmee vast, maar het punt moet wel naar binnen en buiten verplaatst kunnen worden zodat de verticale bolling van de gevel variabel blijft.
Het is dus erg belangrijk goed vast te leggen hoe de vorm gestuurd wordt. In dit geval is voor een 9-tal basispunten gekozen en in de verdere uitwerking zal blijken dat tevens voor een aantal getalparameters gekozen is. Het is overigens wel degelijk mogelijk achteraf stuurelementen toe te voegen (getalvariabelen zijn eenvoudiger dan controlepunten) maar dit betekent in de regel dat het gehele transactiescript opnieuw doorlopen moet worden.
Uiteindelijk is het de bedoeling dat de gevel opgebouwd wordt uit gevelelementen. Daarin zit de kracht van GenerativeComponents. Het is mogelijk een eigen component aan te maken dat toegepast kan worden op alle daarvoor aangewezen plekken.
De verschillende stappen in het transactionscript
Het model wordt in een aantal opeenvolgende stappen opgebouwd
- In stap 1 wordt een tiental basispunten aangeven, waarna een bspline door de punten 1 t/m 5 de gekromde basisvorm van de voorgevel oplevert. Langs deze bspline worden 10 secundaire punten gegenereerd zijn die nodig zijn om de verdeling van de gevel vorm te kunnen geven. Nadat deze grondvorm gekopieerd is naar de maximale hoogte wordt een tweede bspline gegenereerd op basis van 3 verticale punten. Deze vericale bspline wordt gekopieerd langs alle secundaire punten van de horizontale bspline. Dit is een van de krachtige functies van GenerativeComponents. Door een punt van de hele groep aan te wijzen en de index te verwijderen wordt duidelijk gemaakt dat de actie voor alle punten herhaald moet worden. Men kan nu de vormvrijheid al testen door de punten 8 en 9 te bewegen. Tot slot wordt in deze stap een rechthoekige grondvorm met een linestring bepaald.
- In stap 2 van het script wordt de vormvrijheid getest door basispunten te verplaatsen.
- In stap 3 worden 20 secundaire punten langs de verticale curven toegevoegd, en op basis van de verticale en horizontale hulppunten wordt een bsplinesurface gegenereerd.
- In stap 4 worden zijgevel en bovenvlak gegeneerd met een verticale lijn die hetzelfde aantal secundaire punten bevat als de verticale curve.
- In stap 5 wordt de zichtbaarheid van hulppunten tijdelijk uitgeschakeld.
- In stap 6 in het script wordt een nieuw element gecreëerd dat als zelfstandig GC component gebruikt zal gaan worden. Dit basiselement (een zelfgemaakte component dus) zal als invulling voor de gevel gebruik worden.
- Stap 7 is een belangrijke stap omdat hier een eigen GC feature uit de zojuist getekende geometrie gegenereerd wordt. Hier wordt ook vastgelegd welke onderdelen van deze geometrie als input beschouwd wordt en welke als output. De setting “replicatable” is hierbij van groot belang.
- Tot slot wordt het zelf gecreëerde element in de gevel ingevoegd. Daarbij zal de geometrie van het element zich aanpassen aan de stuurelementen (punten of vlakken) die in de beschrijving van het element benoemd zijn.
Variaties in het model
Uiteindelijk is het natuurlijk de bedoeling dat de vorm gevarieerd kan worden. Daarvoor kunnen de controlepunten bewogen worden. Door een van de controlepunten te bewegen, bijvoorbeeld een van de basispunten van de bsplinevorm van de voorgevel of het punt in de zijgevel kan de bolling van de voorgevel gestuurd worden. Hier blijkt dat de rekenkracht van de PC aangesproken wordt en ook de snelheid waarmee de grafische processor kan reageren.
Een andere manier van variëren is de het werken met een getal-variabele. Deze kan bijvoorbeeld gebruikt worden voor de verdiepingshoogte, het aantal verdiepingen of de verdeling in de gevel (aantal tussenpunten)
Met behulp van het pulldownmenu Graph->Manage Graph Variables kunnen parameters ingebracht worden. Door hier eventueel gebruik te maken van ‘Limit value to range’ kun je een schuifbalk invoegen die je de mogelijkheid geeft de waarde “dynamisch” aan te passen.
Gegevens uit het model halen
Met een dergelijk parametrisch en wiskundig samengesteld model moet het mogelijk zijn een groot aantal gegevens automatisch uit het model te destilleren. Uiteraard kan dat. Daarvoor zijn speciale “features” beschikbaar die je bijvoorbeeld de mogelijkheid geven de coördinaten van alle punten of de maten van alle elementen of de aantallen van deze elementen en hoeveel maal dezelfde vorm voorkomt op te slaan in ASCII-bestanden, spreadsheet-bestanden of databases
GenerativeComponents en MicroStation
De relatie tussen een GenerativeComponents model en een MicroStation tekening is beperkt. Ten eerste wordt het model (de tekening) door het script steeds op nieuw opgebouwd zodat het dgn-bestand dat bewaard is niet meer dan een stand van zaken aangeeft en ten tweede is de intelligentie die in de tekening zit alleen te gebruiken met de GenerativeComponents software. De MicroStation tekening bevat in essentie cellen en curves met intelligentie die alleen door GenerativeComponents software gebruikt kan worden Wel is het de bedoeling dat steeds meer Bentley producten die op MicroStation gebaseerd zijn deze techniek gaan ondersteunen. Een ander aspect van de scheiding tussen GenerativeComponents en MicroStation is het feit dat de interface van MicroStation teruggebracht is tot een enkel pulldownmenu (wel met alle opties). Het is de bedoeling dat wijzigingen in het model met de interface van GenerativeComponents gebeurt en niet met MicroStation. Dit zou onvoorspelbare gevolgen kunnen hebben. Er is overigens wel degelijk een duidelijke mogelijkheid aanwezig om tekeningen als MicroStation tekening te importeren of exporteren of om een tekening als referencefile te gebruiken.
Tot slot
Dit artikel is voornamelijk bedoeld om zelf aan de slag te gaan en de eigen creativiteit met deze software te testen. Behalve dit voorbeeld zijn diverse voorbeelden te vinden bij de websites van Bentley en andere “early adapters”. En dan nog dit: elke overeenkomst tussen de vorm van dit model en andere gebruiksvoorwerpen of kledingstukken berust louter op toeval?