вторник, 30 октября 2012 г.

Autocad и Visual C# для чайников: Создание графических объектов в Autocad (линий, текста и т.д.). Практика. Доступ через COM.

Сегодня попробуем написать приложение, создающее некоторые объекты в Autocad 2012 (2010 или 2011). Приложение будет работать через объектную модель COM.
Создаем приложение Windows Form. Добавляем на форму кнопку, назначаем для кнопки событие button1_Click:
image
Для того чтобы приведенный ниже код работал, необходимо в проект С# добавить ссылки на 2 библиотеки Автокад. (References –Add references )
image
Вот один из примеров создания линии, круга и текста. Я долго думал, нужно ли размещать пример кода. Примеров “нагуглить” можно массу. Все-таки решил разместить самый простой пример. Пример “нарыт”  где-то на просторах англоязычного интернета (ну совсем жаль было тратить время), текст закомментировал.
Для лучшего понимания кода изучите здесь структуру файла объектную модель Автокада.
Обратите внимание в коде AutoCAD.Application.18 – это версия Autocad 2012, если вы используете другую версию, измените цифру 18:

using System;
using System.Windows.Forms;
using Autodesk.AutoCAD.Interop;
using Autodesk.AutoCAD.Interop.Common;
using System.Runtime.InteropServices;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
       
  // Создаем объект приложения 
    AcadApplication acadApp = null;
            try
            {
               //Создаем графические примитивы
object obj = Marshal.GetActiveObject("AutoCAD.Application.18");
                if (obj != null)
                {
                   
        //Создаем объекты линия, круг, текст
                    AcadLine line = null;
                    AcadCircle circle = null;
                    AcadText text = null;           
 
                    acadApp = obj as AcadApplication;
                 
 
                    
                    double[] T1 = new double[] { 10, 10, 0 };
                    double[] T2 = new double[] { 200, 200, 0 };
                    double[] T3 = new double[] { 200, 10, 0 };
                    double[] T4 = new double[] { 15, 200, 0 };
                      //”Чертим” графические примитивы:                 
line = acadApp.ActiveDocument.Database.ModelSpace.AddLine(T1, T2);
circle= acadApp.ActiveDocument.Database.ModelSpace.AddCircle(T3, 100);
text=acadApp.ActiveDocument.Database.ModelSpace.AddText("это текст !", T4, 100);
                   //Выполняем Zoom all
                    acadApp.ZoomAll();
                }
       else  // Если не удалось создать  примитивы:
            {   
      MessageBox.Show("AutoCAD is not open or version is not right.");
            }
            }
            catch
            {
                MessageBox.Show("AutoCAD is not open or version is not right.");
            }
            finally
            {
               
           if (acadApp != null) Marshal.FinalReleaseComObject(acadApp);
            }
             
 
        }
    }
}
 

В итоге наблюдаем “красотищу”:

image

К доступу через COM в серьёзных проектах прибегают не часто, обычно когда нет альтернативы создания/изменения объекта,  метода или свойства в .NET.

В одном из следующих постах попробую привести ссылки на доступные в сети ресурсы, которые упрощают разработку приложений под Autocad.

p.s. Проверить версию Автокад можно так:  MessageBox.Show(acadApp.Version);


image


Vadim Semenov(с) 2012. Email: 5587394@mail.ru


Комментариев нет:

Отправить комментарий