如何使用带C#的AutoCad API将DWG文件导出到图像?

时间:2015-03-20 04:14:48

标签: c# api export autocad dwg

我安装了AutoDesk 2014和VS2012。我已经提到了here提到的dll并尝试了this但是没有用。我真的需要知道如何使用C#代码将这些文件导出到图像,jpg,png,..谢谢!

2 个答案:

答案 0 :(得分:0)

您提到的DLL和代码用于为AutoCAD创建插件。

您可以使用以下代码创建图像(PNG或其他):http://through-the-interface.typepad.com/through_the_interface/2007/04/taking_a_snapsh.html

但您可能需要开始使用API​​,请参阅http://www.autodesk.com/myfirstautocadplugin

的基本教程

答案 1 :(得分:0)

为满足您的帖子要求,您可以选择第三方插件(允许您将DWG导出到PNG,JPG等),并将所选插件与Visual Studio解决方案相关联,以允许将DWG导出到PNG, JPG等...但是,从Autodesk的角度来看,建议始终是使用API​​以供您开发插件和/或通过API满足您的要求。我特别喜欢破坏制造商的本机解决方案,然后考虑使用第三方解决方案。值得一提的是,我是一名开发人员,并且为AutoCAD软件开发插件,但是我不是来自Autodesk,而且今天也没有赢得捍卫这一观点的机会。

唯一选择作为分隔符的方面是知道DWG是否从数据库服务器链接。而且,如果DWG独立于数据库服务器,则第三方插件是免费的,或者您必须付费才能充分利用所需的功能。

这是我用于drive AutoCAD through an external application(控制台应用程序项目)的示例代码;随着Autodesk还使用COM接口开发其产品,使我们的开发人员可以使用可由外部应用程序执行的Autodesk软件固有的功能。在下面的代码中,通过您的程序ID打开AutoCAD应用程序,并使用名为JPGOUT的本机命令迭代抛出所有DWG文件。

class Program
{
    public static void Main(string[] args)
    {
        AcadApplication acAppComObj = null;

        //Query your Regedit Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD to get the correctly suffix that specifies the version
        const string strProgId = "AutoCAD.Application.20";

        // Get a running instance of AutoCAD
        try
        {
            acAppComObj = (AcadApplication)Marshal.GetActiveObject(strProgId);
        }
        catch // An error occurs if no instance is running
        {
            try
            {
                // Create a new instance of AutoCAD
                acAppComObj = (AcadApplication)Activator.CreateInstance(Type.GetTypeFromProgID(strProgId), true);
            }
            catch
            {
                // If an instance of AutoCAD is not created then message and exit
                System.Windows.Forms.MessageBox.Show("Instance of 'AutoCAD.Application'" +
                                                     " could not be created.");

                return;
            }
        }

        // Display the application
        if (null != acAppComObj)
        {
            try
            {
                int i = 0;
                AcadState appState = app.GetAcadState();
                while (!appState.IsQuiescent)
                {
                    if (i == 120)
                    {
                        Environment.Exit(-1);
                    }
                    // Wait .25s
                    Thread.Sleep(250);
                    i++;
                }
                app.Visible = true;
                var docs = app.Documents;
                docs.Add("acadiso.dwt");
            }
            catch (COMException err)
            {
                if (err.ErrorCode.ToString() == "-2147417846")
                {
                    Thread.Sleep(5000);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Falha durante a obtenção do documento ativo.", ex);
            }
        }
        else
        {
            throw new Exception("Erro to open first document.");
        }


        // Open AutoCAD project file, use this code if all DWGs is associated with a AutoCAD Project with Server Database
        #region ' Open Project '
        acDocComObj.SendCommand("FILEDIA","0");
        acDocComObj.SendCommand("-OPENPROJECT", "C:\\\\Users\\<username>\\Documents\\ProjectFolder\\Project.xml");
        acDocComObj.SendCommand("FILEDIA","1");
        #endregion

        string[] dwgFiles = //To do: add here the rule that list all full path DWG files
        AcadDocuments docs = app.Documents;
        foreach(string dwgPath in dwgFiles)
        {
            docs.Open(dwgPath, true);
            Thread.Sleep(3000);
            AcadDocument acadDoc = acAppComObj.ActiveDocument;

            acDocComObj.SendCommand("FILEDIA","0");
            acadDoc.SendCommand("JPGOUT ", "C:\\\\Users\\<username>\\Images\\" + Path.GetFileName(dwgPath) + ".jpg");
            acDocComObj.SendCommand("FILEDIA","1");
        }
    }
}

使用此源代码示例的前提(已通过测试并正在使用中):

a)安装了AutoCAD产品(如果您没有许可证,并且将使用学生版来下载2018版本,因为2019具有基于许可证的加密来打开DWG将始终引发异常);

b)创建具有x64处理体系结构的Console Application类型的Visual Studio项目;

c)添加引用“ C:\ ProgramFiles \ Autodesk \ AutoCAD 20XX \ Autodesk.AutoCAD.Interop.dll”和“ C:\ ProgramFiles \ Autodesk \ AutoCAD 20XX \ Autodesk.AutoCAD.Interop.Common.dll”;

就这些。