Darstellungsreihenfolge der Ebenen ändern


  
 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