download - CAD Magazine

download - CAD Magazine download - CAD Magazine

cadmagazine.nl
from cadmagazine.nl More from this publisher
01.01.2015 Views

MicroStation Parametrisch Tekenen deel 2 Grafische elementen met behulp Door: Johan Vreede In dit artikel een uitbreiding van een eerder verschenen artikel: Parametrisch Tekenen. Oftewel: er wordt nog eens teruggekomen op het creëren van grafische elementen met behulp van paramaters. Ditmaal zal de nadruk liggen op de symbology en andere bijbehorende kenmerken van het element en ook op enkele uitbreidingen bij de gebruikersinterface. serie elementen die naar mening van de gebruiker – al of niet tijdelijk - bij elkaar horen. Interface voor een eenvoudige parametrische routine. In het vorige artikel is uitgelegd dat met het commando CreateLineElement1 een lijnelement in het geheugen kan worden aangemaakt. Daarna wordt dat element met ActiveModelReference.AddElement daadwerkelijk aan de tekening toegevoegd. Evenzo kan met Create- EllipseElement2 een cirkel, met CreateArcElement1 een boog en met CreateShapeElement een vlak worden aangemaakt. Soms is het zelfs nodig de elementen samen te voegen tot een complex element. Daarvoor moet eerst een reeks met elementen worden aangemaakt die als invoer dienen voor het commando CreateComplexShapeElement. Als dit element gesloten is, is het bovendien mogelijk een fillcode of een arcering toe te voegen. Soms zijn van een commando twee versies beschikbaar, zoals CreateLineElement1 en CreateLineElement2. De versies verschillen dan meestal iets in de argumenten. Zo heeft CreateLineElement2 slechts twee punten als invoer, terwijl CreateLineElement1 een willekeurige reeks van punten als invoer accepteert. Het is aan de programmeur om het meest geschikte commando te kiezen. Complexe elementen Het samenvoegen van een aantal elementen tot een complex element is natuurlijk ook toepasbaar bij het maken van bibliotheekelementen. De commando-syntax is: CreateCellElement1(, , ). Het is mogelijk een cel zonder naam aan te maken (een zogeheten Orphan Cell) door als naam vbNullString te gebruiken. Orphan Cells (unnamed cells) worden onder andere gebruikt voor ‘groups’. Dit is een Dynamische weergave Tijdens het plaatsen van het element, bijvoorbeeld de cel, wil de gebruiker zien wat er gaat komen. Hiervoor kan hij de dynamics gebruiken. Dit is uiteraard van belang voor de afmetingen, maar vooral ook voor hoekverdraaiing en schaal. Let op dat fills en arceringen pas worden getoond op het moment dat het element definitief is geplaatst. Bij de dynamische weergave wordt gebruik gemaakt van een zelf aan te maken klasse die het event IprimitiveCommandEvents implementeert. Implemetatie houdt in dat de functies IPrimitiveCommand- Events_Dynamics, _DataPoint, _Reset, _Start, _KeyIn en _CleanUp worden gedefinieerd, waarbij vaak bij een aparte subfunctie wordt gebruikt voor het calculeren van de punten waaruit het totale element is opgebouwd. Symbology Een belangrijk onderwerp bij het aanmaken van een element is de symbology die moet worden gebruikt. Dat wil dus zeggen: kleur, laag, lijntype en lijndikte. Dit kan door een ander element als template te kiezen, of door de symbology – die dan in eerste instantie gebaseerd is op de actieve settings – direct na het aanmaken te wijzigen in de gewenste symbology. Als de gebruiker een ‘template element’ wil gebruiken, zal hij dit element eerst moeten aanwijzen. Daarbij is het van belang dat de juiste syntax wordt gebruikt. In principe wordt een verwijzing naar een setting gemaakt zodat het juiste objecttype is gegarandeerd. Dat wil zeggen dat de definitie van de laag een level-object is en niet een tekst die de naam van die laag bevat. Dus niet NewElement.Level=”cm_laag” maar NewElement.Level =ActiveDesignFile.Levels(“cm_laag”). Dit geldt evenzo voor lijntypen. Weliswaar zijn de standaard lijntypen met nummers te benoemen, 0 tot en met 7, maar speciale lijntypen zijn alleen via hun naam te benaderen. Hierbij dient uiteraard te worden gecontroleerd of dat lijntype wel geladen is. Ook voor lagen zal de gebruiker moeten controleren of de laagnaam wel bestaat. Is dit niet het geval dan kan hij er voor kiezen deze aan te maken – mits de environment settings dit toestaan. Controle van deze environment setting gaat bijvoorbeeld als volgt: 48 CADMagazine Jul./Aug. 2006-5

