Startseite

Über Jürgen A. Becker

Impressum

CAD-Dienstleistungen

Schulungsangebot

AutoCAD und .Net-Framework: Events im AutoCAD

Im 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.

#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

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.
#region DocumentEvents
     hDoc.CommandEnded +=
       new CommandEventHandler(hDoc_CommandEnded);         
     hDoc.CommandCancelled +=
       new CommandEventHandler(hDoc_CommandCancelled);
     hDoc.CommandWillStart +=
       new CommandEventHandler(hDoc_CommandWillStart);
   #endregion

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

Document hDoc = (Document)sender;      
   switch(e.GlobalCommandName)
   {
     case "COPY":
      //Do what ever you want  
      break;
   }

Hier der vollständige Code für die Initialisierungs-Klasse

using AcAp = Autodesk.AutoCAD.ApplicationServices.Application;

.
.
.

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

Kommentieren