785.93K
Category: programmingprogramming

Введение в .NET API. Модуль 1

1.

Программирование в nanoCAD, .NET API
Модуль 1
Введение в .NET API

2.

На кого рассчитан курс?
1. Вы умеете работать с nanoCAD как пользователь
2. Вы знаете C#

3.

Рассматриваемые вопросы
1. Виды API nanoCAD взаимосвязь
2. .NET API, создание проекта
3. Ввод данных, ключевые слова
4. Выбор, наборы выбора, приведение типов
5. Простейшие преобразования объектов

4.

Зачем нужен программный интерфейс в САПР?
Основные типы программ
1. Создание (генерация) чертежей
2. Проведение расчетов
3. Создание интеллектуальной модели

5.

Что такое модель?
Википедия: Моде́ль (фр. modèle, от лат. modulus — «мера,
аналог, образец») — это упрощенное представление
реального устройства или протекающих в нем
процессов, явлений.
Одни и те же системы могут иметь много разных видов моделей,
которые предназначены для решения некоторой конкретной
задачи.
Модель не обязательно трехмерна!
Противопоставление двумерного черчения трёхмерному
моделированию – во многом маркетинг.

6.

Сложно ли подвинуть стену?
Угол сюда
Баба Яга

7.

Одна операция: с приложением и без
План начерчен отрезками
План начерчен стенами, окнами,
дверями приложения
nanoCAD СПДС
525 отрезков
4 стены, 2 окна, 1 дверь

8.

Диаграмма API
Все виды API написаны на С++
ActiveX
.NET
NRX
LISP
MultiCAD.NET
nanoCAD native API

9.

Простейший чертёж
Создадим чертёж, состоящий из единственного отрезка из точки
(0, 0) в точку (100, 100)
Мышь:
Клавиатура:

10.

Программное создание отрезка: LISP

11.

Программное создание отрезка: ActiveX
JScript:
VBScript:

12.

Программное создание отрезка: .NET

13.

Программное создание отрезка: MultiCAD.NET

14.

Программное создание отрезка: C++

15.

Что такое .NET приложение nanoCAD?
1. Управляемая сборка (.NET DLL-библиотека)
2. Зависит от hostmgd.dll, hostdbmgd.dll
3. Команда: публичный метод, маркированный атрибутом
Teigha.Runtime.CommandMethodAttribute

16.

Первая команда на .NET

17.

Загрузка приложения в nanoCAD
Основной: команда
APPLOAD.
Поддерживается также
AutoCAD-совместимый
вариант: команда
NETLOAD.
! Битность
загружаемых
приложений должна
совпадать с битностью
nanoCAD.

18.

Автозагрузка приложения в nanoCAD
1. «Чемодан» команды
APPLOAD
2. Ключ -g командной
строки ncad.exe
3. Секция [\NetModules]
файла ncad.ini или
пользовательского
nApp.ini

19.

Сравнение .NET API nanoCAD с .NET API AutoCAD
nanoCAD
AutoCAD
Библиотеки
hostmgd.dll,
hostdbmgd.dll
AcCoreMgd.dll,
AcDbMgd.dll,
AcMgd.dll
Корневое
пространство
имён
В hostmgd.dll – HostMgd,
в hostdbmgd.dll - Teigha
Autodesk.AutoCAD

20.

Соответствие .NET API nanoCAD с .NET API AutoCAD:
Autodesk.AutoCAD
HostMgd
ApplicationServices
ApplicationServices
Teigha
Colors
Colors
DatabaseServices
DatabaseServices
EditorInput
EditorInput
Geometry
Geometry
GraphicsInterface
GraphicsInterface
GraphicsSystem
GraphicsSystem
Internal
Internal
LayerManager
LayerManager
PlottingServices
PlottingServices
Publishing
Publishing
Runtime
Runtime
Windows
Windows
Runtime

21.

Обобщённая структура библиотеки hostmgd.dll
Пространство имен
HostMgd
Пространство имен
Пространство имен
Пространство имен
Пространство имен
ApplicationServices
EditorInput
Runtime
Windows
Класс
Класс
Класс
Класс
Application
Editor
Convertor
Palette
Класс
Группа классов
DocumentCollection
Jig..
Класс
Группа классов
Document
Prompt..

Группа классов
Selection..


Класс
PaletteSet


22.

Обобщённая структура библиотеки hostdbmgd.dll
Пространство имен
Teigha
Пространство имен
Пространство имен
Пространство имен
Пространство имен
DatabaseServices
Geometry
GraphicsInterface
Runtime
Класс
Группа классов
Класс
Класс
SymbolTable
Curve…
WorldGeometry
CommandMethod
Класс
Группа классов
Класс
Класс
DBDictionary
Line…
SubEntityTraits
Overrule
Класс
Группа классов
DBObject
Point…

Группа классов
Vector…


Класс
RXObject


23.

Ищите // TODO:
Упражнения в коде отмечены комментарием
// TODO:

24.

Hello. Запуск первых команд
Упражнение 1.1:
Доработать пример Samples\Module1\HelloDotNET.cs и выполнить сборку
библиотеки HelloDotNET.dll:

TODO 1.1.1: Вывести сообщение "Добро пожаловать в управляемый
код nanoCAD!".

TODO 1.1.2: Запросить у пользователя строку при помощи
GetString().

TODO 1.1.3: Добавить запрос целого числа с ключевыми словами.
Загрузить HelloDotNET.dll в nanoCAD
Выполнить команду HELLO

25.

Вывод сообщения в командную строку ( TODO 1.1.1)
Для назначения имени команды используется атрибут
[CommandMethod].
Для вывода сообщения используется функция WriteMesage().

26.

