Name des VISUELLESTIL des VPORT = 5 / AutoCAD ObjectARX und .NET
Dirk.B 20. Dez. 2018, 16:51

Hallo Zusammen!

Kann mir jemand auf die Sprünge helfen, wie ich unter .net den aktuellen VISUELLESTIL ermitteln und als String Variable speichern kann?

Code:

'//;; so ähnlich
Dim XXXX As String = ViewPort.Visual.StyleName

Setzen ist nicht das Problem:

Code:

  Private Sub set_old_visstyle(ByVal oldvis As String)

        Dim VSKa As String = Nothing

        Dim app As AcadApplication = Application.AcadApplication

        Application.SetSystemVariable("CVPORT", 5)

        Select Case oldvis
            Case "2dWireframe"
                VSKa = "2DD"
            Case "3dWireframe"
                VSKa = "DR"
            Case "3D Hidden"
                VSKa = "V"
            Case "Realistic"
                VSKa = "R"
            Case "Conceptual"
                VSKa = "K"
            Case "Shaded"
                VSKa = "S"
            Case "Shaded with edges"
                VSKa = "C"
            Case "Shades of Gray"
                VSKa = "G"
            Case "Sketchy"
                VSKa = "I"
            Case "X-Ray"
                VSKa = "Ö"
        End Select


        With app.ActiveDocument
            .SendCommand("vsa" & vbCr & VSKa & vbCr)
        End With
    End Sub


Ich möchte den aktuellen Namen (oldvis) speichern, an eine Variable übergeben,
dann zwischendurch den Stil ändern und anschließend mit dem vorher gespeichertem Namen wieder setzen.

Dirk.B 21. Dez. 2018, 08:29


Abb_01_Visual_Styles.JPG

 
Guten Morgen Zusammen!

Wie ich die vorhandenen Visual Styles auslese habe ich.

Code:

        <CommandMethod("VisualStyleIterator")>
        Public Shared Sub VisualStyleIterator_Method()
            Dim database As Database = HostApplicationServices.WorkingDatabase

            Using transaction As Transaction = database.TransactionManager.StartTransaction()
                Dim dbDictionary As DBDictionary = CType(transaction.GetObject(database.VisualStyleDictionaryId, OpenMode.ForRead), DBDictionary)

                For Each dictEntry As DBDictionaryEntry In dbDictionary
                    Dim entry As DBVisualStyle = CType(transaction.GetObject(dictEntry.Value, OpenMode.ForRead), DBVisualStyle)
                    Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(String.Format(vbLf & "Visual style name: {0}", entry.Name))

                Next

                transaction.Commit()
            End Using
        End Sub


Aber wie komme ich nun an den activen und kann den an eine Variable übergeben?

KlaK 23. Dez. 2018, 15:13

Hallo Dirk,

Interessante Geschichte, leider muß ich dazu schreiben dass ich bisher gar nichts mit den Visuellen Stilen programmiert hane aber das Thema hat mich doch etwas interessiert.
Bei der Internetsuche kam ich auf diesen Beitrag, der Dir vielleicht weiterhelfen könnte.

Dort wird für ein Ansichtsfenster ein neuer Visueller Stil ohne Sendcommand festgelegt ( obj.VisualStyleID ). Theoretisch sollte man also dort auch die Nummer des Aktiven herauslesen können. Die zugehörigen Namen hast Du ja schon aus dem Dictionary.

Vielleicht hilft's Dir ja weiter ...

Grüße
Klaus 

Dirk.B 22. Jan. 2019, 09:47

Hallo Klaus!

Sorry, dass ich mich erst jetzt bei dir melde.
Danke für deinen Beitrag.

Ich habe es für mich nun so gelöst und das funktioniert recht gut.

Speichern des aktuellen Wert / VISUELLESTIL in einer Variablen in einem Module (Module1):

Code:

Public Shared Sub get_old_visid()
    Dim MyApp As Autodesk.AutoCAD.Interop.AcadApplication = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication
    Module1.OldVisID = System.Convert.ToInt32(MyApp.ActiveDocument.ActivePViewport.VisualStyle)
End Sub

Und anschließend setze ich den alten Wert wieder:

Code:

Public Shared Sub set_old_visid(ByVal VisID As Integer)
Dim NEWVSK As String = Nothing
Dim MyApp As Autodesk.AutoCAD.Interop.AcadApplication = _
Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication
Select Case VisID
Case 1                  '//;; = "2D Drahtkörper"
NEWVSK = "2DD"
Case 11                '//;; = "Drahtkörper"
NEWVSK = "DR"
Case 5                  '//;; = "Verdeckt"
NEWVSK = "V"
Case 6                  '//;; = "Realistisch"
NEWVSK = "R"
Case 4                  '//;; = "Konzeptuell"
NEWVSK = "K"
Case 7                  '//;; = "Schattiert"
NEWVSK = "S"
Case 8                  '//;; = "Schattierung mit Kante"
NEWVSK = "C"
Case 9                  '//;; = "Grautöne"
NEWVSK = "G"
Case 10                '//;; = "Skizzenhaft"
NEWVSK = "I"
Case 12                '//;; = "Röntgen"
NEWVSK = "Ö"
End Select
MyApp.ActiveDocument.SendCommand("vsa" & vbCr & NEWVSK & vbCr)
End Sub