- PVSM.RU - https://www.pvsm.ru -
В предыдущей [1] статье мы писали о том, как импортировать точки из внешнего текстового файла в .dwg чертеж при помощи классического .NET API. В данной статье мы рассмотрим особенности решения этой же задачи на кросс-САПР-платформенном MultiCAD .NET API и продемонстрируем, как построенное приложение может быть запущено в nanoCAD и в AutoCAD без изменения настроек проекта и перекомпиляции.
Проект создается точно также как и для предыдущего примера:
Все, что необходимо сделать — это всего лишь подключить библиотеку mapimgd.dll, входящую в комплект поставки nanoCAD SDK, начиная с версии 4.0. Конфигурация проекта остается неизменной для разработки приложений, запускаемых как на платформе nanoCAD, так и на других системах, в частности, AutoCAD. Если в предыдущем проекте было две конфигурации — Debug NCAD и Debug ACAD, то в этом будет одна — Debug MultiCAD.
Структура приложения и общий код (форма приложения, организация предварительного просмотра, импорт координат из файла) остаются прежними, классы же Importer
и Creator
, код которых зависил от конкретной платформы, будут изменены.
Так, метод Creator.createPoints()
, отвечающий за непосредственное создание точек для входного массива координат теперь выглядит следующим образом:
public static void CreatePoints(List coords)
{
for(int i = 0; i<coords.Count-2; i += 3)
{
// Create a point object
DbPoint point = new DbPoint();
// Set the position for the point object
point.Position = new Point3d(coords[i], coords[i + 1], coords[i + 2]);
// Add the point entity to the current document
point.DbEntity.AddToCurrentDocument();
}
}
Напомним, как выглядела процедура создания точек ранее, при использовании классического .NET API:
public static void CreatePoints(List coords)
{
DocumentCollection dm = Platform.ApplicationServices.Application.DocumentManager;
Database db = dm.MdiActiveDocument.Database;
using (db)
{
// Create a transaction
using (Transaction tr = db.TransactionManager.StartTransaction())
{
// Get the table block record for current drawing space
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
for (int i = 0; i < coords.Count - 2; i += 3)
{
// Create a point object
DBPoint point = new DBPoint(new Point3d(coords[i], coords[i + 1], coords[i + 2]));
// Append the point to the database
btr.AppendEntity(point);
// Add the object to the transaction
tr.AddNewlyCreatedDBObject(point, true);
}
btr.Dispose();
// Commit the transaction
tr.Commit();
}
}
}
Очевидно, что объем кода, необходимого для реализации этого метода, значительно сократился: для создания объекта, задания координат и добавления в базу потребовалось всего три строки кода! И это еще одна отличительная особенность MultiCAD.NET: помимо решения своей основной задачи — обеспечения кроссплатформенности приложений — MultiCAD.NET API позволяет сделать код приложения гораздо более компактным. Это достигается за счет того, что многие вспомогательные операции уже «встроены» в основную функциональность.
Буквально ненадолго остановимся на процедуре добавления точек на чертеж. Не вдаваясь в подробности (это тема отдельной статьи), заметим, что в MultiCAD API реализовано три уровня геометрии для графических объектов: чистая «математическая» геометрия, геометрия с добавлением основных свойств примитивов: цвет, толщина и стиль линий и др., и уровень объектов базы данных. В нашем случае мы создали стандартный геометрический объект DbPoint
, задали его геометрические параметры и использовали свойство DbEntity
для перехода на уровень базы данных и добавления объекта на чертеж. При этом нет необходимости определять текущее пространство чертежа: метод AddToCurrentDocument()
автоматически определит, какой документ является текущим, и какое рабочее пространство используется в данной момент.
Теперь, когда код скомпилирован и .NET-сборка для приложения построена, самое время поговорить о вариантах запуска приложения под различными системы.
Исходный код проекта доступен здесь [3].
Автор: ISL
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/net/40211
Ссылки в тексте:
[1] предыдущей: http://habrahabr.ru/company/nanosoft/blog/188188/
[2] Клубе разработчиков nanoCAD: http://developer.nanocad.ru
[3] здесь: http://ftp.nanocad.ru/habr/ImportCoords/ImportCoords_MCAD.zip
[4] Источник: http://habrahabr.ru/post/188326/
Нажмите здесь для печати.