Startseite Foren Map 3D Basics Bildaufbau eines DM – es fehlt aber noch die Klapplistenergänzung

Ansicht von 5 Beiträgen – 1 bis 5 (von insgesamt 5)
  • Autor
    Beiträge
  • JanTappenbeck
    Teilnehmer
    Beitragsanzahl: 42

    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 Function

    Das 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

    Gorden Kock
    Administrator
    Beitragsanzahl: 154

    Moin Jan,

    die zuletzt aufgerufenen Darstellungsmodelle landen in der TB_SETTINGS-Tabelle des MAPSYS:

    x

    JanTappenbeck
    Teilnehmer
    Beitragsanzahl: 42

    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

    JanTappenbeck
    Teilnehmer
    Beitragsanzahl: 42

    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

    Gorden Kock
    Administrator
    Beitragsanzahl: 154

    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…

Ansicht von 5 Beiträgen – 1 bis 5 (von insgesamt 5)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.