Как экспортировать файлы DWG в изображения, используя AutoCad API с C#?
1 ответ
Чтобы удовлетворить требования вашего поста, вы можете выбрать сторонние плагины (которые позволяют экспортировать DWG-файлы в PNG, JPG и т. Д.) И связать выбранный плагин с вашим решением Visual Studio, чтобы позволить вам экспортировать DWG-файлы в PNG, JPG и т. Д... Однако, с точки зрения Autodesk, рекомендация всегда будет заключаться в том, чтобы использовать API, чтобы вы могли разрабатывать плагины и / или выполнять свои требования с помощью API; Я особенно предпочитаю пойти и испортить собственные решения производителя, а затем подумать об использовании стороннего решения. Стоит отметить, что я являюсь разработчиком и разрабатываю плагины для программного обеспечения AutoCAD, но я не из Autodesk, и я не побеждаю сегодня, чтобы защитить эту точку зрения.
Единственные аспекты, которые являются разделителями в вашем выборе, это знать, связаны ли DWG с серверов баз данных или нет. И в случае, если DWG не зависят от сервера баз данных, если сторонний плагин бесплатный или вам нужно заплатить, чтобы воспользоваться необходимыми вам функциями.
Вот пример кода, который я использую для управления AutoCAD через внешнее приложение (проект консольного приложения); Autodesk разрабатывает свои продукты с использованием также интерфейсов COM, что позволяет нам, разработчикам, использовать функции, присущие программам Autodesk, которые могут выполняться внешним приложением. В приведенном ниже коде откройте приложение AutoCAD по идентификатору вашей программы и выполните итерацию всех файлов DWG с помощью встроенной команды с именем JPGOUT.
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, всегда будет возникать исключение);
б) Создать проект Visual Studio типа Console Application со встроенной архитектурой обработки x64;
c) Добавьте ссылки "C: \ ProgramFiles \ Autodesk \ AutoCAD 20XX \ Autodesk.AutoCAD.Interop.dll" и "C: \ ProgramFiles \ Autodesk \ AutoCAD 20XX \ Autodesk.AutoCAD.Interop.Common.dll";
Вот и все.
Упомянутые вами DLL и код используются для создания плагинов для AutoCAD.
Вы можете создавать изображения (PNG или другие), используя такой код: http://through-the-interface.typepad.com/through_the_interface/2007/04/taking_a_snapsh.html
Но вам может понадобиться начать работу с API, см. Базовое руководство по адресу http://www.autodesk.com/myfirstautocadplugin