0

我正在处理这个项目,.Net EXE 将启动 AutoCAD 并运行一些代码。谷歌搜索后,我有以下选项:

a) Activator.CreateInstance
b) Process.Start

如果我使用 b),AutoCAD 启动后很难控制代码。所以 a) 是唯一的选择。在我客户的机器上,可能安装了多个 AutoCAD,不同的版本(2008、2009、2010、2011 等)、不同的偏好(AutoCAD Vanilla、AutoCAD Map、AutoCAD Architecture 等)。对于不同的版本,我可以添加版本号,如 AutoCAD.Application.17.1 为 2008。现在不同的喜好是我需要弄清楚的唯一问题。例如,我的机器上安装了 AutoCAD Map 和 AutoCAD Architecture。它们位于不同的文件夹中。Activator.CreateInstance 总是启动最近运行的一个。即使我只使用 AutoCAD Architecture,如何在我的 exe 中启动 AutoCAD Map。

4

2 回答 2

1

For AutoCAD Map, I think you can use AutoCADMap.Application as program ID. For ACA, it should be 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 回答