Plaatuitslagenprogramma
Door: M. Kaandorp Izak van der Horststraat 11 8264 DV Kampen Cursus: AutoCAD Certified Engineer System Manager Begeleider: R. Boeklagen TEC Nijmegen
Voorwoord. Ik had al enige ervaring in het programmeren in Lisp en VB voordat ik aan de cursus AutoCAD Certified Engineer (System Manager) begon. Beide programmeertalen zijn aangeleerd door zelfstudie. De grootste voordelen van VB zijn de snelheid en eenvoud waarmee interfaces kunnen worden gemaakt. Tevens is de taal relatief eenvoudig te doorgronden. Om de grondbeginselen van VBA in AutoCAD snel onder de knie te krijgen heb ik gekozen voor de cursus AutoCAD System Manager bij TEC, wat achteraf zeker geen slechte keuze is geweest. Dhr. R. Boeklagen wist in een ontspannen en gezellige sfeer de cursusstof goed over te brengen.
Kampen, december 2003 Marco Kaandorp
Plaatuitslagenprogramma door M.Kaandorp
Blz. i
Inhoudsopgave
Samenvatting ______________________________________________ iii 1. Inleiding ________________________________________________ 1 2. Probleemstelling _________________________________________ 3 3. Oplossingen _____________________________________________ 3.1. bestaande situatie _____________________________________ 3.2. mogelijke oplossingen __________________________________ 3.3. gekozen oplossing _____________________________________
5 5 6 7
4. Het Plaatuitslagenprogramma________________________________ 9 4.1. structuur _____________________________________________ 9 4.2. uitwerking Instellingen menu ____________________________ 10 4.3. uitwerking Plaatuitslagen Keuze menu_____________________ 13 4.4. uitwerking menu “Rechthoekig op Rond” ___________________ 14 4.4.1. dialoogbox “Rechthoekig op Rond” ____________________ 14 4.4.2. instellingen laden en opslaan uit register________________ 17 4.4.3. tekenen van de uitslag met zetlijnmarkeringen ___________ 18 4.4.4. plaatsen van het tagblok ____________________________ 20 4.4.5. plaatsen van de tekst voor gravering___________________ 25 4.5. pulldown menu en toolbars _____________________________ 26 5. Praktijkvoorbeeld ________________________________________ 28 6. Toekomstige uitbreidingen _________________________________ 31 7. Afsluiting _______________________________________________ 32
Bijlagen: I. Handmatig plaatuitslagen tekenen II. Snijproces III. Praktijkvoorbeelden IV. Code Instellingen Form V. Code GetIn en GetOut VI. Code CheckTag VII. Code SetTagWaardenAuto VIII. Literatuurlijst IX. Installatie-instructies
Plaatuitslagenprogramma door M.Kaandorp
Blz. ii
Samenvatting Voor het uitslaan van plaatwerk voor leidingstukken is gezocht naar een eenvoudige en flexibele oplossing. Hierbij is gezocht naar applicaties die op AutoCAD draaien en zelfstandige programma’s. De beste oplossing is gevonden in een VBA programma voor AutoCad. Het resultaat is een plaatuitslagenprogramma dat zeer gebruiksvriendelijk, flexibel en eenvoudig van opzet is. Binnen enkele seconden kan een uitslag worden getekend. Voor het midden- en kleinbedrijf, waar 3D tekenen vaak geen optie is door de investeringen die gedaan moet worden, is het plaatuitslagenprogramma voor de meest voorkomende uitslagen een goed alternatief.
Plaatuitslagenprogramma door M.Kaandorp
Blz. iii
1. Inleiding Plaatuitslagen vormen een essentieel onderdeel voor het fabriceren van leidingwerk uit dun plaatwerk. Leidingwerk met een diameter groter dan ongeveer 200 mm wordt meestal uit plaatwerk gewalst en gelast. In het midden- en kleinbedrijf worden plaatuitslagen voor leidingwerk vaak nog met de ‘hand’ getekend of het wordt uitbesteed aan gespecialiseerde bedrijven. In de tijd van het tekenbord werden de plaatuitslagen met de hand uitgezet en getekend op een stuk karton of papier. Deze werden vervolgens uitgeknipt en samen met de tekening naar de productie gedaan. Hier werden de papieren uitslagen op de stalen platen gelegd en overgetrokken met viltstift. De platen werden vervolgens langs de contouren uitgeknabbelt/geknipt. Door de plaat nu op de juiste wijze te zetten/walsen krijgt men het juiste leidingstuk. Dit was een zeer arbeidsintensief proces.
Afbeelding 1 Door de komst van de plasmasnijbank en later de lasersnijbank kon een aanzienlijk deel van het productieproces worden versneld. In de laatste jaren zijn deze tevens in prijs verlaagd en verbeterd zodat de meeste plaatverwerkende bedrijven zelf een snijbank in hun machinepark hebben. Meerdere uitslagen van hetzelfde materiaal en dikte kunnen worden verzameld en worden samengevoegd op één plaat waardoor minder afval ontstaat. De snijbank kan de uitslagen dus snel en rendabel uit hele platen snijden. In het begin konden de snijbanken alleen eenvoudige vormen aan. De vormen moesten door middel van codes in de snijbank worden geprogrammeerd. Veelal is dit een G-Code, één van de standaarden voor CNC machines.
Plaatuitslagenprogramma door M.Kaandorp
Blz. 1
Later kwamen hulpprogramma’s die op de gewone PC draaien. Hiermee kunnen G-Codes worden gegenereerd, ook van moeilijkere vormen. De werkvoorbereider kan dus op zijn eigen werkplek de codes voor de snijbank maken zodat stilstand van de snijbank minimaal is. De code kan bijvoorbeeld door middel van een floppy op de snijbank worden overgezet. De hulpprogramma’s werden uitgebreid met de mogelijkheid om CAD tekeningen te importeren en hiervan een G-Code te genereren. De hulpprogramma’s hebben dan als input de plaatuitslagen in digitale vorm nodig, veelal in DXF formaat. De plaatuitslagen moeten dus in een CAD programma worden getekend.
Plaatuitslagenprogramma door M.Kaandorp
Blz. 2
2. Probleemstelling Veel voorkomende leidingstukken/verlopen zijn: vierkant op rond al of niet concentrisch, conus al of niet concentrisch en bochtsegmenten (zie afbeelding 2).
Afbeelding 2 Het tekenen van plaatuitslagen van de desbetreffende leidingstukken/verlopen kan in CAD op dezelfde manier en met dezelfde regels als voorheen werd gedaan op het tekenbord met passer en liniaal (zie bijlage I ). Deze manier is erg omslachtig en tijdrovend. Er moet dus op zoek worden gegaan naar een programma die dit volgens de plaatuitslagenregels doet. Dit kan een applicatie voor AutoCad zijn of een op zichzelf staand programma. De applicatie of het programma moet gebruiksvriendelijk en eenvoudig zijn, alleen de hoogst nodige gegevens dienen te worden ingevoerd waarna het programma de plaatuitslag tekent. Voor bijvoorbeeld een conus zijn dit de kleine diameter, de grote diameter en de hoogte. Het CNC programma voor het genereren van de G-Code stelt aan de te importeren uitslagen bepaalde eisen. Om onderscheid te kunnen maken tussen lijnstukken voor de snijcontouren en markeringen voor de graveerinrichting moet de uitslag aan de volgende eisen voldoen: - contouren moeten in een bepaalde laag staan - tekstmarkeringen en zetlijnmarkeringen moeten in een bepaalde laag staan Om de plaatuitslagen te verzamelen op materiaalsoort en plaatdikte moet binnen de snijcontouren van de plaatuitslag aanwezig zijn: - een tagblok met voldoende informatie betreffende materiaalsoort, plaatdikte, aantal en snijproces - het tagblok moet in een bepaalde laag staan Het programma moet de invoer controleren of deze aan de bedrijfsstandaard voldoet.
Plaatuitslagenprogramma door M.Kaandorp
Blz. 3
Het toegepaste materiaalsoort met bijbehorende plaatdikte is bedrijfsafhankelijk en moet bijvoorbeeld in een .INI-file te zijn te definiëren. De materiaallijst kan zo makkelijk worden aangepast aan de bedrijfsstandaard. Als het materiaalsoort en plaatdikte bekend is kan het bijbehorende snijproces worden bepaald. Het snijproces bevat gegevens over het instellen van de snijmachine. De operator weet dan hoe de machine in te stellen. Het snijproces is afhankelijk van plaatdikte en materiaalsoort en is tevens afhankelijk van de toegepaste snijbank. De desbetreffende waarden voor de snijbank moeten daarom ook in bijvoorbeeld een .INI-file te zijn te definiëren. Er moet dus een flexibel programma worden gevonden dat gebruiksvriendelijk en flexibel is. Tevens moet het relatief goedkoop zijn in aanschaf, implementatie, bediening en onderhoud.
Plaatuitslagenprogramma door M.Kaandorp
Blz. 4
3. Oplossingen Er moet gezocht worden naar een CAD programma dat de mogelijkheden biedt om plaatuitslagen te maken . De meeste tekenkamers werken met AutoCAD. Standaard AutoCAD biedt de mogelijkheid van plaatuitslagen maken niet. Er moet dus gekeken worden naar een applicatie die op AutoCAD draait of naar een ander (3D) CAD programma.
3.1. bestaande situatie Om te onderzoeken welke applicatie/programma hiervoor in aanmerking komt moet eerst bekeken worden wat de werkmethode is. Hoe wordt het leidingwerk nu getekend? Is dit te versnellen of te verbeteren? Veelal wordt het leidingwerk in 2D getekend. Een hartlijn met 2 contourlijnen kan al een leidingstuk aangeven en is voldoende duidelijk voor de productie. Zie afbeelding 3.
Afbeelding 3 De tekening is eenvoudig, duidelijk en snel op te zetten. Door gebruik te maken van standaard afmetingen voor bijvoorbeeld bochtsegmenten en verlopen, dat echter de ontwerper beperkt, kan men op een gegeven moment teruggrijpen op een zelf opgebouwde database van uitslagen. De uitslagen zijn met de ‘hand’ uitgezet en getekend. Niet standaard uitslagen dienen opnieuw met de ‘hand’ te worden uitgezet en getekend. Dit is tijdrovend en de kans op fouten is groot. Uitbesteden is een mogelijkheid maar dit beperkt de flexibiliteit van het bedrijf.
Plaatuitslagenprogramma door M.Kaandorp
Blz. 5
3.2. mogelijke oplossingen Mogelijke oplossingen voor het uitslaan van plaatwerk zijn: - applicatie die draait op AutoCAD - CAD programma met eventueel een plugin Applicaties zoals SPI en AutoPol bieden beiden mogelijkheden voor het uitvouwen van plaatwerk. Dit zijn applicaties die onder andere draaien op AutoCAD. Deze zijn veelal 3D gebaseerd. Als er op de tekenkamer over het algemeen 2D wordt getekend ontstaat er dus een mengeling van 2D en 3D tekeningen. Voor de standaard verlopen kan in 3D een parametrisch model worden opgezet zodat met tekenen wel enige tijdwinst kan wordt geboekt ten opzichte van 2D tekenen met standaard AutoCAD. Er ontstaat echter dubbele data omdat de complete leidingtekening in 2D staat en de verlopen in 3D. De kans op fouten, vooral bij wijzigingen is hierbij groot. CAD pakketten die de mogelijkheid van plaatuitslagen bieden zijn onder andere HiCad, Inventor met een plugin en Pro-Engineer met plaatwerkmodule. Voordat met deze CAD pakketten een uitslag kan worden getekend moet het desbetreffende leidingstuk in 3D worden getekend. Er wordt informatie uit het 3D model gehaald om de plaatuitslagen automatisch te laten genereren. Dit wordt in een 3D programma ook wel ‘Unfold’ (uitklappen) genoemd. Van het desbetreffende leidingstuk wordt een ‘unfolded’ plaat getekend. Deze dient vervolgens te worden geplaatst in een tekening die geëxporteerd kan worden als een DXF file. De applicaties zijn relatief duur en vereisen vaak nog enige aanpassingen om de uitslagen te laten voldoen aan de bedrijfsnormen. Soms zijn niet alle gangbare uitslagen mogelijk zodat alsnog een andere methode gevonden moet worden. In tabel 1 zijn de verschillende oplossingen overzichtelijk naast elkaar gezet.
Plaatuitslagenprogramma door M.Kaandorp
Blz. 6
Verschillende mogelijkheden met elkaar vergeleken:
Aanschaf CAD programma Aanschaf applicatie Updaten hardware Programmeren voor bedrijfsstandaard Software update in toekomst Cursus tekenaars 3D Gebruiksvriendelijk m.b.t. snelheid Meer varianten in vormen mogelijk Eenvoudig wijzigen Uitwisseling tekening eenvoudig Aanpassen EDM
Programma schrijven in AutoCAD Nee
Applicatie op AutoCAD Nee
Inventor
HiCAD
Pro-E
Ja
Ja
Ja
Nee Nee Ja
Ja Nee Ja
Ja Ja Ja
Ja Ja Ja
Ja Ja Ja
Nee
Ja
Ja
Ja
Ja
Nee Nee Ja
Ja Ja Ja/Nee
Ja Ja Nee
Ja Ja Nee
Ja Ja Nee
Nee
Ja
Ja
Ja
Ja
Nee Ja
Ja Ja/Nee
Ja Nee
Ja Nee
Ja Nee
Nee
Nee
Ja
Ja
Ja
(De in groen/vet gemarkeerde tekst geeft de voorkeuren aan.) Tabel 1
3.3. gekozen oplossing Veel tekenkamers werken met AutoCAD. Een of meerdere licenties zijn dan ook vaak aanwezig. Het tekenpakket is wereldwijd bekend, zodat uitwisseling van tekeningen zonder vertaalslag kan. Een ander (3D) CAD pakket kiezen vereist een forse investering in aanschaf en opleiding van vast personeel en heeft consequenties voor de organisatie. Zo moet onder andere het EDM worden aangepast zodat deze ook goed kan omgaan met de nieuwe applicatie. Dit vereist vaak een investering en/of veel implementatietijd. Tijdens drukke tijden op de tekenkamer worden veelal tekenaars ingehuurd. Het inhuren van tekenaars met ervaring met AutoCAD is vaak geen probleem. Het nadeel om voor de plaatuitslagen een ander programma te kiezen dan AutoCAD is dat de ingehuurde tekenaar met meerdere CAD pakketten moet kunnen omgaan. Tevens moet er een protocol geschreven worden met regels voor het opbouwen van de leidingstukken met de bedrijfsstandaard.
Plaatuitslagenprogramma door M.Kaandorp
Blz. 7
Zelf programmeren in AutoCAD heeft als voordeel dat er geen software hoeft te worden aangeschaft. Voor deze hoeven in de toekomst dus dan ook geen dure updates aangeschaft te worden. Ook investeren in cursussen voor personeel is niet nodig. Doordat het programma voor het genereren van de G-Code voor de snijbank eisen stelt aan de DXF file, moet het 3D pakket uitgebreid worden met eventueel zelf te programmeren routines. Conclusie: Een applicatie geschreven voor AutoCAD is een goede en in verhouding tot andere applicaties of CAD programma’s goedkope oplossing, zowel in aanschaf als onderhoud. In de applicatie kan de bedrijfsstandaard worden opgenomen. Dit samen met een gebruiksvriendelijke interface levert een forse tijdsbesparing op en de kans op fouten is relatief klein. Tekenaars en inleenkrachten op de tekenkamer en eventueel de werkvoorbereiders kunnen snel en efficiënt aan de slag met het uitslagenprogramma zonder al te veel kennis van plaatuitslagen te hebben.
Plaatuitslagenprogramma door M.Kaandorp
Blz. 8
4. Het Plaatuitslagenprogramma 4.1. structuur Als eerste is gekeken hoe de structuur van het programma er uit moet komen te zien. Die is globaal in een vereenvoudigd stroomschema weergegeven (zie figuur 4).
Start
4.3 4.2 Keuze
Instellingen
Uitslag
4.4 4.5
Einde Figuur 4 - Stroomschema plaatuitslagenprogramma De structuur is vrij eenvoudig van opzet. Als eerste kan gekozen worden van welk verloop een uitslag gemaakt moet worden. Hier kan eventueel ook gekozen worden voor instellingen. Dit zijn algemene instellingen die voor alle uitslagen gelden en hoeven vaak maar eenmalig op een systeem te worden ingesteld. Per uitslag kunnen deze instellingen overruled worden, echter bij de volgende uitslag wordt weer uitgegaan van de algemene instellingen. De functies die bij andere uitslagen ook te gebruiken zijn komen te staan in de module “AlgemeenMod”. Functies die specifiek voor een bepaalde uitslag nodig zijn komen te staan in de desbetreffende module voor die uitslag. Bijvoorbeeld: “RechtRondMod”. Door deze splitsing van code blijft het programma overzichtelijk waardoor functies makkelijk terug te vinden zijn. De verschillende stappen in het stroomschema worden hierna per stap uitgewerkt. Plaatuitslagenprogramma door M.Kaandorp
Blz. 9
4.2. uitwerking Instellingen menu Omdat de instellingen een belangrijk onderdeel is voor het programmeren van de applicatie bepalen we eerst de mogelijke instellingen: - er moet een keuze zijn voor de laag en kleur van de snijcontouren; - aangegeven moet worden hoe de invoer van de maten van de uitslag is: inwendige, neutrale of uitwendige maten; - er moet een keuze zijn of het volgende wel of niet getekend wordt: - zetlijn markeringen voor het zetten van de uitslag; - tekst markering voor herkenning van de plaat; - tagblok met attributen voor het CNC programma; - de kleur en laag van deze moeten kunnen worden ingesteld; De tekstmarkeringen zijn vaak gelijk aan het tekeningnummer gevolgd door een positienummer. Er moet echter een keuzemogelijkheid zijn om deze zelf te kunnen invoeren. Het tagblok moet aan de bedrijfsstandaard voldoen, dit moet ook handmatig kunnen worden ingevoerd. De instellingen moeten worden gecontroleerd en worden onthouden in het register. Het stroomschema voor het instellingen menu ziet er als volgt uit:
Start Reg.->Inst.
Keuze
Cancel
OK
Nee
Ja
Inst.->Reg.
Einde
Figuur 5 – Stroomschema Instellingen
Plaatuitslagenprogramma door M.Kaandorp
Blz. 10
Nu kan begonnen worden met het ontwerp van het Instellingenmenu. De instellingen moeten duidelijk en overzichtelijk worden weergegeven. De instellingen moeten tevens worden gegroepeerd. Het uitwerken van het Instellingenmenu heeft geleid tot de volgende dialoogbox:
Figuur 6 – Dialoogbox Instellingen In AutoCAD mag de naam van een laag de volgende karakters niet bevatten: < > / \ ” : ? * | , = ’. Om dit op te vangen is de volgende functie gemaakt die wordt aangeroepen bij ‘KeyPress’ van de desbetreffende tekstvelden. De code zorgt ervoor dat de desbetreffende karakters niet in de tekstbox kunnen worden ingevoerd. Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Call IsSpecialKar(TextBox1.Text, KeyAscii) End Sub Public Function IsSpecialKar(tekst, toets) 'voorkomen van speciale karakters If toets = Asc("<") Or toets = Asc(">") Or toets = Asc("/") Or toets = Asc("\") Or _ toets = Chr(34) Or toets = Asc(":") Or toets = Asc("?") Or toets = Asc("*") Or _ toets = Asc("|") Or toets = Asc(",") Or toets = Asc("=") Or _ toets = Asc("'") Then toets = 0 'geen invoer teruggeven End If End Function
Code 1 – Code controleer invoer voor laag
Plaatuitslagenprogramma door M.Kaandorp
Blz. 11
In verband met compatibiliteit met AutoCAD 2002 moet de kleur aangegeven worden met een heel getal dat ligt tussen 1 en 255. Om dit op te vangen wordt eerst gekeken of de ingedrukte toets wel een getal is (textbox_KeyPress) en vervolgens wordt gekeken of de getalswaarde in de textbox wel tussen de 1 en 255 ligt (textbox_change). Private Sub TextBox9_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Call IsNumeriekKleur(TextBox9.Text, KeyAscii) End Sub Public Function IsNumeriekKleur(tekst, toets) 'controleren getal invoer If toets = Asc(".") Then 'voorkomen van een punt toets = 0 'geen invoer teruggeven Exit Function End If Select Case toets Case Asc("0") To Asc("9") 'doe niets Case Else toets = 0 'geen invoer teruggeven End Select End Function Private Sub textbox9_change() 'controleren kleurnummer If Len(TextBox9.Text) > 0 Then 'anders foutmelding als textbox leeg is If CInt(TextBox9.Text) < 1 Or CInt(TextBox9.Text) > 255 Then MsgBox "Kleurnummer niet goed (1 - 255).", vbCritical, "Plaatuitslagen" TextBox9.Text = Left(TextBox9.Text, Len(TextBox9.Text) - 1) 'laatste invoer weer weghalen End If End If End Sub
Code 2 – Code controleer invoer voor kleurnummer Bij het invullen van de lengte van de zetlijnmarkeringen en de hoogte van de tekstgravering mogen getallen achter de komma (lees punt) worden ingevoerd. De functie “IsNumeriekKleur” dient iets te worden aangepast. Public Function IsNumeriek(tekst, toets) If InStr(1, tekst, ".") > 0 And toets = Asc(".") Then 'voorkomen van 2x een punt toets = 0 'geen invoer teruggeven Exit Function End If Select Case toets Case Asc("0") To Asc("9"), Asc(".") 'doe niets Case Else toets = 0 'geen invoer teruggeven End Select End Function
Code 3 – Code controleer invoer op numeriek
Plaatuitslagenprogramma door M.Kaandorp
Blz. 12
De functie “IsNumeriek” kan straks ook worden gebruikt bij het invullen van de afmetingen van de uitslagen en staat daarom in de module “AlgemeenMod”. Bij het opstarten (Initialize) van de Instellingen Form worden de waarden uit het register opgehaald en worden opgeslagen in het register wanneer op de “OK” knop wordt geklikt. De complete code voor de Instellingen Form staat op bijlage IV.
4.3. uitwerking Plaatuitslagen Keuze menu Nadat is bepaald welke uitslagen gemaakt kunnen gaan worden, is het volgende Plaatuitslagen menu ontworpen:
Figuur 7 – Dialoogbox Plaatuitslagen Net als in AutoCAD kan er op een plaatje (tegel) enkel of dubbel links geklikt worden. Bij enkel links klikken op een tegel zal de tegel iets verdiept komen te liggen zodat te zien is welke keuze is gemaakt. Bij dubbel links klikken op de tegel wordt het desbetreffende menu voor de plaatuitslag gestart. De code hiervoor ziet er als volgt uit: Private Sub ImgRechtRond_Click() MaakFlat Me.ImgRechtRond.SpecialEffect = fmSpecialEffectBump KeuzeIndex = 1 End Sub
Plaatuitslagenprogramma door M.Kaandorp
Blz. 13
Public Sub MaakFlat() ‘alle tegels vlak maken Me.ImgRechtRond.SpecialEffect = fmSpecialEffectFlat Me.ImgConusSpruit.SpecialEffect = fmSpecialEffectFlat Me.ImgVerloop.SpecialEffect = fmSpecialEffectFlat Me.ImgSegBocht.SpecialEffect = fmSpecialEffectFlat Me.ImgPijpPijp.SpecialEffect = fmSpecialEffectFlat Me.ImgVerloopPijp.SpecialEffect = fmSpecialEffectFlat Me.ImgBroekstuk.SpecialEffect = fmSpecialEffectFlat End Sub Private Sub ImgRechtRond_DblClick(ByVal Cancel As MSForms.ReturnBoolean) KeuzeIndex = 1 MaakKeuze End Sub Public Sub MaakKeuze() Select Case KeuzeIndex Case 1 Me.Hide RechtRondFrm.Show 'ga naar form RechtRond Case 2 'ga naar form ConusSpruit Case Else 'doe niets End Select End Sub
Code 4 – Code tegel klikken Tevens staan er in het menu knoppen om een tagblok en tekstmarkering te plaatsen. Deze zijn geplaatst om de gebruiker de mogelijkheid te bieden deze ook te plaatsen voor uitslagen die anders zijn getekend dan met het plaatuitslagenprogramma. Denk hierbij bijvoorbeeld aan flenzen en andere vrije vormen. Via de knop “Instellingen” kunnen de Algemene Instellingen worden veranderd.
4.4. uitwerking menu “Rechthoekig op Rond” Voor de uitwerkingen van de plaatuitslagen is gekozen voor het rechthoekig op rond verloop. Het principe van het tekenen van de andere uitslagen eventueel met het toevoegen van tagblok en graveertekstst is gelijk aan deze en wordt verder niet behandeld.
4.4.1. dialoogbox “Rechthoekig op Rond” Als eerste is een Form ontworpen waarin alle benodigde invoervelden aanwezig zijn. Ook hier is een mogelijkheid om de algemene instellingen via een knop te benaderen (zie figuur 8).
Plaatuitslagenprogramma door M.Kaandorp
Blz. 14
Figuur 8 – Dialoogbox Uitslag Rechthoekig op Rond Er is een “dynamische” image geplaatst van het verloop. Als de dialoogbox wordt geopend staan teksten bij de bematingen die corresponderen met de invoervelden eronder. Als er een waarde in een invoerveld wordt gewijzigd, verandert de bijbehorende tekst van de bemating in de ingevoerde waarde. Als de checkbox voor “Hart uit lengte- of breedterichting” wordt gewijzigd, verandert de image mee. Al naar gelang de waarde van de checkbox wordt er een symetrisch of a-symetrisch verloop getoond. De gebruiker ziet op deze manier precies waar hij welke waarde moet invullen en welke waarde hij heeft ingevuld. Bij Settings kan aangegeven worden of er een kwart of een halve uitslag getekend moet worden. Dit is vaak afhankelijk van wat in de praktijk gesneden en gezet kan worden. Hier kan ook aangegeven worden of de zetlijnmarkeringen, tekstmarkeringen en tagblok geplaatst moeten worden. Deze overrulen als het
Plaatuitslagenprogramma door M.Kaandorp
Blz. 15
ware de algemene instellingen. Dit is echter eenmalig, bij de volgende uitslag wordt weer uitgegaan van de algemene instellingen. Verder kan nog het aantal zetlijnen op de omtrek van de ronde zijde van het verloop worden opgegeven. Om op de omtrek te grote rechte zijden te voorkomen is het gewenst bij een grotere diameter meer zetlijnen te plaatsen. Bij het uitslaan van de plaat wordt uitgegaan van de neutrale diameter van de ronde zijde en de inwendige afmetingen van de rechthoekige zijde. Als bij de algemene instellingen is gekozen voor andere aanduiding, dan heeft het programma ook de plaatdikte nodig. Deze kan dan ook worden ingevuld. Bij het klikken op de OK button worden alle ingevulde waarden in het register opgeslagen zodat bij de volgende uitslag van de laatste waarden wordt uitgegaan. Het stroomschema van de uitslag rechthoekig op rond ziet er als volgt uit: Start Uitslag
Reg.->Inst.
1/4
Ins.Zetl.?
1/2
Reg.->Inst.
Symetrisch
Ja
Nee
Ja
Symetrisch
Nee
Ja
Instelingen zie figuur 5
Ins.Tag?
Instellingen
Keuze
Nee
Cancel
Nee
Ja
OK
Plaats Tag
Inst.->Reg. Ins.Tekst?
n=n+1 n=2
n<2
n=n+1 n=4
Nee
Ja
n<4
Plaats Tekst
Einde
Figuur 9 – Stroomschema Uitslag Rechthoekig op Rond
Plaatuitslagenprogramma door M.Kaandorp
Blz. 16
4.4.2. instellingen laden en opslaan uit register Voordat de dialoogbox van de uitslag wordt getoond worden eerst de nodige waarden uit het register gehaald en in variabelen gezet. Omdat de algemene instellingen ook bij de andere uitslagen geladen moeten worden is hiervoor de functie “LaadSettings” geschreven. Public Sub LaadSettings() ‘laad de algemene instellingen IndexDiameter = GetSetting("Plaatuitslagen", "Settings", "IndexDiameter", "1") IndexRechthoek = GetSetting("Plaatuitslagen", "Settings", "IndexRechthoek", "0") PlaatsMarkering = GetSetting("Plaatuitslagen", "Settings", "PlaatsMarkering", "True") LengteMarkering = CDbl(GetSetting("Plaatuitslagen", "Settings", "LengteMarkering", "20")) PlaatsTekst = GetSetting("Plaatuitslagen", "Settings", "PlaatsTekst", "True") TekstHoogteMarkering = CDbl(GetSetting("Plaatuitslagen", "Settings", _ "TekstHoogteMarkering", "10")) MarkTekstAuto = GetSetting("Plaatuitslagen", "Settings", "MarkTekstAuto", "True") PlaatsTag = GetSetting("Plaatuitslagen", "Settings", "PlaatsTag", "True") NaamTagBlok = GetSetting("Plaatuitslagen", "Settings", "NaamTagBlok", "TAG") LaagTag = GetSetting("Plaatuitslagen", "Settings", "LaagTag", "MARKERING") LaagSnijden = GetSetting("Plaatuitslagen", "Settings", "LaagSnijden", "UITSLAGEN") LaagMarkering = GetSetting("Plaatuitslagen", "Settings", "LaagMarkering", "MARKERING") KleurTag = GetSetting("Plaatuitslagen", "Settings", "Kleurtag", "120") KleurSnijden = GetSetting("Plaatuitslagen", "Settings", "KleurSnijden", "90") KleurMarkering = GetSetting("Plaatuitslagen", "Settings", "KleurMarkering", "120") InvoerTag = GetSetting("Plaatuitslagen", "Settings", _ "InvoerTagBlock1", True) 'auto invoeren van tag blok End Sub
Code 5 – Code functie “LaadSettings” De instellingen specifiek voor de uitslag Rechthoekig op Rond worden geladen bij Initialize van de Form: TxtUitLengte.Text = GetSetting("Plaatuitslagen", "Settings", "ReRoUitLengte", "100") TxtUitBreedte.Text = GetSetting("Plaatuitslagen", "Settings", "ReRoUitBreedte", "100") TextBox1.Text = GetSetting("Plaatuitslagen", "Settings", "ReRoLengte", "500") TextBox2.Text = GetSetting("Plaatuitslagen", "Settings", "ReRoBreedte", "300") Etc.
Code 6 – Code verwerken instellingen uit register Met de variabele “IndexDiameter” en “IndexRechthoek” wordt aangegeven of inwendige, neutrale of uitwendige maten moeten worden opgegeven. Deze worden bij Initialize van de Form als volgt verwerkt: Select Case IndexDiameter Case 0 LblDiameterCap = "Inwendige Diameter" Case 1 LblDiameterCap = "Neutrale Diameter" Case 2 LblDiameterCap = "Uitwendige Diameter" End Select
Plaatuitslagenprogramma door M.Kaandorp
Blz. 17
‘enable of disable invoerveld voor plaatdikte afhankelijk van op te geven maten If IndexRechthoek = 0 And IndexDiameter = 1 Then ‘rechthoek inw. ,diameter neutraal LblPlaatdikte.Enabled = False TextBox5.Enabled = False TextBox5.BackColor = &H8000000F Else LblPlaatdikte.Enabled = True TextBox5.Enabled = True TextBox5.BackColor = &H80000005 End If LblDiameter.Caption = LblDiameterCap & " van Cirkel" ‘aangeven welke maat invullen TextBox8.Text = LblDiameterCap ‘maat in image invullen Etc.
Code 7 – Code verwerken in te voeren maten Als alle waarden zijn geladen en de bijbehorende velden zijn ingesteld wordt het menu getoond. De gebruiker heeft nu alle instellingen zoals hij het menu voor het laatst heeft verlaten via de “OK” button. Als het menu voor het eerst geladen wordt, worden standaard waarden gebruikt. Bij het op de “OK” button drukken worden de ingevoerde waarden met de volgende code in het register opgeslagen: 'begin opslaan ReRo setting naar register SaveSetting "Plaatuitslagen", "Settings", "ReRoChkLengte", ChkLengte.value SaveSetting "Plaatuitslagen", "Settings", "ReRoChkBreedte", ChkBreedte.value SaveSetting "Plaatuitslagen", "Settings", "ReRoUitLengte", TxtUitLengte.Text Etc.
Code 8 – Code opslaan in register Het is voor de gebruiker prettig dat de gewijzigde instellingen en ingevoerde waarden worden bewaard. Door gebruik te maken van het register kan dit snel en eenvoudig.
4.4.3. tekenen van de uitslag met zetlijnmarkeringen Nadat alle waarden zijn gecontroleerd en in variabelen zijn gezet kan begonnen worden met het uitrekenen en tekenen van de uitslag. Allereerst worden alle ware lengten en hoeken van de zetlijnen berekend. Omdat deze berekening vaker moet worden uitgevoerd is hiervoor de functie “SetVars” geschreven. De functie moet als volgt worden aangeroepen: Call SetVars(Hoogte, Radius, Lengte, Breedte, UitLengte, UitBreedte)
De functie krijgt alle nodige gegevens van de uitslag mee. De berekende waarden worden in Public variabelen gezet zodat deze verder in het programma gebruikt kunnen worden.
Plaatuitslagenprogramma door M.Kaandorp
Blz. 18
Vervolgens worden alle punten op de uitslag met behulp van de uitgerekende ware lengten en hoeken ten opzichte van het invoegpunt berekend en getekend. Dit wordt gedaan met de functie “UitslagReRo”. Afhankelijk van de instellingen wordt er een kwart of halve uitslag getekend. Is het verloop over minimaal een zijde a-symetrisch dan wordt, afhankelijk van de gekozen uitslag, vier maal een kwart uitslag of twee maal een halve uitslag getekend. Omdat hier alle punten bekend zijn worden hier eventueel ook de markeringen voor de zetlijnen getekend. Het bepalen van de punten van de uitslag gebeurt met wiskundige formules. Omdat dit het “hart” van het programma is en omdat het programma commercieel wordt aangeboden, wordt de code van deze formules niet behandeld. De AutoCAD instellingen die tijdens het programma worden veranderd moeten bij afsluiten van het programma weer worden teruggezet naar de oorspronkelijke waarden. De gebruiker heeft dan niet in de gaten dat er instellingen zijn veranderd en hoeft deze dus niet zelf terug te zetten. Voordat er getekend wordt, wordt met de functie “GetIn” de huidige laag, tekststijl en de Osmode in variabelen gezet. Ook worden hier de desbetreffende lagen voor de uitslag ontdooit, aangezet en ge-unlocked. Na het tekenen van de uitslag worden met de functie “GetOut” de instellingen weer teruggezet. Zie bijlage V voor de code van deze functies. De functies zijn voor het overzicht in module “GetInOutMod” gezet. Voor het tekenen van de uitslag wordt de laag ingesteld met de volgende code zodat de nieuwe entiteiten op de juiste laag komen te staan: Call SetLayer(LaagSnijden, KleurSnijden) Public Sub SetLayer(ByVal laag As String, ByVal kleur As AcColor) Dim NieuweLaag As AcadLayer Set NieuweLaag = ThisDrawing.Layers.Add(laag) NieuweLaag.Color = kleur ThisDrawing.ActiveLayer = ThisDrawing.Layers.Item(laag) End Sub
Code 9 – Code Setlayer Het resultaat is een plaatuitslag dat op de laag staat met de kleur dat is opgegeven bij de Instellingen.
Plaatuitslagenprogramma door M.Kaandorp
Blz. 19
Het volgende figuur toont een kwart van de uitslag van een symetrisch verloop rechthoekig op rond met 32 zettingen in de omtrek van de diameter.
Figuur 10 – ¼ uitslag van een symetrisch verloop
4.4.4. plaatsen van het tagblok In het programma is er vanuit gegaan dat het tagblok niet in de tekening of op het systeem aanwezig is. De gebruiker kan zelf het tagblok voor de uitslag definieren via een .INI-file. [attributen voor tag plaatuitslagen, maximaal 20 regels] 5,aantal zichtbare attributen 8,hoogte zichtbare attributen 2,hoogte niet zichtbare attributen TEK+POS,Teknr.+Pos.nr. MATERIAAL,Materiaal DIKTE,Dikte AANTAL,Aantal PROCES,Proces WAARDE1,Waarde 1 WAARDE2,Waarde 2 WAARDE3,Waarde 3 WAARDE4,Waarde 4 WAARDE5,Waarde 5 WAARDE6,Waarde 6 WAARDE7,Waarde 7 WAARDE8,Waarde 8 Figuur 11 – Standaard attributen.ini
Plaatuitslagenprogramma door M.Kaandorp
Blz. 20
De eerste regel is een commentaar regel. De tweede regel geeft het aantal attributen voor de Tag aan dat zichtbaar moet zijn, met achter de komma commentaar. De derde regel geeft de letterhoogte van de zichtbare attributen aan, met achter de komma commentaar. De vierde regel geeft de letterhoogte van de niet zichtbare attributen aan, met achter de komma commentaar De vijfde tot en met de vierentwintigste regel geeft de naam (Tag) van de attribuutdefinitie aan met achter de komma de Prompt van attribuutdefinitie. Het tagblok mag dus maximaal 20 attributen bevatten. De naam van het tagblok wordt bij Instellingen opgegeven. Voordat het tagblok wordt geplaatst wordt eerst gekeken met de functie ”CheckTag” of er al een tagblok in de tekening aanwezig is en of deze dan overeenkomt met de .INI-file. De complete code van ”CheckTag” staat op bijlage VI. Als het tagblok niet in de tekening staat wordt deze aangemaakt met “MaakTagBlok”. Hierbij worden de waarden voor de attributen uit het attributen.ini gehaald. Aan de hand van de gelezen waarden wordt een aantal attributen gedefinieerd. De meest interessante code van “MaakTagBlok” staat hieronder. 'waarden van attributen voor tag inlezen Open Pad & "\PlaatUitslagen\attributen.ini" For Input As #1 Line Input #1, Regel 'commentaar regel Line Input #1, Regel 'aantal zichtbaar nZichtbaar = Trim(Left(Regel, InStr(1, Regel, ",") - 1)) Line Input #1, Regel 'hoogte zichtbaar HZichtbaar = Trim(Left(Regel, InStr(1, Regel, ",") - 1)) Line Input #1, Regel 'hoogte niet zichtbaar HnZichtbaar = Trim(Left(Regel, InStr(1, Regel, ",") - 1)) nAtt = 0 While Not EOF(1) And nAtt < 20 nAtt = nAtt + 1 Input #1, Attribuut(nAtt, 1), Attribuut(nAtt, 2) Wend Close #1 ‘tagblok definieren HoogteAtt = HZichtbaar Set TagBlok = ThisDrawing.Blocks.Add(InsPuntTag, NaamTagBlok) InsPuntAtt(0) = 0 InsPuntAtt(1) = InsPuntTag(1) + (HoogteAtt + 3) * (nZichtbaar - 1) InsPuntAtt(2) = 0 For I = 1 To nZichtbaar Call TagBlok.AddAttribute(HoogteAtt, acAttributeModeNormal, _ Attribuut(I, 2), InsPuntAtt, Attribuut(I, 1), "") InsPuntAtt(1) = InsPuntAtt(1) - (HoogteAtt + 3) Next I
Code 10 – Deel van de code MaakTagBlok
Plaatuitslagenprogramma door M.Kaandorp
Blz. 21
Voordat het tagblok wordt gemaakt, is met de functie “SetLayer” de Current Layer, zoals bij Instellingen is opgegeven voor het tagblok, ingesteld. Figuur 12 laat een “geëxplodeerde” tagblok zien dat is gemaakt aan de hand van de standaard .INI-file. De attributen komen overeen met de attribuutwaarden zoals opgegeven (zie figuur 10).
Figuur 12 – geëxplodeerde tagblok Nu het tagblok in de tekening staat kunnen de waarden worden ingevuld. Dit kan op twee manieren. De gebruiker kan elke waarde van de attributen handmatig invoeren of hij kan gebruik maken van de standaard routine waarbij aan de hand van een .INI-file bepaalde waarden automatisch worden opgezocht en worden ingevuld. Hiervoor zijn twee routines geschreven: “SetTagWaardenHand” en “SetTagWaardenAuto”. Na het invullen van de waarden wordt het tagblok met “InsertTagHand” en “InsertTagAuto” geplaatst. “SetTagWaardenHand” is relatief eenvoudig. Eerst wordt gekeken in de attributen.ini welke attributen er ingevuld moet worden. De ingevulde waarden van deze attributen worden vervolgens opgeslagen in het register zodat bij de volgende tagblok de laatste waarden getoond worden als default. “InsertTagHand” plaatst het tagblok in de tekening en vult deze met de waarden zoals met “SetTagWaardenHand” is ingevuld. “SetTagWaardenAuto” is wat gecompliceerder. Er wordt hierbij vanuit gegaan dat het standaard tagblok wordt gebruikt (zie figuur 12). Als eerste worden de tekeningnaam en positienummer samengevoegd. Standaard wordt de bestandsnaam zonder extensie gebruikt. De gebruiker kan voor de tekeningnaam ook een andere waarde invoeren. Deze waarde wordt opgeslagen in het register en wordt default aangeboden bij het volgende tagblok in dezelfde tekening. Bij een andere tekening zal deze defaultwaarde weer veranderen in de tekeningnaam (bestandsnaam).
Plaatuitslagenprogramma door M.Kaandorp
Blz. 22
Het positienummer begint bij een nieuwe tekeningsessie bij 1. Voor elk nieuw tagblok wordt dit verhoogd met 1. Wordt er een andere tekening geopend dan begint het positienummer weer bij 1. De gebruiker kan ook een andere waarde voor het positienummer invullen. Bij het volgende tagblok in dezelfde tekening wordt deze weer met 1 verhoogd. Aan de hand van het bestand materialen.ini worden bepaalde waarden automatisch ingevuld. De inhoud van materialen.ini moet als volgt zijn opgebouwd: 1e regel is commentaar regel 2e regel is materiaal tussen [ ] 3e t/m -- regel is plaatdikte met achter de komma het bijbehorende snijproces. [materiaal soorten] [ST] 2,30A-ST37-2 3,50A-ST37-3 4,50A-ST37-4 6,70A-ST37-6 8,70A-ST37-8 10,100A-ST37-10 12,100A-ST37-12 15,100A-ST37-15 [304] 2,50A-RVS304-2 3,50A-RVS304-3 4,50A-RVS304-4 6,70A-RVS304-6 8,70A-RVS304-8 Etc. Figuur 13 – Standaard materialen.ini Na het invoeren van het gewenste materiaal wordt in het bestand gekeken of deze aanwezig is. Is dit niet het geval dan wordt verder niet gekeken naar de standaard plaatdikte en snijproces. De gebruiker moet dan zelf deze waarden invullen. Komt het materiaal voor in de lijst dan zal na het invoeren van de plaatdikte gekeken worden of deze dikte in de standaard lijst staat van het desbetreffende materiaal. Is de plaatdikte niet aanwezig dan zal de gebruiker zelf het snijproces moeten invullen, anders wordt dit automatisch gedaan. Het aantal te snijden uitslagen is afhankelijk of een kwart of halve uitslag getekend wordt en of het verloop symetrisch of a-symetrisch is. Standaard wordt aan de hand hiervan het aantal bepaald. De gebruiker kan hier eventueel een andere waarde opgeven.
Plaatuitslagenprogramma door M.Kaandorp
Blz. 23
Alle ingevoerde waarden worden opgeslagen in het register. (De code van “SetTagWaardenAuto” staat op bijlage VII.) Nadat de attribuutwaarden voor het tagblok zijn bepaald kan het tagblok geplaatst worden en attributen worden ingevuld. Dit gebeurt met de volgende code: NaamTagBlok = GetSetting("Plaatuitslagen", "Settings", "NaamTagBlok", "TAG") Set BlokRef = ThisDrawing.ModelSpace.InsertBlock(InsPuntTag, NaamTagBlok, 1, 1, 1, 0) Pad = ThisDrawing.Application.Path nAtt = 0 Open Pad & "\PlaatUitslagen\attributen.ini" For Input As #1 For I = 1 To 4 Line Input #1, Regel 'commentaar regels Next While Not EOF(1) nAtt = nAtt + 1 Input #1, WaardeIni(nAtt), Tempwaarde Wend Close #1 Call FillInAttributes(BlokRef, WaardeIni(1), GetSetting("Plaatuitslagen", "Settings", _ "Tekening", "xxx") & Deel) Call FillInAttributes(BlokRef, WaardeIni(2), GetSetting("Plaatuitslagen", "Settings", "Materiaal", "xxx")) Call FillInAttributes(BlokRef, WaardeIni(3), GetSetting("Plaatuitslagen", "Settings", _ "MateriaalDikte", "xxx")) Call FillInAttributes(BlokRef, WaardeIni(4), GetSetting("Plaatuitslagen", "Settings", "Aantal", "xxx")) Call FillInAttributes(BlokRef, WaardeIni(5), GetSetting("Plaatuitslagen", "Settings", "SnijProces", "xxx"))
Code 11 – Deel van de code InsertTag Het plaatsen van het tagblok is dusdanig geprogrammeerd dat het zeer flexibel is. De gebruiker kan zijn eigen tagblok bepalen met het bestand attributen.ini, hierbij moet hij dan wel elke waarde voor de attributen invoeren. De gebruiker kan ook het standaard tagblok gebruiken en zodoende het programma een aantal attributen laten invullen. Hierbij kan de gebruiker ook niet standaard waarden gebruiken zodat bij bijvoorbeeld afwijkend materiaal voor een bepaald projekt het bestand materiaal.ini niet hoeft te worden veranderd. Bij sommige CNC-programmatuur kan worden aangegeven welke attributen van welk tagblok dienen te worden uitgelezen. Dit vergroot de inzet van het standaard tagblok.
Plaatuitslagenprogramma door M.Kaandorp
Blz. 24
4.4.5. plaatsen van de tekst voor gravering Als laatste wordt eventueel de tekst voor de gravering geplaatst. Voordat de tekst geplaatst wordt, wordt eerst gecontroleerd met de functie “TekstFontChk” of de juiste tekststijl actief is. De markering wordt met het font “txt.shx” geplaatst. Met behulp van de bijbehorende file “txt.shp” en de Lisp routine “xShpBI” wordt de tekst geëxplodeerd zodat de tekst alleen bestaat uit losse lijnstukken en polylijnen. Omdat AutoCAD de tekst niet correct kan exploderen is gebruik gemaakt van een Lisp routine die dit met behulp van een bijbehorende “shape-file” wel kan. Is het font van de actieve tekststijl geen “txt” dan wordt er een tekststijl met de naam “Markering” aangemaakt die het font “txt” heeft. De tekst voor de markering wordt met deze stijl geplaatst. Public Function TekstFontChk() 'als font geen txt is dan wordt een stijl aangemaakt om niet alle teksten te laten veranderen Dim TekstStijl As AcadTextStyle Dim e As AcadTextStyle Font=”txt” On Error GoTo ErrorFont Found = False If UCase(ThisDrawing.ActiveTextStyle.fontFile) <> UCase(Font) Then For Each e In ThisDrawing.TextStyles If UCase(e.Name) = UCase("Markering") Then Found = True End If Next If Found = True Then ThisDrawing.ActiveTextStyle = ThisDrawing.TextStyles.Item("Markering") ThisDrawing.ActiveTextStyle.fontFile = Font & ".shx" 'om te voorkomen dat deze anders is gezet ThisDrawing.ActiveTextStyle.height = 0 'om te voorkomen dat deze anders is gezet ThisDrawing.ActiveTextStyle.Width = 1 'om te voorkomen dat deze anders is gezet TekstFontChk = True Else Set TekstStijl = ThisDrawing.TextStyles.Add("Markering") TekstStijl.fontFile = Font & ".shx" ThisDrawing.ActiveTextStyle = ThisDrawing.TextStyles.Item("Markering") TekstFontChk = True End If Else TekstFontChk = True End If Exit Function ErrorFont: MsgBox "Error Font voor Tekstmarkering. & chr(13) & TekstMarkering wordt niet geplaatst." TekstFontChk = False End Function
Code 12 – Code van de functie TekstFontChk
Plaatuitslagenprogramma door M.Kaandorp
Blz. 25
Het plaatsen van de tekst kan handmatig of automatisch. Dit wordt aangegeven bij Instellingen. Bij handmatig moet de gebruiker een eigen tekst invoeren. Als default wordt de laatst ingevoerde tekst aangeboden. De default waarde kan eventueel verlengd worden met op te geven tekst. Als de gebruiker tekst opgeeft dat begint met “&” komt de ingevoerde tekst achter de defaultwaarde te staan zodat niet elke keer de hele tekst dient te worden ingevoerd. De defaultwaarde blijft onveranderd voor de volgende graveertekst. Bijvoorbeeld: Command: Markeringstekst
: &-01 Heeft als resultaat: TEC-Nijmegen-01 Bij automatisch is de tekst gelijk aan de bestandsnaam zonder extensie. De gebruiker kan hier eventueel nog tekst aan toevoegen voor bijvoorbeeld een positienummer. Door de toevoeging te beginnen met “&&” wordt de bestandsnaam vervangen door de toevoeging. Als het tagblok ook op automatisch staat en er is een tagblok geplaatst dan is de te graveren tekst gelijk aan het attribuut “tek+pos” van dit tagblok. Er is getracht het teksttoevoegen zo gebruiksvriendelijk en efficient mogelijk te programmeren. Er is een compromis gevonden tussen gebruiksvriendelijkheid en te veel instellingen/mogelijkheden waardoor het programma overzichtelijk blijft.
4.5. pulldown menu en toolbars Het plaatuitslagenprogramma is op verschillende manieren op te starten. Dit kan via het pulldown menu, toolbars of verkorte commando’s.
Figuur 14 – Pulldown, Flyout en Toolbar Via het pulldown menu en diverse buttons kunnen de verschillende onderdelen van het programma worden opgestart.
Plaatuitslagenprogramma door M.Kaandorp
Blz. 26
In de bijbehorende .mnl-file van het menu wordt gezorgd dat de gecompileerde Lisp file voor het exploderen van de graveertekst naar lijnsegmenten wordt geladen. Tevens wordt er een verkort commando gedefinieerd om het programma op te starten met het commando “PLU”. Inhoud van de .mnl-file: (load "xShpBI.fas") (defun c:PLU()(vl-vbarun "Index")) (princ) De gebruiker kan door het menu te laden zelf bepalen op welke manier hij het programma of de diverse componenten wil opstarten.
Plaatuitslagenprogramma door M.Kaandorp
Blz. 27
5. Praktijkvoorbeeld Als voorbeeld nemen we het verloop van vierkant op rond in de volgende tekening.
Figuur 15 – Praktijk voorbeeld leidingwerk Alle maten zijn uitwendige maten en de plaatdikte van dit stuk leidingwerk is 3 mm. Het merendeel van de bemating van het leidingwerk zijn uitwendige maten. We stellen dit in bij Instellingen.
Figuur 16 – Instellingen
Plaatuitslagenprogramma door M.Kaandorp
Blz. 28
Deze instellingen hoeven in principe maar eenmalig te worden aangepast aan de bedrijfsstandaard. Nu kan via bijvoorbeeld de toolbar en het index menu, het menu van de uitslag worden aangeroepen.
Figuur 17 – Menu’s De juiste (uitwendige) maten kunnen worden ingevoerd. Na op OK te hebben gedrukt verdwijnt het menu en vraagt AutoCAD om een punt op te geven. Na het opgeven van het invoegpunt wordt de uitslag getekend. Omdat de optie om een tagblok automatisch te plaatsen aan staat wordt gevraagd om de nodige gegevens. Dit is via de command prompt van AutoCAD.
Figuur 18 – Invullen van de attributen van het tagblok
Plaatuitslagenprogramma door M.Kaandorp
Blz. 29
Het tagblok wordt in de uitslag geplaatst. Omdat ook de optie om de graveertekst automatisch te laten plaatsen aan staat, wordt vervolgens de te graveren tekst onder het tagblok geplaatst.
Figuur 19 – Halve uitslag voor verloop rechthoekig op rond De uitslag is klaar om te exporteren naar bijvoorbeeld een dxf-file voor het CNC programma.
Plaatuitslagenprogramma door M.Kaandorp
Blz. 30
6. Toekomstige uitbreidingen De intensie is aanwezig om het programma uit te breiden met de volgende mogelijkheden: - toevoegen van uitslagen voor onder andere broekstuk, verloop met spruit, pijp op conus en pijp op pijp - mogelijkheid bij invoer van maten om bematingen te selecteren - overzetten van de code naar VB 6.0 zodat een exe file gemaakt kan worden. Hierdoor is code moeilijker te kraken. - xdata toevoegen voor eventueel wijzigen van de uitslag - routine toevoegen voor het snel exporteren van de uitslagen naar een .dxf-file. Door de toekomstige uitbreidingen kan het programma nog breder worden ingezet.
Plaatuitslagenprogramma door M.Kaandorp
Blz. 31
7. Afsluiting Door de omvang van het programma (totaal ± 2100 programma regels) zijn de minder interessante delen van het programma niet behandeld. Het opzetten en uitwerken van het programma neemt veel tijd in beslag. Echter het programmeren van het afvangen van fouten mag niet onderschat worden in zowel tijd als moeilijkheidsgraad. De enthousiaste reacties van de gebruikers is zeker een stimulans om het programma verder te ontwikkelen. De gebruikers waren zeer tevreden over de snelheid en eenvoud waarmee een uitslag getekend kan worden. De opzet van het programma is zeer geslaagd.
Plaatuitslagenprogramma door M.Kaandorp
Blz. 32
Handmatig Plaatuitslag tekenen
Bijlage I
Snijproces
1. 2. 3. 4.
High Definition Plasma snijbank Graveren van de markeringen met de graveerpen De gegraveerde tekst Het snijden van de uitslag uit 3 mm RVS
Bijlage II
Praktijkvoorbeelden
Bijlage III
Code Instellingen Form Private Sub UserForm_Initialize() ComboBox1.AddItem "Inwendige Diameter", 0 ComboBox1.AddItem "Neutrale Diameter", 1 ComboBox1.AddItem "Uitwendige Diameter", 2 ComboBox2.AddItem "Inwendige Afmetingen", 0 ComboBox2.AddItem "Neutrale Afmetingen", 1 ComboBox2.AddItem "Uitwendige Afmetingen", 2 ComboBox1.ListIndex = GetSetting("Plaatuitslagen", "Settings", "IndexDiameter", "1") ComboBox2.ListIndex = GetSetting("Plaatuitslagen", "Settings", "IndexRechthoek", "0") TextBox1.Text = GetSetting("Plaatuitslagen", "Settings", "LaagSnijden", "UITSLAGEN") CheckBox3.value = GetSetting("Plaatuitslagen", "Settings", "PlaatsMarkering", "True") TextBox8.Text = GetSetting("Plaatuitslagen", "Settings", "LengteMarkering", "20") CheckBox2.value = GetSetting("Plaatuitslagen", "Settings", "PlaatsTekst", "True") TextBox7.Text = GetSetting("Plaatuitslagen", "Settings", "TekstHoogteMarkering", "10") MarkAutoOpt.value = GetSetting("Plaatuitslagen", "Settings", "MarkTekstAuto", "True") MarkHandOpt.value = GetSetting("Plaatuitslagen", "Settings", "MarkTekstHand", "False") TextBox2.Text = GetSetting("Plaatuitslagen", "Settings", "LaagMarkering", "MARKERING") CheckBox1.value = GetSetting("Plaatuitslagen", "Settings", "PlaatsTag", "True") TextBox5.Text = GetSetting("Plaatuitslagen", "Settings", "NaamTagBlok", "TAG") TextBox4.Text = GetSetting("Plaatuitslagen", "Settings", "LaagTag", "MARKERING") InvoerTagBlockOpt1.value = GetSetting("Plaatuitslagen", "Settings", "InvoerTagBlock1", True) InvoerTagBlockOpt2.value = GetSetting("Plaatuitslagen", "Settings", "InvoerTagBlock2", False) TextBox9.Text = GetSetting("Plaatuitslagen", "Settings", "KleurSnijden", "90") TextBox10.Text = GetSetting("Plaatuitslagen", "Settings", "KleurMarkering", "120") TextBox11.Text = GetSetting("Plaatuitslagen", "Settings", "KleurTag", "120") End Sub Private Sub CancelBttn_Click() Unload Me End Sub Private Sub OKBttn_Click() 'controleren of wel een waarde is ingevuld If Trim(TextBox1.Text) = "" Or Trim(TextBox2.Text) = "" Or Trim(TextBox4.Text) = "" Or _ Trim(TextBox5.Text) = "" Or Trim(TextBox7.Text) = "" Or Trim(TextBox8.Text) = "" Or _ Trim(TextBox9.Text) = "" Or Trim(TextBox10.Text) = "" Or Trim(TextBox11.Text) = "" Then Call MsgBox("Controleer ingevoerde waarden!", vbCritical, "Instellingen") Exit Sub End If 'zet de ingestelde waarden in het register SaveSetting "Plaatuitslagen", "Settings", "IndexDiameter", ComboBox1.ListIndex SaveSetting "Plaatuitslagen", "Settings", "IndexRechthoek", ComboBox2.ListIndex SaveSetting "Plaatuitslagen", "Settings", "LaagSnijden", TextBox1.Text SaveSetting "Plaatuitslagen", "Settings", "PlaatsMarkering", CheckBox3.value SaveSetting "Plaatuitslagen", "Settings", "LaagMarkering", TextBox2.Text SaveSetting "Plaatuitslagen", "Settings", "LengteMarkering", TextBox8.Text SaveSetting "Plaatuitslagen", "Settings", "PlaatsTekst", CheckBox2.value SaveSetting "Plaatuitslagen", "Settings", "TekstHoogteMarkering", TextBox7.Text SaveSetting "Plaatuitslagen", "Settings", "MarkTekstAuto", MarkAutoOpt.value SaveSetting "Plaatuitslagen", "Settings", "MarkTekstHand", MarkHandOpt.value SaveSetting "Plaatuitslagen", "Settings", "LaagMarkering", TextBox2.Text SaveSetting "Plaatuitslagen", "Settings", "PlaatsTag", CheckBox1.value SaveSetting "Plaatuitslagen", "Settings", "NaamTagBlok", TextBox5.Text SaveSetting "Plaatuitslagen", "Settings", "LaagTag", TextBox4.Text SaveSetting "Plaatuitslagen", "Settings", "KleurTag", TextBox11.Text SaveSetting "Plaatuitslagen", "Settings", "KleurSnijden", TextBox9.Text SaveSetting "Plaatuitslagen", "Settings", "KleurMarkering", TextBox10.Text SaveSetting "Plaatuitslagen", "Settings", "InvoerTagBlock1", InvoerTagBlockOpt1.value SaveSetting "Plaatuitslagen", "Settings", "InvoerTagBlock2", InvoerTagBlockOpt2.value Unload Me End Sub Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Call IsSpecialKar(TextBox1.Text, KeyAscii) End Sub Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Call IsSpecialKar(TextBox2.Text, KeyAscii) End Sub Private Sub TextBox4_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Call IsSpecialKar(TextBox4.Text, KeyAscii) End Sub Private Sub TextBox5_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Call IsSpecialKar(TextBox5.Text, KeyAscii) End Sub
Bijlage IV
Private Sub TextBox7_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Call IsNumeriek(TextBox7.Text, KeyAscii) End Sub Private Sub textbox7_change() If TextBox7.Text = "." Then TextBox7.Text = "0." End Sub Private Sub TextBox8_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Call IsNumeriek(TextBox8.Text, KeyAscii) End Sub Private Sub textbox8_change() If TextBox8.Text = "." Then TextBox8.Text = "0." End Sub Private Sub TextBox9_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Call IsNumeriekKleur(TextBox9.Text, KeyAscii) End Sub Private Sub textbox9_change() 'controleren kleurnummer If Len(TextBox9.Text) > 0 Then If CInt(TextBox9.Text) < 1 Or CInt(TextBox9.Text) > 255 Then MsgBox "Kleurnummer niet goed (1 - 255).", vbCritical, "Plaatuitslagen" TextBox9.Text = Left(TextBox9.Text, Len(TextBox9.Text) - 1) 'laatste invoer weer weghalen End If End If End Sub Private Sub TextBox10_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Call IsNumeriekKleur(TextBox10.Text, KeyAscii) End Sub Private Sub textbox10_change() 'controleren kleurnummer If Len(TextBox10.Text) > 0 Then If CInt(TextBox10.Text) < 1 Or CInt(TextBox10.Text) > 255 Then MsgBox "Kleurnummer niet goed (1 - 255).", vbCritical, "Plaatuitslagen" TextBox10.Text = Left(TextBox10.Text, Len(TextBox10.Text) - 1) 'laatste invoer weer weghalen End If End If End Sub Private Sub TextBox11_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Call IsNumeriekKleur(TextBox11.Text, KeyAscii) End Sub Private Sub textbox11_change() 'controleren kleurnummer If Len(TextBox11.Text) > 0 Then If CInt(TextBox11.Text) < 1 Or CInt(TextBox11.Text) > 255 Then MsgBox "Kleurnummer niet goed (1 - 255).", vbCritical, "Plaatuitslagen" TextBox11.Text = Left(TextBox11.Text, Len(TextBox11.Text) - 1) 'laatste invoer weer weghalen End If End If End Sub Private Sub IsNumeriekKleur(tekst, toets) If toets = Asc(".") Then 'verkomen van een punt toets = 0 'geen invoer teruggeven Exit Sub End If Select Case toets Case Asc("0") To Asc("9") 'doe niets Case Else toets = 0 'geen invoer teruggeven End Select End Sub Private Sub IsSpecialKar(tekst, toets) 'verkomen van speciale karakters If toets = Asc("<") Or toets = Asc(">") Or toets = Asc("/") Or toets = Asc("\") Or _ toets = Chr(34) Or toets = Asc(":") Or toets = Asc("?") Or toets = Asc("*") Or _ toets = Asc("|") Or toets = Asc(",") Or toets = Asc("=") Or _ toets = Asc("'") Then toets = 0 'geen invoer teruggeven End If End Sub
Bijlage IV
Code GetIn en GetOut 'GetIn haalt huidige settings op 'GetOut zet de settings weer terug Public CurLaag As AcadLayer Public currTextStyle As AcadTextStyle Public CurOsmode As Variant Public CurTest As String Public LaagMarkOn As Boolean Public LaagMarkFreeze As Boolean Public LaagMarkLock As Boolean Public LaagSnijOn As Boolean Public LaagSnijFreeze As Boolean Public LaagSnijLock As Boolean Public LaagTagOn As Boolean Public LaagTagFreeze As Boolean Public LaagTagLock As Boolean Public Function GetIn() CurOsmode = ThisDrawing.GetVariable("OSMODE") Set CurLaag = ThisDrawing.ActiveLayer Set currTextStyle = ThisDrawing.ActiveTextStyle '.fontFile Dim laag As AcadLayer On Error Resume Next Set laag = ThisDrawing.Layers.Item(LaagMarkering) laag.LayerOn = True laag.Freeze = False laag.Lock = False Set laag = ThisDrawing.Layers.Item(LaagSnijden) laag.LayerOn = True laag.Freeze = False laag.Lock = False Set laag = ThisDrawing.Layers.Item(LaagTag) laag.LayerOn = True laag.Freeze = False laag.Lock = False End Function Public Function GetOut() ThisDrawing.SetVariable "OSMODE", CurOsmode ThisDrawing.ActiveLayer = CurLaag ThisDrawing.ActiveTextStyle = currTextStyle End Function
Bijlage V
Code CheckTag Public Function CheckTag() Dim BlokRef As AcadBlockReference Dim varAttributes As Variant Dim TempPunt(0 To 2) As Double TagFout = False TempPunt(0) = 0 'x TempPunt(1) = 0 'y TempPunt(2) = 0 'z 'controleren of Tag aanwezig is For Each TagBlok In ThisDrawing.Blocks If UCase(TagBlok.Name) = UCase(NaamTagBlok) Then TagAanwezig = True End If Next TagBlok If TagAanwezig = True Then Pad = ThisDrawing.Application.Path On Error GoTo ErrorInlezen Open Pad & "\PlaatUitslagen\attributen.ini" For Input As #1 'inlezen atributen For I = 1 To 4 Line Input #1, Regel 'commentaar regels Next nAtt = 0 While Not EOF(1) And nAtt < 20 nAtt = nAtt + 1 Input #1, Attribuut(nAtt, 1), Attribuut(nAtt, 2) Wend Close #1 On Error Resume Next Set BlokRef = ThisDrawing.ModelSpace.InsertBlock(TempPunt, NaamTagBlok, 1, 1, 1, 0) varAttributes = BlokRef.GetAttributes BlokRef.Delete If UBound(varAttributes) + 1 = nAtt Then For I = 1 To nAtt If UCase(varAttributes(I - 1).TagString) <> UCase(Attribuut(I, 1)) Then TagFout = True End If Next Else TagFout = True End If End If If TagFout = True Then MsgBox "Attributes van bestaand Tagblok komt niet overeen met attributen.ini!", vbCritical, "Error Plaatuitslagen" CheckTag = TagFout Exit Function ErrorInlezen: CheckTag = True MsgBox "Fout bij inlezen atributen.ini", vbCritical End Function
Bijlage VI
Code SetTagWaardenAuto Public Sub SetTagWaardenAuto() Dim tek As String Dim Dikte(20) As String Dim SnijProcessen(20) As String 'tekening en positienummer TekNaam = Left(ThisDrawing.Name, Len(ThisDrawing.Name) - 4) 'teknaam is filename 'haal teknaam uit register TekNaamReg = GetSetting("Plaatuitslagen", "Settings", "TekNaamReg", Left(ThisDrawing.Name, Len(ThisDrawing.Name) - 4)) If TekNaam <> TekNaamReg Then 'andere tekening opgestart TekNaamRegUser = TekNaam pos = 0 SaveSetting "Plaatuitslagen", "Settings", "TekNaamReg", TekNaam Else 'in dezelfde tek kan user ander teknaam hebben ingevuld TekNaamRegUser = GetSetting("Plaatuitslagen", "Settings", "TekNaamRegUser", _ Left(ThisDrawing.Name, Len(ThisDrawing.Name) - 4)) pos = GetSetting("Plaatuitslagen", "Settings", "PosNr", 0) SaveSetting "Plaatuitslagen", "Settings", "TekNaamReg", Left(ThisDrawing.Name, Len(ThisDrawing.Name) - 4) End If On Error GoTo ErrorOnderBreken TekNaamUser = ThisDrawing.Utility.GetString(True, "Tekening: <" & TekNaamRegUser & ">: ") If TekNaamUser = "" Then TekNaamUser = TekNaamRegUser SaveSetting "Plaatuitslagen", "Settings", "TekNaamRegUser", TekNaamUser Tekening = TekNaamUser pos = pos + 1 If Len(CStr(pos)) = 1 Then posnummer = "0" & CStr(pos) Else posnummer = pos posnummer = ThisDrawing.Utility.GetString(True, "Positie nummer: <" & CStr(posnummer) & ">: ") If posnummer = "" Then posnummer = pos If UCase(posnummer) <> "X" Then 'als x ingevuld wordt komt er geen posnummer achter teknr te staan If Len(posnummer) = 1 Then Tekening = TekNaamUser & "-" & "0" & posnummer SaveSetting "Plaatuitslagen", "Settings", "PosNr", posnummer SaveSetting "Plaatuitslagen", "Settings", "Tekening", Tekening Else Tekening = TekNaamUser & "-" & posnummer SaveSetting "Plaatuitslagen", "Settings", "PosNr", posnummer SaveSetting "Plaatuitslagen", "Settings", "Tekening", Tekening End If Else SaveSetting "Plaatuitslagen", "Settings", "Tekening", Tekening End If 'materiaal keuze materiaalreg = GetSetting("Plaatuitslagen", "Settings", "Materiaal", "ST") ThisDrawing.Utility.InitializeUserInput 1 MateriaalUser = ThisDrawing.Utility.GetString(True, "Materiaal: <" & materiaalreg & ">: ") If MateriaalUser = "" Then MateriaalUser = materiaalreg Pad = ThisDrawing.Application.Path On Error GoTo ErrorInlezen Open Pad & "\PlaatUitslagen\materialen.ini" For Input As #1 Line Input #1, Regel 'commentaar regel While Regel <> "[" & UCase(MateriaalUser) & "]" And Not EOF(1) Line Input #1, Regel If Regel = "[" & UCase(MateriaalUser) & "]" Then Found = True Wend If Found = True Then SaveSetting "Plaatuitslagen", "Settings", "Materiaal", UCase(MateriaalUser) I=1 Input #1, Dikte(I), SnijProcessen(I) While Left(Dikte(I), 1) <> "[" And Not EOF(1) I=I+1 Input #1, Dikte(I), SnijProcessen(I) Wend Else PlaatDiktes = "*" SaveSetting "Plaatuitslagen", "Settings", "Materiaal", UCase(MateriaalUser) End If Close #1 On Error GoTo ErrorOnderBreken Dikte: 'haal laatste dikte uit register
Bijlage VII
DikteReg = GetSetting("Plaatuitslagen", "Settings", "MateriaalDikte", 2) 'dikte is ook afhankeljk van wat eventueel is ingevuld DikteUser = ThisDrawing.Utility.GetString(True, "Dikte <" & DikteReg & ">: ") If DikteUser = "" Then DikteUser = DikteReg If PlaatDiktes = "*" Then SaveSetting "Plaatuitslagen", "Settings", "MateriaalDikte", DikteUser SnijProcesReg = GetSetting("Plaatuitslagen", "Settings", "SnijProces", "xxx") SnijProcesUser = ThisDrawing.Utility.GetString(True, "SnijProces: <" & SnijProcesReg & ">: ") If SnijProcesUser = "" Then SnijProcesUser = SnijProcesReg SaveSetting "Plaatuitslagen", "Settings", "SnijProces", SnijProcesUser SnijProces = SnijProcesUser Else 'controleer plaatdikten bij materiaal a = -1 For Each e In Dikte a=a+1 If e = DikteUser Then FoundDikte = True SnijProces = SnijProcessen(a) End If Next If FoundDikte = False Then MsgBox "Ingevoerde plaatdikte niet bij materiaal gevonden." GoTo Dikte End If SaveSetting "Plaatuitslagen", "Settings", "MateriaalDikte", DikteUser SaveSetting "Plaatuitslagen", "Settings", "SnijProces", SnijProces End If 'default aantal is afhankelijk van uitslag 1/2 of 1/4 If RechtRondFrm.KwartUitslagOpt.value = True Then n=4 Else n=2 End If If RechtRondFrm.ChkLengte.value = True Or RechtRondFrm.ChkBreedte.value = True Then n=1 End If Aantal = ThisDrawing.Utility.GetString(True, "Aantal: <" & CStr(n) & ">: ") If Aantal = "" Then Aantal = n SaveSetting "Plaatuitslagen", "Settings", "Aantal", Aantal On Error Resume Next Exit Sub ErrorOnderBreken: If MsgBox("Stoppen?", vbOKCancel + vbQuestion, "Plaatuitslagen") = vbOK Then End Else Resume End If ErrorInlezen: MsgBox "Fout bij inlezen Attributen.ini." & Chr(13) & "Controleer bestand" End Sub
Bijlage VII
Literatuurlijst -
Uitslaan van plaatwerk Deel 1, door M. Dekker en N. de Rooy Uitslaan van plaatwerk Deel 2, door M. Dekker en N. de Rooy Uitslagen Metaalbewerking, door Ir. E. Verbeet Visual Basic 6.0, door E. Petroutsos AutoCAD 2002, door Ir. R. Boeklagen
Bijlage VIII
Installatie-instructies • • •
•
Kopieer de directory Plaatuitslagen naar de AutoCAD directory. Bijvoorbeeld naar: D:\Program Files\AutoCAD 2000i\Plaatuitslagen Start AutoCAD Ga naar Tools -> Options… -> Tabblad Files Voeg de Plaatuitslagen directory toe aan de Support File Search Path. Bijvoorbeeld: D:\Program Files\AutoCAD 2000i\PlaatUitslagen
Ga naar Tools -> Customize -> Menus… -> Tabblad Menu Groups
Browse naar de Plaatuitslagen directory en selecteer Plaatuitslagen.mns Klik op Load
Bijlage IX
•
Bij Menu Group selecteer Plaatuitslagen en ga naar tabblad Menu Bar Klik op Help is de lijst van Menu Bar, klik op Insert, Klik op Close
•
Zet de AutoCAD variabele ACADLSPASDOC op 0. Deze zorgt ervoor dat acad.lsp alleen in de eerste tekening wordt geladen. Routines die in elke tekening geladen moeten worden, worden in acaddoc.lsp gezet. Zorg ervoor dat er geen acad.lsp in de Support directory van AutoCAD staat. Staat deze er wel, kopieer de inhoud naar acaddoc.lsp en verwijder de acad.lsp uit de Support directory van AutoCAD.
Het Plaatuitslagenprogramma kan nu via toolbars of pulldown worden gestart.
Bijlage IX