Inleiding

Deze beschrijving van het aanmaken van een transactionscript voor GenerativeComponents is een vrije interpretatie op basis van een voorbeeldscript van Axel Kilian, een van de “early adapters” van GenerativeComponents.
Het bevat een stapsgewijze uitleg van uit te voeren handelingen en aandachtspunten daarbij. De tekst is gebaseerd op het gebruik van GenerativeComponents.software versie 08.09.04.73 met MicroStation 08.09.04.51 en Triforma.

Uiteraard kan vaardigheid in het gebruik van GenerativeComponents alleen bereikt worden door zelf veel uit te proberen. Niet alle mogelijkheden van de gebruikte commando’s en features zijn dan ook in deze tekst opgenomen. Daarvoor verwijzen wij naar de helpbestanden van GenerativeComponents en de voorbeeldscripts die door Bentley aangeboden worden.

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.

De werkomgeving

Het scherm van GenerativeComponents laat zowel de logische relaties in het model zien als de grafische vorm die dit opgeleverd heeft. Het is aan te bevelen om zowel de Symbolic View als de Graphic View in beeld te hebben. Daar overheen ligt dan het menuvenster van GenerativeComponents. Het zal duidelijk zijn dat een dubbelscherm oplossing hier erg prettig is.

Starten

Om te starten met onze opgave dienen we eerst een werkbestand aan te maken. Start de GenerativeComponents software en maak een nieuwe Designfile aan. Gebruik GCSeed.dgn als seedfile als deze beschikbaar is, maar een willekeurige andere seedfile kan ook.
Als je deze file opent zal GenerativeComponents geladen worden. NB:De dgn-file wordt automatisch geleegd!
Vervolgens moet een transactiescript geladen worden of een nieuw script aangemaakt worden. Gebruik de knop en geef het script een logische naam. Let op waar het script terecht komt, meestal in de map C:\Documents and Settings\All users\Application Data\bentley\Workspace\GenerativeComponents\Transaction Files

Elke keer als het transactiescript opgeslagen wordt, wordt een “stap” in het script toegevoegd, waarin de laatste wijzigingen in het model opgenomen zijn (dit kunnen dus meerdere features en/of handelingen zijn) Geef zo’n transactie-stap een logisch naam zodat duidelijk is wat de bedoeling is

Nu kunnen we beginnen met het modelleren. Zoals gezegd moeten eerst de basispunten ingebracht worden.

Het plaatsen van punten in GenerativeComponents gebeurt met de knop CreatePoint (geel vierkantje met streep erdoorheen)
Een punt in het 3D-model ziet er als volgt uit. De stip-uiteinden geven de vrijheidsgraden aan, waarover later meer.

De eerste vijf punten kunnen willekeurig – bijvoorbeeld in zigzagvorm – in het veld geklikt worden. Ze komen automatisch op hoogte 0 terecht. Punten 6 en 7 kunnen eveneens willekeurig ingegeven worden op enige afstand van de overige 5 punten.
De laatste 3 punten zijn wat bewerkelijker. In dit geval zorgen we dat bepaalde coördinaten van deze punten gelijk zijn aan ander coördinaten. Zo dienen de X- en Y- coördinaat van de punten 8 en 9 gelijkte zijn aan die van de punten 6 en 1. De z- waarde is vrij, met dien verstande dat de z-waarde van punt 9 gelijk is aan de z-waarde van punt 8. Tot slot punt 10. Daarvan is de x-waarde gelijk aan de x-waarde van punt 1, is de y waarde vrij en is de z-waarde gelijk aan de helft van de z-waarde van punt 9.

Het wijzigen van gegevens van een punt gebeurt door de knop “Edit Feature” te gebruiken en het betreffende punt aan de klikken. De (nieuwe) X-, Y- of Z- waarde kan dan ingevuld worden en de vrijheid in elke richting kan beperkt worden (free/lock) Verwijder de tekst en vul voor de nieuwe waarde het overeenkomstige deel in van het punt waaraan dit punt gerelateerd moet zijn, bijvoorbeeld “plane01.X” (dit is de x-coördinaat van punt1)

