Как экспортировать файлы DWG в изображения с помощью AutoCad API с C#?

У меня установлены AutoDesk 2014 и VS2012. У меня уже есть упомянутые DLL здесь, а также попробовал это, но не работает. Мне действительно нужно знать, как экспортировать эти файлы в изображения, jpg, png,.. с помощью кода С#. Спасибо!


person Khiêm Nguyễn    schedule 20.03.2015    source источник


Ответы (2)


Упомянутые библиотеки DLL и код используются для создания плагинов для AutoCAD.

Вы можете создавать изображения (PNG или другие), используя такой код: http://through-the-interface.typepad.com/through_the_interface/2007/04/taking_a_snapsh.html

Но вам может потребоваться начать работу с API, см. базовое руководство по адресу http://www.autodesk.com/myfirstautocadplugin

person Augusto Goncalves    schedule 27.04.2015
comment
Вы также можете вызывать команды AutoCAD JPGOUT и PNGOUT — либо из кода, либо из сценария. - person Stephen Preston; 07.04.2016

Чтобы соответствовать требованиям вашего сообщения, вы можете выбрать сторонние подключаемые модули (которые позволяют экспортировать файлы 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 всегда будет вызывать исключение);

b) Создать проект Visual Studio типа Консольное приложение со встроенной архитектурой обработки x64;

в) Добавьте ссылки "C:\ProgramFiles\Autodesk\AutoCAD 20XX\Autodesk.AutoCAD.Interop.dll" и "C:\ProgramFiles\Autodesk\AutoCAD 20XX\Autodesk.AutoCAD.Interop.Common.dll";

Это все.

person Antonio Leonardo    schedule 03.06.2019