Новости AutoCAD2016 API
В обзоре новостей AutoCAD 2016 были затронуты несколько моментов о приложениях. Сейчас рассмотрим их попродробнее.
Совместимость.
Прежде всего стоит отметить факт бинарной совместимости файла DWG. Autodesk отступила от своего правила трехлетнего цикла смены формата DWG, и файлы, созданные в AutoCAD 2016, должны корректно открываться в AutoCAD 2013-2015.
Кроме того, это означает бинарную совместимость arx-приложений, разработанных для AutoCAD 2015 и .NET-сборок, созданных для AutoCAD 2014. То есть приложения будут загружаться без перекомпиляции. Тем не менее, в механизм безопасности были внесены ощутимые изменения, поэтому следует убедиться, что эти изменения не препятствуют корректной работе Ваших приложений.
Безопасность
При попытке загрузить приложение Вы увидите диалог, немного отличающийся от уже привычного вида диалога в AutoCAD 2014 / 2015:
Во-первых, обратите внимание на слово “unsigned” (“неподписанное”). Autodesk таким образом плавно подводит разработчиков к тому, что свои приложения (в том числе и lisp) необходимо подписывать. Цифровой подписью, естественно. Вообще говоря, это абсолютно отдельная тема - но факт есть факт.
Во-вторых, посмотрите на флажок “Always load this application”. Если этот флажок нажать, то AutoCAD запомнит, что именно это приложения можно и нужно загружать, даже если оно не подписано. Правда, эта “память” будет работать до того момента, пока файл приложения не будет изменен.
Список новых системных переменных, изменения которых могут быть заблокированы CAD-менеджерами:
- SECURELOAD
- TRUSTEDPATHS
- TRUSTEDDOMAINS (см. Уточнение ниже)
- LEGACYCODESEARCH
- ACADLSPASDOC (см. Уточнение ниже)
Особого внимания заслуживает переменная LEGACYCODESEARCH: она указывает, что исполняемые файлы теперь не будут искаться и загружаться из текущего рабочего каталога или из каталога с активным dwg-файлом. Надежды на излечение от кад-вирусов постепенно реализовываются самим Autodesk :)
В обзоре также был затронут вопрос о мониторе системных переменных. Это нововведение и само по себе полезно, и CAD-менеджеру будет неплохим подспорьем, и для разработчиков можно будет прямо в процессе отладки приложения смотреть, какие системные переменные и как меняются. Достаточно добавить эти переменные в список отслеживаемых и изменить способ оповещения.
Теперь обратим внимание на новые возможности .NET API и ObejctARX.
Вычисления реального мира
В AutoCAD введено большое количество новых возможностей, касающихся обработки облаков точек. Естественно, что они доступны и через API.
При работе в dwg можно создать определение облака точек (PointCloudDefEx), добавляя .RCS/.RCP-файлы. Можно сказать, что это некоторые аналоги описаний блоков. Также можно создавать вхождения облаков точек (PointCloudEx), которые собственно и “вставлены” в документ. Оба этих класса обладают своими, новыми методами и свойствами.
Многие возможности были добавлены для получения некоторых элементов из облаков точек. Прежде всего, класс Section получил новый тип - “slice”, который может быть использован для получения некоего среза облака точек. Соответственно это позволяет использовать объект PointCloudCrop для получения проекций на плоскость.
Выдавливание может управляться программно. Kean Walmsley собрал образец, который выполняет извлечение и добавляет извлеченную геометрию в dwg. Пообещал показать результат в следующих постах.
Рендеринг
В новый API добавлены возможности, связанные с внедренной системной рендера RapidRT. Естественно, что есть возможности добавления и контроля освещения на основе растра, а также управления различными настройками RapidRT.
Поскольку текущий релиз является двоично-совместимым, пришлось вводить новые классы, которые будут использоваться до того момента, пока не станет возможным отказаться от старых классов, методов и свойств. Поэтому новый класс Autodesk.AutoCAD.GraphicsSystem.Manager2 содержит методы GetOffScreenDevice () и GetOffScreenView (), использующие движок RapidRT.
Разное
Приведен достаточно поверхностный обзор некоторых из наиболее интересных усовершенствований разных API.
Метод Spline.ToPolyline() получил пару новых логических (Boolean) параметров, позволяющих определить, как следует создавать дуговые сегменты облегченных полилиний.
Свойство Dimension.TextDefinedSize позволяет контролировать ширину, в которую должен быть вписан текст размера.
Класс MText получил пару новых свойств: ContentsRTF позволяет извлекать текст в формате RTF (Rich Text Format). А ShowBorders позволит определить (и при необходимости изменить) отображение рамки вокруг объекта MText.
Уже упоминалась возможность заблокировать изменения некоторых системных переменных. Соответствующее свойство Variable.IsLocked позволит проверить это программно.
Ну и, наконец, то, что больше всего понравилось Kean Walmsley. Теперь можно запросить код, который будет выполняться в контексте команды из контекста приложения с использованием DocumentCollection.ExecuteInCommandContextAsync (). Звучит немного запутано, но этот метод позволяет делать некоторые весьма занимательные вещи - такие, как вызов команды из обработчиков событий в AutoCAD (можно даже обработать некоторые события уровня операционной системы!). Безусловно, метод заслуживает отдельного рассмотрения - что и будет рано или поздно сделано.
Как оказалось, в то время как согласно документации переменные ACADLSPASDOC и TRUSTEDDOMAINS могут быть заблокированы от изменения CAD-менеджерами, на самом деле CAD Manager Control Utility этого сделать не позволяет. Спасибо обнаружившим это Dieter и Karen; будем надеяться, что документация будет исправлена в ближайшее время.
Перевод Алексей Кулик, Александр Ривилис
На основе материалов Блога Kean Walmsley
Обсуждение: http://adn-cis.org/forum/index.php?topic=2589
Опубликовано 23.03.2015Отредактировано 25.03.2015 в 20:35:39