如何使用带C#的AutoCad API将DWG文件导出为图像?
我已安装AutoDesk 2014和VS2012。我已经提到了DLL,也尝试过,但没有成功。我真的需要知道如何将这些文件导出到图像,jpg,png,。。使用C#代码。谢谢 您提到的DLL和代码用于为AutoCAD创建插件 您可以使用以下代码创建图像(PNG或其他):如何使用带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等。。。但
但您可能需要开始使用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");
}
}
}