![]() |
+7 (495) 229-0436 | ![]() |
shopadmin@itshop.ru | 119334, г. Москва, ул. Бардина, д. 4, корп. 3 | ![]() |
![]() |
![]() |
|
|
Первый опыт написания плагинов для Autocad на C#31.07.2013 10:55
Namolem
Я начинающий разработчик, "школьный" уровень знания С++, небольшой (2 года) опыт программирования на С#, нулевой опыт работы в автокаде
Пишу эту статью, чтобы:1. Разложить у себя в голове по полочкам, что я узнал об Autocad.
Начало работы. Создание плагина.Создаем проект C# по шаблону ClassLibrary
Создаем класс, который что-то делает:
Наследование от IExtensionApplication необязательно, Autocad автоматически подцепит все public классы в библиотеки, но, как мне сказали, так будет быстрее. Плюс можно контролировать Initialize/Terminate плагина. Компилируем, запускаем автокад, загружаем плагин командой netload (открывается окно выбора managed dll)
Структура Autocad приложения:То, что мы видим на экране, графические объекты, унаследованные от Entity
Идентификаторы объектов
Подробнее: Handles are persistent between AutoCAD sessions, so they are the best way of accessing objects if you need to export drawing information to an external file which might later need to be used to update the drawing. The ObjectId of an object in a database exists only while the database is loaded into memory. Once the database is closed, the Object Ids assigned to an object no longer exist and maybe different the next time the database is opened.
Работа с базой данныхОбычно работа с базой идет с помощью транзакции. Объекты запрашиваются из базы данных, изменяются и commit'ом транзакции сохраняются обратно
Пример получения объекта Polyline по его ObjectId
Транзакции могут быть вложенными, при отмене верхнеуровневой транзации отменяются и все дочерние. Иллюстрация
UPDATE: Как мне подсказали в комментариях, предпочтительнее всегда вызывать transaction.Commit(), кроме случаев, когда нужно отменить транзакцию. Если транзакция не коммитится, автоматически вызывается transaction.Abort(), влекущий за собой дополнительные расходы.
СловариСловари я использовал для сохранения своих данных в DWG, чтобы не создавать лишних файлов NamedObjectDictionary - глобальный словарь рисунка. Создается автоматически при создании документа. ExtensionDictionary - словарь, свой для каждого объекта, его нужно создавать вручную.
Пример записи и получения строкового значения из ExtensionDictionary
Работа с глобальным словарем почти такая же, только объект DBDictionary получается так:
С чем я еще столкнулся
1. Автозагрузка плагина
2. Debug
3. Отправка команды в Editor
4. Выбор объектов пользователем
Получение пути к папке документа
И еще полезные отрывки кода:
Изменение координат полилинии (метод расширения)
Получение координат полилинии (метод расширения):
Полезные ссылки1. AutoCAD .NET Developer's Guide Ссылки по теме |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
О нас |
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.
На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям. Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе. В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.
|
119334, г. Москва, ул. Бардина, д. 4, корп. 3 +7 (495) 229-0436 shopadmin@itshop.ru |
|
© ООО "Interface Ltd." Продаем программное обеспечение с 1990 года |