SHEETSETMANAGER
“TEKENINGENBEHEERSYSTEEM”
Naam
: Erik Kohl
Bedrijf
: Konosch Nederland BV
Opleiding
: ACE system manager
Begeleider
: ir. R. Boeklagen (TEC Nijmegen)
Datum
: 15-06-2005
ACE system manager
Tekeningenbeheersysteem
Voorwoord Ongeveer één jaar geleden heeft een collega een Autocad-cursus gevolgd. Hij was hier zeer tevreden over en vermelde dat er zelfs een complete studie voor Autocad bestond. Ik was hierin gelijk geïnteresseerd. Ik zocht namelijk al een tijd naar een studie welke in mijn interessegebied en ook een directe link had met mijn werk. Na wat zoekwerk op het internet, heb ik juiste adres gevonden, en heb de op deze site staande test, welke ik met goed gevolg heb afgelegd trouwens, gemaakt. Vol enthousiasme heb ik deze studie aangekaart in een gesprek met de leidinggevenden. De trieste mededeling kwam dat er qua ontwikkeling eigenlijk geen juiste afstudeeropdracht te bedenken was en dat ik het beste nog een jaartje zou kunnen wachten op wat de ontwikkelingen zouden brengen. Nog geen halfjaar later, na wat aandringen mijnerzijds, ben ik weer een gesprek aangegaan. Na het aanbrengen van diverse opties voor mijn afstudeeropdracht, is Konosch akkoord gegaan. Eindelijk, ik mocht beginnen met mijn studie Autocad System Manager. Als resultaat hiervan ligt voor u mijn afstudeerverslag. Hierbij wil ik Konosch Nederland bv bedanken voor al zijn steun en vertrouwen. Erik Kohl Juni 2005
1
ACE system manager
Tekeningenbeheersysteem
INHOUDSOPGAVE 1.0
INLEIDING ................................................................................................................ 4
1.1
BEDRIJF .............................................................................................................. 4
1.2
ORGANISATIESTRUCTUUR.......................................................................... 6
1.3
WERKZAAMHEDEN ........................................................................................ 7
2.0
1.3.1
Tekenwerk.................................................................................................... 7
1.3.2
Materialenstaat ............................................................................................ 7
1.3.3
Communicatie .............................................................................................. 7
PROBLEEMOMSCHRIJVING ............................................................................... 8
2.1
2.1.1
Voor- en nadelen huidig systeem................................................................ 8
2.1.2
Directorystructuur....................................................................................... 9
2.1.3
Projectnummer ............................................................................................ 9
2.1.4
Tekeningnummer ...................................................................................... 10
2.2 3.0
HUIDIGE TEKENINGEN BEHEERSYSTEEM ............................................ 8
PROBLEEMSTELLING.................................................................................. 11
TEKENINGENBEHEERSYSTEEM..................................................................... 12
3.1
DOEL.................................................................................................................. 12
3.2
OPTIES .............................................................................................................. 12
3.2.1
Windows verkenner................................................................................... 12
3.2.2
Ontwikkelen nieuw programma .............................................................. 13
3.2.3
Sheetsetmanager ........................................................................................ 13
3.3 4.0
KEUZE ............................................................................................................... 14
SHEETSETMANAGER.......................................................................................... 15
4.1
ALGEMENE UITGANGSPUNTEN ............................................................... 15
4.1.1
Functioneren Autocad/ADT ..................................................................... 15
4.1.2
Gebruiksvriendelijk .................................................................................. 15
4.1.3
Modulair..................................................................................................... 15
4.1.4
Standaard layout ....................................................................................... 15
4.2
SHEETSETMANAGER IN HET KORT ....................................................... 15
4.3
WAAROM EXTRA TOOLS............................................................................ 16
2
ACE system manager
5.0
Tekeningenbeheersysteem
WERKING PROGRAMMA ................................................................................ 17
5.1
STARTUP.DVB ................................................................................................. 17
5.1.1
Openen........................................................................................................ 17
5.1.2
Opslaan....................................................................................................... 17
5.2
SHEETSET.DVB............................................................................................... 18
5.2.1 Projecten............................................................................................................. 18 5.2.2 Het object ‘SheetSetManager’.......................................................................... 19 5.2.3 Programmeren ................................................................................................... 20 5.3
EVALUATIE ..................................................................................................... 25
BIJLAGEN............................................................................. Error! Bookmark not defined.
3
ACE system manager
1.0
INLEIDING
1.1
BEDRIJF
Tekeningenbeheersysteem
Sinds augustus 2000 ben ik als tekenaar werkzaam bij Konosch Nederland B.V. Konosch Nederland B.V. is succesvol marktleider op het gebied van stalen bekistingssystemen en gietbouwbeveiligingen. Het bedrijf is in 1979 opgericht en maakt nog steeds een positieve groei door. Wij zijn niet alleen alleen leverancier van bekistingen; ook hebben wij een adviserende rol vanaf de eerste fase van het bouwproces naar architecten en aannemers. Door het specialisme van gietbouwbekisting en beveiliging is Konosch in staat om de gehele gietbouwvoorbereiding voor haar rekening te nemen en de
Afbeelding:
Boven: Hoofdkantoor Rechts: Produktie
bekisting gebruiksklaar af te leveren. De gietbouw technologie is gebaseerd op het storten van wanden en/of vloeren met beton die naar de bouwplaats getransporteerd wordt d.m.v. betonwagens. De beton wordt in de stalen bekistingsmallen gegoten. Het grote voordeel van stalen bekistingssystemen is de lange gebruiksduur zowel op een enkel project als bij meerdere projecten.
Om het betonskelet te verstevigen wordt wapening tussen de wandpanelen en op de vloeren aangebracht. Electrische installaties, waterleiding en mechanische ventilatie kunnen eveneens aangebracht worden op de bekisting om te worden meegestort in het beton. Het bedrijf heeft de laatste jaren veel technologische vooruitgang geboekt. Dit heeft geresulteerd in de aanschaf van onder Afbeelding: Boorstraat
4
ACE system manager
Tekeningenbeheersysteem
andere een geautomatiseerde boorstraat en een nieuw informatiebeheersysteem wat voor iedereen in het bedrijf een grote omschakeling is geweest. Ik als tekenaar daarentegen merk er met mijn dagelijks werk niet zoveel van, maar vooral achter de schermen is het van groot belang dat dit gerealiseerd is. Vooral in de productieafdeling en bij de werkvoorbereiding levert dit veel Afbeelding: DOS-applicatie tbv programmatie tijdswinst op. De boorstraat is een machine welke gaten in de bekisting boort en/of snijdt. De posities van de gaten geven wij door d.m.v. x- en y-posities met het bijbehorende gatdiameter. De invoer wordt gemaakt in Excel of een in Autocad draaiende DOS-applicatie. Deze koppelt de gaten automatisch aan een accessoire. In de toekomst is hier ook nog veel vooruitgang in te boeken, de foutpercentage is met deze invoermethode te hoog en zal nog verder ontwikkeld moeten worden.
5
ACE system manager
1.2
Tekeningenbeheersysteem
ORGANISATIESTRUCTUUR Hieronder is het ORGANOGRAM van KONOSCH NEDERLAND BV weergegeven.
Directie
Automatisering
Financien Economie Personeel
Produktontwikkeling
Acquisitie
Projectenburo
Kwaliteitszorg
Sec retariaat
Produktie
Werkvoorbereiding Buitendienst Projectmanager
Inkoop / Magazijn
Binnendienst Calculator
Tekenaar
Onderhoud
Logistiek
Productie
(hallen 1-5 / boorstraat) Afbeelding: Organisatiestruktuur Konosch Nederland B.V.
6
Buitendienst
ACE system manager
1.3 1.3.1
Tekeningenbeheersysteem
WERKZAAMHEDEN Tekenwerk In het bedrijf ben ik 1 van de ongeveer 8 tekenaars. De tekenaar verzorgt al het tekenwerk voor zowel de productie als voor de aannemer. Dit houdt in: - Overzichten en routingtekeningen, dit zijn plattegronden van woonwijken of woonblokken met daarin de volgorde van storten, de plaatsing van de bekisting en het positioneren van de beveiliging aangegeven. - Werktuigbouwkundige tekeningen, ook wel accessoires genoemd. - Draaiboeken, dit zijn bekistingsaanzichtstekeningen met de betonvorm + benodigde accessoires.
1.3.2
Materialenstaat Als alles is uitgetekend en het tekenwerk over wordt gedragen naar de werkvoorbereiding, zal hier ook een materialenstaat bij geleverd moeten worden. Deze maken wij in Microsoft Access. De invoer hiervan is zeer foutgevoelig. In de toekomst zal de mogelijkheid gecreëerd worden om de materialenstaat voor een groot deel uit de Autocad tekeningen te lezen. De materialenstaat bestaat uit grote onderdelen die ook daadwerkelijk uitgetekend zijn en uit onderdelen die niet uitgetekend zijn maar wel mee moeten worden geleverd.
1.3.3
Communicatie Ik heb in 2de instantie contact met Konosch-monteurs, aannemers, uitvoerders en installateurs. Ik schrijf specifiek in 2de instantie, de projectmanagers en evt. calculators hebben als 1ste contact. Zij beheren in grote lijnen het complete project ook met oog op het kostenplaatje. Ook bepalen zij of bepaalde werkzaamheden op meerwerk moeten gebeuren en welke prioriteit de werkzaamheden hebben.
7
ACE system manager
Tekeningenbeheersysteem
2.0
PROBLEEMOMSCHRIJVING
2.1
HUIDIGE TEKENINGEN BEHEERSYSTEEM Wij tekenen nu nog met Autocad versie 2002. Binnenkort gaan wij de overstap maken naar Architectural Desktop 2006 (ADT 2006). Ons huidig tekeningenbeheersysteem is het softwarepakket van AutoManager Workflow (AMW). AMW beheert de tekeningen en laat deze zien (zie afbeelding) in het linkervenster met de directory-structuur en het rechtervenster met de tekeninggegevens en een preview. Je kunt in het rechter venster de onderhoekgegevens van de tekening wijzigen. Diverse functies zoals het genereren van een indexlijst en het ‘runnen’van een batchplot welke de tekeningen met stempel uitprint zijn geïmplementeerd in AMW. Deze functies halen de benodigde gegevens uit de database van AMW.
Afbeelding: AMW-screenshot
2.1.1
Voor- en nadelen huidig systeem Naar mijn inziens is het wel goed om te kijken wat voor voor- en nadelen het ‘oude’ tekeningenbeheersysteem heeft. Voordelen: • De directory-structuur is herkenbaar, werkt eenvoudig en daardoor goed te overzien. • Je krijgt een preview te zien van de tekening, welke je kunt vergroten en waarin je kunt inzoomen. • Je kunt elke tekening afzonderlijk ‘slepen’naar een andere applicatie zoals bv. Winzip of naar je e-mail. • Je kunt tekeningen eenvoudig kopiëren, ook vanuit een ander project. 8
ACE system manager
Tekeningenbeheersysteem
Nadelen: • Het openen en opslaan van tekeningen gaat niet echt snel en vertraagd het netwerk behoorlijk. • Je moet goed de ‘werkwijze’van AMW kennen. De gewijzigde gegevens van de onderhoek worden niet altijd goed in de tekeningen en/of in de database van AMW opgeslagen. • Onze versie werkt met modelspace. Of dit ook aan te passen is naar paperspace weet ik eigenlijk niet. Dit is ook niet van toepassing op mijn onderzoek want door het niet ondersteunen van nieuwe Autocad-versies, zoeken we een alternatief voor AMW. • De tekeningen krijgen een door AMW gegenereerd bestandsnaam. Voor ons is dit niet een probleem, maar als wij tekeningen naar derden opsturen kan dit voor hun hinderlijk zijn. • Het laten lopen van een script kan alleen wanneer men AMW niet heeft opgestart. Als men onderhoekgegevens wil veranderen dient dit altijd handmatig te gebeuren. 2.1.2
Directorystructuur De directorystuctuur is heel erg simpel gehouden. Er zijn 2 Schijven: de F-schijf, waar alle documenten op bewaard worden en I-schijf waar programma’s en de CAD-tekeningen op bewaard worden. De CAD tekeningen worden bewaard in: I:\CADDATA\PROJECT\[PROJECTNUMMER] Als men een nieuw project in AMW maakt dan word er automatisch een nieuwe directory aan gemaakt.
2.1.3
Projectnummer De opbouw van het projectnummer is eind vorig jaar van opbouw verandert. Oude situatie De oude situatie is als volgt opgebouwd: XXXXX.YY -
De eerste 5 cijfers bestaan uit een doornummeringsgetal, elk project krijgt een nieuw opeenvolgend nummer. De laatste 2 cijfers staan voor een volgnummering binnen het project. 1 project kan verschillende opdrachten bevatten. Deze nummering begint bij 00. Tezamen zijn geven deze 7 cijfers het projectnummer aan.
Nieuwe situatie: De nieuwe situatie is als volgt opgebouwd: XX XXXX Y YY -
De eerste 6 cijfers geven het nummer van het hoofdprojekt aan. De laatste 3 geven het volgnummer aan.
9
ACE system manager
Tekeningenbeheersysteem
Deze 6 cijfers zijn weer als volgt opgebouwd: XX XXXX - De eerste 2 cijfers geven het jaartal aan. - De volgende 4 cijfers zijn een doornummering, het eerste projekt van het jaar is het nummer: 0001. En tot slotte de laatste 3 cijfers betekenen het volgende: Y YY - Het volgende cijfer is een doornummering van verschillende aannemers die van één en hetzelfde projekt een offerte van ons willen ontvangen. Als bijvoorbeeld de aannemer welke als 3de een offerte heeft aangevraagd de opdracht krijgt dan wordt dit nummer een 3. - De laatste 2 cijfers staan voor een volgnummering binnen het project. 1 project kan verschillende opdrachten bevatten. Deze nummering begint bij 01 Opvallend is dat de nieuwe situatie 2 cijfers meer bevat dan de oude. AMW kan maar 8 cijfers verwerken. Dit is tijdelijk opgelost door het 1ste cijfer ‘0’te laten vervallen. 2.1.4
Tekeningnummer Ten aanzien van de opbouw van de tekeningen uit een project, gelden bepaalde afspraken betreffende tekeningnummers. Deze zijn op de volgende pagina in tabelvorm weergegeven. Hoofdonderdeel Algemeen
Kimmen
Accessoires
Beveiliging
Subonderdeel
Begane grond Kimmen Verd. Kimmen Kopschotten Deursparingen Raamsparingen Randbekisting Vloersparing Diversen
Overzichten Kopgevel-/ gevelsteigers Omloopsteigers Werksteigers Vlonders
Tek.nrs 0 t/m 49
50 t/m 99 100 t/m 149 150 t/m 199 200 t/m 229 230 t/m 269 270 t/m 299 300 t/m 329 330 t/m 369 370 t/m 399
400 t/m 419 420 t/m 439 440 t/m 459 460 t/m 479 490 t/m 499
Tabel: Overzicht tekeningnummers
10
Inhoud Inzet Routing Programmatie Grote onderdelen(eindwanden, afdekkappen, stroppenset) Routing
Correctiestrippen / consolerichters / wandverlengingen e.d.
ACE system manager
2.2
Tekeningenbeheersysteem
PROBLEEMSTELLING De probleemstelling bestaat eigenlijk uit het feit dat vanaf april 2005 AMW geen ondersteuning meer verleend aan gebruik van Autocad 2005 en hoger, en aangezien wij dit jaar nog zullen overstappen naar Autodesk ADT 2006 zal er een nieuw tekeningenbeheersysteem moeten komen. Aan het begin van mijn studie was het nog niet zeker of we verder gingen met Autocad 2005, 2006 of ADT 2006. Ik heb toen de beslissing genomen om mij te verdiepen in Autocad 2006. ADT is in principe Autocad 2006 met veel extra’s, de mogelijkheden van Autocad 2006 zullen ook mogelijk zijn in ADT. Het is daarom een logische keuze om als basis uit te gaan van Autocad en eventueel later diverse aanpassingen te maken zodat het programma straks helemaal geïntegreerd kan worden in ADT. Het werken met AMW loopt niet altijd even soepel en snel. Soms kunnen onderhoekgegevens verloren gaan als men geen koppeling met AMW heeft. Het laten lopen van een script is ook niet mogelijk met koppeling in AMW. Niet iedere tekenaar houdt zich aan de tekenafspraken betreffende de nummering van de tekeningen. Het tekenen van zogenaamde draaiboeken levert soms ook een probleem op. Een draaiboek wordt altijd apart van het overige bekistingstekenwerk opgestuurd en dient dus ook in een aparte directory te staan. Een draaiboek wordt niet altijd apart aangeboden en heeft dus een zelfde projectnummer als het bekistingtekenwerk. Dit lossen wij op door de laatste 2 cijfers te vervangen door ‘WB’(WandenBoek) of ‘TB’(TunnelBoek). Het nadeel hiervan is dat dit projectnummer ook automatisch in de onderhoek komt te staan.
Kortom er dient een kompleet nieuw tekeningenbeheersysteem te komen welke gebruiksvriendelijk en flexibel moet zijn.
11
ACE system manager
Tekeningenbeheersysteem
3.0
TEKENINGENBEHEERSYSTEEM
3.1
DOEL Een simpel systeem waarin met snel en makkelijk Autocad-tekeningen kan vinden en openen uit het gewenste project.
3.2 3.2.1
OPTIES Windows verkenner
Albeelding: Windows Verkenner
Voordelen: • Dit is een hele simpele oplossing, geen database, koppelingen o.i.d. Heel herkenbaar voor iedereen. • Er zullen afspraken gemaakt moeten worden om de tekeningen een goede bestandsnaam te geven. De tekeningen zijn dan makkelijk terug te vinden. • Als windows verkenner goed is ingesteld dan laat deze een kleine preview zien van de tekening.
12
ACE system manager
Tekeningenbeheersysteem
Nadelen: • Voor batchplot-functies, indexlijsten en het aanmaken van nieuwe standaardtekeningen zal programmateur geschreven en bedacht moeten worden. • De gebruiker zal goed overweg moeten kunnen met het directory-stelsel, tekeningen kunnen gemakkelijk verloren gaan. • Wanneer een tekening door een andere gebuiker is geopend merk je pas wanneer Autocad een melding hiervan geeft. • Je kunt de gegevens van de tekening alleen zien als je deze opent. 3.2.2
Ontwikkelen nieuw programma Door middel van formulieren in VBA een omgeving ontwikkelen waarin men tekeningen kan selecteren en evt. alvast een preview kan zien. Gegevens uit de onderhoek van de tekening worden opgeslagen in een database. Tekeningen worden geopend via de database. Hierdoor kan ook een nette foutafhandeling gecreëerd worden. (bv als tekeningen door andere gebruiker zijn geopend) Alle gegevens staan in 1 database, hierdoor kunnen diverse functies makkelijk en snel geïmplementeerd worden. Deze oplossing lijkt heel erg op een zelfontwikkelde verbeterde AMW, Voordelen: Huidige manier van werken kan gehandhaafd worden. • Huidige manier van werken kan eerst gehandhaafd worden. Aanpassingen in het programma zorgen ervoor dat deze later ook met paperspace gaan werken. • Wordt voor 100% gericht op specifiek gebruik en wensen Konosch • Eenvoudig implementeren nieuwe functies, zoals bv. Uitlezen materialenstaat of indexlijsten generen. Nadelen: • Veel tijd benodigd om het programma te ontwikkelen • Het zal zodanig ontwikkeld moeten worden dat het het netwerk niet teveel belast.
3.2.3
Sheetsetmanager Vanaf Autocad 2005 is er een standaard functie welke projecten beheert. Deze werkt alleen met paperspace, dus bestaande projecten kunnen niet makkelijk overgezet worden. Voordelen: • Programma reeds geïmplementeerd vanaf Autocad 2005 en ADT 2006. • Automatische Plot-functie aanwezig. • Automatische ‘beperkte’ indexlijst aanwezig. Nadelen: • Er nog heel weinig bekend over het programmeren voor sheetsets • Werkt alleen met paperspace. • Huidige van werken niet meer mogelijk. (modelspace) • Het invoegen van diverse functies zal veel tijd vergen, men moet helemaal in het programma sheetsetmanager duiken. 13
ACE system manager
KEUZE
Snelheid
Implementteren ‘tools’
Ontwikkeltijd
Om een goed inzicht te krijgen hoe de voor en nadelen tegen elkaar opwegen heb ik deze in een tabel gezet. Gebruiksvriendelijkheid
3.3
Tekeningenbeheersysteem
Windows verkenner Nieuw programma ++ SheetSetManager +
-+ ++
-++ +
++ + --
Tabel: Afwegingen
Windows verkenner lijkt een makkelijke ‘tool’om je tekeningen in te beheren, maar waarschijnlijk houdt iedereen er zijn eigen manieren op na om zijn project te beheren. Tekeningen zouden verloren kunnen gaan en bij grote projecten zou het toch onoverzichtelijk worden en het zoeken zou veel tijd kosten. De sheetsetmanager is een goed en gebruikersvriendelijk programma, omdat we geen ingewikkelde tekeningen-structuur hebben is dit een goede oplossing. Het grote nadeel is eigenlijk dat diverse functies moeilijk te implementeren zijn. Het kost veel tijd om deze te ontwikkelen. Uiteindelijk heb ik gekozen voor het ontwikkelen van een nieuw programma. Je kunt hierin makkelijk diverse functies implementeren. Vooral omdat in de toekomst nog veel veranderingen zullen gaan plaatsvinden. Ik heb de mogelijke oplossingen en daarbij ook mijn keuze en de afwegingen voorgelegd aan Hoofd Projecten Bureau. Deze heeft in overleg met afdeling automatisering besloten dat mijn keuze niet gehonoreerd wordt. Zij zien de keuze in het gebruik van de sheetsetmanager. Omdat ik nog niet volleerd ben en volledig op de hoogte van de diverse toekomstige problemen en aspecten op detail-niveau ben ik uiteindelijk met deze keuze accoord gegaan. Als systeemmanager moet je dit juist wel goed in kunnen schatten, maar het was nog maar in het begin van mijn studie. Ook in deze functie moet je je soms neerleggen bij de eisen van de opdrachtgever, in dit geval zelfs een opdrachtgever met verstand van zaken. Het omgaan en vooral het programmeren van de sheetset-manager is nog niet veel over bekend en is daarom een uitdaging om daar mee aan het werk te gaan.
14
ACE system manager
4.0
SHEETSETMANAGER
4.1 4.1.1
ALGEMENE UITGANGSPUNTEN Functioneren Autocad/ADT
Tekeningenbeheersysteem
Autocad 2006 en/of ADT dient normaal te blijven werken, dat wil zeggen dat er geen zichtbare aanpassingen aan het programma zelf worden gemaakt. Hier wordt mee bedoelt dat de gebruiker niet ziet en merkt dat er ‘achter de schermen’bepaalde routines bezig zijn. Er zullen hooguit extra menu’s en/of een extra knoppenbalken geïnstalleerd zijn waarin men een functie kan selecteren. Er zal een aanvullende instructie aan de gebruikers gegeven moeten worden. Zij zullen ten eerste om moeten leren gaan met het gebruik van de Sheetsetmanager, ten tweede zullen zij leren omgaan met het nieuwe programma. 4.1.2
Gebruiksvriendelijk Het programma dient overzichtelijk te zijn, de functies in de menu’s en/of toolbars dienen zo omschreven te zijn dat de gebruiker direct weet wat er bedoeld wordt. Dit geldt eveneens voor de layout van het programma. De diverse functies dienen te worden ontwikkeld zodat er zo min mogelijk vragen aan de gebruiker gesteld worden. Het programma wordt hierdoor snel en daardoor gebruiksvriendelijk.
4.1.3
Modulair Het programma wordt modulair opgezet, dit betekent dat deze uit verschillende delen bestaat waarin elk onderdeel apart kan afgerond kan worden. Nieuwe onderdelen zijn makkelijk te implementeren en de programmeur houdt het overzicht over zijn project. Deze wijze van programmeren is eigenlijk altijd de basis voor een programma gebaseerd op VBA.
4.1.4
Standaard layout De layout van de Autocad-tekeningen en diverse formulieren dienen gehandhaafd te worden. Hier mogen geen zichtbare aanpassingen plaatsvinden.
4.2
SHEETSETMANAGER IN HET KORT In het kort gezegd beheert de SheetSetManager (SSManager)een tekeningenset. Een tekeningenset of sheetset staat in ons begrip gelijk aan één project. De SSManager slaat diverse gegevens op in een interne database, ook wel properties genoemd, welke relevant zijn voor het gehele project. Bijvoorbeeld: - Projectnaam - Beschrijving project - Projectnummer - Locatie van de tekeningen Deze kunnen in een tekening opgeroepen worden door middel van een field. (Een field is een snelkoppeling naar een waarde welke in de tekening of in Autocad is opgeslagen). Je kunt ook eigen properties toevoegen.
15
ACE system manager
Tekeningenbeheersysteem
Tekeningen toevoegen aan je project kan op 2 manieren: 1. Een bestaande tekening toevoegen. 2. Een nieuwe tekening aanmaken. Een tekening kan maar aan 1 project gekoppeld zijn. Er kunnen sub-groepen aangemaakt worden, zodat je je tekening naar eigen inzicht kan indelen naar bepaalde kenmerken. In de SSManager heb je verschillende ‘tools’tot je beschikking. - Je kunt diverse tekeningen in 1x uitprinten. - Je kunt diverse tekeningen inpakken, zodat deze gemaild kunnen worden. - Er kan een indexlijst gegenereerd worden welke ook automatisch geupdate wordt. 4.3
WAAROM EXTRA TOOLS Er zijn verscheidene redenen waarom ik gekozen heb voor extra tools voor de SSManager. Index De SSManager heeft zijn beperkingen. Het genereren van een indexlijst bijvoorbeeld, kan alleen met gegevens die je handmatig opgeslagen en eerst aangemaakt hebt in de properties. De indexlijst genereert 1 lange lijst in een Autocadtekening. Dit is alleen handig als je niet al te veel tekeningen in je project hebt staan. Plotten Voor het plotten van diverse tekeningen en deze te voorzien van een ‘stempel’kan alleen met de standaard stempels van Autocad. De stempels zijn enigszins nog wel aan te passen maar ze zijn niet zo te maken dat ze conform de huidige opmaak te printen zijn. Gebruikersgemak Om een nieuw project te maken dient men de volgende stappen te ondernemen. - Een reeds ingestelde template kopiëren naar de juiste map - De properties dienen handmatig ingevuld te worden, als men een project aanmaakt, maar ook wanneer men tekeningen aanmaakt. Bovenstaande onderdelen vergen veel tijd en de handelingen zijn niet overzichtelijk. Daarom is het van belang dat diverse tools ontwikkeld worden, ook met het oog op toekomstige tools, deze zullen eenvoudig te implementeren zijn.
16
ACE system manager
5.0
Tekeningenbeheersysteem
WERKING PROGRAMMA De installatie heb ik zo eenvoudig mogelijk gehouden. Ik heb een Visual Basic Applicatie (VBA) gemaakt: STARTUP.DVB. Deze moet bij het opstarten van Autocad automatisch geladen worden. Dit is een handeling die niet door de gebruiker zelf uitgevoerd kan worden. STARTUP.DVB wordt door de ICT-afdeling in de Startup Suite van Autocad gezet. Het programma STARTUP.DVB zorgdraagt voor 2 hoofdroutines welke in de volgende paragrafen zijn uitgewerkt: 1. Uitvoeren van diverse routines in het STARTUP-bestand 2. Uitvoeren van diverse routines buiten het STARTUP-bestand.
5.1
STARTUP.DVB De werking van dit programma heb ik hiernaast in een stroomschema schematisch weergegeven. Om het STARTUP-bestand zo klein mogelijk te houden heb ik er voor gekozen om de alleen de routines welke gekoppeld zijn aan een actie van een tekening in dit bestand te zetten. Tot dusver zijn 2 acties aan routines gekoppeld: 1. Openen van een tekening. 2. Opslaan van een tekening.
5.1.1
Opstarten Autocad
STARTUP.DVB laden
Tekening openen
Nee Menu's laden en installeren
Openen Voor het openen van een tekening wordt er gecontroleerd of het menu reeds geladen is. Is dit niet het geval dan worden de benodigde bestanden gekopieerd, Autocad-instellingen (Support File Search Path) worden aangepast en daarna wordt het menu geïnstalleerd. (zie bijlage II)
Ja
Sheetset Programma's zie SHEETSET.DVB
Werzaamheden tekenaar.
Tekening opslaan
Ja
5.1.2
Opslaan
Menu aanwezig
Tekening gegevens opslaan in database SSManager
De tekenaar kan nu zijn tekenwerkzaamheden uitvoeren. Als hij ervoor kiest om zijn tekening op te slaan dan loopt het programma een routine door. (zie Bijlage III)
Koppeling met SSManager
Nee Tekening opslaan
Afbeelding: Stroomschema STARTUP.DVB
17
ACE system manager
Tekeningenbeheersysteem
In de routine voor het opslaan van een tekening wordt er eerst gekeken of er een koppeling met de SheetsetManager is. Dit wordt beslist door te kijken naar de variabele “SSFOUND”. Als deze een waarde bevat dan wordt de routine opgestart welke verantwoordelijk is voor het schrijven van gegevens naar de SSManager. Deze controleert op zijn beurt weer eerst of er een kader in de tekening is. Zoja, dan leest het programma de benodigde ‘attributes’uit de tekening, en slaat deze op in de database van de SSManager. Nu wordt de inhoud van deze attributes vervangen door fields. De tekening wordt nu opgeslagen. 5.2
SHEETSET.DVB Werzaamheden tekenaar.
Nieuw Project
Tekening wijzigen
Nieuw Vervolgnr
Diverse opties
SHEETSET.DVB laden
Afbeelding: Stroomschema keuzes tekenaar
In de STARTUP.DVB staan routines welke op zich weer routines uit de SHEETSET.DVB opstarten en na de uitvoering hiervan ook weer afsluiten. Zoals hierboven in het stroomschema te zien is, selecteert de tekenaar 1 van de mogelijkheden uit het menu, en dan wordt SHEETSET.DVB opgestart. Deze routines zullen veelvuldig gebruikt worden, ze nemen veel werk uit handen en hebben veel ontwikkeltijd en programmeerwerk gekost. 5.2.1
Start
Projecten De belangrijkste routine is het aanmaken van een nieuw project. Hierin worden de basisinstellingen voor de SSManager ingesteld. Hiernaast is het stroomschema van deze routine afgebeeld. Dit schema ziet er simpel uit maar heeft heel wat studieuren en programmeerwerk gekost om dit voor elkaar te krijgen. (zie Bijlage VI voor de complete programmeercode of paragraaf 5.2.3 voor code en uitleg)
Nieuw Project aanmaken en openen in Autocad.
Einde Afbeelding: Stroomschema: Nieuw project
18
ACE system manager
Tekeningenbeheersysteem
Ter voorbereiding heb ik een template sheetset-bestand gemaakt. Hierin staan de customproperties alvast ingesteld. Dan doet het programma de volgende bewerkingen: • Dit template directory wordt gekopieerd en hernoemd naar het projectnummer(dus zonder het volgnummer) evenals het bestand. • Als het volgnummer is ingevuld word een categorie gelijknamig aan het volgnummer gemaakt. • Nu maakt het programma daarin zelfstandig Subcategorieën aan. De subcategorieën zijn gelijk aan de hoofdonderdelen volgens het tabel uit paragraaf 2.1.4. • De SheetSetManager wordt geopend en laat het nieuwe project zien. (zie afbeelding sheetsetmanager) Voor de stroomschema’s van de diverse opties waaruit de tekenaar kan kiezen uit het menu staan in Bijlage I. 5.2.2
Afbeelding: SheetsetManager
Het object ‘SheetSetManager’ Om met het object SheetSetManager te kunne programmeren dient het volgende bestand geladen te zijn: AcSmComponents16.lib versie 1.0 Het programmeren was niet eenvoudig. In Autocad zit zeer weinig hulp betreffende dit object. De kennis die nodig is van het programmeren in VBA dient op een behoorlijk hoog niveau te zijn. Globaal ziet het objecten model volgens onderstaande afbeelding uit.
Afbeelding: Objectenmodel SheetSetManager
De volgende stappen moet men doorlopen als men wil programmeren in dit objectenmodel. De stappen zijn genummerd en deze nummering kan men in de volgende paragraaf weer terugvinden. 1. Het programmeren begint door het object ‘AcSmSheetSetMgr’te laden 2. Nu wordt de dit object toegekend aan ‘AcSmDatabase’. 3. Deze wordt weer toegekend aan een .dst bestand welke door Autocad is opgeslagen met de SheetSetManager. 4. In database vraagt men het object ‘AcSmSheetSet’op.
19
ACE system manager
Tekeningenbeheersysteem
5. Als men wil kan men nu de gegevens van de SheetSet wijzigen of subsets en/of sheets toevoegen. 6. Als men subsets of sheets wil wijzigen dan dient men eerst d.m.v. een zogenaamde enumerator (één voor één oproepen van een object), de subsets of sheets op te roepen. 7. Nu kan men subsets of sheets wijzigen. Als men in een subset-object zit dan kan men ook weer subsets wijzigen of subsets en/of sheets toevoegen. 8. Als men dit wil dan dient men ‘stap’6 weer toe te passen. 5.2.3
Programmeren Hieronder laat ik een gedeelte van de programmeercode zien welke een nieuw project aanmaakt (Routine: Properties) en als een vervolgnummer is ingevoerd dan wordt er ook gelijk een vervolgnummer aangemaakt (Routine:Subset1). Het invoerscherm is te zien in de vorige paragraaf. De template is reeds gekopieerd en hernoemd naar het projectnummer. Zie paragraaf 5.2.1 De routine Properties wordt als eerste opgestart waarbij de parameter ‘strprojnum’als projectnummer bekend is. De verschillende objecten worden alvast in het geheugen geladen Private Sub Properties(ByVal strprojnum As String) Dim oSSM As AcSmSheetSetMgr Dim oSheetSetDb As AcSmDatabase Dim osheetset As AcSmSheetSet Dim oProjOms As New AcSmCustomPropertyValue Dim oProjOpdrachtgever As New AcSmCustomPropertyValue Dim PropFlag As PropertyFlags
Mocht er een fout optreden dan gaat het programma naar het onderdeel ErrHandler Het kenmerk van de straks aan te maken ‘custom properties’wordt gebaseerd op de complete Sheetset. PropFlag = CUSTOM_SHEETSET_PROP
Hier wordt een nieuwe SheetsetManager aangemaakt en de gekopieerde template wordt geopend.
1. 2,3
Set oSSM = New AcSmSheetSetMgr Set oSheetSetDb = oSSM.OpenDatabase("c:\caddata\project\" & strprojnum & "\" & strprojnum & ".dst", False)
Heel belangrijk is dat nu de Sheetset gelocked wordt. Dit wil zeggen dat deze nu niet meer toegankelijk is voor andere gebruikers. oSheetSetDb.LockDb oSheetSetDb
Het object osheetset wordt nu als de huidige sheetset toegekend. 20
ACE system manager
4.
Tekeningenbeheersysteem
Set osheetset = oSheetSetDb.GetSheetSet
Bovenstaande regels komen in principe in elke hoofdroutine, welke waarden in de SSManager gaat bewerken, weer terug. De volgende regels zijn specifiek voor elke routine. In onderstaande regel wordt de naam van het object osheet gewijzigd in het projecnummer.
5.
osheetset.SetName strprojnum
Een nieuwe custom propertie-object wordt geinitialiseerd oProjOpdrachtgever.InitNew osheetset
Hierin wordt het kenmerk welke in de PropFlag staat (de komplete sheetset) toegekend. oProjDate.SetFlags PropFlag
De waarde welke de custom propertie moet worden wordt eerst ingevoerd. oProjOpdrachtgever.SetValue Me.txtOpdrachtgever.Value
Als laatste worden deze gegevens verwerkt in de SSManager. osheetset.GetCustomPropertyBag.SetProperty "Opdrachtgever", oProjOpdrachtgever
Bovenstaande 4 bewerkingen vinden nog een keer plaats maar zijn nu van toepassing op de projectomschrijving oProjOms.InitNew osheetset oProjOms.SetFlags PropFlag oProjOms.SetValue Me.txtProjectOmschrijving.Value osheetset.GetCustomPropertyBag.SetProperty "Omschrijving", oProjOms
De Sheetset altijd weer ‘Unlocken’. De sheetset is weer toegankelijk voor andere gebruikers. oSheetSetDb.UnlockDb oSheetSetDb
De belangrijkste objecten worden leeggemaakt. Set Set Set Set Set
oProjOpdrachtgever = Nothing oProjOms = Nothing osheetset = Nothing oSheetSetDb = Nothing oSSM = Nothing
Einde SubRoutine. End Sub
21
ACE system manager
Tekeningenbeheersysteem
In de hoofdroutine wordt nu na een kontrole of het vervolgnummer ook ingevuld is de volgende routing opgestart. Deze maakt de diverse Subsets(vervolgnummer) en SubSubsets aan in bovenstaande sheetset. Private Sub Subset1(ByVal strprojnum As String)
De verschillende objecten worden alvast in het geheugen geladen Dim Dim Dim Dim Dim Dim Dim Dim Dim Dim Dim Dim Dim
filesys As New FileSystemObject oSSM As AcSmSheetSetMgr oSheetSetDb As AcSmDatabase osheetset As AcSmSheetSet PropFlag As PropertyFlags SsSubset1 As AcSmSubset ECO As IAcSmEnumComponent CO As IAcSmComponent sset As AcSmSubset SsSubset2 As AcSmSubset FR As AcSmFileReference Ssetpath As String RootFolder As String
PropFlag = CUSTOM_SHEETSET_PROP Set oSSM = New AcSmSheetSetMgr Set oSheetSetDb = oSSM.OpenDatabase("c:\caddata\project\" & strprojnum & "\" & strprojnum & ".dst", False) oSheetSetDb.LockDb oSheetSetDb Set osheetset = oSheetSetDb.GetSheetSet
Bovenstaande regels zijn bijna identiek als in de 1ste routine. Een Subcategorie wordt aangemaakt, deze waarde haalt de routine uit de textbox van het formulierenvenster. De Subcategorie is het vervolgnummer van het project. Set SsSubset1 = osheetset.CreateSubset(Me.txtVervolgnr, "Projectnummer")
Het object ECO wordt toegekend als een enumerator. Dit betekend dat alle onderdelen binnen dit object één voor één opgeroepen kunnen worden.
6.
Set ECO = osheetset.GetSheetEnumerator
Het één voor één oproepen wordt hier gerealiseerd. Omdat we een nieuw project maken zal er maar 1 object zijn, namelijk de Subcategorie welke hierboven is aangemaakt. Set CO = ECO.Next
In de volgende regel ‘Do While… … . .’tot aan ‘loop’houden in dat het oproepen moet doorgaan totdat deze waarde niets is.
22
ACE system manager
Tekeningenbeheersysteem
Do While Not CO Is Nothing
Als het type naam van het opgeroepen onderdeel gelijk is aan “AcSmSubset” dan worden de volgende regels tot aan ‘end if ‘ uitgevoerd
7.
If CO.GetTypeName = "AcSmSubset" Then
Het object sset is gelijk aan het component CO, Dit wordt gedaan omdat het object CO gedeclareerd is als een algemeen component en sset is gedeclareerd als een specifieke subset-object. Bij het aanspreken van sset kunnen nu de specifieke eigenschappen benadert worden. Set sset = CO
De directory waar de tekeningen bewaard moeten worden, worden eerst als een string opgeslagen. En daarna wordt een subfolder uit de template directory gekopieerd naar de huidige projectdirectory en deze wordt opgeslagen als het vervolgnummer. RootFolder = "C:\caddata\project\" & strprojnum Ssetpath = "\" & CO.GetName Call filesys.CopyFolder("c:\caddata\project\000000\000", RootFolder & Ssetpath)
Het object FileReference (FR) wordt gedeclareerd als een nieuwe sheet locatie. Daarna wordt de vervolgnummer-directory ingesteld in dit object. Set FR = sset.GetNewSheetLocation FR.SetFileName RootFolder & Ssetpath
De nieuwe sheet locatie wordt nu ingesteld op de inhoud van het object FR SsSubset2.SetNewSheetLocation FR
Nu worden diverse subsets genaamd “Hoofdonderdeel” in het vervolgnummer aangemaakt. Als men een tekening aanmaakt in deze subset dan wordt er gevraagd om een template te openen. Dit wordt ingesteld gelijk na het maken van een subset. Set SsSubset2 = sset.CreateSubset("Algemeen", "Hoofdonderdeel") SsSubset2.SetPromptForDwt True Set SsSubset2 = sset.CreateSubset("Kimmen", "Hoofdonderdeel") SsSubset2.SetPromptForDwt True Set SsSubset2 = sset.CreateSubset("Accessoires", "Hoofdonderdeel") SsSubset2.SetPromptForDwt True Set SsSubset2 = sset.CreateSubset("Beveiliging", "Hoofdonderdeel") SsSubset2.SetPromptForDwt True Set SsSubset2 = sset.CreateSubset("Draaiboek", "Hoofdonderdeel") SsSubset2.SetPromptForDwt True
De bewerkingen voor het onderdeel subset worden hier beëindigd. End If
23
ACE system manager
Tekeningenbeheersysteem
Het volgende onderdeel wordt opgeroepen totdat deze geen waarde meer heeft. Set CO = ECO.Next Loop
De Sheetset weer ‘Unlocken’. De sheetset is weer toegankelijk voor andere gebruikers. oSheetSetDb.UnlockDb oSheetSetDb
De belangrijkste objecten worden leeggemaakt. Set osheetset = Nothing Set oSheetSetDb = Nothing Set oSSM = Nothing
Einde van de routine End Sub
24
ACE system manager
5.3
Tekeningenbeheersysteem
EVALUATIE In deze paragraaf stel ik mijzelf enkele vragen over mijn afstudeeropdracht. Heb ik voldaan aan de gestelde probleemstelling? Ja, door te kiezen voor de SheetSetManager in Autocad/ADT heb ik in principe al voldaan aan de gestelde probleemstelling. De SSManager is alleen niet optimaal gebruiksvriendelijk voor het gebruik binnen Konosch. Daarom heb ik diverse tools gemaakt die een eenduidig gebruik realiseren en tijdsbesparend werken. Hoe is de afstudeeropdracht bevallen? Het onderzoeken, keuzes maken en dan programmeren is echt iets wat ik ontzettend leuk vindt. Ik heb aan dit project met veel plezier gewerkt. Maar het programmeren van de SSManager is geen eenvoudige taak geweest! Het uitproberen en zoeken naar de juiste code was een lange tocht, waarin ik met veel vrije tijd en een beetje hulp van mijn docent R. Boeklagen, naar mijn mening een goed resultaat heb afgeleverd. Is het programma helemaal af? Nee, er zijn nog genoeg routines te ontwikkelen die leiden tot tijdwinst en/of nog meer structuur aanbrengen in dit tekeningbeheersysteem. Enkele toekomstige toepassingen: 1. Batchplot met geintegreerde stempel volgens huidige layout. 2. Automatische kontrole en (her)nummering van sheets 3. De hoofdgroepen, betreffende de tekeningnummers, weer indelen in subgroepen. 4. Tekeningen kopiëren van 1 project naar een ander project.
25
ACE system manager
Tekeningenbeheersysteem
BIJLAGEN PROGRAMMACODE Bijlage I – Stroomschema’sVervolgnummer aanmaken Onderhoek wijzigen/aanvullen Index maken Bijlage II – openenBijlage III –opslaanBijlage VI –Nieuw ProjectBijlage V –Vervolg ProjectBijlage VI –Tekening WijzigenBijlage VII –Opties-
26
ACE system manager
Tekeningenbeheersysteem
Bijlage I – Stroomschema’sVervolgnummer aanmaken Start
Project aanwezig
Nee
Ja
Vervolgnummer aanmaken.
Einde
27
ACE system manager
Tekeningenbeheersysteem
Onderhoek wijzigen/aanvullen
Start
Kader aanwezig
Melding
Nee Ja Attributes lezen en invullen in invoerscherm
Invoerscherm tekening wijzigen
Waarden in kader zetten
Einde
28
ACE system manager
Tekeningenbeheersysteem
Index maken Start
Ja
Koppeling met SSManager
Gegeven uit de SSManager lezen en invullen in invoerscherm
Nee Invoerscherm Melding
Tekeningen kiezen.
Optie 'index'
Gegevens uit de SSManager lezen
Word indexdocument openen en gegevens worden ingevuld.
Einde
29
ACE system manager
Tekeningenbeheersysteem
Bijlage II – openenSub Installatie() Dim filesys As New FileSystemObject Dim str_CadPad As String Dim str_ApplicatiePad As String Dim str_BestaandPad As String Dim str_NieuwPad As String Dim str_InstallatiePad As String Dim TrekNeer As AcadPopupMenu Dim InhoudMenu As AcadPopupMenuItem Dim MenuHandvat As AcadMenuGroup Dim ToolBarHandvat As AcadToolbar Dim ButtonHandvat As AcadToolbarItem Dim MGroup As Boolean 'aantal Menugroups bepalen AantalMGroups = ThisDrawing.Application.MenuGroups.Count - 1 For i = 0 To AantalMGroups If ThisDrawing.Application.MenuGroups.Item(i).Name = "SHEETSETMENU" Then MGroup = True End If Next i If MGroup = False Then 'Maak nieuwe folder aan en voeg deze toe aan het support file search path str_CadPad = ThisDrawing.Application.Path str_ApplicatiePad = str_CadPad + "\Sheetsetbestanden" If Not filesys.FolderExists(str_ApplicatiePad) Then Call filesys.CreateFolder(str_ApplicatiePad) End If str_BestaandPad = ThisDrawing.Application.Preferences.Files.SupportPath If Not InStr(1, str_BestaandPad, str_ApplicatiePad, vbTextCompare) > 0 Then str_NieuwPad = str_BestaandPad + ";C:\CADDATA\PROJECT\INSTALLATIE;" ThisDrawing.Application.Preferences.Files.SupportPath = str_NieuwPad End If
'Kopieer de bestanden vanuit de installatiefolder naar de nieuwe folder str_InstallatiePad = "c:\caddata\project\installatie\menu" str_InstallatiePad = str_InstallatiePad + "\*.*" str_ApplicatiePad = str_ApplicatiePad + "\" filesys.CopyFile str_InstallatiePad, str_ApplicatiePad, True 'Laad menu On Error Resume Next ThisDrawing.Application.MenuGroups.Load str_ApplicatiePad & "startup.mnu" If Err Then Err.Clear Else Set MenuHandvat = ThisDrawing.Application.MenuGroups.Item("SHEETSETMENU") On Error Resume Next End If Set TrekNeer = MenuHandvat.Menus.Item("Sheetsets") TrekNeer.InsertInMenuBar AcadApplication.MenuBar.Count End If End Sub
30
ACE system manager
Tekeningenbeheersysteem
Bijlage III –opslaanPrivate Sub AcadDocument_BeginSave(ByVal FileName As String) If Application.ActiveDocument.GetVariable("SSFOUND") = "" Then Else TekBewaren.Attributes_lezen TekBewaren.Attributes_aanpassen End If End Sub Sub Dim Dim Dim
Attributes_aanpassen() filesys As New FileSystemObject nieuw As String origineel As String
Dim selecties As AcadSelectionSets Set selecties = ThisDrawing.SelectionSets Dim blokken As AcadSelectionSet On Error Resume Next Set blokken = selecties.Add("verzameling") If Err Then Set blokken = selecties.Item("verzameling") blokken.Clear Err.Clear End If On Error GoTo 0 Dim dxfcode(0 To 2) As Integer Dim dxfdata(0 To 0) As Variant dxfcode(0) = 2 dxfdata(0) = "AMW_TITLE" Call blokken.Select(acSelectionSetAll, , , dxfcode, dxfdata) Dim Dim Dim For
blok As AcadBlockReference attributen As Variant attribuut As AcadAttributeReference Each blok In blokken If blok.HasAttributes Then attributen = blok.GetAttributes For i = LBound(attributen) To UBound(attributen) Set attribuut = attributen(i) Select Case attribuut.TagString Case "DRAFTSPERS" attribuut.TextString = "%<\AcSm Sheet.SheetTekenaar>%" Case "TITLE1" attribuut.TextString = "%<\AcSm Sheet.Benaming1>%" Case "TITLE2" attribuut.TextString = "%<\AcSm Sheet.Benaming2>%" Case "DWGNO" NR = attribuut.TextString Case "PROJECTNR" strProjectnr = Left$(attribuut.TextString, 6) strVervolgnr = Right$(attribuut.TextString, 3) Case "DRAFTDATE" attribuut.TextString = "%<\AcSm Sheet.SheetDatum>%" End Select For a = 1 To 4 Select Case attribuut.TagString Case "REV_DATE" & a If attribuut.TextString = "" Then Else
31
ACE system manager
Tekeningenbeheersysteem
attribuut.TextString = "%<\AcSm Sheet.REV" & a & "-Datum>%" End If End Select Next a
Next i End If Next blok End Sub Sub Attributes_lezen() Dim selecties As AcadSelectionSets Set selecties = ThisDrawing.SelectionSets Dim blokken As AcadSelectionSet On Error Resume Next Set blokken = selecties.Add("verzameling") If Err Then Set blokken = selecties.Item("verzameling") blokken.Clear Err.Clear End If On Error GoTo 0 Dim dxfcode(0 To 2) As Integer Dim dxfdata(0 To 0) As Variant dxfcode(0) = 2 dxfdata(0) = "AMW_TITLE" Call blokken.Select(acSelectionSetAll, , , dxfcode, dxfdata) Dim Dim Dim For
Dim Dim Dim Dim Dim Dim Dim Dim Dim
blok As AcadBlockReference attributen As Variant attribuut As AcadAttributeReference Each blok In blokken If blok.HasAttributes Then attributen = blok.GetAttributes strSheetTekenaar As String strTitle1 As String strTitle2 As String strProjectnr As String strVerrvolgnr As String strDatum(1 To 4) As String strTekenaar(1 To 4) As String strOmschrijving(1 To 4) As String strSheetDatum As String For i = LBound(attributen) To UBound(attributen) Set attribuut = attributen(i) Select Case attribuut.TagString Case "DRAFTSPERS" strSheetTek = attribuut.TextString Case "TITLE1" strTitle1 = attribuut.TextString Case "TITLE2" strTitle2 = attribuut.TextString Case "DWGNO" NR = attribuut.TextString Case "PROJECTNR" strProjectnr = Left$(attribuut.TextString, 6) strVervolgnr = Right$(attribuut.TextString, 3) Case "DRAFTDATE" strSheetDatum = attribuut.TextString End Select For a = 1 To 4
32
ACE system manager
Tekeningenbeheersysteem
Select Case attribuut.TagString Case "REV_DATE" & a strDatum(a) = attribuut.TextString Case "REV_PERS" & a strTekenaar(a) = attribuut.TextString Case "WIJZ_OMS" & a strOmschrijving(a) = attribuut.TextString End Select Next a
Next i End If Next blok Set Set Set Set Set
selecties = Nothing blokken = Nothing blok = Nothing attributen = Nothing attribuut = Nothing
Subsets_lezen strProjectnr, strVervolgnr, NR, strTitle1, strTitle2, strSheetDatum, strDatum(1), strDatum(2), strDatum(3), strDatum(4), strSheetTek End Sub Sub Subsets_lezen(ByVal strProjectnr As String, ByVal strSubset0 As String, ByVal NR As String, ByVal strTitle1 As String, ByVal strTitle2 As String, ByVal strSheetDatum As String, ByVal strDatum1 As String, ByVal strDatum2 As String, ByVal strDatum3 As String, ByVal strDatum4 As String, ByVal strSheetTek As String) Dim dstbestand As String dstbestand = "C:\caddata\project\" & strProjectnr & "\" & strProjectnr & ".dst" Subsets_lezen1 dstbestand, strSubset0, NR, strTitle1, strTitle2, strSheetDatum, strDatum1, strDatum2, strDatum3, strDatum4, strSheetTek End Sub Sub Subsets_lezen1(ByVal dstbestand As String, ByVal strSubset0 As String, ByVal NR As String, ByVal strTitle1 As String, ByVal strTitle2 As String, ByVal strSheetDatum As String, ByVal strDatum1 As String, ByVal strDatum2 As String, ByVal strDatum3 As String, ByVal strDatum4 As String, ByVal strSheetTek As String) Dim Dim Dim Dim Dim Dim Dim Dim Dim
oSSM As AcSmSheetSetMgr oSheetSetDb As AcSmDatabase oProjNum As New AcSmCustomPropertyValue oProjDate As New AcSmCustomPropertyValue osheetset As AcSmSheetSet aa As IAcSmEnumComponent bb As IAcSmComponent sset As AcSmSubset strSheet0 As AcSmSheet
On Error Resume Next Set oSSM = New AcSmSheetSetMgr Set oSheetSetDb = oSSM.OpenDatabase(dstbestand, False) Set osheetset = oSheetSetDb.GetSheetSet oSheetSetDb.LockDb oSheetSetDb Set aa = osheetset.GetSheetEnumerator Set bb = aa.Next
33
ACE system manager
Tekeningenbeheersysteem
Do While Not bb Is Nothing If bb.GetTypeName = "AcSmSubset" Then If strSubset0 = bb.GetName Then Set sset = bb Call Subset1(sset.GetSheetEnumerator, strSubset0, NR, strTitle1, strTitle2, strSheetDatum, strDatum1, strDatum2, strDatum3, strDatum4, strSheetTek) End If End If Set bb = aa.Next Loop oSheetSetDb.UnlockDb oSheetSetDb End Sub Private Sub Subset1(ByVal aa As IAcSmEnumComponent, ByVal strSubset0 As String, ByVal NR As String, ByVal strTitle1 As String, ByVal strTitle2 As String, ByVal strSheetDatum As String, ByVal strDatum1 As String, ByVal strDatum2 As String, ByVal strDatum3 As String, ByVal strDatum4 As String, ByVal strSheetTek As String) Dim bb As IAcSmComponent Dim sset As AcSmSubset Dim strSheet1 As AcSmSheet Set bb = aa.Next Do While Not bb Is Nothing If bb.GetTypeName = "AcSmSubset" Then Set sset = bb Call Subset2(sset.GetSheetEnumerator, strSubset0, NR, strTitle1, strTitle2, strSheetDatum, strDatum1, strDatum2, strDatum3, strDatum4, strSheetTek) End If Set bb = aa.Next Loop End Sub Private Sub Subset2(ByVal aa As IAcSmEnumComponent, ByVal strSubstr0 As String, ByVal NR As String, ByVal strTitle1 As String, ByVal strTitle2 As String, ByVal strSheetDatum As String, ByVal strDatum1 As String, ByVal strDatum2 As String, ByVal strDatum3 As String, ByVal strDatum4 As String, ByVal strSheetTek As String) Dim bb As IAcSmComponent Dim cc As AcSmSheet Dim strSheet2 As AcSmSheet Dim PropFlag As PropertyFlags Dim oProjDat0 As New AcSmCustomPropertyValue Dim oProjDat1 As New AcSmCustomPropertyValue Dim oProjDat2 As New AcSmCustomPropertyValue Dim oProjDat3 As New AcSmCustomPropertyValue Dim oProjDat4 As New AcSmCustomPropertyValue Dim oProjBen1 As New AcSmCustomPropertyValue Dim oProjBen2 As New AcSmCustomPropertyValue Dim oProjSheetTek As New AcSmCustomPropertyValue Dim oProjSheetDat As New AcSmCustomPropertyValue
Dim Customprop As String Dim Customvalue As String Dim dstbestand As String
PropFlag = CUSTOM_SHEET_PROP Set bb = aa.Next
34
ACE system manager
Tekeningenbeheersysteem
Do While Not bb Is Nothing If bb.GetTypeName = "AcSmSheet" Then Set cc = bb If NR = Left$(bb.GetName, 3) Then oProjDat1.InitNew bb oProjDat1.SetFlags PropFlag oProjDat1.SetValue (strDatum1) cc.GetCustomPropertyBag.SetProperty "Rev1-Datum", oProjDat1 oProjDat2.InitNew bb oProjDat2.SetFlags PropFlag oProjDat2.SetValue (strDatum2) cc.GetCustomPropertyBag.SetProperty "Rev2-Datum", oProjDat2 oProjDat3.InitNew bb oProjDat3.SetFlags PropFlag oProjDat3.SetValue (strDatum3) cc.GetCustomPropertyBag.SetProperty "Rev3-Datum", oProjDat3 oProjDat4.InitNew bb oProjDat4.SetFlags PropFlag oProjDat4.SetValue (strDatum4) cc.GetCustomPropertyBag.SetProperty "Rev4-Datum", oProjDat4 oProjBen1.InitNew bb oProjBen1.SetFlags PropFlag oProjBen1.SetValue (strTitle1) cc.GetCustomPropertyBag.SetProperty "Benaming1", oProjBen1 oProjBen2.InitNew bb oProjBen2.SetFlags PropFlag oProjBen2.SetValue (strTitle2) cc.GetCustomPropertyBag.SetProperty "Benaming2", oProjBen2 oProjDat0.InitNew bb oProjDat0.SetFlags PropFlag oProjDat0.SetValue (strSheetDatum) cc.GetCustomPropertyBag.SetProperty "SheetDatum", oProjDat0 oProjSheetTek.InitNew bb oProjSheetTek.SetFlags PropFlag oProjSheetTek.SetValue (strSheetTek) cc.GetCustomPropertyBag.SetProperty "SheetTekenaar", oProjSheetTek
End If End If Set bb = aa.Next Loop End Sub
35
ACE system manager
Tekeningenbeheersysteem
Bijlage VI –Nieuw Project-
Private Sub cmdCancel_Click() response = MsgBox("Weet u het zeker?", vbYesNo + vbCritical + vbDefaultButton2) If response = vbYes Then Me.Hide End If End Sub Sub Kontrole() Dim strprojectnummer As Long Dim strvervolgnummer As Long On Error Resume Next strprojectnummer = Me.txtProjectnr.Value If Err Then MsgBox "Het projectnummer mag alleen getallen bevatten." GoSub opnieuw Exit Sub End If If Me.txtVervolgnr.TextLength > 0 Then strvervolgnummer = Me.txtVervolgnr.Value If Err Then MsgBox "Het vervolgnummer mag alleen getallen bevatten." GoSub opnieuw Exit Sub End If End If On Error GoTo 0 If Me.txtProjectnr.TextLength < 6 Then MsgBox "Het projectnummer is niet volledig ingevuld!" GoSub opnieuw Exit Sub End If Select Case Me.txtVervolgnr.TextLength Case Is = 0
Case Is < 3 MsgBox "Het vervolgnummer is niet volledig ingevuld!" GoSub opnieuw Exit Sub
36
ACE system manager
Tekeningenbeheersysteem
End Select Exit Sub opnieuw: Me.Hide Nieuw_project.Nieuw_project
End Sub Private Sub cmdOk_Click() Kontrole Aanmaken Me.Hide ThisDrawing.Regen acAllViewports ' Afsluiten Me.txtInitialen.Value = "" Me.txtOpdrachtgever.Value = "" Me.txtProjectnr.Value = "" Me.txtProjectOmschrijving.Value = "" Me.txtVervolgnr.Value = "" End End Sub Sub Aanmaken() Dim filesys As New FileSystemObject Dim Opdrachtgever As String Dim Omschrijving As String Dim projectnummer As String 'sheetsetnaam ophalen projectnummer = frmNieuwProject.txtProjectnr.Value Dim path As String 'Algemene locatie voor de projecten Dim projectpath As String 'locatie waar de sheets geplaatst worden path = "C:\CADDATA\PROJECT\" projectpath = path & projectnummer 'Maak nieuwe folder aan als deze nog niet bestaat If Not filesys.FolderExists(projectpath) Then Call filesys.CopyFolder("C:\CADDATA\PROJECT\000000", projectpath) If Err Then MsgBox "fout in aanmaken map" If filesys.FileExists(projectpath & "\000000.dst") Then Call filesys.CopyFile(projectpath & "\000000.dst", projectpath & "\" & projectnummer & ".dst") filesys.DeleteFile projectpath & "\000000.dst" 'If Err Then MsgBox "fout in aanmaken bestand" 'Sheetset manager openen ThisDrawing.SendCommand ("-opensheetset" & vbCr & projectpath & "\" & projectnummer & ".dst" & vbCr) VBA.DoEvents 'properties invoeren in sheetset Call Properties(projectnummer) If Not Me.txtVervolgnr.Value = "" Then 'Subsets toevoegen in sheetset Call Subset1(projectnummer) End If End Sub Private Sub Properties(ByVal strprojnum As String) Dim oSSM As AcSmSheetSetMgr
37
ACE system manager
Dim Dim Dim Dim Dim
Tekeningenbeheersysteem
oSheetSetDb As AcSmDatabase osheetset As AcSmSheetSet oProjNum As New AcSmCustomPropertyValue oProjDate As New AcSmCustomPropertyValue PropFlag As PropertyFlags
On Error GoTo ErrHandler PropFlag = CUSTOM_SHEETSET_PROP Set oSSM = New AcSmSheetSetMgr Set oSheetSetDb = oSSM.OpenDatabase("c:\caddata\project\" & strprojnum & "\" & strprojnum & ".dst", False) oSheetSetDb.LockDb oSheetSetDb Set osheetset = oSheetSetDb.GetSheetSet osheetset.SetName strprojnum oProjDate.InitNew osheetset oProjDate.SetFlags PropFlag oProjDate.SetValue Me.txtOpdrachtgever.Value osheetset.GetCustomPropertyBag.SetProperty "Opdrachtgever", oProjDate oProjNum.InitNew osheetset oProjNum.SetFlags PropFlag oProjNum.SetValue Me.txtProjectOmschrijving.Value osheetset.GetCustomPropertyBag.SetProperty "Omschrijving", oProjNum GoSub Cleanup Exit Sub Cleanup: oSheetSetDb.UnlockDb oSheetSetDb Set oProjDate = Nothing Set oProjNum = Nothing Set osheetset = Nothing Set oSheetSetDb = Nothing Set oSSM = Nothing Return ErrHandler: GoSub Cleanup End Sub Private Sub Subset1(ByVal strprojnum As String) Dim filesys As New FileSystemObject Dim oSSM As AcSmSheetSetMgr Dim oSheetSetDb As AcSmDatabase Dim osheetset As AcSmSheetSet Dim oProjNum As New AcSmCustomPropertyValue Dim oProjDate As New AcSmCustomPropertyValue Dim PropFlag As PropertyFlags PropFlag = CUSTOM_SHEETSET_PROP Set oSSM = New AcSmSheetSetMgr Set oSheetSetDb = oSSM.OpenDatabase("c:\caddata\project\" & strprojnum & "\" & strprojnum & ".dst", False) oSheetSetDb.LockDb oSheetSetDb Set osheetset = oSheetSetDb.GetSheetSet
38
ACE system manager
Tekeningenbeheersysteem
'oSheetSet.SetName strprojnum Dim SsSubset1 As AcSmSubset 'Sssubset1.SetNewSheetLocation( Set SsSubset1 = osheetset.CreateSubset(Me.txtVervolgnr, "Projectnummer") Dim aa As IAcSmEnumComponent Set aa = osheetset.GetSheetEnumerator Dim bb As IAcSmComponent Dim sset As AcSmSubset Set bb = aa.Next Do While Not bb Is Nothing If bb.GetTypeName = "AcSmSubset" Then Set sset = bb Dim SsSubset2 As AcSmSubset Dim FR As AcSmFileReference Dim Ssetpath As String Dim RootFolder As String RootFolder = "C:\caddata\project\" & strprojnum Ssetpath = "\" & bb.GetName Call filesys.CopyFolder("c:\caddata\project\000000\000", RootFolder & Ssetpath) Set FR = sset.GetNewSheetLocation FR.SetFileName RootFolder & Ssetpath Err.Clear On Error Resume Next
SsSubset2.SetNewSheetLocation FR Set SsSubset2 = sset.CreateSubset("Algemeen", "Hoofdonderdeel")
SsSubset2.SetPromptForDwt True Set SsSubset2 = sset.CreateSubset("Kimmen", "Hoofdonderdeel") SsSubset2.SetPromptForDwt True Set SsSubset2 = sset.CreateSubset("Accessoires", "Hoofdonderdeel") SsSubset2.SetPromptForDwt True Set SsSubset2 = sset.CreateSubset("Beveiliging", "Hoofdonderdeel") SsSubset2.SetPromptForDwt True Set SsSubset2 = sset.CreateSubset("Draaiboek", "Hoofdonderdeel") SsSubset2.SetPromptForDwt True End If Set bb = aa.Next Loop Set Set Set Set Set
oProjDate = Nothing oProjNum = Nothing osheetset = Nothing oSheetSetDb = Nothing oSSM = Nothing
End Sub
39
ACE system manager
Tekeningenbeheersysteem
Bijlage V –Vervolg Project-
Private Sub cmdCancel_Click() response = MsgBox("Weet u het zeker?", vbYesNo + vbCritical + vbDefaultButton2) If response = vbYes Then Me.Hide End End If End Sub Sub Kontrole() 'eerst inhoud van formulier kontroleren Dim lngprojectnummer As Long Dim lngvervolgnummer As Long On Error Resume Next lngprojectnummer = Me.txtProjectnr.Value If Err Then MsgBox "Het projectnummer mag alleen getallen bevatten." GoSub opnieuw Exit Sub End If If Me.txtVervolgnr.TextLength > 0 Then lngvervolgnummer = Me.txtVervolgnr.Value If Err Then MsgBox "Het vervolgnummer mag alleen getallen bevatten." GoSub opnieuw Exit Sub End If End If On Error GoTo 0 If Me.txtProjectnr.TextLength < 6 Then MsgBox "Het projectnummer is niet volledig ingevuld!" GoSub opnieuw Exit Sub End If 'Kontroleren of de database bestaat Dim filesys As New FileSystemObject Dim strprojectnummer As String
40
ACE system manager
Tekeningenbeheersysteem
strprojectnummer = Me.txtProjectnr.Value On Error Resume Next If filesys.FileExists("C:\Caddata\project\" & strprojectnummer & "\" & strprojectnummer & ".dst") = False Then MsgBox "Het project " & strprojectnummer & " bestaat niet." GoSub opnieuw Exit Sub End If On Error GoTo 0 Exit Sub opnieuw: Me.Hide Nieuw_project.Nieuw_Vervolgnr End Sub
Private Sub cmdOk_Click() Kontrole frmVervolg1.Hide frmVervolg2.Show End Sub Sub KontroleInvoer() 'eerst inhoud van vervolgnr kontroleren Dim lngprojectnummer As Long Dim lngvervolgnummer As Long On Error Resume Next If Me.txtVervolgnr.TextLength > 0 Then lngvervolgnummer = Me.txtVervolgnr.Value If Err Then MsgBox "Het vervolgnummer mag alleen getallen bevatten." GoSub opnieuw Exit Sub End If End If On Error GoTo 0 Select Case Me.txtVervolgnr.TextLength Case Is < 3 MsgBox "Het vervolgnummer is niet volledig ingevuld!" GoSub opnieuw Exit Sub End Select Exit Sub opnieuw: Me.Hide frmVervolg2.Show End Sub
41
ACE system manager
Tekeningenbeheersysteem
Private Sub cmdCancel_Click() response = MsgBox("Weet u het zeker?", vbYesNo + vbCritical + vbDefaultButton2) If response = vbYes Then Me.Hide End End If End Sub Private Sub cmdOk_Click() KontroleInvoer KontroleSubset1 frmVervolg2.txtProjectnr Subset1 frmVervolg2.txtProjectnr ' Afsluiten 'ne.hide Me.txtInitialen.Value = "" Me.txtOpdrachtgever.Value = "" Me.txtProjectnr.Value = "" Me.txtProjectOmschrijving.Value = "" Me.txtVervolgnr.Value = "" End End Sub Private Sub UserForm_Activate() frmVervolg2.txtProjectnr.Value = frmVervolg1.txtProjectnr.Value 'Opdrachtgever en omschruiving uitlezen Uitlezen frmVervolg2.txtProjectnr.Value End Sub Sub Uitlezen(ByVal strprojnum As String) Dim Dim Dim Dim Dim Dim
oSSM As AcSmSheetSetMgr oSheetSetDb As AcSmDatabase osheetset As AcSmSheetSet oProjNum As AcSmCustomPropertyValue oProjOms As AcSmCustomPropertyValue PropFlag As PropertyFlags
On Error GoTo ErrHandler PropFlag = CUSTOM_SHEETSET_PROP Set oSSM = New AcSmSheetSetMgr
42
ACE system manager
Tekeningenbeheersysteem
Set oSheetSetDb = oSSM.OpenDatabase("c:\caddata\project\" & strprojnum & "\" & strprojnum & ".dst", False) oSheetSetDb.LockDb oSheetSetDb Set osheetset = oSheetSetDb.GetSheetSet 'oSheetSet.SetName strprojnum Set oProjNum = osheetset.GetCustomPropertyBag.GetProperty("Opdrachtgever") frmVervolg2.txtOpdrachtgever.Value = oProjNum.GetValue Set oProjOms = osheetset.GetCustomPropertyBag.GetProperty("Omschrijving") frmVervolg2.txtProjectOmschrijving.Value = oProjOms.GetValue GoSub Cleanup 'BuildSheetSet = True Exit Sub Cleanup: oSheetSetDb.UnlockDb oSheetSetDb 'Set oProjDate = Nothing Set oProjNum = Nothing Set osheetset = Nothing Set oSheetSetDb = Nothing Set oSSM = Nothing Return ErrHandler: GoSub Cleanup 'BuildSheetSet = False End Sub
Private Sub Subset1(ByVal strprojnum As String) Dim filesys As New FileSystemObject Dim oSSM As AcSmSheetSetMgr Dim oSheetSetDb As AcSmDatabase Dim osheetset As AcSmSheetSet Dim oProjNum As New AcSmCustomPropertyValue Dim oProjDate As New AcSmCustomPropertyValue Dim PropFlag As PropertyFlags On Error GoTo ErrHandler PropFlag = CUSTOM_SHEETSET_PROP Set oSSM = New AcSmSheetSetMgr Set oSheetSetDb = oSSM.OpenDatabase("c:\caddata\project\" & strprojnum & "\" & strprojnum & ".dst", False) oSheetSetDb.LockDb oSheetSetDb Set osheetset = oSheetSetDb.GetSheetSet 'oSheetSet.SetName strprojnum Dim SsSubset1 As AcSmSubset Set SsSubset1 = osheetset.CreateSubset(Me.txtVervolgnr, "Projectnummer") Dim aa As IAcSmEnumComponent Set aa = osheetset.GetSheetEnumerator Dim bb As IAcSmComponent Dim sset As AcSmSubset
43
ACE system manager
Tekeningenbeheersysteem
Set bb = aa.Next 'aa.Reset Do While Not bb Is Nothing 'If bb.GetTypeName = "AcSmSubset" Then If bb.GetName = Me.txtVervolgnr Then Set sset = bb Dim SsSubset2 As AcSmSubset Dim FR As AcSmFileReference Dim Ssetpath As String Dim RootFolder As String RootFolder = "C:\caddata\project\" & strprojnum Ssetpath = "\" & bb.GetName Call filesys.CopyFolder("c:\caddata\project\000000\000", RootFolder & Ssetpath) Set FR = sset.GetNewSheetLocation FR.SetFileName RootFolder & Ssetpath 'FR.SetFileName RootFolder & Right$(Ssetpath, Len(Ssetpath) - 1) Err.Clear On Error Resume Next
SsSubset2.SetNewSheetLocation FR Set SsSubset2 = sset.CreateSubset("Algemeen", "Hoofdonderdeel") SsSubset2.SetPromptForDwt True Set SsSubset2 = sset.CreateSubset("Kimmen", "Hoofdonderdeel") SsSubset2.SetPromptForDwt True Set SsSubset2 = sset.CreateSubset("Accessoires", "Hoofdonderdeel") SsSubset2.SetPromptForDwt True Set SsSubset2 = sset.CreateSubset("Beveiliging", "Hoofdonderdeel") SsSubset2.SetPromptForDwt True Set SsSubset2 = sset.CreateSubset("Draaiboek", "Hoofdonderdeel") SsSubset2.SetPromptForDwt True End If Set bb = aa.Next Loop
GoSub Cleanup Exit Sub Cleanup: oSheetSetDb.UnlockDb oSheetSetDb Set oProjDate = Nothing Set oProjNum = Nothing Set osheetset = Nothing Set oSheetSetDb = Nothing Set oSSM = Nothing Return ErrHandler: GoSub Cleanup End Sub Private Sub KontroleSubset1(ByVal strprojnum As String) Dim oSSM As AcSmSheetSetMgr Dim oSheetSetDb As AcSmDatabase Dim osheetset As AcSmSheetSet Dim oProjNum As New AcSmCustomPropertyValue Dim oProjDate As New AcSmCustomPropertyValue Dim PropFlag As PropertyFlags On Error GoTo ErrHandler
44
ACE system manager
Tekeningenbeheersysteem
PropFlag = CUSTOM_SHEETSET_PROP Set oSSM = New AcSmSheetSetMgr Set oSheetSetDb = oSSM.OpenDatabase("c:\caddata\project\" & strprojnum & "\" & strprojnum & ".dst", False) oSheetSetDb.LockDb oSheetSetDb Set osheetset = oSheetSetDb.GetSheetSet Dim SsSubset1 As AcSmSubset Dim aa As IAcSmEnumComponent Set aa = osheetset.GetSheetEnumerator Dim bb As IAcSmComponent Dim sset As AcSmSubset Set bb = aa.Next 'aa.Reset Do While Not bb Is Nothing If bb.GetTypeName = "AcSmSubset" Then If bb.GetName = Me.txtVervolgnr Then MsgBox "In het project " & Me.txtProjectnr & " is al een vervolgnummer " & Me.txtVervolgnr & " aanwezig" GoSub opnieuw Exit Sub End If End If Set bb = aa.Next Loop
GoSub Cleanup Exit Sub Cleanup: oSheetSetDb.UnlockDb oSheetSetDb Set oProjDate = Nothing Set oProjNum = Nothing Set osheetset = Nothing Set oSheetSetDb = Nothing Set oSSM = Nothing Return ErrHandler: GoSub Cleanup opnieuw: Me.Hide frmVervolg2.Show End Sub
45
ACE system manager
Tekeningenbeheersysteem
Bijlage VI –Tekening Wijzigen-
Private Sub cboRevisie_Click() Dim REV As Long REV = Me.cboRevisie.ListIndex 'REV = REV + 1 Attributes_lezen1 REV End Sub
Private Sub cmdCancel_Click() Me.Hide End Sub Private Sub cmdClear_Click() begin End Sub Private Sub cmdOk_Click() Dim REV As Long REV = Me.cboRevisie.ListIndex REV = REV + 1 Attributes_aanpassen REV ThisDrawing.Regen acAllViewports Me.Hide End Sub
Private Sub UserForm_Activate() AutoCAD.Preferences.Files.TemplateDwgPath = "c:\caddata\project\template"
46
ACE system manager
Tekeningenbeheersysteem
Dim astrRevisie(1 To 4) As String astrRevisie(1) = "A" astrRevisie(2) = "B" astrRevisie(3) = "C" astrRevisie(4) = "D" For i = 1 To 4 Call Me.cboRevisie.AddItem(astrRevisie(i)) Next i REV = FAttributes_lezen Attributes_lezen1 REV VBA.DoEvents End Sub Function FAttributes_lezen() As String Dim datum datum = Date vandaag = Format(datum, "dd-mm-yyyy") Dim selecties As AcadSelectionSets Set selecties = ThisDrawing.SelectionSets Dim blokken As AcadSelectionSet On Error Resume Next Set blokken = selecties.Add("verzameling") If Err Then Set blokken = selecties.Item("verzameling") blokken.Clear Err.Clear End If On Error GoTo 0 Dim dxfcode(0 To 2) As Integer Dim dxfdata(0 To 0) As Variant dxfcode(0) = 2 dxfdata(0) = "AMW_TITLE" Call blokken.Select(acSelectionSetAll, , , dxfcode, dxfdata) Dim Dim Dim For
blok As AcadBlockReference attributen As Variant attribuut As AcadAttributeReference Each blok In blokken If blok.HasAttributes Then attributen = blok.GetAttributes For i = LBound(attributen) To UBound(attributen) Set attribuut = attributen(i) For a = 1 To 4 If attribuut.TagString = "WIJZ_OMS" & a Then Select Case Case 1 text1 = Case 2 text2 = Case 3 text3 = Case 4 text4 = End Select End If Next a
a attribuut.TextString attribuut.TextString attribuut.TextString attribuut.TextString
Next i End If Next blok 'Kontrole op kader
47
ACE system manager
Tekeningenbeheersysteem
If selecties.Item(0).Count < 1 Then Me.Hide MsgBox "Er is geen kader in de tekening!" cmdCancel_Click End If If text1 = "" Then 'rev_pers1 aanpassen Me.cboRevisie.ListIndex = 0 'Attributes_aanpassen 1 Else If text2 = "" Then 'rev pers2 aanpassen Me.cboRevisie.ListIndex = 1 'Attributes_aanpassen 2 Else If text3 = "" Then 'rev pers3 aanpassen Me.cboRevisie.ListIndex = 2 'Attributes_aanpassen 3 Else If text4 = "" Then 'rev pers4 aanpassen Me.cboRevisie.ListIndex = 3 'Attributes_aanpassen 4 Else MsgBox "Er zijn te veel revisies!" End If End If End If End If FAttributes_lezen = Me.cboRevisie.ListIndex
End Function Sub Dim Dim Dim
Attributes_aanpassen(ByVal REV As Long) filesys As New FileSystemObject nieuw As String origineel As String
Dim selecties As AcadSelectionSets Set selecties = ThisDrawing.SelectionSets Dim blokken As AcadSelectionSet On Error Resume Next Set blokken = selecties.Add("verzameling") If Err Then Set blokken = selecties.Item("verzameling") blokken.Clear Err.Clear End If On Error GoTo 0 Dim dxfcode(0 To 2) As Integer Dim dxfdata(0 To 0) As Variant dxfcode(0) = 2 dxfdata(0) = "AMW_TITLE" Call blokken.Select(acSelectionSetAll, , , dxfcode, dxfdata) Dim Dim Dim For
blok As AcadBlockReference attributen As Variant attribuut As AcadAttributeReference Each blok In blokken If blok.HasAttributes Then attributen = blok.GetAttributes For i = LBound(attributen) To UBound(attributen) Set attribuut = attributen(i) On Error Resume Next If frmRevisie.txtTekenaar.TextLength = 0 Then
48
ACE system manager
Tekeningenbeheersysteem
Else If attribuut.TagString = "REV_PERS" & REV Then attribuut.TextString = Me.txtTekenaar.Value If attribuut.TagString = "WIJZ_OMS" & REV Then attribuut.TextString = Me.txtOmschrijving.Value If attribuut.TagString = "REV_DATE" & REV Then attribuut.TextString = Me.txtDatum.Value End If If attribuut.TagString = "DRAFTSPERS" Then attribuut.TextString = Me.txtSheetTekenaar.Value If attribuut.TagString = "TITLE1" Then attribuut.TextString = Me.txtTitle1.Value If attribuut.TagString = "TITLE2" Then attribuut.TextString = Me.txtTitle2.Value 'info tbv kopieren If attribuut.TagString = "DRAWING_FN" Then tekening = attribuut.TextString If REV = 1 Then wijziging = "-" Else REV = REV - 1 If attribuut.TagString = "REV_CODE" & REV Then wijziging = attribuut.TextString REV = REV + 1 End If Next i End If Next blok Me.Repaint ' bestand kopieren als chkOrigineel aanstaat If Me.chkOrigineel = True Then nieuw = tekening origineel = tekening & wijziging On Error Resume Next Call filesys.CopyFile(nieuw, origineel, False) If Err Then On Error GoTo 0 response = MsgBox("Er bestaat al een bestand " & origineel & " Overschrijven?", vbYesNo + vbCritical + vbDefaultButton2) If response = vbYes Then Call filesys.CopyFile(nieuw, origineel, True) MsgBox "Het origineel is bewaard als: " & origineel ThisDrawing.Save Me.Hide End If Else Me.Hide ThisDrawing.Save MsgBox "Het origineel is bewaard als: " & origineel Me.Hide End If End If End Sub Sub Einde() ' alles leegmaken Me.txtTekenaar.Value = "" Me.txtDatum.Value = "" Me.txtOmschrijving.Value = "" Me.chkOrigineel = False
49
ACE system manager
Tekeningenbeheersysteem
End Sub Sub Attributes_lezen1(ByVal REV As String) REV = REV + 1 Dim datum Dim vandaag datum = Date vandaag = Format(datum, "dd-mm-yyyy") Dim selecties As AcadSelectionSets Set selecties = ThisDrawing.SelectionSets Dim blokken As AcadSelectionSet On Error Resume Next Set blokken = selecties.Add("verzameling") If Err Then Set blokken = selecties.Item("verzameling") blokken.Clear Err.Clear End If On Error GoTo 0 Dim dxfcode(0 To 2) As Integer Dim dxfdata(0 To 0) As Variant dxfcode(0) = 2 dxfdata(0) = "AMW_TITLE" Call blokken.Select(acSelectionSetAll, , , dxfcode, dxfdata) Dim Dim Dim For
blok As AcadBlockReference attributen As Variant attribuut As AcadAttributeReference Each blok In blokken If blok.HasAttributes Then attributen = blok.GetAttributes For i = LBound(attributen) To UBound(attributen) Set attribuut = attributen(i) Select Case attribuut.TagString Case "DRAFTSPERS" Me.txtSheetTekenaar.Value = attribuut.TextString Case "DWGNO" Me.txtNR.Value = attribuut.TextString Case "REV_PERS" & REV Me.txtTekenaar.Value = attribuut.TextString Case "WIJZ_OMS" & REV Me.txtOmschrijving.Value = attribuut.TextString Case "TITLE1" Me.txtTitle1.Value = attribuut.TextString Case "TITLE2" Me.txtTitle2.Value = attribuut.TextString Case "CLIENT" Me.txtOpdrachtgever.Value = attribuut.TextString Case "PROJ_OMS" Me.txtProjectOmschrijving.Value = attribuut.TextString Case "PROJECTNR" Dim strProjectnr As String strProjectnr = attribuut.TextString Me.txtProjectnr.Value = Left$(strProjectnr, 6) Me.txtVervolgnr.Value = Right$(strProjectnr, 3) Case "REV_DATE" & REV Me.txtDatum.Value = attribuut.TextString If Me.txtDatum.TextLength = 0 Then Me.txtDatum.Value =
vandaag End Select
Next i End If
50
ACE system manager
Tekeningenbeheersysteem
Next blok End Sub
Sub Attributes_aanpassen1(ByVal REV As Long) Dim nieuw As String Dim origineel As String Dim datum Dim vandaag datum = Date vandaag = Format(datum, "dd-mm-yyyy") Dim selecties As AcadSelectionSets Set selecties = ThisDrawing.SelectionSets Dim blokken As AcadSelectionSet On Error Resume Next Set blokken = selecties.Add("verzameling") If Err Then Set blokken = selecties.Item("verzameling") blokken.Clear Err.Clear End If On Error GoTo 0 Dim dxfcode(0 To 2) As Integer Dim dxfdata(0 To 0) As Variant dxfcode(0) = 2 dxfdata(0) = "AMW_TITLE" Call blokken.Select(acSelectionSetAll, , , dxfcode, dxfdata) Dim Dim Dim For
blok As AcadBlockReference attributen As Variant attribuut As AcadAttributeReference Each blok In blokken If blok.HasAttributes Then attributen = blok.GetAttributes
For i = LBound(attributen) To UBound(attributen) Set attribuut = attributen(i) On Error Resume Next If attribuut.TagString = "REV_PERS" & REV Then attribuut.TextString = "ERK" If attribuut.TagString = "WIJZ_OMS" & REV Then attribuut.TextString = "Diversen" If attribuut.TagString = "REV_DATE" & REV Then attribuut.TextString = vandaag Next i End If Next blok End Sub
51
ACE system manager
Tekeningenbeheersysteem
Bijlage VII –Opties-
Dim strSubset0 As String Dim strSubset1 As String Private Sub CmdAfsluiten_Click() Me.Hide End Sub Private Sub cmdCancel_Click() response = MsgBox("Weet u het zeker?", vbYesNo + vbCritical + vbDefaultButton2) If response = vbYes Then Me.Hide End Sub Private Sub cmdOk_Click() Dim Bindex As Boolean On Error Resume Next If lstSubset1.Value Then If Err Then Lezen False, 2, Findex End If Else If lstSubset0.Value Then Lezen , 1, Findex Else MsgBox "Eerst een vervolgnummer of een categorie selecteren" Exit Sub End If End If Me.Hide End Sub Function Findex() As Boolean If frmSubset.OptIndex = True Then Findex = True End Function
52
ACE system manager
Tekeningenbeheersysteem
Private Sub CmdReset_Click() lstSubset0_click End Sub Private Sub CmdVerwijderen_Click() 'Ensure ListBox contains list items If lstSheets.ListCount >= 1 Then 'If no selection, choose last list item. If lstSheets.ListIndex = -1 Then lstSheets.ListIndex = lstSheets.ListCount - 1 End If lstSheets.RemoveItem (lstSheets.ListIndex) End If End Sub
End Sub Private Sub UserForm_Activate() Lezen True End Sub Private Sub lstSubset0_click() Lezen False, 1 End Sub Sub lstSubset1_click() Lezen False, 2 End Sub Sub Lezen(Optional ByVal alles As Boolean, Optional ByVal nivo As Long, Optional ByVal Bindex As Boolean) If alles = True Then SheetSets.Subsets_lezen "", True Else If nivo = 1 Then 'Ensure ListBox contains list items If lstSubset0.ListCount >= 1 Then 'If no selection, choose last list item. If lstSubset0.ListIndex = -1 Then lstSubset0.ListIndex = lstSubset0.ListCount - 1 End If strSubset0 = lstSubset0.Value lstSubset1.Clear lstSheets.Clear Me.Repaint SheetSets.Subsets_lezen strSubset0, False, 1, , Bindex Else MsgBox "Eerst opdrachtnummers aanmaken!" Me.Hide End If End If If nivo = 2 Then 'Ensure ListBox contains list items If lstSubset1.ListCount >= 1 Then 'If no selection, choose last list item. If lstSubset1.ListIndex = -1 Then lstSubset1.ListIndex = lstSubset1.ListCount - 1 End If strSubset0 = lstSubset0.Value strSubset1 = lstSubset1.Value lstSheets.Clear Me.Repaint SheetSets.Subsets_lezen strSubset0, False, 2, strSubset1, Bindex End If
53
ACE system manager
Tekeningenbeheersysteem
End If End If End Sub Dim r As Long Dim i As Long Sub Subsets_lezen(ByVal strSubset0 As String, ByVal alles As Boolean, Optional ByVal nivo As Long, Optional ByVal strSubset1 As String, Optional ByVal Bindex As Boolean) Dim dstbestand As String Dim strProjectnr As String Dim strProjectnr1 As String strProjectnr1 = FProjectnr strProjectnr = Left$(strProjectnr1, 6) dstbestand = "C:\caddata\project\" & strProjectnr & "\" & strProjectnr & ".dst" Subsets_lezen1 strSubset0, alles, nivo, strSubset1, Bindex, dstbestand End Sub
Sub Subsets_lezen1(ByVal strSubset0 As String, ByVal alles As Boolean, Optional ByVal nivo As Long, Optional ByVal strSubset1 As String, Optional ByVal Bindex As Boolean, Optional dstbestand As String) Dim oSSM As AcSmSheetSetMgr Dim oSheetSetDb As AcSmDatabase Dim oProjNum As New AcSmCustomPropertyValue Dim oProjDate As New AcSmCustomPropertyValue Dim osheetset As AcSmSheetSet Dim aa As IAcSmEnumComponent Dim bb As IAcSmComponent Dim sset As AcSmSubset Dim strSheet0 On Error Resume Next Set oSSM = New AcSmSheetSetMgr Set oSheetSetDb = oSSM.OpenDatabase(dstbestand, False) Set osheetset = oSheetSetDb.GetSheetSet Set aa = osheetset.GetSheetEnumerator Set bb = aa.Next If Bindex = True Then WD.WordKoppelen Dim WONR As String Dim AANNEMER As String Dim Omschrijving As String WONR = osheetset.GetName & strSubset0 AANNEMER = osheetset.GetCustomPropertyBag.GetProperty("Opdrachtgever").GetValue Omschrijving = osheetset.GetCustomPropertyBag.GetProperty("Omschrijving").GetValue WD.WordKoptekst AANNEMER, Omschrijving, WONR End If Do While Not bb Is Nothing If alles = True Then If bb.GetTypeName = "AcSmSubset" Then strSubset0 = bb.GetName Set sset = bb frmSubset.lstSubset0.AddItem strSubset0 End If
54
ACE system manager
Tekeningenbeheersysteem
If bb.GetTypeName = "AcSmSheet" Then strSheet0 = bb.GetName frmSubset.lstSheets.AddItem strSheet0 End If Else If bb.GetTypeName = "AcSmSubset" Then If nivo = 1 Then If strSubset0 = bb.GetName Then Set sset = bb Call Subset1(sset.GetSheetEnumerator, strSubset0, False, nivo, strSubset1, Bindex) End If End If If nivo = 2 Then If strSubset0 = bb.GetName Then Set sset = bb Call Subset1(sset.GetSheetEnumerator, strSubset0, False, nivo, strSubset1, Bindex) End If End If End If End If Set bb = aa.Next Loop
Set Set Set Set Set
oProjDate = Nothing oProjNum = Nothing osheetset = Nothing oSheetSetDb = Nothing oSSM = Nothing
End Sub Private Sub Subset1(ByVal aa As IAcSmEnumComponent, ByVal strSubset0 As String, ByVal alles As Boolean, Optional ByVal nivo As Long, Optional ByVal strSubset1 As String, Optional ByVal Bindex As Boolean) Dim bb As IAcSmComponent Dim sset As AcSmSubset Dim strSheet1 Set bb = aa.Next Do While Not bb Is Nothing If alles = True Then If bb.GetTypeName = "AcSmSubset" Then Set sset = bb Call Subset2(sset.GetSheetEnumerator, strSubset0, True, nivo) End If If bb.GetTypeName = "AcSmSheet" Then strSheet1 = bb.GetName frmSubset.lstSheets.AddItem strSheet1 End If Else If bb.GetTypeName = "AcSmSubset" Then If nivo = 2 Then If strSubset1 = bb.GetName Then If strSubset0 = frmSubset.lstSubset0.Value Then Set sset = bb If Bindex = True Then Call Index(sset.GetSheetEnumerator, strSubset0, False, nivo, strSubset1, Bindex) Else
55
ACE system manager
Tekeningenbeheersysteem
Call Subset2(sset.GetSheetEnumerator, strSubset0, False, nivo, strSubset1, Bindex) End If End If End If End If If nivo = 1 Then Set sset = bb strSubset1 = bb.GetName frmSubset.lstSubset1.AddItem strSubset1 If Bindex = True Then Call Index(sset.GetSheetEnumerator, strSubset0, False, nivo, strSubset1, Bindex) Else Call Subset2(sset.GetSheetEnumerator, strSubset0, False, nivo, strSubset1, Bindex) End If End If End If If bb.GetTypeName = "AcSmSheet" Then If nivo = 1 Then strSheet1 = bb.GetName frmSubset.lstSheets.AddItem strSheet1 End If End If End If Set bb = aa.Next Loop End Sub Private Sub Subset2(ByVal aa As IAcSmEnumComponent, ByVal strSubset0 As String, ByVal alles As Boolean, Optional ByVal nivo As Long, Optional ByVal strSubset1 As String, Optional ByVal Bindex As Boolean) Dim bb As IAcSmComponent Dim cc As AcSmSheet Dim strSheet2 Set bb = aa.Next Do While Not bb Is Nothing If bb.GetTypeName = "AcSmSubset" Then MsgBox "Het lezen van sheets in Sub-SubSets is niet mogelijk" End If If alles = True Then If bb.GetTypeName = "AcSmSheet" Then strSheet2 = bb.GetName frmSubset.lstSheets.AddItem strSheet2 End If Else If nivo = 1 Then If bb.GetTypeName = "AcSmSheet" Then strSheet2 = bb.GetName frmSubset.lstSheets.AddItem strSheet2
End If End If
If nivo = 2 Then If bb.GetTypeName = "AcSmSheet" Then If strSubset0 = frmSubset.lstSubset0.Value Then strSheet2 = bb.GetName frmSubset.lstSheets.AddItem strSheet2 End If
56
ACE system manager
Tekeningenbeheersysteem
End If
End If End If Set bb = aa.Next Loop End Sub Function FProjectnr() As String Dim selecties As AcadSelectionSets Set selecties = ThisDrawing.SelectionSets Dim blokken As AcadSelectionSet On Error Resume Next Set blokken = selecties.Add("verzameling") If Err Then Set blokken = selecties.Item("verzameling") blokken.Clear Err.Clear End If On Error GoTo 0 Dim dxfcode(0 To 2) As Integer Dim dxfdata(0 To 0) As Variant dxfcode(0) = 2 dxfdata(0) = "AMW_TITLE" Call blokken.Select(acSelectionSetAll, , , dxfcode, dxfdata) Dim Dim Dim For
blok As AcadBlockReference attributen As Variant attribuut As AcadAttributeReference Each blok In blokken If blok.HasAttributes Then attributen = blok.GetAttributes
For i = LBound(attributen) To UBound(attributen) Set attribuut = attributen(i) If attribuut.TagString = "PROJECTNR" Then FProjectnr = attribuut.TextString Next i End If Next blok 'Kontrole op kader If selecties.Item(0).Count < 1 Then frmSubset.Hide MsgBox "Er is geen kader in de tekening!" End End If If selecties.Item(0).Count > 1 Then frmSubset.Hide MsgBox "Er mag maar 1 kader in de tekening staan!" End End If End Function Private Sub Index(ByVal aa As IAcSmEnumComponent, ByVal strSubset0 As String, ByVal alles As Boolean, Optional ByVal nivo As Long, Optional ByVal strSubset1 As String, Optional ByVal Bindex As Boolean) Dim bb As IAcSmComponent Dim cc As AcSmSheet Dim strSheet2 Set bb = aa.Next Do While Not bb Is Nothing
57
ACE system manager
Tekeningenbeheersysteem
If nivo = 1 Then If bb.GetTypeName = "AcSmSheet" Then 'MsgBox frmSubset.lstSheets.List strSheet2 = bb.GetName frmSubset.lstSheets.AddItem strSheet2 Set cc = bb If Bindex = True Then Call index1(cc, bb) End If End If
If nivo = 2 Then If bb.GetTypeName = "AcSmSheet" Then If strSubset0 = frmSubset.lstSubset0.Value Then strSheet2 = bb.GetName frmSubset.lstSheets.AddItem strSheet2 Set cc = bb If Bindex = True Then Call index1(cc, bb) End If End If
End If Set bb = aa.Next Loop End Sub Sub index1(ByVal cc As AcSmSheet, bb As IAcSmComponent) Dim Invoer(1 To 7) As String Dim titel(1 To 2) As String Invoer(1) = cc.GetNumber titel(1) = cc.GetCustomPropertyBag.GetProperty("Benaming1").GetValue titel(2) = cc.GetCustomPropertyBag.GetProperty("Benaming2").GetValue Invoer(2) = titel(1) & " " & titel(2) Invoer(3) = cc.GetCustomPropertyBag.GetProperty("SheetDatum").GetValue Invoer(4) = cc.GetCustomPropertyBag.GetProperty("Rev1-Datum").GetValue Invoer(5) = cc.GetCustomPropertyBag.GetProperty("Rev2-Datum").GetValue Invoer(6) = cc.GetCustomPropertyBag.GetProperty("Rev3-Datum").GetValue Invoer(7) = cc.GetCustomPropertyBag.GetProperty("Rev4-Datum").GetValue For i = 1 To 7 Call WordInvoeren(Invoer(i)) Next i Call WordRijInvoeren End Sub Dim W As Word.Application Dim dokumenten As Documents Dim dokument As Document Sub WordKoppelen() On Error Resume Next Set W = GetObject(, "word.application") If Err Then Err.Clear Set W = CreateObject("word.application") End If W.Visible = True Set dokument = W.Documents.Add(Template:="C:\CADDATA\Index tekeningen bekisting en beveiliging.doc", NewTemplate:=False, DocumentType:=0) W.ScreenUpdating = True
58
ACE system manager
Tekeningenbeheersysteem
Set dokument = W.ActiveDocument End Sub Sub WordInvoeren(ByVal waarde As String) W.Selection.Cells(1).Range.InsertBefore text:=waarde W.Selection.MoveRight Unit:=wdCell, Count:=1 End Sub Sub WordRijInvoeren() W.Selection.InsertRowsBelow 1 W.Selection.MoveUp Unit:=wdLine, Count:=1 End Sub Sub WordKoptekst(ByVal AANNEMER As String, ByVal Omschrijving As String, ByVal WONR As String) If W.ActiveWindow.View.SplitSpecial <> wdPaneNone Then W.ActiveWindow.Panes(2).Close End If If W.ActiveWindow.ActivePane.View.Type = wdNormalView Or W.ActiveWindow. _ ActivePane.View.Type = wdOutlineView Then W.ActiveWindow.ActivePane.View.Type = wdPrintView End If W.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader W.Selection.MoveDown Unit:=wdLine, Count:=5 W.Selection.MoveLeft Unit:=wdCharacter, Count:=33 W.Selection.MoveRight Unit:=wdCharacter, Count:=7 W.Selection.MoveLeft Unit:=wdCharacter, Count:=1 W.Selection.MoveRight Unit:=wdCharacter, Count:=1 W.Selection.MoveLeft Unit:=wdCharacter, Count:=1 W.Selection.TypeText text:=AANNEMER W.Selection.MoveRight Unit:=wdCharacter, Count:=11 W.Selection.MoveLeft Unit:=wdCharacter, Count:=1 W.Selection.TypeText text:=WONR W.Selection.MoveDown Unit:=wdLine, Count:=1 W.Selection.TypeText text:=Omschrijving W.ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument End Sub
59