AutoCAD und .Net-Framework: Events im AutoCAD
Freitag, 12. März 2010Im heutigen Post möchte ich die Events vorstellen, die bei der Nutzung von eigenen und von AutoCAD-Befehlen interessant sind.
Für mich als CAD-Manager ist es u.a wichtig bestimmte Befehle im AutoCAD vor und nach Ausführung abzufangen, um weiteres zu unternehmen.
Events können auch dazu genutzt werden, ganze Befehle zu verbieten oder zu blocken.
Ich möchte hier die Vorgehensweise schrittweise erläutern.
Schritt 1:
In der Initialsierungs-Klasse, sie hat das Interface Autodesk.AutoCAD.Runtime.IExtensionApplication geerbt, werden die Events
- DocumentLockModeChanged: Wenn ein Befehl aufgerufen wird, wird die Zeichnung gesperrt. Dieses Event kann entsprechend abgefangen werden.
- DocumentCreateStarted: Wird ein Dokument geöffnet oder neu erstellt, wird dieses Event erzeugt. Mit Abfangen dieses Events können Routinen VORM Erstellen des Dokumentes durchlaufen werden.
- DocumentCreated: Dieses Event wird erzeugt, wenn das Dokument geladen wurde. Mit Abfangen dieses Events können Routinen NACH Erstellen des Dokumentes durchlaufen werden.
der DokumentCollection generiert.
DocumentCollection dm = AcAp.DocumentManager;
dm.DocumentCreated +=
new DocumentCollectionEventHandler(dm_DocumentCreated);
dm.DocumentCreateStarted +=
new DocumentCollectionEventHandler
(dm_DocumentCreateStarted);
dm.DocumentLockModeChanged +=
new DocumentLockModeChangedEventHandler
(dm_DocumentLockModeChanged);
#endregion
Schritt 2:
Im zweiten Schritt wird definiert was vor und nach dem Laden eines Dokuments geschehen soll.
Ich möchte hier die Events des Objektes Document erläutern, die etwas mit Befehlen zu tun haben.
- CommandEnded: Wird erzeugt nach Beenden eines Befehls.
- CommandCancelled: Wird erzeugt, wenn der Befehl abgebrochen wurde.
- CommandWillStart: Wird vor der Ausführung des Befehls erzeugt.
In den einzelnen Eventmethoden, werden die Befehlsnamen abgefragt. Der Befehlsname ist die Eigenschaft GlobalCommandName der Event-Argumente (im Beispiel weiter unten die Variable e). Der Befehlsname ist der englische und wird in einer switch-Anweisung verarbeitet.
Das Dokumenten-Objekt ist der Übergabeparameter sender und muss in das Objekt Document gecastet werden.
Beispiel für das Event CommandEnded
switch(e.GlobalCommandName)
{
case "COPY":
//Do what ever you want
break;
}
Hier der vollständige Code für die Initialisierungs-Klasse
.
.
.
public class clsInitialize :
Autodesk.AutoCAD.Runtime.IExtensionApplication
{
public void Initialize()
{
Document hDoc = AcAp.DocumentManager.MdiActiveDocument;
Database hDb = hDoc.Database;
#region Events für die akutelle Zeichnung
hDoc.CommandCancelled +=
new CommandEventHandler(hDoc_CommandCancelled);
hDoc.CommandEnded +=
new CommandEventHandler(hDoc_CommandEnded);
hDoc.CommandWillStart +=
new CommandEventHandler(hDoc_CommandWillStart);
#endregion
#region DatabaseEvents
hDb.BeginSave += new DatabaseIOEventHandler(hDb_BeginSave);
#endregion
#region Events für die DocumentsCollection
DocumentCollection dm = AcAp.DocumentManager;
dm.DocumentCreated +=
new DocumentCollectionEventHandler(dm_DocumentCreated);
dm.DocumentCreateStarted +=
new DocumentCollectionEventHandler
(dm_DocumentCreateStarted);
dm.DocumentLockModeChanged +=
new DocumentLockModeChangedEventHandler
(dm_DocumentLockModeChanged);
#endregion
}
public void Terminate()
{
}
void dm_DocumentLockModeChanged
(object sender, DocumentLockModeChangedEventArgs e)
{
DocumentCollection hDocCol = (DocumentCollection)sender;
switch(e.GlobalCommandName)
{
case "":
break;
}
}
void dm_DocumentCreateStarted
(object sender, DocumentCollectionEventArgs e)
{
}
void dm_DocumentCreated
(object sender, DocumentCollectionEventArgs e)
{
Document hDoc = AcAp.DocumentManager.MdiActiveDocument;
Database hDb = hDoc.Database;
#region DocumentEvents
hDoc.CommandEnded +=
new CommandEventHandler(hDoc_CommandEnded);
hDoc.CommandCancelled +=
new CommandEventHandler(hDoc_CommandCancelled);
hDoc.CommandWillStart +=
new CommandEventHandler(hDoc_CommandWillStart);
#endregion
#region DatabaseEvents
hDb.BeginSave += new DatabaseIOEventHandler(hDb_BeginSave);
#endregion
}
void hDb_BeginSave(object sender, DatabaseIOEventArgs e)
{
}
void hDoc_CommandWillStart(object sender, CommandEventArgs e)
{
Document hDoc = (Document)sender;
switch(e.GlobalCommandName)
{
case "":
break;
}
}
void hDoc_CommandCancelled(object sender, CommandEventArgs e)
{
Document hDoc =(Document)sender;
switch(e.GlobalCommandName)
{
case"":
break;
}
}
void hDoc_CommandEnded(object sender, CommandEventArgs e)
{
Document hDoc =(Document)sender;
switch(e.GlobalCommandName)
{
case"":
break;
}
}
}
Ein Beispiel zeigt der Artikel von Kean Walmsey Blocking AutoCAD commands from .NET.
Viel Spaß beim Ausprobieren
Autor: Dipl.-Ing. Jürgen A. Becker
Kontakt: Juergen.Becker@CAD-Becker.de oder Juergen.Becker@AUGI.COM
- Langjährige Schulungserfahrung
- Autorisierter AutoCAD Trainer (AutoCAD, Mechanical Desktop etc.)
- Software- und Datenbankentwicklung





RSS Feed