De tweede stap is het creëren van basisdoorsneden met behulp van deze basispunten.
Allereerst een bspline op basis van de punten in het grondvlak.
Je doet dit door een nieuwe Feature aan te maken. Kies het feauter-ikoon en kies vervolgens in de lijst voor BsplineCurve. Er zijn een aantal mogelijkheden om zo’n bspline te maken. In dit geval kiezen we voor ByPoints.
Kies het onderdeel” Points: IPoint[] (repl)“en beweeg met de cursor en ctrl-toets ingedrukt over de punten. Klik als het bedoelde punt oplicht (met een flyout tekst). De naam van dat punt verschijnt nu in het invulveld. Zorg dat alle bedoelde punten (in ons geval 1 t/m 5) geselecteerd zijn

De tweede bspline is bedoeld voor de verticale doorsnede van de gevel. Maak opnieuw op dezelfde manier een BsplineCurve-Feature aan en gebruik de punten 1, 10 en 9. Punt 9 is verplaatsbaar naar boven en beneden en naar voren en achteren en regelt zo de verticale kromming van de gevel.

Vervolgens wordt deze laatste curve gekopieerd naar alle secundaire punten.
Kopiëren gebeurt met het commando “Copy Feature”. Daartoe moet aangegeven worden wat gekopiëerd moet worden, en van welk basispunt en doelpunt(en) gebruik gemaakt moet worden.

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.

De gekleurde lijnen en punten bij een PointSymbol in het model geven de verplaatsingsvrijheden aan. De magenta kleur is bedoeld voor verticale bewegingen, de rode kleur voor bewegingen in x-richting en de groene kleur voor bewegingen in y-richting. De gekleurde lijnen die een winkelhaak vormen geven de verplaatsingsmogelijkheden in hun respectievelijke vlak aan (XY, YZ, of XZ-richting) Dor het punt hier aan te klikken kan men de bewegingsrichting sturen. Als een punt een bepaalde kleur niet heeft betekent dat, dat bewegingsvrijheid in die richting niet toegestaan is. Secundaire punten hebben deze kleurcodering niet en zijn dus niet vrij beweegbaar.

Tot slot in deze stap een lijn tussen punten 6 en 8, en een lijnstring tussen 1, 6, 7 en 5. Maak weer een nieuwe feature aan. Kies voor Line of LineString en de methode ByPoints.
Uiteindelijk wordt deze curve omhoog gekopieerd zodat dezelfde curve op hoogte door punt 8 gaat Het punt 8 is verticaal vrij verplaatsbaar en regelt zo de hoogte van de gevel
Het raamwerk is nu klaar. We kunnen nu de gevel gaan modelleren.

In de volgende stap worden nog enkele extra verticale secundaire punten toegevoegd en wordt op basis van alle secundaire punten een vlakkenfiguur (bspline surface) gemaakt.
Deze vlakkenfiguur dient om de voorgevel een primaire vorm te geven die later meer in detail ingevuld kan worden

Uiteraard kunnen ook de rechte gevels van vlakken voorzien worden. Daartoe moeten opnieuw lijnen en secundaire punten toegevoegd worden, waarna weer vlakken (in dit geval polygons) gegenereerd worden.

In de volgende stap worden een aantal grafische elementen tijdelijk onzichtbaar gemaakt met het commando “Toggle Visibility”

Met de knop ToggleVisibility kunnen bepaalde delen van het model (tijdelijk) onzichtbaar gemaakt worden. Dit kan het overzicht van het model en het selecteren van elementen in het model sterk verbeteren. De onderdelen die onzichtbaar worden krijgen in het symbolisch model een grijze kleur. Door op de grijze symbooldelen te klikken kan de zichtbaarheid weer aangezet worden.

