Bezieht sich auf | |||
Produkt(e): | MicroStation | ||
Version(en): | 08.11.09.578 | ||
Umgebung: | N\A | ||
Produktbereich: | Programmierung | ||
Produktunterbereich: | VBA | ||
Ursprünglicher Autor: | Artur Goldsweer, Bentley Technical Support Group | ||
Ähnlich wie man den einzelnen graphischen Elementen einer Zeichnung eine Darstellungspriorität zuwiesen kann, kann man auch den einzelnen Ebenen eine Priorität zuweisen.
Vgl. dazu folgenden Beitrag: Darstellungsreihenfolge der Elemente ändern
Auch bei den Ebenen kann manuell eine Priorität im Wertebereich zwischen -500 und 500 zugeweisen werden, wobei 500 bedeutet, dass Elemente dieser Ebene ganz oben liegen.
Im Vergleich zu der Priorität einzelner Elemente haben Ebenenprioritäten eine zusätzliche Gewichtung von 1000, d.h. jede Ebenenpriorität ist damit vorrangig zur Elementpriorität:
Um dies leichter im Batchbetrieb auf eine größere Anzahl von Dateien mit vielen Ebenen anzuwenden, bietet sich hier die Verwendung einer VBA Routine an. Hier dazu ein Beispiel, das alle Ebenen mit der Priorität 500 (multipliziert mit Faktor 1000) versieht, aber nur wenn im Ebenennamen der String "text" vorkommt.
Private Declare Function mdlLevel_setDisplayPriority Lib "stdmdlbltin.dll" ( _ ByVal modelRefIn As Long, _ ByVal levelIdIn As Long, _ ByVal priorityIn As Long) As Long Declare Function mdlLevel_getDisplayPriority Lib "stdmdlbltin.dll" (ByRef priorityOut As Long, ByVal modelRefIn As Long, ByVal levelIdIn As Long) As Long Sub LevelPriority() Dim oLv As Level For Each oLv In ActiveDesignFile.Levels If UCase(oLv.Name) Like "*TEXT*" Then ' folgende MDL Funktion verwendet, da im VBA Objekt nicht vorhanden: mdlLevel_setDisplayPriority ActiveModelReference.MdlModelRefP, oLv.ID, 5 * 1000 End If Next ActiveDesignFile.Levels.Rewrite End Sub