Startseite

Über Jürgen A. Becker

Impressum

CAD-Dienstleistungen

Schulungsangebot

Archiv für Februar 2010

AutoCAD und .Net-Framework - Wie wird der Optionsdialog innerhalb eines eigenen Formulars aufgerufen? -

Donnerstag, 4. Februar 2010

Der Options-Dialog kann mit Hilfe einer SendCommand-Anweisung aufgerufen werden, da diese Anweisung asynchron aufgerufen wird, wird sie in die Befehls-Warteschlange eingereiht und erst nach Beendung eines aktiven befehls ausgeführt.

Aus diesem Grunde ist es nicht sinnvoll zum Aufruf des Options-Dialoges innerhalb eines eigenen Formulars die SendCommand-Methode oder eine ähnliche zu nutzen.

Im Internal Namespace innerhalb der Klasse Utils befindet sich die Methode:

Autodesk.AutoCAD.Internal.Utils.InvokeOptionsDialog
    ("System", false, 0, false);

Diese Methode ruft den Optionsdialog auf.
Die Übergabe-Parameter sind nicht klar, da keine Dokumentation zu dieser Klasse zufinden ist.
Der erste Parameter ist der Name des Registers, das beim Aufruf angezeigt werden soll.

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

AutoCAD und .Net-Framework - Eigenes Register im Optionsdialog -

Donnerstag, 4. Februar 2010

Eigene Applikationen sollten soweit wie möglich skalierbar programmiert werden, d.h. Einstellungen für die Applikation (Texthöhen, Layer etc.) sollten innerhalb eines Optionsdialoges definierbar sein.
Vorteilhaft wäre es, wenn der eigene Optionsdialog innerhalb des AutoCAD-Optionsdialoges integriert würde.
Ich möchte hier erläutern wie dieses in .Net zu realisieren ist.

Zunächst wird ein Event initialisert. Dieses Event sorgt dafür, das eine Ereignis-Methode (hier: Application_DisplayingOptionDialog) aufgerufen wird.

Application.DisplayingOptionDialog +=
    new TabbedDialogEventHandler(Application_DisplayingOptionDialog);

Im Folgenden stelle ich den Code vor, der beim Aufruf des Options-Befehls aufgerufen wird. Im Deklarationsbereich muss dazu noch folgende Deklaration vorgenommen werden:

static usrOptions hUSROptions;
private static void Application_DisplayingOptionDialog
    (object sender, TabbedDialogEventArgs e)
{
if (hUSROptions == null) hUSROptions = new usrOptions();
TabbedDialogExtension tde =
    new TabbedDialogExtension(
        hUSROptions,
        new TabbedDialogAction(OnOptions)
    );

    e.AddTab("Eigenes Register", tde);
}

Die Ereignis-Methode, muss in der Initialisierungs-Klasse implementiert werden.
Der folgende Code stellt die Struktur der Initialisierungs-Klasse dar.

public class clsCADBecker : Autodesk.AutoCAD.Runtime.IExtensionApplication
{
  public clsCADBecker () {...}

  public void Initialize()
  {
  Application.DisplayingOptionDialog +=
      new TabbedDialogEventHandler(Application_DisplayingOptionDialog);
   }

  public void Terminate(){...}

  private static void Application_DisplayingOptionDialog
     (object sender, TabbedDialogEventArgs e) {...}

}

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

AutoCAD und .Net-Framework - Aufruf von Befehlen im .Net -

Dienstag, 2. Februar 2010

Ich möchte in diesem Artikeln den Aufruf von AutoCAD-Befehlen innerhalb einer .Net-Applikatoin erläutern. Das Aufrufen kann mit Hilfe unterschiedlichster Methoden geschehen.

  • SendStringToExecute-Methode des managed document object
  • SendCommand-Methode des COM-Dokumenten Objektes
  • acedPostCommand via P/Invoke
  • ads_queueexpr() via P/Invoke

Zunächst ist zweiusings und eine COM Referenzierung zur AutoCAD Type-Library erforderlich.

using System.Runtime.InteropServices;
using Autodesk.AutoCAD.Interop;

Folgende Deklarationen sind

using System.Runtime.InteropServices;
using Autodesk.AutoCAD.Interop;

namespace CADBecker
{
 public class clsCommands
 {
  [DllImport("acad.exe", CharSet = CharSet.Auto,
     CallingConvention = CallingConvention.Cdecl)]
  extern static private int ads_queueexpr(string strExpr);

  [DllImport("acad.exe", CharSet = CharSet.Auto,
     CallingConvention = CallingConvention.Cdecl,
     EntryPoint = "?acedPostCommand@@YAHPB_W@Z")]
  extern static private int acedPostCommand(string strExpr);
 }
}

Methode SendStringToExecute

Hier wird der Options-Dialog aufgerufen.
By the Way: Der Parameter 0 in meinem Bespiel ruft das zuletzt genutzte Register auf.

Document doc = AcAp.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
doc.SendStringToExecute("_+options 0", false, false, true);

Methode SendCommand

Hierbei wird die Methode SendCommand des Objektes ActiveDocument aufgerufen.

AcadApplication App =
  (AcadApplication)Autodesk.AutoCAD.ApplicationServices.Application;
    App.ActiveDocument.SendCommand("_+options 0");

Aufruf von acedPostCommand via P/Invoke

acedPostCommand("_+options 0");

Aufruf von ads_queueexpr() via P/Invoke

ads_queueexpr("(command "" _POINT "" ""4,4,0"")")

Hier finden Sie den Original Artikel Calling AutoCAD commands from .NET von Kean Walmsey’s Through the Interface

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