ObjectARX: DocumentLock bei modalen Fenstern verwenden
19. Juni 2009, 18:29 Uhr
Wir portieren auf der Arbeit gerade ein altes AutoCAD VBA-Projekt mit Hilfe von ObjectARX nach VB.net.
ObjectARX ist supermächtig, aber für Neueinsteiger gibt es einige Klippen zu umschiffen. Ich möchte behaupten, dass wir die meisten schon gerammt haben, aber immer noch auf Fahrt sind! ;)
Eine gute Quelle ist übrigens der Blog von Kean Walmsley!
Beim letzten Problem hatte ich eine Funktion geschrieben, die per Transaktion Änderungen in einer DWG-Datei vornimmt. Wenn ich die Funktion direkt per Kommando aufgerufen habe, klappt alles wunderbar! Wenn ich sie allerdings von einem modalen Fenster aus aufgerufen habe, gab es immer eine eLockViolation-Ausnahme:
Eine Ausnahme (erste Chance) des Typs “Autodesk.AutoCAD.Runtime.Exception” ist in AcdbMgd.dll aufgetreten.
Autodesk.AutoCAD.Runtime.Exception: eLockViolation
Zum Glück hat Sebastian eine Lösung im CAD-Forum gefunden:
wenn eine Funktion aus dem Form (eigentlich ohne AutoCAD-Befehl) gestartet wird, dann muss die Funktion dafür das Document vor Zugriff von anderen Befehlen sperren.
Das Sperren passiert mit der LockDocument-Eigenschaft des Dokument-Objektes:
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Public Class TestForm
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim oActiveDoc As Document = Application.DocumentManager.MdiActiveDocument
Using oAcadDocLock As DocumentLock = oActiveDoc.LockDocument
Using oTransaction As Transaction = oActiveDoc.TransactionManager.StartTransaction
'...
'...
'...
oTransaction.Commit()
End Using
End Using
End Sub
End Class
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.EditorInput
Public Class TextAutoCadAddIn
<CommandMethod("test4")> _
Public Sub Test()
Application.ShowModelessDialog(New TestForm())
End Sub
End Class
0 Kommentare
Einen Kommentar hinterlassen