0

私はこのプロジェクトに取り組んでいます。.NetEXEはAutoCADを起動し、いくつかのコードを実行します。グーグルした後、ここに私が持っているオプションがあります:

a)Activator.CreateInstance
b)Process.Start

b)を使用すると、AutoCADの起動後にコードを制御するのが困難になります。したがって、a)が唯一の選択肢です。クライアントのマシンには、複数のAutoCADがインストールされていて、バージョンが異なり(2008、2009、2010、2011など)、好みが異なる(AutoCAD Vanilla、AutoCAD Map、AutoCAD Architectureなど)可能性があります。別のバージョンについては、2008年のAutoCAD.Application.17.1のように、バージョン番号を追加できます。今では、別の好意が、理解する必要がある唯一の問題です。たとえば、AutoCADMapとAutoCADArchitectureがマシンにインストールされています。それらは別のフォルダにあります。Activator.CreateInstanceは、常に最新の実行中のものを開始します。AutoCAD Architectureを使用している場合でも、exeファイルでAutoCADMapを起動する方法。

4

2 に答える 2

1

AutoCAD Mapの場合、プログラムIDとしてAutoCADMap.Applicationを使用できると思います。ACAの場合、AecX.AecArchBaseApplicationである必要があります

于 2012-06-07T07:21:35.720 に答える
1

プログラムIDとそのバージョンを指定して、特定のAutoCADバージョンを開始できます。

    private void addCircleToACAD_Click(object sender, EventArgs e)
    {
        AcadApplication acadApp = null;
        AcadCircle circle = null;
        AcadAcCmColor color = null;
        try
        {
            object obj = Marshal.GetActiveObject("AutoCAD.Application.18");
            if (obj != null)
            {
                acadApp = obj as AcadApplication;
                double[] cen = new double[] { 0, 0, 0 };
                circle = acadApp.ActiveDocument.Database.ModelSpace.AddCircle(cen, 10);
                color = acadApp.GetInterfaceObject("Autocad.AcCmColor.18") as AcadAcCmColor;
                color.SetRGB(50, 150, 250);
                circle.TrueColor = color;
                acadApp.ZoomExtents();
            }
            else
            {
                MessageBox.Show("AutoCAD is not open or version is not right.");
            }
        }
        catch
        {
            MessageBox.Show("AutoCAD is not open or version is not right.");
        }
        finally
        {
            if (color != null) Marshal.FinalReleaseComObject(color);
            if (circle != null) Marshal.FinalReleaseComObject(circle);
            if (acadApp != null) Marshal.FinalReleaseComObject(acadApp);
        }
    }
于 2012-06-10T08:21:01.257 に答える