Startseite › Foren › Map 3D Basics › Bildaufbau eines DM – es fehlt aber noch die Klapplistenergänzung
-
AutorBeiträge
-
Moin!
ich habe eine Funktion erstellt mit der ein definiertes Darstellungsmodell geladen wird und dann der definierte Bereich aufgebaut wird.
''' <summary> ''' Arbeitsfunktion für den DB-Aufbau ''' </summary> ''' <param name="Document">zugehöriges TB-Dokument</param> ''' <param name="DM_Name">Name des Darstellungsmodells</param> ''' <param name="Selction">Art der Auswahl</param> ''' <param name="Silent">optional Fehlermeldungen unterdrücken (default: true)</param> ''' <param name="AskForFdoClear">optional Frage, ob vorhandene FDO-Dtaen gelöscht werden sollen (default:true)</param> ''' <param name="AutoFDOClear">optional vollständigen DM-Aufbau und vorhandene Layer löschen</param> ''' <param name="Polygon">optional Polygon für das Begrenzungsfenster (default:= nothing)</param> ''' <returns>-3 sonstiger Fehler / -2 kein Document angegeben / -1 ... kein DM angegeben oder gefunden / 0 ... Abbruch / 1 alles OK</returns> ''' <remarks>AskForFdoClear wird nur beachtet, wenn AutoFDOClear=false</remarks> Public Function DM_Draw_Work(Document As Autodesk.Map.IM.Forms.Document, DM_Name As String, ByVal Selction As FdoBereich, Optional ByVal Silent As Boolean = True, Optional ByVal Polygon As Autodesk.Map.IM.Graphic.Polygon = Nothing, Optional AskForFdoClear As Boolean = True, Optional AutoFDOClear As Boolean = False) As Integer '************************************************************************************************************* ' Info, wenn einmal ein Bildaufbau über eine Objektauswahl erfolgen soll '************************************************************************************************************* Dim Ergebnis As Integer = 1 Dim DM_Pfad As String = "" Dim RepositoryPath As String Dim Msg As String = "" Dim acDocMgr As DocumentCollection = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager AcReinit() Dim graphicsGenerator As Autodesk.Map.IM.Display.GraphicsGeneration.IGraphicsGenerator graphicsGenerator = Document.ApplicationObject.Services.GetService(Of Autodesk.Map.IM.Display.GraphicsGeneration.IGraphicsGenerator)() RepositoryPath = graphicsGenerator.DisplayModelRepository.RepositoryDirectory.ToString() DM_Pfad = RepositoryPath & "\" & DM_Name If System.IO.File.Exists(DM_Pfad) = False Then If Silent = False Then MsgBox("Darstellungsmodell nicht gefunden!", MsgBoxStyle.Critical, k_AppName_Vermessung) End If Return -1 End If If IsNothing(Document) Then If Silent = False Then MsgBox("Es ist kein Dokument zugewiesen!", MsgBoxStyle.Critical, k_AppName_Vermessung) End If Return -2 End If ' Nachfragen, ob das bestehende FDO gelöscht werden soll Dim opt1 As New Autodesk.AutoCAD.EditorInput.PromptKeywordOptions(vbLf & "Soll das aktuelle Darstellungsmodell gelöscht werden?") With { .AllowNone = True } opt1.Keywords.Add(k_Opt_Yes) opt1.Keywords.Add(k_Opt_No) opt1.Keywords.Add(k_Opt_Exit) opt1.Keywords.[Default] = k_Opt_Yes If AutoFDOClear = False Then If AskForFdoClear = True Then Dim res1 As Autodesk.AutoCAD.EditorInput.PromptResult = _Editor.GetKeywords(opt1) If res1.Status = Autodesk.AutoCAD.EditorInput.PromptStatus.OK Then Select Case res1.StringResult Case k_Opt_Yes AutoFDOClear = True Case k_Opt_Exit Exit Function End Select Else Exit Function End If End If 'AskForFdoClear End If 'AutoFDOClear ' löschen des bestehenden Darstellungsmodell If IsDMLoaded() = True And AutoFDOClear = True Then RemoveAllFdoLayers() Try Dim displayRepository As Autodesk.Map.IM.Display.DisplayModelManagement.IDisplayModelRepository displayRepository = graphicsGenerator.DisplayModelRepository RepositoryPath = graphicsGenerator.DisplayModelRepository.RepositoryDirectory.ToString() graphicsGenerator.DisplayModel = displayRepository.Load(DM_Pfad) 'graphicsGenerator.DisplayModel = displayRepository.Load(RepositoryPath + "\" + "MeinDarstellungsmodell.tbdm") ' anwenden des Bereiches, wenn als Polygon definiert If Not IsNothing(Polygon) Then graphicsGenerator = Document.ApplicationObject.Services.GetService(Of Autodesk.Map.IM.Display.GraphicsGeneration.IGraphicsGenerator)() Dim filterSetter As IFilterSetter = FilterSetterFactory.Create(graphicsGenerator.DisplayModel) filterSetter.OnlyOnTopobaseLayers = True filterSetter.TransformCoordSysInFilter = True filterSetter.ApplyViewport(Polygon) End If graphicsGenerator.ShowProgressBar = True Dim mydocuments As System.Collections.Generic.ICollection(Of Autodesk.Map.IM.Display.GraphicsGeneration.IDocument) 'acDoc As Autodesk.AutoCAD.ApplicationServices.Document Dim docLock As DocumentLock = _AcDocument.LockDocument Using docLock mydocuments = graphicsGenerator.Draw End Using _SrvAcad.ZoomVorher() ' Ansicht wiederherstellen Catch ex As System.Exception _AcTryReport.Show("unerwarteter Fehler in EBL.Layer > Layer_DisplayModell > DrawDM_Work", ex.ToString) Ergebnis = -3 Finally graphicsGenerator.ShowProgressBar = False End Try Return Ergebnis End FunctionDas ganze funktioniert auch wunderbar – nur hätten meine Kollegen am Ende, dass das angegebene DM auch in der Klappliste eingetragen und aktuell gesetzt wird.
Ich bezweifel das zwar fast, weil TB vermutlich die Informationen intern hinterlegt und dann und dann im Laufe der Sitzung in der Registry oder einer INI speichert.
Aber vielleicht kennt einer von Euch ja doch einen Weg dieses in die Klappliste einzutragen.
Hat einer einen Lösungsansatz?
Gruß Jan
Moin Jan,
die zuletzt aufgerufenen Darstellungsmodelle landen in der TB_SETTINGS-Tabelle des MAPSYS:

MoiN!
das klingt ja schon einmal gut – Dir bekannt, ob sich die Liste in der TB auch anpasst, wenn die Tabelle geändert wird?
gruß Jan
Moin!
kleiner Nachtrag – wenn man manuell die Tabelle ergänzen/bearbeiten würde müsste man nur die USER_ID und die ITEMSKEYS wissen.Gruß Jan
Hi,
das müsste irgendwie per API gehen. So wie man auch ein Formular refreshen kann. Ansonsten muss die gesamte Connection refreshed werden, was etwa länger dauern könnte.
Die User-ID steht in TB_USER und die ITEMKEYS ergeben sich aus dem gewünschten Darstellungsmodell…
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.