Сегодня попробуем написать приложение, создающее некоторые объекты в Autocad 2012 (2010 или 2011). Приложение будет работать через объектную модель COM.
Создаем приложение Windows Form. Добавляем на форму кнопку, назначаем для кнопки событие button1_Click:
Для того чтобы приведенный ниже код работал, необходимо в проект С# добавить ссылки на 2 библиотеки Автокад. (References –Add references )
Вот один из примеров создания линии, круга и текста. Я долго думал, нужно ли размещать пример кода. Примеров “нагуглить” можно массу. Все-таки решил разместить самый простой пример. Пример “нарыт” где-то на просторах англоязычного интернета (ну совсем жаль было тратить время), текст закомментировал.
Для лучшего понимания кода изучите здесь структуру файла объектную модель Автокада.
Обратите внимание в коде 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);
}
}
}
}
В итоге наблюдаем “красотищу”:
К доступу через COM в серьёзных проектах прибегают не часто, обычно когда нет альтернативы создания/изменения объекта, метода или свойства в .NET.
В одном из следующих постах попробую привести ссылки на доступные в сети ресурсы, которые упрощают разработку приложений под Autocad.
p.s. Проверить версию Автокад можно так: MessageBox.Show(acadApp.Version);
Vadim Semenov(с) 2012. Email: 5587394@mail.ru
Комментариев нет:
Отправить комментарий