In de volgende stap in het script wordt een nieuw element gecreëerd dat als zelfstandig GC component gebruikt zal gaan worden. Daarvoor worden 4 nieuwe punten geplaatst en wordt een vlak met de vier hoekpunten gedefinieerd en worden gekruist buiselementen geplaatst per twee hoekpunten. Op deze manier ontstaat een element dat als repeterend gevelelement gebruikt kan worden.

Een belangrijke stap is het genereren van een eigen GC feature uit de zojuist getekende geometrie. Nadat men het commando “Generate Feature Type” gestart heeft moet men aangeven welke onderdelen van deze geometrie als input beschouwd wordt en welke als output. Met andere woorden op basis van welke gegevens moet het nieuwe element geplaatst worden en wat moet van dat nieuwe element zichtbaar zijn. In dit geval zijn de vier hoekpunteninput en zijn het vlak en de buizen output let er op dat bij de input de optie “Replicatable” moet aanstaan. Desgewenst kan men bij de output enkele delen onzichtbaar maken door deze als “construction” aan te duiden.

Na OK is het nieuwe element als GC Feauture beschikbaar. Plaatsen van het nieuwe element gebeurt door het feauture te kiezen en de plaatsingsmethode “by default” te kiezen. Vervolgens moeten de punten die gebruikt moeten worden als input geselecteerd worden (in dit geval point02)
De beschrijving van de nieuwe feature is als CS-bestand (LOL1.CS) nu aanwezig in de map .. GC_Default\Features. Let op: bij herhalen van dit script zal dus opnieuw getracht worden een component aan te maken met dezelfde naam. Dat kan uiteraard niet omdat deze al bestaat: Schakel deze stap in het script zonodig uit maar zorg wel dat het component geladen is (via Tools -> Manage loaded feature types)

In de laatste stap kan nu dit nieuwe feature toegepast worden in ons eigen model

Variaties in het model

Om de totale vorm van het model te kunnen variëren zijn controlepunten ingebracht in het model. Door deze punten te verplaatsen zal de vorm van het model veranderen.
Kies de knop Move Feature en klik een van de controlepunten, bijvoorbeeld een van de basispunten van de bsplinevorm van de voorgevel of het punt in de zijgevel waarmee de bolling van de voorgevel gestuurd kan worden.
(Hier blijkt dat de rekenkracht van de PC aangesproken wordt en ook de snelheid waarmee de grafische processor kan reageren.)
Om de modelvorm ook parametrisch te kunnen behandelen zijn parameters nodig.(variabelen), bijvoorbeeld voor de verdiepingshoogte, het aantal verdiepingen of de verdeling in de gevel (aantal tussenpunten)

Kies uit het pulldownmenu Graph->Manage Graph Variables. Met Add voeg je uiteraard en variabele toe en kun je een beginwaarde invullen.
Door rechtsonder ‘Limit value to range’ te kiezen kun je een schuifbalk invoegen die je de mogelijkheid geeft de waarde “dynamisch” aan te passen.

Let op dat het gebruik van de getalvariabele in een transactie betekent dat die variabele dan bekend moet zijn. Het instellen van de variabelen dient dus in principe aan het begin van het totale script te gebeuren.

Het GC-model en de MicroStation-tekening

Via het File menu van GenerativeComponents kunnen tekeningen als MicroStation tekening geïmporteerd of geëxporteerd worden, of kan een tekening als referencefile gekoppeld worden. Dit is uiteraard erg handig wanner een basisvorm van het model al beschikbaar is.

Gegevens uit het model halen

Met de speciale DataExporter is het bijvoorbeeld mogelijk 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.
In dit geval wordt gekozen om de coördinaten van alle point02 op te slaan in een Access-bestand GC_Points_database.mdb. De feature maakt zelf een tabel Table1 aan en scrijft daarin de coördinaten weg.