Ввод данных
Для добавления в команду Hello вызова различных методов
используется функция ed.GetXXX("Введите XXX: ");
Примеры методов:
Editor.GetAngle() – запрос угла
Editor.GetCorner() – запрос угла (прямоугольника)
Editor.GetDistance() – запрос длины
Editor.GetDouble() – запрос вещественного числа
Editor.GetInteger() – запрос целого числа
Editor.GetPoint() – запрос точки
Editor.GetString() – запрос строки

27.

Ввод данных. Параметры ввода (TODO 1.1.2)
На примере Editor.GetString()
Дополнительно: Исследовать другие свойства классов
PromptStringOptions, PromptResult.
(F12 или Go To Definition в правокнопочном меню)

28.

Ключевые слова (TODO 1.1.3)
Каждый метод GetXXX() поддерживает работу с ключевыми
словами*, включая значения по умолчанию:
* кроме метода GetString().
Метод GetKeyword()– только ключевые слова.
Упражнение (TODO 1.1.3): добавить запрос целого числа, добавить
ключевые слова, обработать статус PromptStatus.Keyword.

29.

Создание отрезка
Команда: LINE 0,0 100,100
Что под капотом?
1.
2.
3.
4.
5.
Транзакции
Handle и ObjectId
Открытие объектов чертежа
Получение блока «ModelSpace»
Создание объектов, добавление их в чертёж

30.

Транзакции
Транзакции объединяют несколько операций по изменению базы
данных чертежа в единую атомарную операцию по принципу «все
или ничего».
Добавление объектов в чертеж, редактирование объектов чертежа
производятся при помощи транзакций.
Transaction.AddNewlyCreatedDBObject(object) –
добавление объекта (ранее добавленного в чертёж) в транзакцию.
Transaction.GetObject(objectId, OpenMode.ForRead) –
открытие объекта базы данных.

31.

Handle и ObjectId
Handle – порядковый номер объекта в базе данных чертежа.
Уникален в пределах чертежа, сохраняется в .dwg- или .dxf-файле.
ObjectId – адрес служебной части объекта в памяти. Уникален в
пределах сессии (от запуска до закрытия ncad.exe). После
переоткрытия чертежа принимает другие значения. При
сохранении в .dwg/.dxf файл прозрачно транслируется в Handle.
Handle неудобен тем, что не содержит информации о том, в каком
из открытых чертежей находится объект. ObjectId эту
информацию содержит.
По ObjectId можно получить Handle объекта.

32.

Handle и команда LIST
Команда LIST выводит значение Handle.Value (строка
«Указатель:») в 16-ричной системе счисления.
В интерфейсе nanoCAD значение Handle отражается в Диспетчере
чертежа в 10-тичной системе счисления.

33.

Открытие объектов чертежа
Transaction.GetObject(objectId, OpenMode.ForRead)–
открытие объекта базы данных на чтение. При попытке изменить
объект возникает исключение.
Transaction.GetObject(objectId, OpenMode.ForWrite) –
открытие объекта базы данных на запись. Можно и изменять, и
читать данные объекта.
Зачем открывать объект на чтение, если всегда можно открывать
на запись?
При открытии объекта на запись его текущее состояние
записывается в UNDO, а на это требуются память и время. Если
объект не был изменен, память и время потрачены впустую.

34.

Блок «ModelSpace»
Пространство модели в базе данных чертежа представлено
блоком со служебным именем «ModelSpace».
Для того чтобы добавить в пространство модели какой-либо
примитив, блок модели нужно открыть на запись.

35.

Создание отрезка
Алгоритм:
1. Стартовать транзакцию
2. Открыть блок «ModelSpace» на запись
3. Создать отрезок, добавить его в блок и транзакцию:
4. Сохранить транзакцию
Упражнение (TODO 1.2.1, 1.2.2, 1.2.3): заменить Commit() на
Abort(), проверить, создаётся ли отрезок.

36.

Объекты и примитивы
Объект (DBObject) может быть как графическим, так и
неграфическим. Например, отрезок, словарь, блок.
Примитив (Entity) является расширением (наследником) класса
DBObject и всегда содержит графику.
Все привычные элементы чертежа (отрезки, дуги, полилинии,
стены, поверхности, 3D-тела) являются примитивами (Entity).

37.

Выбор примитивов
Выбор примитивов производится при помощи метода
Editor.GetSelection().
Полученный набор выбора, объект типа SelectonSet, – это
коллекция одного или нескольких ObjectId выбранных объектов.

38.

Изменение выбранных примитивов
Алгоритм изменения объектов (TODO 1.3.1):
1. Перебрать содержимое набора выбора
2. Открыть объект по ObjectId
3. Привести объект к нужному типу (Entity или его наследника)
4. Изменить данные

39.

Аффинные преобразования примитивов
Для аффинных преобразований примитива, т.е. для изменения его
основных геометрических свойств (положение, размер, отражение
и поворот в пространстве), в классе Entity существует метод
Entity.TransformBy(mat):
Упражнение (TODO 1.3.2): Доработать команду HelloSelect,
переместить выбранные примитивы на 100 по X и на 100 по Y.
Проверку работы проведите на ломаной линии (несколько
последовательных линий).

40.

Резюме
1. Написана первая команда на .NET.
2. Рассмотрены методы ввода Editor.GetXXX().
3. Рассмотрена процедура создания и редактирования
примитивов в чертеже.
ВОПРОСЫ?

41.

Бонус
TODO B1.1 (HelloDotNET.cs): Добавить в команду создания отрезка
запрос первой и второй точки.
TODO B1.2 (HelloDotNET.cs): Добавить в команду редактирования
примитивов ключевые слова
Перемещение/Поворот/Масштабирование/Зеркало.
TODO B1.3: Создать проект .NET приложения с нуля.
English     Русский Rules