2012 GCE cad-app
Student: Begeleider:
S. van Bueren R. Boeklagen
School:
TEC CadCollege
Afstudeer datum: 27-04-2012 GCE cad-service 4/16/2012
0
GCE cad-app
Sander van Bueren
Voorwoord Voor u ligt een verslag van de opleiding AutoCAD System Manager van het CAD College te Nijmegen. Dit verslag heb ik geschreven om u een inzage te geven in hoe het proces van de ontwikkeling van deze applicatie is verlopen. Verder in dit verslag leg ik uit hoe ik op het idee ben gekomen van dit project. Mijn naam is Sander van Bueren. Ik ben 24 jaar, werkzaam als GIS operator bij GCE cad-service te Hellevoetsluis. Voor ik aan de opleiding begon was ik tekenaar én programmeur. De reden dat ik de opleiding HBOtraject ACE ben gaan volgen is omdat mijn werkgever potentie in mij zag met programmeren. Hij ziet mij graag Autocad modificeren om het gebruik ervan te vergemakkelijken. Ikzelf zag hier ook de mogelijkheid in om mijzelf verder te ontwikkelen in het programmeerwereldje. Mij is gevraagd, na het afronden van de opleiding, om verder te gaan in software ontwikkeling op maat. Software dat communiceert met AutoCAD. Deze opleiding heeft mij goed geholpen met het ontdekken van de mogelijkheden in Autocad en hoe VB.NET te gebruiken met Autocad. Voor alle hulp en steun, die ik heb gehad bij het volgen van de opleiding, het opstellen van mijn verslag en de tips ’n tricks voor het programmeren van de tools, wil ik de volgende personen bedanken.
Lejo van Gameren Jan Verschoor Ronald Boeklagen
Ik wens de lezers veel leesplezier met dit verslag. Met vriendelijke groet, S. van Bueren
1
GCE cad-app
Sander van Bueren
Samenvatting GCE cad-service is technisch tekenbureau dat zich heeft gespecialiseerd in ondergrondse infra. Zij verzorgt werktekeningen even als dat ze de as-built tekeningen verwerkt in Smallworld. Het klantenbestand van GCE cad-service bevat grote klanten als Stedin, Joulz, Baas b.v., BAM. Het is dus van belang dat wij zeer presentabele en bovenal foutloze werktekeningen kunnen maken. Door de vele handelingen die gemaakt moeten worden, is dit zeer lastig. “GCE cad-app” is dé oplossing om handelingen in te korten. “GCE cad-app” is een door de auteur geprogrammeerd VB.NET programma. Door middel van het laden van een dll-bestand (deze wordt gegenereerd door Visual Studio 2010 express) in AutoCAD, kan er gebruik gemaakt worden van deze “app”. “GCE cad-app” vereenvoudigd alleen het proces. “GCE cad-app” is niet gemaakt om het voor iedereen mogelijk te maken, werktekeningen te maken. De tekenaar zal altijd kennis van het vak moeten hebben. Inmiddels werken we zeven weken met “GCE cad-app”. De tekenaars zijn erg tevreden met deze applicatie. Voor een simpele opdracht als leidingen opmeten, waar eerst meerdere handelingen voor waren, kan men nu in twee handelingen uitvoeren.
2
GCE cad-app
Sander van Bueren
Inhoudsopgave Voorwoord .............................................................................................................................................. 1 Samenvatting........................................................................................................................................... 2 Inhoudsopgave ........................................................................................................................................ 3 1. Inleiding ............................................................................................................................................... 4 2. GCE cad-service ................................................................................................................................... 5 2.1. Profiel ........................................................................................................................................... 5 2.2. Organigram ................................................................................................................................... 6 3. Het probleem ...................................................................................................................................... 7 3.1. Werkzaamheden .......................................................................................................................... 7 3.2. Problemen .................................................................................................................................... 7 3.3. Huidige automatisering ................................................................................................................ 7 4. Oplossingen ......................................................................................................................................... 8 4.1. Indeling ......................................................................................................................................... 8 4.2. Voorbereiding vereenvoudigen.................................................................................................... 9 4.3. Symbolen .................................................................................................................................... 11 5. Uitwerking ......................................................................................................................................... 12 5.1. Vaste Functions / Subs ............................................................................................................... 12 5.1.1. CreateLayer (LayerName, LayerColor, LineType, LineWeight, Freeze) ............................... 13 5.1.2. EdMsg (Text) ........................................................................................................................ 15 5.2. Voorbereiding vereenvoudigen.................................................................................................. 16 5.3. Lengte kabels .............................................................................................................................. 18 5.4. Extra toepassing: Projecten beheer ........................................................................................... 19 6. Conclusie ........................................................................................................................................... 21
3
GCE cad-app
Sander van Bueren
1. Inleiding GCE cad-service is een sterk groeiend middelgroot tekenbureau. Haar hoofdactiviteit is ondergrondse infrastructuur, het maken van werktekeningen en kabels- & leiding registratie in Smallworld. GCE cad-service maakt werktekeningen voor aannemers die de ondergrondse infrastructuur onderhouden. Deze maken op hun beurt weer revisie tekeningen die verwerkt moeten worden in Smallworld, nog een taak van GCE cad-service. Deze applicatie zal de werkzaamheden voor het tekenwerk vereenvoudigen. Een tekenaar moet soms vele handelingen uitvoeren om iets eenvoudigs te bewerkstelligen. In dit verslag leg ik u uit hoe ik op het idee ben gekomen van deze applicatie en hoe de applicatie werkt.
4
GCE cad-app
Sander van Bueren
2. GCE cad-service
2.1. Profiel GCE cad-service is een sterk groeiend tekenbureau en verheugt zich reeds meer dan 10 jaar klanten haar service te mogen aanbieden. In die tijd GCE cad-service een schat aan ervaring op mogen. Een deskundige partner derhalve, getuige de vele projecten die zij voor energiedistributiebedrijven, gemeenten en anderen heeft mogen verzorgen. GCE cad-service telt vandaag de dag 25 werknemers. Tevens draagt GCE cad-service ook zorg voor opleidingen op gebied van AutoCAD / GIS. De ondergrondse infrastructuur is onze hoofdactiviteit, het vervaardigen van werktekeningen tot zelfs het aanvragen van vergunningen. Uitbreidingen van onze dienstverlening vinden plaats op het gebied van project ondersteuning en verdere marktontwikkelingen zoals milieu en rail infra.
5
GCE cad-app
Sander van Bueren
2.2. Organigram Ik werk in de afdeling die rood omcirkeld is.
6
GCE cad-app
Sander van Bueren
3. Het probleem Het probleem is dat tekenaars veel handelingen moeten uitvoeren per project. Dit is erg vervelend en kan voor fouten zorgen. Om een tekening zo goed mogelijk aan te leveren, moet er gezorgd worden dat de tekenaar zo min mogelijk onnodige handelingen hoeft uit te voeren. De opdracht:
Handelingen, die de tekenaars moeten uitvoeren, verminderen. Venster maken om makkelijk projecten te benaderen
3.1. Werkzaamheden De tekenaars krijgen een tekening uit Smallworld GIS (Geografisch Informatie Systeem) aangeleverd. Hierop is met de hand wijzigingen aangebracht naar de situatie zoals het uiteindelijk willen. Als voorbeeld wat een tekenaar moet doen met een tekening met gasleidingen: 1. 2. 3. 4. 5. 6. 7. 8. 9.
Uit GIS een DXF- bestand exporteren Alle lagen aanpassen naar onze standaarden (m.b.v. LISP) Teksten recht zetten Werktekening verwerken Symbolen plaatsen Nieuwe leidingen benoemen met een label Leidingen opmeten Per discipline de lengte opgeven Opleveren
3.2. Problemen Er is gebleken dat, door de vele handelingen, na een aantal tekeningen op een dag, meer fouten gemaakt worden. De meeste fouten die gemaakt worden zijn: teksthoogten, foutieve labels (door het kopiëren) en niet de juiste aantal meters opgeven per discipline leiding. Omdat we grote klanten hebben en onszelf presenteren als de beste tekenbureau van Rijnmond, kunnen wij ons geen fouten permitteren. Dit zou onze geloofwaardigheid aantasten.
3.3. Huidige automatisering Nu worden veel handelingen nog door LISP routines afgehandeld, deze staan in verschillende bestanden die handmatig geladen moeten worden. Dit leidt tot verwarring: “waar stond dat ook weer?!”
7
GCE cad-app
Sander van Bueren
4. Oplossingen Aller eerst wil ik dat alles in één bestand komt te staan. Deze start meteen op met het laden van AutoCAD. Dan heb ik het eerste probleem al getackeld: geen rond dwalende LISP routines meer. Wat ik graag zou doen is ALLES automatiseren. Echter zou dat niet mogelijk zijn. Wat ik geleerd heb is dat je simpel moet blijven denken, anders zie je door de bomen het bos niet meer.
4.1. Indeling Ik heb eerst gekeken naar indeling van de werkzaamheden: 1. Uit GIS een DXF- bestand exporteren 2. Voorbereiding a. Alle lagen aanpassen naar onze standaarden (m.b.v. LISP) 3. Werktekening verwerken a. Symbolen plaatsen b. Nieuwe leidingen benoemen met een label 4. Afronden a. Leidingen opmeten b. Per discipline de lengte opgeven 5. Opleveren
8
GCE cad-app
Sander van Bueren
4.2. Voorbereiding vereenvoudigen De voorbereiding neemt veel tijd in beslag. het DXF- bestand bevat alleen maar zwarte/witte (poly)lijnen, alle lagen moeten dus nog de juiste kleur krijgen. Ook de teksten staan nog niet zoals ze moeten zijn. Voor
Na
9
GCE cad-app
Sander van Bueren
Er zijn drie opties. Template Om de voorbereiding makkelijker te maken, kan er een template gemaakt worden met alle lagen en teksthoogtes juist ingesteld. Op deze manier hoef je niet naar alle LISP routines te zoeken. Een nadeel is wel dat je een DXF- bestand steeds moet kopiëren naar de template of de Layer State importeren en opslaan als DWG- bestand. Hier is niet voor gekozen omdat je de handelingen alleen maar aanpast en het blijft evenveel werk. Lisproutines Een tweede optie is alle LISP routines bij elkaar zoeken en aan een knop koppelen. Deze knop speelt dan bepaalde routines achter elkaar af. Je zit echter nog wel met losse LISP bestanden, ondanks dat je ze in één map kan plaatsen. VB.NET programmering De laatste optie is een programma schrijven in VB.NET. Hiermee kan je ook functies aanroepen door een commando in AutoCAD te typen en alles staat in één dll- bestand. Met VB.NET zijn er overigens meer mogelijkheden dan met LISP en kan altijd uitgebreid worden. De laatste optie heb ik dan ook hierom gekozen.
10
GCE cad-app
Sander van Bueren
4.3. Symbolen De symbolen worden nu nog gekopieerd uit bestaande tekeningen, dit kost alleen maar tijd en moet veranderen. Het beste wat hieraan gedaan kan worden, is alle symbolen in één tekening plaatsen en opslaan. Zo kan er gebruik gemaakt worden van een palette. Waarom niet ook programmeren in VB.NET? Het betreft best wel veel symbolen en er zitten complexe symbolen tussen. Alles is al getekend, en hoeft alleen maar samen gebracht te worden naar één DWG- bestand.
11
GCE cad-app
Sander van Bueren
5. Uitwerking De taal waarin deze applicatie is geschreven, is VB.NET. Het verschil tussen VBA en VB.NET zijn de mogelijkheden. In VB.NET is veel meer mogelijk. Daarnaast staat VB.NET los van AutoCAD, dit is voordelig met het programmeren. Als je een VBA code wilt bewerken, moet je AutoCAD openen. Dat is met VB.NET niet nodig. Mede om deze twee redenen heb ik gekozen om in VB.NET te programmeren.
5.1. Vaste Functions / Subs Voor het gemak heb ik een paar vaste functies, die vaker terugkomen, in een class opgeslagen. Deze class is genaamd CadFunc.
12
GCE cad-app
Sander van Bueren
5.1.1. CreateLayer (LayerName, LayerColor, LineType, LineWeight, Freeze) Dit is een functie die een laag aanmaakt in het lagentabel. Deze functie houdt rekening met Color, LineType, LineWeight en Freeze.
13
GCE cad-app
Sander van Bueren
Public Shared Function CreateLayer(ByVal LayerName As String, ByVal LayerColor As Integer, Optional ByVal LineType As String = "Continuous", Optional ByVal LineWeight As LWeight = LWeight.ByLineWeightDefault, Optional ByVal Freeze As Boolean = False) As Boolean 'Declareren van actieve document en database waarin word gemuteerd Dim Doc As Document = Application.DocumentManager.MdiActiveDocument Dim DWG As Database = Doc.Database CreateLayer = False 'Transaction starten Using Trans As Transaction = Doc.TransactionManager.StartOpenCloseTransaction() 'Open (layertable) om te lezen Dim lyrTbl As LayerTable = Trans.GetObject(DWG.LayerTableId, _ OpenMode.ForRead) 'Open LineTypetable om te lezen Dim ltTbl As LinetypeTable = Trans.GetObject(DWG.LinetypeTableId, _ OpenMode.ForRead) If Not lyrTbl.Has(LayerName) Then 'Als de laag nog niet bestaat Try 'Een nieuwe laag aanmaken Dim lyrRec As LayerTableRecord = New LayerTableRecord 'Laaggegevens instellen lyrRec.Name = LayerName 'naam lyrRec.Color = Color.FromColorIndex(ColorMethod.ByAci, LayerColor) 'kleur 'Controleren of LineType wel al bestaat If ltTbl.Has(LineType) Then 'linetype bestaat lyrRec.LinetypeObjectId = ltTbl(LineType) Else 'linetype bestaat nog niet EdMsg(LineType & " bestaat niet als linetype. Maak deze eerst aan.") lyrRec.LinetypeObjectId = ltTbl("Continuous") End If lyrRec.LineWeight = LineWeight 'lineweight lyrRec.IsFrozen = Freeze 'Laag eventueel bevriezen lyrTbl.UpgradeOpen() 'status LayerTable aanpassen om in te kunnen schrijven lyrTbl.Add(lyrRec) 'laag toevoegen Trans.AddNewlyCreatedDBObject(lyrRec, True) EdMsg("Laag aangemaakt: " & LayerName) 'Eventuele fouten opvangen Catch ex As Exception EdMsg("Er ging iets fout: " & ex.Message) Return False 'Boolean False meegeven als teken dat het mislukt is End Try Else 'Als de laag al bestaat Try Dim lyrRec As LayerTableRecord = Trans.GetObject(lyrTbl(LayerName), OpenMode.ForWrite) lyrTbl.UpgradeOpen()'Status LayerTable aanpassen om in te kunnen schrijven lyrRec.Color = Color.FromColorIndex(ColorMethod.ByAci, LayerColor) 'kleur 'Controleren of LineType wel al bestaat If ltTbl.Has(LineType) Then 'linetype bestaat lyrRec.LinetypeObjectId = ltTbl(LineType) Else 'LineType bestaat nog niet EdMsg(LineType & " bestaat niet als linetype. Maak deze eerst aan.") lyrRec.LinetypeObjectId = ltTbl("Continuous") End If lyrRec.LineWeight = LineWeight 'lineweight lyrRec.IsFrozen = Freeze 'Laag eventueel bevriezen Catch ex As Exception 'Eventuele fouten opvangen EdMsg("Er ging iets fout: " & ex.Message) Return False 'Boolean False meegeven als teken dat het mislukt is End Try End If Trans.Commit() 'Transactie opslaan End Using Return True End Function
14
GCE cad-app
Sander van Bueren
5.1.2. EdMsg (Text) Deze functie heb ik aangemaakt om gemakkelijke een tekst in de commandline te laten verschijnen. Public Shared Sub EdMsg(ByVal Text As String) 'Actieve document declareren
Dim Doc As Document = Application.DocumentManager.MdiActiveDocument 'Editor (Commandline) declareren
Dim Ed As Editor = Doc.Editor Ed.WriteMessage(Text & vbCrLf) 'De tekst in de Commandline laten verschijnen End Sub
15
GCE cad-app
Sander van Bueren
5.2. Voorbereiding vereenvoudigen Omdat alle lagen standaard zijn, heb ik ze allemaal in de code weggeschreven. Na alle lagen zijn beschreven, wordt de functie CreateLayer() aangeroepen die alle lagen aanmaakt/aanpast.
16
GCE cad-app
Sander van Bueren
_ Public Shared Sub PrepareGas() CadFunc.EdMsg("Laag namen aanmaken") 'Standaard Laagnamen aanmaken Dim strLayer(58) As String strLayer(0) = "B_KB_ANODE_GALVANISCH" strLayer(1) = "B_KB_DRAAD" strLayer(2) = "B_KB_MEETPUNT" strLayer(3) = "DXF_AREAS" strLayer(4) = "EIGEN_TOPO_LIJN" strLayer(5) = "G_AANSLUITCOMPONENT" strLayer(6) = "G_AANSLUITLEIDING" strLayer(7) = "G_AANSLUITLEIDING_LABEL_BEHEER" strLayer(8) = "G_AANSLUITLEIDING_LL_BEHEER" strLayer(9) = "G_AFSLUITER" strLayer(10) = "G_BESCHERMING" 'Tot strLayer(58)… Dim intClr(58) As Integer 'Bijhorende kleuren van de lagen intClr(0) = 7 intClr(1) = 5 intClr(2) = 7 intClr(3) = 8 intClr(4) = 8 intClr(5) = 7 intClr(6) = 3 intClr(7) = 7 intClr(8) = 7 intClr(9) = 1 intClr(10) = 4 'Tot intClr(58)… Dim LnType(58) As String LnType(1) = "Continuous" LnType(2) = "Continuous" LnType(3) = "Continuous" LnType(4) = "Continuous" LnType(5) = "Continuous" LnType(6) = "Continuous" LnType(7) = "Continuous" LnType(8) = "Continuous" LnType(9) = "Continuous" LnType(10) = "Continuous" 'Tot LnType(58)… 'Loop om alle 59 lagen aan te maken For I As Integer = 0 To 58 CadFunc.EdMsg("Laag: " & strLayer(I)) CadFunc.EdMsg("Kleur: " & Color.FromColorIndex(ColorMethod.ByAci, intClr(I)).ToString()) If CadFunc.CreateLayer(strLayer(I), intClr(I), LnType(I)) = True Then CadFunc.EdMsg("Laag succesvol aangemaakt!") Else CadFunc.EdMsg("Laag aanmaken gefaald!") End If CadFunc.EdMsg("-----") Next I End Sub
17
GCE cad-app
Sander van Bueren
5.3. Lengte kabels Tekenaars berekenen de lengte van de leidingen nu nog handmatig. Dit neemt (afhankelijk van de grootte van het project) gemiddeld 5 minuten in beslag. Dankzij de volgende functie kan dat veel sneller. _ Public Shared Sub Lengte() Dim ss As New ObjectIdCollection Dim Lengte As Double = 0 Using Trans As Transaction = Application.DocumentManager.MdiActiveDocument.TransactionManager.StartTransaction If Opvragen.Elementen(ss) = True Then For Each obj In ss Dim ent = Trans.GetObject(obj, OpenMode.ForRead) If TypeOf ent Is Line Then Dim Lijn = CType(ent, Line) Lengte += Lijn.Length ElseIf TypeOf ent Is Polyline Then Dim Plijn = CType(ent, Polyline) Lengte += Plijn.Length ElseIf TypeOf ent Is Arc Then Dim Ar = CType(ent, Arc) Lengte += Ar.Length End If Next End If End Using MsgBox("De lengte van de leidingen bedraagt: " & Round(Lengte, 2) & "meter") End Sub
18
GCE cad-app
Sander van Bueren
5.4. Extra toepassing: Projecten beheer Als toevoeging op mijn eind opdracht, heb ik een venster gemaakt waarin je gemakkelijk bij de tekeningen komt.
19
GCE cad-app
Sander van Bueren
Code de uitgevoerd wordt bij het laden van het venster: Private Sub OpenTekening_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim Dirs As DirectoryInfo = New DirectoryInfo(My.Settings.ProjectFolder) Dim Dir As DirectoryInfo Try For Each Dir In Dirs.GetDirectories Me.cbxAfdeling.Items.Add(Dir.Name) Next Dir Me.cbxAfdeling.SelectedIndex = 0 Catch ex As Exception MsgBox("Er is een iets fout gegaan: " & ex.Message) Exit Sub End Try With Me.lstDWG .View = Windows.Forms.View.Details .Columns.Add("Tekening").Width = 315 .Columns.Add("Gewijzigd op").Width = 100 .Columns.Add("Pad").Width = 0 End With With Me.lstDXF .View = Windows.Forms.View.Details .Columns.Add("Tekening").Width = 315 .Columns.Add("Gewijzigd op").Width = 100 .Columns.Add("Pad").Width = 0 End With With Me.lstMap .View = Windows.Forms.View.Details .Columns.Add("Projectnummer").Width = 157 End With End Sub
Onder de afdelingen kiest men de juiste afdeling, waarna er een lijst met mappen gevuld wordt. Deze mappen kunnen geselecteerd worden als gevolg dat er in de lijst ernaast alle DWG- en DXFbestanden geladen worden. Met een dubbelklik op het bestand opent het in Autocad: Private Sub lstDWG_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstDWG.DoubleClick Dim Fle As String = Me.lstDWG.SelectedItems(0).SubItems(2).Text Dim nwDoc As Document = Application.DocumentManager.Open(Fle) End Sub
20
GCE cad-app
Sander van Bueren
6. Conclusie Inmiddels werken we al een aantal weken met “GCE cad-app”. Het is zeker een verbetering. Het doel was om de handelingen van de tekenaars te verminderen. Er voor zorgen dat zij zo “comfortabel” mogelijk kunnen werken. Voorheen moest men met de voorbereiding van een tekening eerst naar een LISP-bestand zoeken en deze uitvoeren om de lagen juist neer te zetten. Nu heb ik er voor gezorgd dat het DLL-bestand van “GCE cad-app” automatisch wordt geladen zodat de tekenaars met één knop aan de slag kunnen. Dit scheelt al ruim vijf minuten. Het projecten venster is ook een verbetering. De tekenaars zijn hier heel erg tevreden over, de projecten zijn sneller te benaderen.
21