Когда метод IsEffectivelyErased возвращает True
Для объектов, которые содержатся в базе данных и которые не были сами удалены может быть три причины по которым isEffectivelyErased() может вернуть true:
Создание блока с многострочным определением атрибута
Это пример кода, который создает определение блока с многострочным определением атрибута, а затем создает вставку блока из определения блока.
Где находятся сборки COM взаимодействия (Interop) ?
Начиная с AutoCAD 2013 мы прекратили регистрацию сборок взаимодействия с COM AutoCAD в Глобальном кэше сборок (GAC). Мы продолжаем поставлять их в составе ObjectARX SDK.Правильный путь использования этих сборок следующий:
Нахождение примитивов под курсором в момент выбора примитивов
Функция обратного вызова PointMonitor в .Net позволяет получить доступ к примитивам, находящимся внутри апертуры курсора, когда пользователь наводит мышь, однако эта возможность заблокирована в момент, когда выполняется Editor.GetEntity.
Существует обходной путь для этой ситуации, который использует P/Invoke для вызова ряда методов ObjectARX. Ниже приводится пример на C#.
Получение вложенных примитивов под апертурой курсора с использованием .NET API
Некоторое время назад мне был задан вопрос членом ADN о возможности в реальном времени получать примитивы внутри апертуры курсора, когда пользователь перемещает указатель мыши. Вопрос не сложен пока нас не интересуют вложенные объекты, такие как объекты во внешних ссылках…
Получение примитивов в указанной точке к сожалению не обеспечивается управляемым (.NET) кодом, так что нам придется использовать P/Invoke, и в частности, функции acedSSGet and acedSSName с опцией “:N”. Но эти функции не возвращают вложенные примитивы, а основные как например вставку блока. Чтобы получить вложенные примитивы требуется вызов acedSSNameX, и сигнатура этого метода не слишком интуитивна для вызова P/Invoking из .Net: требуется объявление структуры “resbuf”, а также кусок небезопасного кода для того чтобы сопоставить управляемые и неуправляемые объекты.
Включение/выключение привязок
Чтобы включить или выключить привязку во время выполнения кода достаточно установить системную переменную SNAPMODE в 1 или 0.Как получить список канонических имен для плоттера?
Следующий код позволяет получить правильный размер листа, определенный в диалоге параметров листа.Как оставить видимыми элементы Ленты во время выполнения?
AutoCAD API для работы с Лентой - достаточно удобен для настройки интерфейса. Однако изменения в интерфейсе не являются постоянными. Это значит, что есть ситуации когда требуется дополнительный код для того, чтобы элементы Ленты, созданные через этот API, оставались видимыми: обычно это при переключении Рабочего пространства или когда что-то изменено в командах НПИ (_CUI) и БЫСТРНПИ (_QUICKCUI).Вот как можно оставить эти элементы видимыми и убедиться, что ваша Лента остается видимой.
Как реализовать Windows хук с использованием acedRegisterFilterWinMsg в .NET
Имеется возможность установить хук для сообщений Windows, который на низком уровне перехватывает события в системе, которые производят большинство действий, таких как движение мыши или открытие диалога.Внутри AutoCAD есть специальный метод для этой цели, который не пересекается со встроенными возможностями Windows, но имеет похожие возможности: acedRegisterFilterWinMsg
Использование стандартных диалогов AutoCAD для выбора цвета, типа линии, веса линии в .NET
AutoCAD имеет ряд удобных диалоговых окон, доступных в пространстве имен "Autodesk.AutoCAD.Windows". Следующий код показывает, как использовать три из них, в частности: ColorDialog, LinetypeDialog и LineWeightDialog. Эти три класса позволяют очень легко реализовать пользовательский интерфейс выбора соответствующих свойств.Внутренние имена функций в утилите DependencyWalker
Утилита Dependency Walker, доступная www.dependencywalker.com, является “бесплатной утилитой, которая (…) выводит список всех функций, которые экспортируются модулем, и которые могут вызываться другими модулями”.Для нас это представляет интерес для программирования AutoCAD так как некоторые API недоступны и/или недокументированы, но экспортируются из кода на C++. В этом случае в .NET для вызова этого кода нужно воспользоваться атрибутом DllImport.
Программное определение дублированных имен .NET команд
Неприятен факт связанный с атрибутом CommandMethod в AutoCAD .NET сборке: в нем может быть две разных команды имеющих одно имя но разные методы. Например, как в следующем коде:Гиперссылки для атрибутов блоков
В настоящее время гиперссылка для вставки блока не отображается в атрибутах этой вставки блока. Единственный способ, чтобы у атрибутов отображалась гиперссылка – это установить эту гиперссылку для всех атрибутов этого блока, как показано в следующем коде.Получение/установка путей изображений с помощью .NET API
Для получения и установки путей к файлу изображения используются свойства SourceFileName и ActiveFileName объекта RasterImageDef.Вот пример кода изменяющий пути к файлу изображения