Lenz Stairs Afstudeerproject Autocad 2006 Ace System manager.
Naam Bedrijf Opleiding Consulent Datum
: Lennert Alblas : Fa.Jac.Korpershoek : ACE System Manager : ir. R. Boeklagen : 11-10-2005
Voorwoord “Zoek een baan die bij je past en je hoeft nooit meer te werken” Bovenstaande uitspraak is typerend voor mijn “werkzame” leven. Onder de indruk van de vele mooie objecten die mijn vader in zijn leven heeft getekend, groeide de interesse en liefde voor het tekenaars vak. De vrije tijd die ik had bestede ik dan ook graag door naast mijn vader op een A0 formaat tekentafel de beginselen van het tekenen te leren. Niet dat hij zo spraakzaam was maar de weinige woorden waren wel opbouwend en voldoende om mij te stimuleren. Doordat de computer al op jonge leeftijd voor mij beschikbaar was begon ik ongeveer op het zelfde moment met “Basic” kleine programmatjes te schrijven. Uren heb ik zitten tobben om allerlei stukjes code te realiseren wat nu binnen vrij korte tijd is te verwezenlijken. Kortom de informatica maakte een sprong vooruit en het tekenen met behulp van de computer was realiteit. Het tekenen is al jaren een hobby van me en de computer is hierbij in deze tijd niet meer weg te denken. Ik heb met veel plezier deze studie gedaan. Het was een uitdaging om het zo goed mogelijk te doen. Hierbij heb ik voorop gezet dat de basis van het programma kwalitatief goed moest zijn, niet de hoeveelheid. Graag zou ik het resultaat nog verder blijven ontwikkelen maar aangezien dit in mijn vrije tijd moet gebeuren zal dit wel enige tijd in beslag nemen. Graag nodig ik u uit om dit verslag door te lezen. Hardinxveld-Giessendam 11 oktober 2005 Lennert Alblas
2
Inhoud Voorwoord Inhoud Inleiding 1 Zoals het was
2 3 4 5
1.1 Werkervaring 1.2 Omgevingsfactoren
5 6
2 Waarom deze keuze
7
2.1 Probleemstelling en doel van de toepassing 2.2 Mijn ideaal 2.3 Nieuwe werkwijze 2.4 Plan van aanpak
7 9 10 11
3 Het resultaat
12
3.1 De maten
12
3.1.a Hoogte 3.1.b Hoek 3.1.c Weltrede of bordes 3.1.d Deelfactor, Aantrede en de Optrede 3.1.e Leuninghoogte 3.1.f Septerafstand 3.1.g De overige maten
12 12 12 13 14 14 15
3.2 Programma onderdelen
16
3.2.a Het valideren van invoer 3.2.b Errorafhandeling 3.2.c De taal 3.2.d Profiel gegevens 3.2.e Het klantmodel 3.2.f Tekenen van de trap 3.2.f-1 De voortgangsindicator 3.2.f-2 De Leuning 3.2.f-3 De Trapboom 3.2.f-4 De traptrede 3.2.g Het rapport 3.2.h XData 3.2.i Het stroomschema
16 17 18 19 20 21 21 21 22 23 26 27 28
4 Conclusie 5 Dankwoord
30 31
3
Inleiding Het gebruik van de computer bij het tekenen en ontwerpen is in deze tijd niet meer weg te denken. Toch is het zo dat veel bedrijven geen of weinig tijd besteden aan het optimaliseren en aanpassen van bijvoorbeeld Autocad. In de praktijk heb ik wel geleerd dat het wel degelijk de moeite loont diverse kleine en grotere uitbreidingen te maken voor diverse taken. Het is schrikbarend hoe vaak één of meerdere handelingen herhaald worden! Hierbij gaat zeer veel tijd verloren. Hierdoor worden ook vaker fouten gemaakt. Het schrijven van een stukje code neemt soms een aantal uren in beslag maar het is vaak bij één opdracht al lonend, alle volgende keren dat hiervan gebruik wordt gemaakt wordt tijd en geld verdiend! Door de tijdsdruk die vaak achter het werk staat wordt hier in het algemeen weinig of geen aandacht aan gegeven. Jammer want we kunnen het veel rustiger aan doen op het moment dat het werk door een ander wordt gedaan in dit geval de computer. Wat dat betreft zou ik een ieder aanraden deze opleiding bij ir. R. Boeklagen te volgen en te voltooien. Wel wil ik het advies geven daadwerkelijk met hetgeen je geleerd hebt aan de slag te gaan, alleen door het toepassen werf je echt de kennis. Doormiddel van dit verslag hoop ik u te overtuigen dat het resultaat van deze afstudeeropdracht in menig bedrijf met veel plezier gebruikt zou kunnen worden.
4
1
Zoals het was 1.1 Werkervaring Als scheepsmetaalbewerker ben ik vier jaar werkzaam geweest bij scheepswerf “van Mill” te Hardinxveld-Giessendam. Een groot deel van die tijd heb ik op de spantenvloer gewerkt waar we met twee personen een aluminium jacht en een containerschip op ware grote hebben uitgewerkt. Vervolgens werk ik nu dertien jaar bij de firma jac.Korpershoek in Dordrecht. Mijn werkzaamheden zijn binnen het bedrijf zeer uitgebreid en bestaan o.a. uit het volgende: contact met de klanten voor het doorspreken van de opdracht, het ontwerpen, tekenen ,calculeren en het doen van een offerte. Na goedkeuring van de klant, uitwerken van werktekeningen ,CNC files e.d. opdracht geven / bestellen van onderdelen die door derden worden geleverd. Ook het maken van het product is mijn taak! Hierbij maak ik gebruik van o.a. een draaibank, freesbank, digitale guillotineschaar, CNC kantbank, CNC snijmachine, div. boor- mig/mag- tig- zaagmachines. Dan rest nog het plaatsen of bezorgen. Tevens is het beheer van alle gebruikte applicaties en het onderhoud van het netwerk en de hardware van de systemen en CNC machines mijn verantwoording. Bij leven en welzijn ga ik per half november 2005 in dienst bij constructiebedrijf van Wijngaarden. Hier ben ik aangenomen als werkvoorbereider / tekenaar / calculator. Aangezien dit werk mijn voorkeur heeft heb ik veel zin om daar aan het werk te gaan. We hopen op een goede samenwerking.
5
1.2 Omgevingsfactoren Het bedrijf waarin ik werkzaam ben maakt met behulp van de modernste technieken allerlei producten vervaardigd uit metaal, aluminium en roestvaststaal o.a. constructies, bordessen, trappen industrieel maar ook voor interieur toepassingen, aanpassingen aan bestaande machines, ontwerp en productie van specifiek voor de klant ontworpen producten, kasten, beveiliging, motorfundaties, vloeistoftanks, steunen, leidingwerk, specialistische ontwerpen en of uitslagen van plaat- en balkmateriaal, voethekken, banken, pinzuilen, communicatiezuilen, papierbakken, hekwerken, meubels draaibaar, klapbaar, verlichting, bruggen etc. Zie Figuur 1-a “Raadzaal Zoetermeer” Mijn werkzaamheden staan hiervoor bij par.1.1 “Werkervaring” beschreven. De reden van het maken van de afstudeeropdracht is dat ik mijzelf volledig wil specialiseren in Autocad en VisualBasic en samen met de zeventien jaar zeer brede ervaring in de metaal een betere positie in het bedrijfsleven hoop te verwerven.
Figuur 1-a “Raadzaal Zoetermeer”
6
2
Waarom deze keuze 2.1 Probleemstelling en doel van de toepassing Het vervaardigen van een trap is een tijdrovende bezigheid. Niet alleen het ontwerp maar ook het maken van de werktekeningen en de eventueel benodigde CNC files kosten de nodige tijd. Als in de ontwerpfase nog een en ander wordt gewijzigd is dit vaak aanleiding tot het maken van een nagenoeg volledig nieuwe tekening. Vaak wordt de hoogte van een bestaande trap gewijzigd. Dit is direct aanleiding om een nieuwe tekening te maken, het aanpassen is vaak erg verwarrend en het maken van fouten is dan ook vaker aan de orde. Uiteindelijk worden de maten bepaald door de hoofdafmetingen van de trap.
Figuur 2-a “Trap voor een dubbele kantoorunit”
7
De keuze voor het werken met Autocad en Visual basic for Applications was voor mij niet echt moeilijk. Het werken met Inventor is tot op heden nog niet aan de orde geweest. Inventor is een duurder pakket en aangezien het voor mijn dagelijkse bezigheden niet een must is heeft Autocad dus de voorkeur. Hier werk ik al een aantal jaren mee en het driedimensionaal tekenen is ook goed mogelijk. Dit heb ik ook al vaker toegepast bij het ontwerpen van diverse objecten. Zie Figuur 2-c “Visualisatie 3D ontwerp reclamezuil” Aangezien ik in mijn jeugd met Basic heb gestoeid leek het me leuk het nu weer op te pakken met een cursus VBA bij ir. R. Boeklagen.
Figuur 2-b “Visualisatie 3D ontwerp reclamezuil”
Andere opties zijn voor dit probleem niet echt interessant aangezien het puur een automatisering van handelingen en berekeningen is. Wel heb ik de optie overwogen om de trap samen te stellen met behulp van Dynamische Blokken in Autocad 2006, ook omdat dat de versie is waarmee ik afstudeer. Het is goed mogelijk via VBA variabelen door te geven aan dynamische blokken. Nadeel is dat deze manier van werken alleen toepasbaar is op Autocad 2006 en eventuele volgende versies. Bij de start van deze opdracht was eventuele commerciële verkoop aan de orde, hierbij is het natuurlijk wenselijk dat het resultaat op zoveel mogelijk versies zou werken. De conclusie is dus dat de toepassing met behulp van VBA moet worden gemaakt en in samenwerking met een database. 8
2.2 Mijn ideaal Mijn ideaal is het doormiddel van het invoeren van de vereiste gegevens een trap te laten tekenen in Autocad. Het laat zich verstaan dat dit een aanzienlijke tijdwinst en dus een betere concurrentiepositie ten gevolg heeft. Groot voordeel is dat: door een medewerker met beperkte voorkennis van trappen en of Autocad toch in staat is deze te tekenen. snel een wijziging doorgevoerd kan worden. door gebruik van een klantmodel een zelfde type trap wordt gemaakt. de toegeleverde materialen direct besteld kunnen worden.
Figuur 2-c “Trap rapport”
9
2.3 Nieuwe werkwijze Na het installeren van “LenzStairs 1.0” heeft de gebruiker de mogelijkheid om doormiddel van een toegevoegde knop de applicatie te starten. De interface geeft de gebruiker diverse opties voor het kiezen van de verschillende traponderdelen e.a. wordt gekozen uit de database of er wordt gebruik gemaakt van een bestaand klantmodel uit de database en de hoofdmaten worden ingegeven. Vervolgens worden door de applicatie alle relevante maten driedimensionaal berekend en in een nieuwe tekening getekend. Van deze driedimensionale tekening kunnen de diverse aanzichten worden gegenereerd. De gegevens uit deze tekening kunnen in de tekening van de gebruiker worden geïmplementeerd. De gebruiker wordt geacht enige voorkennis van Autocad te hebben en tevens op de hoogte te zijn van het geldende bouwbesluit aangaande dit onderwerp. Voor de keuze van de gebruikte traponderdelen is de gebruiker van deze applicatie verantwoordelijk voor de sterkteberekening van de diverse onderdelen. De maker van deze applicatie neemt hiervoor geen enkele verantwoording. De loop van de applicatie is gebaseerd op de intuïtie van de gebruiker. Als instructie wordt een videobestand op de cd-rom meegeleverd.
Figuur 2-d “de Interface”
10
2.4 Plan van aanpak De applicatie wordt volledig in “Visual Basic for Applications” binnen Autocad 2006 geschreven. Hierbij wordt gebruik gemaakt van het ActiveX Data Object als database voor de gebruikte materiaalgegevens en de initialisatie gegevens voor de applicatie. Tevens wordt hierin een logboek bijgehouden voor eventuele foutmeldingen. De gebruikte materialen voor de trap worden in de tekening gegenereerd en niet als “block” geïmporteerd. Het kost extra inspanning om dergelijke code te schrijven maar geeft anderzijds de vrijheid van een grote hoeveelheid te kiezen materialen en de tijdwinst van het afzonderlijk tekenen of importeren van ieder materiaal. Het geeft winst wat betreft de benodigde schijfruimte en daardoor ook snelheids verbetering. Het belangrijkste argument om deze materialen op deze wijze te tekenen is de precisie van de materialen en het gebruik van de parameters bij de berekening van de trap. De routine voor foutafhandeling met gebruik van de database is ideaal. Hierdoor is het mogelijk om na het gebruik te achterhalen wat er precies fout ging, waar en op welk tijdstip. Het tekenen van de trap doe ik driedimensionaal dit geeft het gemak van het genereren van de diverse aanzichten eventueel onder verschillende hoeken of zelfs in perspectief. Bij gebruik van het commando “Solprof” van Autocad ben je zo in staat de zichtbare en niet zichtbare lijnen op de goede wijze te tekenen en direct in een apart layer te zetten. Alle andere manieren geven aanzienlijk meer werk en daardoor meer kans op fouten.
Figuur 2-e “Solprof in actie”
11
3
Het resultaat Voor het tekenen van een trap zijn een aantal gegevens nodig. Deze gegevens zijn vaak afhankelijk van een bestaand object zoals een verdieping of bordes in een gebouw. Anders wordt dit vooraf bepaald en in het ontwerp van een object gebruikt. Voor het maken van een trap die in een publieke ruimte wordt geplaatst ben je wel afhankelijk van de geldende voorschriften en het bouwbesluit.
3.1 De maten In deze afstudeeropdracht beperk ik mij tot de industriële trap. Hierna wil ik u duidelijk maken welke gegevens van belang zijn en hoe ik aan die gegevens komen. Hierbij beschrijf ik een aantal stukjes VBA-code.
3.1.a Hoogte De hoogte van de trap is wel de meest bepalende maat voor de trap en wordt gemeten van het loopvlak van de vloer tot het loopvlak van de te bereiken vloer. Vaak wordt bij grotere te overbruggen hoogte een tussenbordes geplaatst, zodat er een passeerpunt ontstaat, tevens is het dan mogelijk lichter te construeren.
3.1.b Hoek De traphoek is de scherpe gemeten hoek van de horizontaal met de boom van de trap. Deze waarde wordt vaak bepaald door de toepassing. In een publieke ruimte is een goed lopende trap gewenst van ongeveer 45 graden. Voor het beklimmen van een schoorsteen wordt uiteraard liever een hoek van 90 graden toegepast. De waarde van de hoek is dus in grote mate van belang voor het gemakkelijk belopen van een trap.
3.1.c Weltrede of bordes De weltrede is de horizontale maat aan de bovenzijde van de trap en wordt daar waar mogelijk toegepast. De reden hiervoor is dat als je zonder deze laatste trede de trap op loopt je met de neus van de schoen tegen of onder de boven vloer stoot. Dit resulteert in een gevaarlijke situatie. Als de lengte van de weltrede groter wordt gekozen spreekt men van een bordes. 12
3.1.d Deelfactor, Aantrede en de Optrede De deelfactor is de waarde die bepaalt uit hoeveel treden de trap opgebouwd is. Als er weinig treden in de trap zitten moet er een grotere stap genomen worden om op de volgende te komen. Bij meer treden dus juist een kleinere stap. In beide gevallen geldt dat te veel of te weinig treden niet fijn loopt. Gebruikelijk is om van een deelfactor van 600mm uit te gaan. Dit is de gemiddelde stapafstand van een volwassene. De deelfactor wordt als volgt bepaald: Deelfactor ≈ (2 ⋅ optrede ) + aantrede
De optrede is de verticale afstand tot de volgende trede en de aantrede is de horizontale afstand tot de volgende trede. De deelfactor zal dus uiteindelijk zelden precies de opgegeven waarde zijn, kijk maar naar de volgende formules: Als hoogte=1850 hoek=40 deelfactor=600 De aantrede = horizontaal/afstanden ⎛ hoogte ⎞ ⎟⎟ Aantrede = ⎜⎜ ⎝ tan (hoek ) ⎠
⎛ 1850 ⎞ ⎟⎟ 220.4744 = ⎜⎜ ⎝ tan (40 ) ⎠
⎛ ⎛ hoogte ⎞ ⎞ ⎜ (2 ⋅ hoogte ) + ⎜⎜ ⎟⎟ tan (hoek ) ⎟⎠ ⎟ ⎜ ⎝ round ⎜ ⎟ deelfactor ⎟ ⎜ ⎟ ⎜ ⎠ ⎝ ⎛ ⎛ 1850 ⎞ ⎞ ⎜ (2 ⋅ 1850 ) + ⎜⎜ ⎟⎟ tan (40 ) ⎟⎠ ⎟ ⎜ ⎝ round ⎜ ⎟ 600 ⎟ ⎜ ⎟ ⎜ ⎠ ⎝
De optrede = hoogte/afstanden ⎛ ⎛ hoogte ⎞ ⎞ ⎜ (2 ⋅ hoogte ) + ⎜⎜ ⎟⎟ tan (hoek ) ⎟⎠ ⎟ ⎜ ⎝ Optrede = hoogte round ⎜ ⎟ deelfactor ⎜ ⎟ ⎜ ⎟ ⎝ ⎠ ⎛ ⎛ 1850 ⎞ ⎞ ⎜ (2 ⋅ 1850 ) + ⎜⎜ ⎟⎟ ⎟ ( ) tan 40 ⎜ ⎝ ⎠⎟ 185 = 1850 round ⎜ ⎟ 600 ⎜ ⎟ ⎜ ⎟ ⎝ ⎠ Deelfactor ≈ (2 ⋅ optrede ) + aantrede 590.4744 = (2 ⋅ 185) + 220.4744 Een kindvriendelijke trap? Deelfactor b.v. 300mm!
Voor de deelfactor geldt:
13
Het stukje VBA-code voor de aantrede en de optrede: Hor = (Vert / (Tan(hoek))) AantAfst = Round(((((2 * Vert) + Hor)) / .txtDeelFactor), 0) AanTr = Hor / AantAfst OpTr = Vert / AantAfst
3.1.e Leuninghoogte De leuninghoogte wordt bepaald door de voorschriften, boven bepaalde hoogte wordt een andere hoogte toegepast. Deze waarde varieert tussen de 900mm en de 1100mm. Waarom wordt deze niet automatisch bepaald? Wat het programma betreft mag deze maat wat meer variatie hebben, de flexibiliteit is voor mij belangrijker. Vaak is een andere waarde technisch wenselijk en is het jammer als dan dit programma niet meer toepasbaar is. De verantwoording voor de keuze van de constructieve waarden ligt uiteindelijk bij de gebruiker.
3.1.f Septerafstand Septers zijn de verticale dragers voor de leuning, deze moeten voorkomen dat de leuning doorbuigt door eigen gewicht of door belasting. De septerafstand wordt door de gebruiker ingevoerd in de interface. Deze waarde is constructief van belang voor het doorbuigen en de stabiliteit van de leuning. De overspanning tussen de septers onderling wordt vaak gekozen tussen de 1200mm en 1500mm. Ook deze waarde zal zelden de ingevoerde waarde zijn. Het lijkt me wel aardig ook hiervan een stukje code te laten zien: De variabele AantSeptAfst krijgt de waarde van de totale lengte van de bovenleuning. AantSeptAfst = (LV(11) + (.txtWeltredeMt - LV(3) - .txtLeuEinde))
Als deze kleiner is dan de opgegeven Hart Op Hart maat van het textvak(.txtLeuHOH) dan de var(GSept) de waarde True toekennen en verdergaan bij Aanpassen. Er worden dus géén septers getekend. If AantSeptAfst < .txtLeuHOH Then GSept = True: GoTo GeenSept
Vervolgens geven we de var(AantSeptAfst) de waarde van het aantal afstanden tussen de septers. AantSeptAfst = Round((LV(11) + (.txtWeltredeMt - LV(3) - .txtLeuEinde)) / .txtLeuHOH)
Door de leuninglengte te delen door het aantal afstanden geven we var(LV(10)) de maat hart op hart septer gemeten over de leuning. Aanpassen: LV(10) = (LV(11) + (.txtWeltredeMt - LV(3) - .txtLeuEinde)) / AantSeptAfst
14
Als deze groter is dan de opgegeven hart op hart maat, verhogen we het aantal septers met één en herberekenen we de maten vanaf Aanpassen. If LV(10) > .txtLeuHOH Then AantSeptAfst = AantSeptAfst + 1: GoTo Aanpassen
De var(LV(9)) geven we de hart op hart maat horizontaal gemeten, dit wordt dus de horizontale maat voor de septers op het schuine gedeelte. LV(9) = Cos(LV(8)) * LV(10)
Var(xMax) en var(xMin) zijn de maximale en minimale Horizontale maat waartussen géén septer mag staan omdat deze precies in de knik van het schuine en horizontale gedeelte van de leuning zou komen. xMax = .lblTrapHor - (.txtWeltredeMt - LV(1) - (Buis1Diameter / 2)) xMin = .lblTrapHor - ((.txtWeltredeMt - LV(1)) + (Sin(LV(8)) * (LV(6) - Buis1Diameter)) + (Buis1Diameter / 2))
In de volgende code wordt voor iedere septer de horizontale en verticale positie bepaald. For i = 1 To AantSeptAfst - 1 SEP(i, 0) = LP(0, 0) + (i * LV(9)): SEP(i, 1) = 0
Als de horizontale maat tussen de minimale en maximale maat ligt, wordt het aantal septers met één verhoogd en herberekenen we vanaf punt Aanpassen. If SEP(i, 0) > xMin And SEP(i, 0) < xMax Then AantSeptAfst = AantSeptAfst + 1: GoTo Aanpassen
De septers die in het horizontale gedeelte van de trap zitten berekenen we met de waarde van var(LV(10)) zodat de hart op hart maten van de septers over de gehele leuning hetzelfde zijn. If SEP(i, 0) > xMax Then SEP(i, 0) = LP(7, 0) - ((AantSeptAfst - i) * LV(10)): SEP(i, 1) = LP(7, 1) Next i
Het aantal septers is dus afhankelijk van de opgegeven hart op hart maat in de interface en zal niet groter zijn dan deze waarde omdat er dan een septer wordt toegevoegd.
3.1.g De overige maten De overige maten die via de interface kunnen worden opgegeven zijn geen belangrijke waarden voor de trap. Wel wil ik nog even de spatie aan de onderzijde van de trap noemen. Deze maat wordt toegepast omdat er dan enige stelruimte in de trap aanwezig is, de vloer in niet altijd even vlak of zelfs moedwillig afwaterend (schuin) gemaakt. De opzet is om aan beide zijden van het plaatje aan de onderzijde van de trap een ring en een moer op het vloeranker te doen waarmee de trap gesteld kan worden. 15
3.2 Programma onderdelen 3.2.a Het valideren van invoer Wanneer de gebruiker een waarde invoert in de interface moet deze worden gecontroleerd en eventueel dusdanig worden aangepast dat het een geldige waarde wordt. Waarom valideren? Daar zijn een aantal redenen voor te bedenken. Ten eerste, als men bijvoorbeeld een veel te grote waarde invoert zou de computer het rekenwerk niet meer aankunnen door de geweldige hoeveelheid gegevens. Het is ook niet reëel dit te doen, een trap van twintig meter hoog zal nooit worden toegepast om de eenvoudige reden dat er in dat geval tussenbordessen worden geplaatst. Dit gebeurt over het algemeen al bij trappen hoger dan vier meter. Een tweede reden is dat als er een foutieve waarde wordt ingevoerd de wiskundige berekeningen niet meer kunnen worden uitgevoerd wat resulteert in een foutmelding. Voor het valideren van de gegevens heb ik de volgende code geschreven. Allereerst worden de benodigde waarden aan de variabelen toegekend. Waarbij var(Waarde(0)) de ingevoerde waarde is. With Me.txtTrapHoek Waarde(0) = .Value Waarde(1) = 30 Waarde(2) = 60
Als de ingevoerde waarde kleiner of groter is dan de grenswaarde wordt de waarde aan de grenswaarde aangepast. Vervolgens wordt een bericht aan de gebruiker getoond dat de waarde groter of kleiner moet zijn dan de opgegeven grenswaarde. Tevens wordt in de database voor fouten deze melding opgeslagen met de foutcode “4444” Deze werkwijze wordt voor de meeste validatie code in het programma gebruikt. If Waarde(0) < Waarde(1) Then .Value = Waarde(1) .SetFocus antw = Comm(48) & ">" & Waarde(1) Err.Number = 4444 Err.Description = antw Call ErrHandling.ErrHandling(Err.Number, Err.Description) End If If Waarde(0) > Waarde(2) Then .Value = Waarde(2) .SetFocus antw = Comm(48) & "<" & Waarde(2) Err.Number = 4444 Err.Description = antw Call ErrHandling.ErrHandling(Err.Number, Err.Description) End If End With
16
Aansluitend wordt de routine TrapHorMaat uitgevoerd. Hier worden diverse maten die betrekking hebben op de gevalideerde waarde door het programma berekend en in de interface aangepast. Waarna de interface opnieuw wordt getoond. Call TrapHorMaat frmMain.Repaint
Onderstaande code is bijvoorbeeld om te voorkomen dat de leuning groter gekozen wordt dan de tussenleuning. Aansluitend wordt de bijbehorende radius van de bocht opgezocht in de database en getoond in de interface. If cboLeuBuis2.ListIndex > cboLeuBuis1.ListIndex Then cboLeuBuis2.ListIndex = cboLeuBuis1.ListIndex Call RadiusBocht
3.2.b Errorafhandeling Het opvangen van fouten is binnen een programma onmisbaar. De manier waarop dat gebeurt is ook van belang. We moeten toch van onze fouten leren, nietwaar? Als je de fouten domweg opvangt om er vervolgens niets meer mee te doen is dit niet echt leerzaam. Daarop is het idee ontstaan de fouten te registreren in een database zodat op later tijdstip de fout opgezocht en bestudeerd kan worden. Deze database is tevens een logboek voor bepaalde gebeurtenissen. Bijvoorbeeld het opstarten en afsluiten van het programma, waardoor eventuele fouten die binnen één en dezelfde sessie met elkaar in verband staan samen te bekijken. Door de database te bekijken kunnen we vervolgens het programma aanpassen als er fouten zijn die vaker voorkomen. Door de doorgegeven foutcode te vergelijken kunnen we bepalen of het programma verder mag gaan of afgesloten moet worden. Misschien moet er een melding aan de gebruiker worden gedaan?
Figuur 3-a “Error data”
17
3.2.c De taal Aan het begin van deze afstudeeropdracht leek het me leuk en leerzaam om direct een taalmodule in het programma te maken. Al is het wat werk het resultaat is best interessant. De opzet is alle communicatie met de gebruiker, doormiddel van een keuze mogelijkheid in de interface, in een aangeboden taal naar keuze te kunnen doen. Het is voornamelijk interessant als de mogelijkheid er is dit programma te verkopen. Is er dan vraag naar in een andere taal, dan is dit eenvoudig mogelijk door de database aan te vullen met een vertaling van de diverse woorden. Dit is uiteraard een stuk eenvoudiger dan de interface zelf aan te passen. Achteraf een bepaalde tekst aanpassen is hierdoor ook eenvoudiger geworden.
Figuur 3-b “een stukje taal data”
Om dit te realiseren halen we bij het opstarten van het programma deze data op uit de database. Die we doormiddel van een uniek nummer (i) door geven aan de var(Comm(i)) die vervolgens op zijn beurt weer gebruikt wordt om de diverse objecten in de interface en in de diverse meldingen aan de gebruiker toe te passen.
18
3.2.d Profiel gegevens Tja, profiel gegevens, om dezelfde reden als de taal en zoveel andere zaken heb ik gekozen deze gegevens uit de database te halen. Waarom? Welnu als de gegevens van een profiel of wat dan ook in de toekomst worden aangepast is het heel lastig om bijvoorbeeld een tekening opnieuw te tekenen of aan te passen. Data veranderen is dan veel sneller en gemakkelijker. Ook het invoeren van een bepaalde vorm met variatie in de maten is op deze manier makkelijker. In de interface heeft u de mogelijkheid een profiel te kiezen voor de trapboom (de zijde van de trap). Dit profiel kan worden gekozen uit de lijst (de database) of u typt een bepaalde code in bijvoorbeeld: C180x65x4 in dit geval wordt er door het programma een Coldfolded profiel ofwel een koud gezette plaat getekend. Van dit soort profiel worden veel trappen gemaakt. Door het gebruik van CNC machines in samenwerking met Cad-Cam is de snelheid van fabriceren sterk toegenomen.
Figuur 3-c “De profiel data”
Op het moment dat de gebruiker klaar is met invoeren en kiest voor het tekenen van de trap worden de gegevens opgehaald uit de database. In geval dat voor plaat werd gekozen worden de waarden uit de ingevoerde tekst gehaald en vervolgens wordt het bijbehorende stuk code uitgevoerd om de boom te tekenen.
19
Ook de keuze voor het leuning type werkt op vergelijkbare wijze. . . .
Figuur 3-d “Buismaterialen”
3.2.e Het klantmodel In een toepassing als deze is het opslaan van de volledige trap in de vorm van gegevens natuurlijk een vereiste. Het is nu namelijk zo dat als de trap niet voldoet aan de wens van de gebruiker of als een maat wordt aangepast de bestaande tekening verwijderd wordt en er snel een nieuwe wordt getekend. Dit vereist dan wel dat de gegevens van deze specifieke trap al ingevoerd zijn en alleen de aanpassing wordt gedaan. Om dit te realiseren heb ik het “klantmodel” bedacht. Als gebruiker kunt u de bestaande modellen kiezen uit het desbetreffende keuzemenu. U kunt tevens een nieuw model opslaan onder een door u opgeven naam. Als u op de knop wijzigen klikt worden de bestaande gegevens overschreven met de nieuwe gegevens. En uiteraard kunt u een model verwijderen als u op de knop verwijderen klikt.
Figuur 3-e “een stukje klantmodel”
20
3.2.f Tekenen van de trap Na het aanpassen van de trap in de interface wordt op de knop “Trap Tekenen” geklikt om de code te starten zodat de trap daadwerkelijk getekend wordt. Wat hierna beschreven is, is een opeenvolging van de gebeurtenissen. 3.2.f-1 De voortgangsindicator Om de gebruiker op de hoogte te houden van de voortgang van het tekenen, wordt een voortgangsindicator getoond, ofwel een “Progressbar” door de procedures heen wordt diverse keren de waarde van dit object aangepast. Dit gebeurd doormiddel van de volgende code. De voortgangsindicator wordt ook bij het opstarten van het programma gebruikt. Eventueel is ditzelfde frame/scherm te gebruiken bij het opvragen van een registratiecode voor latere toepassing. 3.2.f-2 De Leuning In het eerste gedeelte van de code worden na het dimensioneren (het benoemen van de variabelen) de waarden voor deze variabelen opgehaald uit de interface en de database. − De afstanden van de diverse leuningdelen en benodigde maten worden berekend en aan de diverse variabelen toegekend. − Een groot aantal driedimensionale punten worden berekend. − Als er geen septers tussen de leuning getekend worden vervolgen we bij “GeenSept” − De maten en aantallen van de septers worden bepaald zoals beschreven bij 3.1.f Septerafstand − De septers worden als verticale staven getekend in ieder berekend horizontale punt vanuit y=0 mits deze op het schuine gedeelte van de trap staan. − Deze staven worden vervolgens aan de onderzijde en aan de bovenzijde afgesneden (Slicesolid). − Als de septers op het horizontale gedeelte van de trap staan worden deze op de hoogte van de weltrede getekend. − Alle septers krijgen vervolgens xdata toegekend zie ook 3.2.h XData − “GeenSept” − Met gebruik van de berekende punten wordt de polyline (aaneengesloten lijn bestaand uit meerdere lijndelen) getekend, dit is de centerlijn van de “Tussenleuning” en dient als “Path” om later de solid te tekenen. − Op deze zelfde wijze worden de poly-lijnen voor de andere leuningdelen getekend. − Als doorsnede van de leuning wordt op het begin van de polyline een cirkel (region) ter grote van de opgegeven pijpdiameter getekend deze staat haaks op 21
− − − −
de lijnrichting, hiervoor wordt in de Sub Procedure “SetUCS()” het coördinatensysteem van Autocad in de gewenste richting geplaatst. Vervolgens wordt de solid (het ruimtelijke model/volume) getekend. Met de functie “AddExtrudedSolidAlongPath” hierbij wordt een cirkel als model (region) langs het opgegeven “Path” getrokken en wordt de solid gemaakt. Van alle leuningdelen worden op deze manier zowel de binnen als de buitenzijde getekend. Nu worden met behulp van de xdata de gewenste leuning en septer delen geselecteerd en waarnodig van elkaar afgetrokken. (Obj(0).Boolean acSubtraction, Obj(i)) Als laatste wordt de leuning in de juiste positie geplaatst.
3.2.f-3 De Trapboom Voor het tekenen van de trapboom wordt eerst het opgegeven profiel bepaald doormiddel van een (select case) routine, als de selectie de waarde . . . bevat wordt de volgende code uitgevoerd. Voor de selectie wordt eerst bepaald welke letter in de “combobox” op de gebruikersinterface is ingevoerd deze is bepalend voor de vervolg code. “U” voor UNP balk, “C” voor Coldfolded Koudgezet en “P” voor gebruik van Plaatmateriaal. Ieder stukje vervolgcode bepaalt doormiddel van de database of door het filteren van de gegevens uit de ingegeven tekst, welke waarden er gebruikt worden voor het tekenen van het bijbehorende profiel. − Doordat de breedte van het profiel nu bekend is wordt allereerst de leuning verplaatst, zodat deze op de juiste positie staat. − Alle benodigde punten worden nu berekend voor het maken van de doorsnede van het profiel, dit wordt vervolgens met een polylijn getekend. En er wordt een region van gemaakt. − Deze region wordt dan geextrudeerd om een solid /volume te vormen, de trapboom. − De originele objecten, de polylijn en de region kunnen nu worden verwijderd, anders zouden ze in de tekening als object blijven bestaan. − Doormiddel van het roteren van deze balk zetten we hem in de juiste positie, zowel horizontaal als verticaal. − De onder en bovenzijde afschuinen met de functie SliceSolid. − Om de weltrede of het bordes te vormen gebruiken we de spiegelfunctie (solidObj.Mirror3D) en spiegelen we de bestaande trapboom precies om de as die we tevens gebruikt hebben om de bovenzijde af te schuinen. − De weltrede wordt ingekort op de gewenste lengte.(slice) − Nu kunnen we de gaten tekenen mits deze uiteraard getekend moeten worden, dit wordt bepaald door de diameter, als deze waarde nul is hoeven we de gaten niet te tekenen. − Gaten tekenen we ook op deze wijze: Cirkel-Region-Extrusion/solid. Het gat is nu een staaf die we straks van de boom aftrekken. 22
− We positioneren/kopiëren de gaten, dit gebeurd op dezelfde wijze als bij de trede dan wil ik hier nog even op terug komen. Met de volgende functie halen we de gaten uit de trapboom: “solidObj.Boolean acSubtraction, GatMatr(i)” de variabele GatMatr(i) bevat hier een matrix van alle gaten. − De trapboom en de weltrede worden gespiegeld. 3.2.f-4 De traptrede Bij het tekenen van de traptrede zal ik de code laten zien, dit is tevens in grote lijnen dezelfde werkwijze als de andere getekende traponderdelen. Om dit kort te houden beginnen we na het dimensioneren van de variabelen. De diverse waarden worden aan de variabelen toegekend. With frmMain x1 = 0 y1 = 0 Ra = 6 A = .txtTredeDiepte B = .txtTrededikte Cha = (B / 100) * 60 C = .txtGatVert D = .txtGatHor1 E = .txtGatHor2 F = .txtGatDia G = .txtTredeOverstek hoek = .txtTrapHoek.Value hoek = hoek * ((4 * Atn(1)) / 180)
Punten voor het tekenen van de doorsnede van de traptrede worden berekend. Point(0) = x1 Point(1) = y1 'punt1 Point(2) = x1 + (A - Cha) Point(3) = y1 'punt2 Point(4) = x1 + A Point(5) = y1 + Cha 'punt3 Point(6) = x1 + A Point(7) = y1 + B 'punt4 Point(8) = x1 + Ra Point(9) = y1 + B 'punt5 Point(10) = x1 Point(11) = y1 + (B - Ra)
23
De polyline wordt gemaakt. Set PolyTrede = ThisDrawing.ModelSpace.AddLightWeightPolyline(Point) PolyTrede.Closed = True
Er wordt een ronding gemaakt van lijndeel vier met een ingesloten hoek van negentig graden. Call PolyTrede.SetBulge(4, Tan(Atn(1) * 90 / 180)) PolyTrede.Update
De waarde van var(PolyTrede) (dit is dus de gemaakte polyline) wordt toegekend aan de variabele en tevens matrix var(Doorsnede2(0)) dit is noodzakelijk omdat voor de functie AddRegion een matrix is vereist ook al is de matrix één object. In de volgende code wordt de region gemaakt, als basis voor de solid. Set Doorsnede2(0) = PolyTrede regionTrede = ThisDrawing.ModelSpace.AddRegion(Doorsnede2)
De waarde voor de lengte van de trede wordt hier bepaald. Lengte2 = .txtTredeBreedte taperAngle2 = 0
We kunnen de solid maken met de onderstaande code. De region, lengte en de hoek van de versmalling in de extrusierichting van de solid worden opgegeven. Deze laatste waarde is in ons geval altijd nul. Set solidTrede(0) = ThisDrawing.ModelSpace.AddExtrudedSolid(regionTrede(0), Lengte2, taperAngle2)
Xdata en de kleur worden toegevoegd aan de trede. Beide via een sub routine. Call PutXData(solidTrede(0), "Treden", "Trede", 1000) Call Color(solidTrede(0), Color2)
Verwijder het origineel van de doorsnede. Deze hebben we niet meer nodig en mag dus niet meer in de tekening aanwezig zijn. Doorsnede2(0).Delete regionTrede(0).Delete
Het bepalen van het rotatiepunt en de gewenste hoek in radialen en het toepassen daarvan om de trede in de juiste positie te zetten. rotatePt1(0) = 0: rotatePt1(1) = 0: rotatePt1(2) = 0 rotatePt2(0) = 0: rotatePt2(1) = 10: rotatePt2(2) = 0 rotateAngle = 180 rotateAngle = rotateAngle * ((4 * (Atn(1))) / 180) solidTrede(0).Rotate3D rotatePt1, rotatePt2, rotateAngle
24
De benodigde waarden worden opgezocht en berekend. With frmMain Vert = .txtTrapVert.Value Weltr = .txtWeltredeMt.Value Hor = (Vert / (Tan(hoek))) AantAfst = Round(((((2 * Vert) + Hor)) / .txtDeelFactor), 0) AanTr = Hor / AantAfst OpTr = Vert / AantAfst End With
Hier komen we de progressbas of voortgangsindicator tegen, deze wordt gevuld tot 85 procent (min.0 – max.100) en opnieuw getoond. frmRegCode.ProgressBar1.Value = 85: frmRegCode.Repaint
De eerste trede wordt gepositioneerd. TredeVerplY = OpTr - B TredeVerplX = AanTr - G MovePt1(0) = 0: MovePt1(1) = 0: MovePt1(2) = 0 MovePt2(0) = -TredeVerplX: MovePt2(1) = TredeVerplY: MovePt2(2) = Lengte2 solidTrede(0).Move MovePt1, MovePt2
Als laatste worden de treden getekend. solidTrede(0) is de eerste trede, vervolgens wordt daar een kopie van gemaakt en de kopie wordt op de goede positie geplaatst. De variabele (i) is een integer die hier het trede nummer aangeeft wat op dat moment aan de beurt is. De horizontale en verticale verplaatsing wordt dan met (i) maal de optrede en (i) maal de aantrede bepaald. For i = 1 To .lblAantTreden2 - 1 Set solidTrede(i) = solidTrede(0).Copy MovePt1(0) = 0: MovePt1(1) = 0: MovePt1(2) = 0 MovePt2(0) = -(AanTr * i): MovePt2(1) = (OpTr * i): MovePt2(2) = 0 solidTrede(i).Move MovePt1, MovePt2 Next i
Omdat er in de code weinig tekst en uitleg wordt gegeven bij wat er zoal gebeurd, hoop ik dat ik hiermee toch één en ander duidelijk heb kunnen maken van wat er komt kijken bij het driedimensionaal tekenen met gebruik van VBA in Autocad.
25
3.2.g Het rapport Het uiteindelijke resultaat wordt in een rapport getoond aan de gebruiker. De opzet is dat het rapport voldoende gegevens verstrekt aan de gebruiker om bijvoorbeeld een prijsopgave te doen. Als het rapport vervolgens geprint wordt en bij de opgave wordt gearchiveerd is het bij opdracht eenvoudig de betreffende tekening te openen en verder uit te werken zodat de trap gemaakt kan worden. Het rapport is een bestaande layout in de tekening. De taalgegevens worden uit de rapportdatabase opgehaald en de VBA code zoekt de vergelijking in de layout. Is de gewenste tekst gevonden dan wordt deze overschreven met de waarde uit de database. Deze zelfde manier wordt gebruikt voor het invoeren van de diverse waarden van de trap in het rapport. Sommige waarden worden direct uit de tekening gehaald en berekend. Als voorbeeld dit stukje code. De procedure SelSetXdata maakt een selectieset van de benodigde objecten in de tekening. Hierbij wordt gebruik gemaakt van xdata. Dit is een stukje data die aan ieder willekeurig object in Autocad gegeven kan worden. Nu vragen we alleen deze objecten die voldoen aan de xdata gegevens die we opgeven bij de procedure aanroep. Deze manier van werken geeft erg veel mogelijkheden zoals deze die nu gebruikt wordt. Even verderop in dit verslag probeer ik nog even op die xdata terug te komen. Call SelSetXdata("B2", "Buis2", 1000)
We herhalen de volgende code van (i) is nul tot het aantal objecten in de selectie min één. Nul is namelijk ook één object. For i = 0 To ThisDrawing.SelectionSets.Item("B2").Count – 1
Var(Obj(i)) geven we als waarde het object nummer (i) in de selectie. Set Obj(i) = ThisDrawing.SelectionSets.Item("B2").Item(i)
Nu kunnen we iedere gewenste parameter van het object uitlezen. In dit geval het volume van het driedimensionale object (solid) van de tussenleuning. Met dit gegeven berekenen we vervolgens het gewicht van dit onderdeel en wordt dit bij de var(Buis2Gew) opgeteld. We herhalen dit tot we alle objecten hebben gehad. Als laatste verwijderen we de selectieset. Buis2Gew = Buis2Gew + ((Obj(i).Volume / 1000000) * 7.85) Next i ThisDrawing.SelectionSets.Item("B2").Delete
In het onderste gedeelte van het rapport wordt de trap zelf getoond in kleur en perspectief. Eventueel is het rapport op deze wijze vrij eenvoudig uit te breiden. 26
3.2.h XData In de vorige paragraaf heb ik beloofd nog wat over de xdata te vertellen. Persoonlijk ben ik erg enthousiast over xdata. Als je even wat langer nadenkt over de mogelijkheden die dit geeft wordt je dit vanzelf. Ieder object dat in de tekening wordt geplaatst kun je nu data meegeven. Dit object kan dus van alles zijn denk maar aan een simpele lijn, maar deze lijn zou dus wel een stramienlijn in een staalconstructie kunnen zijn die je vervolgens gebruikt als hartlijn voor een balk HE240A waarvan je later dus aantal en lengte op kunt vragen! Wordt de lijn gekopieerd of onderbroken dan zijn er dus meerdere balken van diverse lengten . . . de mogelijkheden zij legio. Zoals u ziet staat dit keer de volledige subprocedure opgeschreven. Dit omdat tijdens de “Call” parameters worden doorgegeven. Het element is dus een Autocad onderdeel in ons voorbeeld het “object” waaraan de xdata wordt gegeven. De xdata is een groepje data dat doormiddel van een Applicatie naam is benoemd. Van deze groepjes kunnen er meerdere aan één object worden toegeschreven. Het Gegeven is ook een string, in ons geval. Dit wordt bepaald door de laatste in het rijtje het DType ofwel het xdata type. Als hier een andere waarde aan wordt gegeven biedt dit de mogelijkheid diverse soorten informatie te gebruiken bijvoorbeeld code 1010, 1020 en 1030 als Double (een getal met decimalen) waarin een driedimensionale positie aangegeven wordt. Public Sub PutXData(Element As AcadEntity, AppName As String, Gegeven As String, DType As Integer) Dim DataType(1) As Integer Dim Data(1) As Variant On Error GoTo FoutAfhandeling
De doorgegeven waarden worden toegekend aan de verschillende variabelen. DataType(0) = 1001: Data(0) = AppName DataType(1) = DType: Data(1) = Gegeven
Vervolgens wordt de data aan het object toegekend. Element.SetXData DataType, Data Exit Sub FoutAfhandeling: Call ErrHandling.ErrHandling(Err.Number, Err.Description) End Sub
27
Dan nu het ophalen van de selectie en het maken van de selectieset. Ook hier worden de parameters bij de aanroep “Call” van de procedure doorgegeven. Het Gegeven en het Dtype hebben we in de vorige alinea al besproken. De variabele Setnaam is, zoals de naam al doet vermoeden, de naam van de te maken selectieset. Sub SelSetXdata(Setnaam As String, Gegeven As String, DType As Integer) Dim ssetObj As AcadSelectionSet Dim gpCode(0) As Integer Dim dataValue(0) As Variant Dim groupCode As Variant Dim dataCode As Variant On Error GoTo FoutAfhandeling
Het object met de selectieset onder de opgegeven naam wordt gemaakt. Set ssetObj = ThisDrawing.SelectionSets.Add(Setnaam)
De waarden worden aan de diverse variabelen doorgegeven. gpCode(0) = DType dataValue(0) = Gegeven groupCode = gpCode dataCode = dataValue
Tenslotte gebruiken we het filter van de selectieset om de te selecteren objecten te bepalen. ssetObj.Select acSelectionSetAll, , , groupCode, dataCode Exit Sub FoutAfhandeling: Call ErrHandling.ErrHandling(Err.Number, Err.Description) End Sub
3.2.i Het stroomschema Op de volgende pagina wordt het stroomschema getoond. Dit is een beknopt overzicht van het programma.
28
Opstarten Autocad applicatie
Start van het programma “LenzStairs” Visual Basic for Applications.
Installeren van het menu met de knop voor het starten van het programma
“ ErrHandling “ In bijna iedere routine en functie wordt een eventuele fout afgevangen en door deze routine verwerkt. De fout gegevens worden opgeslagen in de database.
Autocad volledig gestart en wacht op invoer door de gebruiker
Gebruiker start d.m.v. knop het programma
JA
Fatale fout
Nee
ADODB (ActiveX Data Objects DataBase) - Instellingen - Klantmodel - Taalcode - Errortabel - Boomprofiel - Buisprofiel - Rapport
Normale Autocad sessie. Tijdens de invoer door de gebruiker wordt die tevens gevalideerd.
Alle benodigde gegevens voor de interface worden uit de diverse databases d.m.v. SQL opdrachten opgehaald en toegepast. Het document wordt opgeslagen onder een uniek nummer.
De interface met de gebruiker wordt getoond.
De diverse gegevens voor de trap kunnen in een aantal vensters worden ingevoerd. De gegevens kunnen in de database onder een klantnaam worden opgeslagen, gewijzigd of verwijderd worden.
Ook worden de maat afhankelijke waarden berekend. De gebruiker start het tekenen d.m.v. knop.
De resultaten worden getoond in het Rapport en als driedimensionaal model in modelspace
De gebruiker past het model naar wens aan en d.m.v de functie “Solprof” kunnen diverse aanzichten worden gegenereerd.
De diverse gegevens worden uit de database verzameld en toegepast bij het berekenen van alle benodigde hoeken, lengten, aantallen enz.
Na het tekenen wordt het rapport gegenereerd. De diverse waarden worden direct uit de desbetreffende objecten gehaald. En eventueel berekend of geteld. De tekst wordt uit de database gehaald en in het rapport geplaatst
Het resultaat wordt mogelijk opgeslagen en geplot.
Autocad wordt afgesloten.
29
Per onderdeel worden de diverse driedimensionale punten berekend en worden deze getekend.
4
Conclusie Wat het programma betreft zal het duidelijk zijn dat hier nog diverse delen aan kunnen worden toegevoegd. Persoonlijk ben ik van mening dat het programma zoals het nu beschikbaar is voldoet om toe te passen binnen het bedrijfsleven. Binnen ons bedrijf wordt het dan ook zeker gebruikt. Ook al is het zo, dat na het gebruik van het programma er nog het een en ander aan het resultaat moet worden uitgewerkt voordat je daadwerkelijk een trap kunt gaan maken, het geeft toch een grote tijdwinst. Als de trap in een bepaalde gekantelde positie wordt weergegeven levert het zeker een grote verbetering op. Het is mogelijk het programma dusdanig aan te passen dat het verkoopbaar is. Hiervoor is het gedeelte van registratie al enigszins opgezet. De taalfuncties geven al aan dat het mogelijk is het internationaal aan te bieden. Hieraan voorafgaand zal marktonderzoek moeten plaatsvinden of er daadwerkelijk interesse is voor een dergelijk programma.
30
5
Dankwoord Het was een zeer leerzaam project, de cursussen gevolgd bij ir. Ronald Boeklagen, het uitwerken van het project en het schrijven van dit verslag hebben tot resultaat dat ik nog meer plezier in mijn werk heb en tevens beduidend meer kennis van Autocad en Visual Basic heb gekregen. In dit dankwoord wil ik een ieder bedanken die mij op welke wijze dan ook de mogelijkheid heeft geboden deze afstudeeropdracht te beginnen en tevens te helpen voltooien. Hierbij denk ik in het bijzonder aan de directie van de fa. Jac.Korpershoek en aan ir. Ronald Boeklagen en Leonie Bergsma. Het studeren met een gezin met vrouw en drie kinderen valt echt niet mee. Er waren weken dat ik s’ avonds niet van de studeerkamer afkwam. Mijn vrouw heeft het hele jaar volledig achter mij gestaan. Ook hebben de kinderen alle begrip getoond voor het feit dat papa voor hen niet kon zijn wat hij anders wel was, maar dat hij moest studeren. Hopelijk krijg ik nu de tijd en de gezondheid om me met hen bezig te houden, ze verdienen het. Ik geloof dat mijn hemelse Vader mij de kracht en wijsheid heeft gegeven om deze afstudeeropdracht te kunnen voltooien, in dit laatste woord wil ik Hem alle lof en eer geven die uiteindelijk Hem toekomt.
31
Ter verduidelijking van het verslag en het programma de volgende bijlagen: 1e - Afdrukken van de diverse interfaces. 2e - Een aantal rapporten gegenereerd met dit programma. 3e - Separaat van dit verslag, de code ter beoordeling. (om deze vertrouwelijk te houden)
De Interface Trapboom
De Interface Trapleuning
De Intrerface Traptrede