Как защитить интеллектуальную собственность моего приложения на Autodesk Exchange - часть 2Автор: Daniel Du
Рассматриваются особенности лицензирования веб-служб, опубликованных в Autodesk Apps ExchangeСоздание DWF-подложки в AutoCAD лиспом
Понадобилось мне тут вставить несколько dwf (или dwfx, не столь суть важно) в текущий документ dwg. Естественно, что захотелось мне задачку решить лиспом, да без применения команд типа _.dwfattach.Как защитить интеллектуальную собственность моего приложения на Autodesk Exchange - часть 1Автор: Daniel Du
Рассматриваются особенности лицензирования веб-служб, опубликованных в Autodesk Apps ExchangeМодификация Ленты
Вопрос:Я хочу изменить содержимое Ленты (Ribbon) – добавлять/удалять панели, и т.д.. Как это можно сделать?
Ответ:
Это доступно только при помощи AutoCAD .NET API.
Есть два набора функций:
1) RibbonRuntimeAPI – содержащееся в AdWindows.dll в пространстве имён Autodesk.Windows
Позволяет модифицировать Ленту, но изменения не будут сохраняться в CUIx файл, так что при перезапуске AutoCAD, или даже при переключении рабочего пространства (системной переменной WSCURRENT) или при перезагрузке меню все сделанные вами изменения пропадут и вам понадобится всё повторять.
Как найти все внешние ссылки в текущей базе с помощью C#
Метод Database.GetHostDwgXrefGraph() возвращает иерархию внешних ссылок для текущего чертеж в виде объекта XrefGraph. Ниже простой пример, демонстрирующий его использование – печать структуры этой иерархии для текущего чертежа в командной строке.При использовании WblockCloneObjects скопированные в Пространство Модели примитивы исчезают в текущем чертеже
Это известное поведение метода Database.WblockCloneObjects() когда он используется с чертежом, открытым в AutoCAD. Проделайте следующие шаги для того, чтобы обойти это ограничение:- Сделайте целевой чертеж текущим документом
- Вызовите метод TransactionManager.QueueForGraphicsFlush() для запроса обновления графики
Пожалуйста не забудьте сделать целевой чертеж текущим до использования TransactionManager.QueueForGraphicsFlush() в противном случае это не даст никакого эффекта. Также не забудьте блокировать/разблокировать документ.
Получение глобального имени DIMLDRBLK в локализованной версии AutoCAD
Когда мы используем английскую версию AutoCAD, вы можете непосредственно получить имя системной переменной стрелки выноски, используя системную переменную DIMLDRBLK. Но когда используется локализованная версия AutoCAD, эта системная переменная хранит локализованную системную переменную, например, "Punkt" в немецкой и "Точка" в русской версии для стрелки выноски DOT.
Использование WeakEventManager с событиями AutoCAD
Недавно мы получили вопрос от разработчика об использовании Менеджера Слабых Событий (WeakEventManager) при работе с событиями AutoCAD. В этой статье мы увидим три разных версии подписки на событие завершение команды (CommandEnded) класса Document. Преимущество использования WeakEventManager в предотвращение утечки памяти, когда на событие подписаны, но они уже не нужны. Но при этом использование WeakEventManager имеет свою цену, так как события теперь доставляются через менеждер событий. Дополнительная цена использования шаблона слабых событий отлично расписана в этой статье Reed Copsey.
Рекомендуется отписываться от событий AutoCAD вручную, но следующие образцы кода должны продемонстрировать использование WeakEventManager в том случае если он вам нужен.
Ассоциация гиперссылки с BlockTableRecord
В ObjectARX BlockTableRecord обеспечивает доступ к коллекции своих гиперссылок при помощи AcDbEntityHyperlinkPE интерфейса. В AutoCAD 2015 к гиперссылкам можно получить доступ и при помощи AutoCAD .NET API.
Вот образцы кода на C++ и на .NET, которые создают блок с гиперссылкой к блогу AutoCAD DevBlog:
Отладка dcl
Не секрет, что диалоги в лиспе - это практически всегда dcl. Если разработать dcl не так уж и трудно, то заставить нормально работать сколько-нибудь сложный диалог удается далеко не всегда. Каким образом можно облегчить себе жизнь - именно этому и посвящена статья.Управляемая альтернатива ExplodeAllProxy
Андрей Бушман у себя на сайте опубликовал код, решающий те же задачи, что и знаменитый ExplodeAllProxy от Александра Ривилиса. Пользуясь выцыганенным у Андрея разрешением, публикую мои изменения его кода.Vault 2015 R2
Рассматриваются особенности программирования под первый промежуточный релиз Vault 2015 R2Продажа своих веб-служб в Autodesk Exchange путём ежемесячной подпискиАвтор: Daniel Du
Описывается механизм оформления продажи веб-служб на регулярной основеДве недокументированные функции в Vault 2015 R2
Описание интересных функций VaultПоказ модальных и немодальных HTML страниц в AutoCAD
Начиная с AutoCAD 2014 появились два новых API для показа HTML-страниц в AutoCAD за счет небольших дополнений к существующим API:
Отслеживание меток примитивов в команде БЛОКРЕД
Метки примитивов в AutoCAD являются уникальными внутри базы, но AutoCAD может их менять, при этом оставляя их уникальными. Редактирование блока при помощи команды БЛОКРЕД (BEDIT) – это одна из операций, когда можно ожидать что метки примитивов будут меняться. Если ваш код хранит значений меток примитивов внутри BlockTableRecord, вам может быть интересным отследить изменение значений меток примитивов при редактировании блока.
Выбор примитивов для изменения свойств
Чтобы выбрать примитивы и оставить видимыми свойства выбранных примитивов в Панели Свойств необходимо вашей команде установить флаг CommandFlags.Redraw. Это гарантирует то, что AutoCAD оставит выбранные примитивы подсвеченными. После этого вы можете изменить их общие свойства по своему разумению. Далее небольшой фрагмент кода для выбора всех примитивов:Просмотр нормалей к граням сети
Недавно я получил чертеж от одного из программистов, который содержал сеть (SubDMesh), созданную при помощи кода, использующего информацию о вершинах и гранях. В таких сетях нормали к граням зависят от порядка вершин, определяющих грани, так что нужно было убедиться, что с нормалями всё в порядке.В этом случае желательно было увидеть нормали к сети. Следующий код показывает как это сделать:
Как получить зеркальный объект после применения метода ElementTransformUtils.MirrorElement
Для получения симметричного объекта в Revit API есть два метода:
- ElementTransformUtils.MirrorElement
- ElementTransformUtils.MirrorElements
Проблема в том, что эти методы не возвращают какое-либо значение. А это значит, что на прямую мы не можем получить результат, т.е. объект, полученный в результате зеркального отображение исходного объекта.
Скрыть все элементы кроме элементов заданной системыАвтор: Виктор Чекалин
Скрыть все элементы, кроме элементов заданной системы
На форуме, у пользователя goblya, возник интересный вопрос. Так как решение его проблемы оказалось не таким-то уж и простым, и пришлось повозиться с окончательным решением, то решил создать статью с решением.
Итак, задача. Необходимо скрыть все элементы на виде, кроме элементов системы, к которой принадлежит выбранный элемент.
У пользователя это почти получилось. Действовал он в правильном направлении, однако, некоторые элементы все же не скрывались.