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

如何使用带C#的AutoCad API将DWG文件导出为图像?,c#,api,export,autocad,dwg,C#,Api,Export,Autocad,Dwg,我已安装AutoDesk 2014和VS2012。我已经提到了DLL,也尝试过,但没有成功。我真的需要知道如何将这些文件导出到图像,jpg,png,。。使用C#代码。谢谢 您提到的DLL和代码用于为AutoCAD创建插件 您可以使用以下代码创建图像(PNG或其他): 但您可能需要开始使用API,请参阅位于的基本教程以满足您的帖子要求,您可以选择第三方插件(允许您将DWG导出到PNG、JPG等),并将所选插件与Visual Studio解决方案相关联,以允许您将DWG导出到PNG、JPG等。。。但

我已安装AutoDesk 2014和VS2012。我已经提到了DLL,也尝试过,但没有成功。我真的需要知道如何将这些文件导出到图像,jpg,png,。。使用C#代码。谢谢

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

您可以使用以下代码创建图像(PNG或其他):


但您可能需要开始使用API,请参阅位于

的基本教程以满足您的帖子要求,您可以选择第三方插件(允许您将DWG导出到PNG、JPG等),并将所选插件与Visual Studio解决方案相关联,以允许您将DWG导出到PNG、JPG等。。。但是,根据Autodesk的观点,建议始终使用API来开发插件和/或通过API实现您的需求;我特别喜欢破坏制造商的原生解决方案,然后考虑使用第三方解决方案。值得一提的是,我是一名开发人员,我为AutoCAD软件开发插件,但我不是来自Autodesk,我今天也没有获胜来捍卫这一观点

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

下面是一个示例代码,我使用它(控制台应用程序项目);由于Autodesk还使用COM接口开发其产品,因此允许美国开发人员使用Autodesk软件固有的功能,这些功能可由外部应用程序执行。在下面的代码窗口中,按程序ID打开AutoCAD应用程序,并使用名为的本机命令迭代抛出所有DWG文件

类程序
{
公共静态void Main(字符串[]args)
{
AcadApplication acAppComObj=null;
//查询您的Regedit计算机\HKEY\U LOCAL\U MACHINE\SOFTWARE\Autodesk\AutoCAD以获得指定版本的正确后缀
常量字符串strProgId=“AutoCAD.Application.20”;
//获取正在运行的AutoCAD实例
尝试
{
acAppComObj=(AcadApplication)Marshal.GetActiveObject(strProgId);
}
catch//如果没有实例正在运行,则会发生错误
{
尝试
{
//创建AutoCAD的新实例
acAppComObj=(AcadApplication)Activator.CreateInstance(Type.GetTypeFromProgID(strProgId),true);
}
抓住
{
//如果未创建AutoCAD实例,则显示消息并退出
System.Windows.Forms.MessageBox.Show(“AutoCAD.Application”的实例”+
“无法创建。”);
返回;
}
}
//显示应用程序
如果(null!=acAppComObj)
{
尝试
{
int i=0;
AcadState-appState=app.GetAcadState();
而(!appState.isquisite)
{
如果(i==120)
{
环境。退出(-1);
}
//等等,25秒
睡眠(250);
i++;
}
app.Visible=true;
var docs=应用程序文档;
新增文件(“acadiso.dwt”);
}
捕获(COMException错误)
{
if(err.ErrorCode.ToString()==“-2147417846”)
{
睡眠(5000);
}
}
捕获(例外情况除外)
{
抛出新的异常(“Falha durante a obtenço do documento ativo.”,ex);
}
}
其他的
{
抛出新异常(“Erro打开第一个文档”);
}
//打开AutoCAD项目文件,如果所有DWG都与具有服务器数据库的AutoCAD项目关联,请使用此代码
#区域“开放项目”
acdocomobj.SendCommand(“FILEDIA”,“0”);
SendCommand(“-OPENPROJECT”,“C:\\\\Users\\\\Documents\\ProjectFolder\\Project.xml”);
acdocomobj.SendCommand(“FILEDIA”,“1”);
#端区
string[]dwgFiles=//要执行的操作:在此处添加列出所有完整路径DWG文件的规则
AcadDocuments docs=应用程序文档;
foreach(dwgFiles中的字符串dwgPath)
{
docs.Open(dwgPath,true);
睡眠(3000);
AcadDocument acadDoc=acAppComObj.ActiveDocument;
acdocomobj.SendCommand(“FILEDIA”,“0”);
SendCommand(“JPGOUT”,“C:\\\\Users\\\\Images\\”+Path.GetFileName(dwgPath)+“.jpg”);
acdocomobj.SendCommand(“FILEDIA”,“1”);
}
}
}
使用此源代码示例的前提(已测试并正在使用):

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

b) 创建具有内置x64处理架构的控制台应用程序类型的Visual Studio项目

c) 添加参考“c:\ProgramFiles\Autodesk\AutoCAD 20XX\Autodesk.AutoCAD.Interop.dll”和“c:\ProgramFiles\Autodesk\AutoCAD 20XX\Autodesk.AutoCAD.Interop.Common.dll”


仅此而已。

您还可以通过代码或脚本调用AutoCAD JPGOUT和PNGOUT命令。
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");
        }
    }
}