van parameters If ActiveWorkspace.IsConfigurationVariableDefined ("_USTN_CA- PABILITY") Then If InStr(ActiveWorkspace.ConfigurationVariableValue ("_USTN_CAPABILITY"), "+CAPABILITY_LEVELS_CREATE") > 0 Then ActiveDesignFile.AddNew Level ("cm_laag") End If Invoercontrole Een van de belangrijkste onderdelen bij de bedieningsaspecten voor invoer is de controle op juistheid hiervan. In dit geval is dit bijvoorbeeld de situatie dat m5 >= 2*d2 moet zijn. Hiervoor is de methode/event te gebruiken. Dit is beter dan TextBox1_Change() omdat de verwerking pas dient te gebeuren als de gebruiker het invulvak verlaat, niet meteen nadat een karakter ingetikt is. Private Sub TextBox1_AfterUpdate() TextBox1.Text = CStr(Format(Val(TextBox1.Value), "0.00")) End Sub De controle bevat bovendien nog een extra functie om de invoer om te zetten in een vast format, bijvoorbeeld twee cijfers achter de komma. Default-waarden Tot slot is er nog de mogelijkheid om default-waarden te bewaren voor volgend gebruik van de routine. Een mogelijke methode is de ingevoerde waarden in de dialoogbox in een eenvoudig bestand te bewaren, bijvoorbeeld op een van de gebruikersnaam afhankelijke locatie zoals aangegeven met _USTN_HOMEP- REFS. Uiteraard moeten deze gegevens weer worden ingelezen Arceren en andere vulmogelijkheden zijn ingebouwd. voordat de dialoogbox in beeld komt, en moeten de nieuwe waarden worden weggeschreven op het moment dat het element wordt geplaatst. Op deze manier is het mogelijk een volwaardige parametrische routine te programmeren die in heel veel gevallen bruikbaar zal zijn. Succes met uw eigen programmaontwerp. Broncode Dit is voorlopig het laatste artikel in de serie VBA-programmeren met MicroStation. De broncode (de MVBA-routine) van de beschreven voorbeelden zijn als vanouds te vinden op www.cadmagazine.nl. Voor vragen of opmerkingen is de auteur bereikbaar via johan.vreede@studio4d.nl. COLUMN Tweepuntnul Hét internet bestaat niet meer. Toch hoeft u niet te schrikken. Wanneer u goed leest, ontdekt u het streepje op de e. Hét internet. Zoiets als dé bank. De suggestie van het streepje is duidelijk: er is er maar één. Wat internet betreft, dient zich een nieuwe release aan: web 2.0. Het is het web van sociale netwerken, weblogs, tags, wiki’s en meer van dat ras. Het duizelt Vergelijk dan www.britannica.com met www.wikipedia.nl. De Encyclopædia Britannica: de oudste Engelstalige encyclopedie – oorspronkelijk op papier, inmiddels online. Daar tegenover Wikipedia: een online encyclopedie waaraan ook u uw bijdrage kunt leveren. In uw eigen taal, zonodig zelfs in uw eigen dialect. Iedereen die zich deskundig vindt op een bepaald gebied kan zijn of haar mening(!) toevoegen aan de encyclopedie. Bij weblogs doet zich hetzelfde fenomeen voor: iedereen met journalistieke ambities (of wat daarvoor doorgaat) publiceert naar hartelust op het web (2.0 wel te verstaan). Langzamerhand wordt het web de plaats waar alles gebeurt: zelfs voor software heb je geen werkstations meer nodig. Een softwareproduct wordt steeds meer een dienst. Aan CAD-land gaat dit alles niet voorbij. Op 1 mei jongstleden had een Canadese softwareontwikkelaar de primeur: een webbrowser als enige gereedschap voor basishandelingen met CADbestanden. Een goede twee maanden later leert een kijkje in de ontwikkelkeuken van Autodesk dat ook zij werken aan een zero client viewer. Alles wijst erop dat hier geen sprake is van een hype. Dat hier echt sprake is van doorontwikkeling, van volwassen worden van het web. Release tweepuntnul. Edwin Schalk commercieel directeur DeltaPi CADMagazine Jul./Aug. 2006-5 49

MicroStation<br />

Parametrisch Tekenen deel 2<br />

Grafische elementen met behulp<br />

Door: Johan Vreede<br />

In dit artikel een uitbreiding van een eerder verschenen artikel: Parametrisch Tekenen.<br />

Oftewel: er wordt nog eens teruggekomen op het creëren van grafische elementen met<br />

behulp van paramaters. Ditmaal zal de nadruk liggen op de symbology en andere<br />

bijbehorende kenmerken van het element en ook op enkele uitbreidingen bij de<br />

gebruikersinterface.<br />

serie elementen die naar mening van de gebruiker – al of<br />

niet tijdelijk - bij elkaar horen.<br />

