Управляемая альтернатива ExplodeAllProxy
Андрей Бушман у себя на сайте опубликовал код, решающий те же задачи, что и знаменитый ExplodeAllProxy от Александра Ривилиса. Пользуясь выцыганенным у Андрея разрешением, публикую мои изменения его кода.Показ модальных и немодальных HTML страниц в AutoCAD
Начиная с AutoCAD 2014 появились два новых API для показа HTML-страниц в AutoCAD за счет небольших дополнений к существующим API:
Отслеживание меток примитивов в команде БЛОКРЕД
Метки примитивов в AutoCAD являются уникальными внутри базы, но AutoCAD может их менять, при этом оставляя их уникальными. Редактирование блока при помощи команды БЛОКРЕД (BEDIT) – это одна из операций, когда можно ожидать что метки примитивов будут меняться. Если ваш код хранит значений меток примитивов внутри BlockTableRecord, вам может быть интересным отследить изменение значений меток примитивов при редактировании блока.
Выбор примитивов для изменения свойств
Чтобы выбрать примитивы и оставить видимыми свойства выбранных примитивов в Панели Свойств необходимо вашей команде установить флаг CommandFlags.Redraw. Это гарантирует то, что AutoCAD оставит выбранные примитивы подсвеченными. После этого вы можете изменить их общие свойства по своему разумению. Далее небольшой фрагмент кода для выбора всех примитивов:Установка прозрачности слоя в .NET
Слою можно назначить (начиная с версии AutoCAD 2011) прозрачность при помощи диалога команды слой.
Это пример того, как можно достигнуть такого же результата при помощи AutoCAD .Net API.
Перед тем как попробовать этот код не забудьте установить системную переменную TRANSPARENCYDISPLAY в 1.
Быстрое получение количества примитивов в Пространстве Модели
LINQ предлагает легкий способ нахождения числа примитивов в Пространстве Модели без итерации по ней. Интерфейс IEnumerator обеспеченный классом BlockTableRecord может быть приведён к IEnumerable<ObjectId> для подсчета количества. Ниже пример кода :Получение свойств и методов класса ActiveX/COM из .NET
Если вы используете COM-интерфейс AutoCAD или Inventor из .NET-приложения и хотите найти какие свойства и методы есть у объектов, то почитайте прекрасную статью (на английском), которая показывает, как это следует делать. Этот метод работает даже если ваш проект не ссылается на соответствующую библиотеку или сборку и вы используете позднее связывание:Получение информации о типе имеющих IDispatch-интерфейс COM-объектов из управляемого кода
Просмотр чертежа в WPF палитре
Как мы уже знаем пример BlockView.Net демонстрирует использование Графической системы для просмотра чертежа на форме Windows. Этот пример для версии AutoCAD 2015 доступен здесь: http://adn-cis.org/izmeneniya-v-grafike-v-autocad-2015.htmlСвязывание клавиши помощи F1 с кнопкой на Ленте
Вопрос:Я хотел бы, чтобы показывался мой chm-файл при нажатии клавиши F1 когда в подсказке кнопки на ленте появляется сообщение "Нажмите F1 для получения дополнительной справки.". Можно посмотреть пример как это сделать?
Ответ:
Свойства "HelpSource" и "HelpTopic" класса RibbonItem должны быть установлены для того, чтобы AutoCAD показал ваш chm-файл. "HelpSource" - это Uri к chm-файлу, а "HelpTopic" – это идентификатор темы (topic id) страницы в chm-файле.
Ниже кусок кода. Вы должны изменить строки "HelpSource" и "HelpTopic" для указания chm-файла у вас в системе и идентификатора темы в нём. Так же не забудьте подключить "AdWindows.dll" к своему проекту.
Как получить список всех масштабов аннотаций средствами .NET API?Автор: Александр Ривилис
Следующий код на C# показывает как это можно сделать:
Использование .NET API для добавления масштаба аннотаций в чертеж
Следующий код на C# показывает последовательность действий для добавления нового масштаба в список масштабов:Как управлять Параметрами скрытых сообщений в .NETАвтор: Александр Ривилис
Вопрос:
В AutoCAD имеется ряд диалоговых окон, которые имеют метки, предотвращающие повторный вызов этих диалоговых окон в дальнейшем.
Например, диалоговое окно «Ссылки – необработанные файлы ссылок»:
В команде Настройка (OPTIONS) можно управлять видимостью этих диалоговых окон:
А можно ли управлять появлением этих диалоговых окон из AutoCAD .NET API?
Как добавить к Размеру Метку и/или Процент контроля (DIMINSPECT)?Автор: Александр Ривилис
Как добавить к Размеру Метку и/или Процент контроля (DIMINSPECT)?
Вопрос:
Необходимо к размеру в чертеже добавить Метку контроля средствами .NET API. Я прочитал статью Киана Уомсли : http://through-the-interface.typepad.com/through_the_interface/2008/09/more-quiet-comm.html В ней используется командный метод, но он не позволяет присвоить только Метку контроля без Процента контроля.
Ответ:
Есть несколько методов:
Пример использования Автозагрузки для запуска команды в AutoCAD
Инициализация AutoCAD UI из вашего метода .NET Initialize() не рекомендуется. Причина в том, что ваш .NET DLL может быть загружен при старте AutoCAD, и в этот момент определенным подсистемы AutoCAD (например, Лента, Палитры, COM и т.д.) еще не полностью инициализированы и обращение к ним может быть безуспешным.Определение наличия имени приложения в расширенных данных примитива
Вы можете использовать метод GetXDataForApplication класса DBobject для определения наличия имени приложения в расширенных данных (Xdata). Следующий код показывает есть ли расширенные данные приложения "ADSK" у примитива или нет:
Включение шрифтов и других файлов при использовании eTransmit API
Недавно мой коллега спросил меня о возможности найти все шрифты и другие файлы, которые включаются в комплект при использовании eTransmit API. Чтобы сконфигурировать, что именно будет сочтено в качестве зависящих компонентов когда чертеж добавляется в операцию TransmittalOperation, требуется настроить TransmittalInfo.Формы внутри асинхронных команд внутри AutoCAD
Возможно вы уже попробовали очень приятную возможность асинхронного выполнения (async) в .NET 4.5
Когда внутри асинхронной команды AutoCAD 2015 мы используем формы, часто случается, что контекст синхронизации не восстанавливается корректно после закрытия формы. Это часто провоцирует непредсказуемое поведение. Например, результат работы Editor.WriteMesage не отображается в командной строке.
Простейший способ обойти эту проблему – это сохранить текущий контекст перед показом формы и восстановить его после закрытия формы.
Мультивыноска может привести к исключению eInvalidContext
Примитив MLeader (и эквивалентный ему AcDbMLeader in C++) поддерживает возможность использования блока в качестве текстового компонента, как описано в предыдущей статье. Один из необходимых шагов – это установка свойства BlockPosition (или setBlockPosition в C++), но это может привести к исключению eInvalidContext.Как создать мультивыноску в .NET?
Ниже два примера, которые иллюстрируют создание мультивыноски (MLeader) в C#.Удаление кнопок с панели быстрого доступа убивает AutoCAD
Если вы добавляете кнопки ленты на панель быстрого доступа AutoCAD (ПБД) убедитесь, что вы обеспечили уникальный ID для кнопки. Если у кнопки нет уникального ID, тогда AutoCAD может аварийно завершиться при скрытии/удалении любой другой стандартной кнопки ПБД.