Interface voor een eenvoudige parametrische routine.<br />

In het vorige artikel is uitgelegd dat met het commando<br />

CreateLineElement1 een lijnelement in het geheugen kan<br />

worden aangemaakt. Daarna wordt dat element met<br />

ActiveModelReference.AddElement daadwerkelijk aan<br />

de tekening toegevoegd. Evenzo kan met Create-<br />

EllipseElement2 een cirkel, met CreateArcElement1 een<br />

boog en met<br />

CreateShapeElement een vlak worden aangemaakt. Soms<br />

is het zelfs nodig de elementen samen te voegen tot een<br />

complex element. Daarvoor moet eerst een reeks met elementen<br />

worden aangemaakt die als invoer dienen voor<br />

het commando CreateComplexShapeElement. Als dit<br />

element gesloten is, is het bovendien mogelijk een fillcode<br />

of een arcering toe te voegen.<br />

Soms zijn van een commando twee versies beschikbaar,<br />

zoals CreateLineElement1 en CreateLineElement2. De<br />

versies verschillen dan meestal iets in de argumenten. Zo<br />

heeft CreateLineElement2 slechts twee punten als invoer,<br />

terwijl CreateLineElement1 een willekeurige reeks van<br />

punten als invoer accepteert. Het is aan de programmeur<br />

om het meest geschikte commando te kiezen.<br />

Complexe elementen<br />

Het samenvoegen van een aantal elementen tot een complex<br />

element is natuurlijk ook toepasbaar bij het maken<br />

van bibliotheekelementen. De commando-syntax is:<br />

CreateCellElement1(, ,<br />

). Het is mogelijk een cel zonder naam aan te<br />

maken (een zogeheten Orphan Cell) door als naam<br />

vbNullString te gebruiken. Orphan Cells (unnamed cells)<br />

worden onder andere gebruikt voor ‘groups’. Dit is een<br />

Dynamische weergave<br />

Tijdens het plaatsen van het element, bijvoorbeeld de cel,<br />

wil de gebruiker zien wat er gaat komen. Hiervoor kan<br />

hij de dynamics gebruiken. Dit is uiteraard van belang<br />

voor de afmetingen, maar vooral ook voor hoekverdraaiing<br />

en schaal. Let op dat fills en arceringen pas worden<br />

getoond op het moment dat het element definitief is geplaatst.<br />

Bij de dynamische weergave wordt gebruik gemaakt van<br />

een zelf aan te maken klasse die het event<br />

IprimitiveCommandEvents implementeert. Implemetatie<br />

houdt in dat de functies IPrimitiveCommand-<br />

Events_Dynamics, _DataPoint, _Reset, _Start, _KeyIn en<br />

_CleanUp worden gedefinieerd, waarbij vaak bij een<br />

aparte subfunctie wordt gebruikt voor het calculeren van<br />

de punten waaruit het totale element is opgebouwd.<br />

Symbology<br />

Een belangrijk onderwerp bij het aanmaken van een element<br />

is de symbology die moet worden gebruikt. Dat wil<br />

dus zeggen: kleur, laag, lijntype en lijndikte. Dit kan door<br />

een ander element als template te kiezen, of door de<br />

symbology – die dan in eerste instantie gebaseerd is op de<br />

actieve settings – direct na het aanmaken te wijzigen in<br />

de gewenste symbology. Als de gebruiker een ‘template<br />

element’ wil gebruiken, zal hij dit element eerst moeten<br />

aanwijzen. Daarbij is het van belang dat de juiste syntax<br />

wordt gebruikt. In principe wordt een verwijzing naar een<br />

setting gemaakt zodat het juiste objecttype is gegarandeerd.<br />

Dat wil zeggen dat de definitie van de laag een<br />

level-object is en niet een tekst die de naam van die laag<br />

bevat. Dus niet NewElement.Level=”cm_laag” maar<br />

NewElement.Level =ActiveDesignFile.Levels(“cm_laag”).<br />

Dit geldt evenzo voor lijntypen. Weliswaar zijn de standaard<br />

lijntypen met nummers te benoemen, 0 tot en met<br />

7, maar speciale lijntypen zijn alleen via hun naam te benaderen.<br />

Hierbij dient uiteraard te worden gecontroleerd<br />

of dat lijntype wel geladen is. Ook voor lagen zal de gebruiker<br />

moeten controleren of de laagnaam wel bestaat. Is<br />

dit niet het geval dan kan hij er voor kiezen deze aan te<br />

maken – mits de environment settings dit toestaan.<br />

Controle van deze environment setting gaat bijvoorbeeld<br />

als volgt:<br />

48<br />

<strong>CAD</strong><strong>Magazine</strong> Jul./Aug. 2006-5

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!