Системная команда dimlayer autocad

Обновлено: 07.07.2024

Решил рассказать о своем опыте работы с AutoCAD. Может быть, кому-то это поможет – ну или хотя бы интересным покажется.

Предыстория

Началось все достаточно просто: в очередной раз почувствовав острую нехватку денег, я решил, что пора бы уже начать их где-нибудь разыскивать. И вот после пары недель поиска на «Фрилансим» обнаружилась вакансия разработчика для создания программы, взаимодействующей с AutoCAD.

Скажу сразу: до того дня общаться с AutoCAD мне не доводилось. Однако объявление содержало в себе фразу «Опыт работы не требуется», которая наполнила мою душу надеждой. Я связался с разместившим вакансию человеком и получил тестовое задание.

Для пробы предлагалось создать на чертеже пару объектов, а также вывести текст. Несколько дней я искал информацию об API и пытался подружиться с непривычной программой. В конце концов фигуры были нарисованы, текст выведен, а тестовое задание отправлено на проверку. И через несколько дней я неожиданно узнал, что принят! Чудеса, да и только.

1. Подготовка необходимых инструментов

1.1. Собственно AutoCAD

Тут все понятно. Качайте с официального сайта Autodesk, ставьте, 30 дней наслаждайтесь прекрасным инструментом. Потом узнайте цену покупки и повесьтесь. Для разработчиков действует специальная программа ADN , по которой можно получать девелоперские лицензии на продукты Autodesk. Стоимость базовой версии подписки, как указано на сайте, составляет от 700 долларов в год.

1.2. ObjectARX SDK – набор библиотек, необходимых для работы с AutoCAD

Последние три-четыре версии библиотек можно бесплатно скачать тут после регистрации. Более ранние придется поискать – скажем, тут. На всякий случай продублирую список прямо здесь – не такой уж он и длинный:

ссылки для загрузки ObjectARX SDK для версий AutoCAD 2000 – 2011
Версия SDK и ссылка для загрузки Совместимость с версиями AutoCAD
2011 2011, 2012
2010 2010, 2011, 2012
2009 2009
2008 x86 2008, 2009 x86
2008 x64 2008, 2009 x64
2007 2007, 2008, 2009 x86
2006 2006
2005 2005, 2006
2004 2004, 2005, 2006
2002 2002
2000i 2000i, 2002
2000 2000, 2000i, 2002
R14 R14

Лично меня в свое время очень заинтересовал вопрос обратной совместимости ObjectARX. Как-то раз заказчик спросил: «А с какими версиями AutoCAD сможет работать программа?», и мне пришлось изрядно времени потратить на поиски ответа. В целом, ответ звучит так: «Autodesk поддерживает обратную совместимость в течение трех лет ». Какие версии совместимы между собой, можно посмотреть под спойлером выше.

Пока задачи перекомпилировать программу с другими библиотеками у меня не возникало. Думаю, что это хорошо: перспектива создавать отдельную версию продукта для других выпусков AutoCAD не радует совершенно.

1.3. MS Visual Studio 2013 Express

Великолепная IDE! Больше про нее и говорить-то нечего. Ссылок для скачивания масса – например, вот.

Можно, конечно, использовать и более ранние версии. Я начинал работу над проектом в MS Visual Studio 2010, но потом решил перейти на более современный выпуск.

1.4. Поисковик, усидчивость, здравый смысл
  • нет привычных всплывающих подсказок о назначении класса, свойства или метода;
  • нет подробной справки.

В конце этой статьи приведен список ресурсов, на которых можно позадавать вопросы и, если повезет, получить на них ответы.

2. Создание проекта библиотеки

Вкратце продублирую основные этапы:

2.1. Создать проект «Библиотека классов» («Class Library»)

Эти DLL-файлы находятся в папке с именем inc-<наименование_архитектуры>. Так, в моем случае я добавляю ссылки на библиотеки из папки C:\ObjectARX 2010\inc-win32.

у меня дома установлена 32-разрядная ОС, у заказчика – 64-разрядная. Пока серьезных проблем с совместимостью не возникало. Но однажды я все же напоролся на то, что у меня функция возвращала Int32 , а у заказчика – Int64 . Линковщик ОЧЕНЬ расстраивался. Нужно иметь эту особенность в виду.

Первое знакомство с API у меня заключалось в лихорадочных попытках скомпилировать хоть какой-нибудь из примеров, щедро разбросанных по Сети. И что сλка характерно, компилироваться они упорно не хотели, ругаясь на неизвестные пространства имен и классы. В попытках собрать свой первый проект я с горя включил в него чуть ли не все DLL-файлы, которые шли с ObjectARX. Плохой способ – так делать не надо.

Ну, это вопрос не ко мне. Я только могу сказать, что в начале примеров обычно идет перечисление используемых пространств имен – скажем, так:


То, что начинается со слова «Autodesk», – это и есть те дроиды пространства имен, которые мы ищем. Теперь осталось разыскать контейнеры, которые их содержат. Исчерпывающего перечня сопоставлений я найти не смог, поэтому все проверялось методом научного тыка. Если есть более правильный способ, было бы интересно его узнать…

А пока – вот список DLL-файлов, которые я использую в проекте, и содержащихся в них пространств имен:


Теперь в любом месте этого файла можно вместо Autodesk.AutoCAD.ApplicationServices.Application писать acadApp .

Есть смысл провернуть такую операцию с наиболее часто употребляемыми классами. Непременно так делайте, код будет компактнее и понятнее. Цинизм данного совета заключается в том, что к тому моменту, когда вы наконец поймете, какие же классы являются у вас наиболее часто употребляемыми, что-то менять будет уже сильно лень.

2.3. Написать код плагина

Все очень просто. Вначале мы указываем необходимые пространства имен. Нам потребуются два.

Таким образом, всего необходимо добавить три ссылки:



UPD. 09.04.2018. Важное дополнение от lasteran: В новых версиях (предположительно начиная с AutoCAD 2013) класс CommandMethod содержится не в AcDBMgd.dll, а в AcCoreMgd.dll, так что придётся добавить ссылку ещё и на эту библиотеку. Учтите это, если работаете с новой версией!

Затем мы объявляем класс Commands . Именно он и будет «отправной точкой» плагина. Наш класс унаследован от интерфейса IExtensionApplication , поэтому в нем могут быть реализованы методы Initialize и Terminate . Первый из них автоматически выполняется при загрузке плагина, второй – при выгрузке.

AutoCAD не предоставляет разработчику возможность выгрузить плагин после того, как он будет загружен. Поэтому реально метод Terminate будет вызываться только в одном случае – при закрытии самого AutoCAD.

Почитать поподробнее про методы Initialize и Terminate можно тут (rus) и там (англ.).

Чтобы «превратить» созданный метод в команду AutoCAD, применяется атрибут CommandMethod . В скобках после него указывается имя создаваемой команды, которое можно будет использовать непосредственно в среде AutoCAD.

После сборки этого проекта у нас получится готовый к употреблению плагин.

2.4. Загрузить созданный плагин

Нужно запустить AutoCAD и выполнить команду «NETLOAD»:




Затем в открывшемся окне указать путь к файлу плагина:




Если при загрузке плагина произошла критическая ошибка, она будет выведена в консоль AutoCAD:


если плагин не смог загрузиться из-за ошибки, то перед тестированием очередного (исправленного) варианта нужно закрыть и заново запустить AutoCAD. В противном случае он может отказаться загружать плагин, даже если ошибок в коде уже не будет.

Теперь, когда плагин загружен, можно выполнить нашу тестовую команду:




… и увидеть результат:


Работает. Теперь можно закрывать AutoCAD.

2.5. Отладить плагин (при необходимости)

Процедура запуска плагина для отладки очень хорошо расписана в этом посте Tepliuk.

Сегодня хотел бы провести обзор обновлений аннотаций AutoCAD 2016. Уверен, что усовершенствованные функции сделают вашу работу с программой еще эффективнее.

Итак, что нового в этом году нам предлагают разработчики?

Команда РАЗМЕР (_DIM)

Полностью переделанная команда. От прежней команды осталось только название и назначение - проставлять размеры на любые объекты.

При наведении курсора на объект (именно наведении, раньше нужно было выбрать объект!) для нанесения размеров команда РАЗМЕР автоматически отображает подходящий тип.

Команда позволяет нанести разные типы: вертикальные, горизонтальные, параллельные, повернутые линейные, угловые, радиальные и диаметральные, а также размеры радиуса с изломом, длины дуги, базовые размеры и размерные цепи.

В опциях команды можно выбрать необходимый тип.

Если выбрать не графический примитив, а уже нанесенный ранее размер, то запустится команда создания размерной цепи (в опциях можно указать создание размера с общей базой)

Значительно переработанная команда, стало гораздо удобнее пользоваться. Надо обратить на нее более пристальное внимание.

Размерный текст в несколько срок

Любой размерный текст теперь можно разместить в несколько строк. При редактировании текста доступны манипуляторы, знакомые по МТексту, перемещая за которые можно задать размещение в несколько строк.

Запись в текстовой строке «<>Pстена» - отобразит текущее значение размера и текст под ним над размерной линией.

Запись в текстовой строке «<>Xстена» - отобразит текущее значение размера и текст под ним разделёнными размерной линией.

Размещение размеров на отдельном слое

В AutoCAD 2016 появилась возможность автоматически размещать все наносимые размеры на отдельном слое, при чем слой может быть любым, который задаст пользователь.

Переменная DIMLAYER определяет, на каком слое размещать все вновь наносимые размеры. Просто введите имя слоя и все, если требуется размещение на текущем слое, то введите . (точку).

Уже существующие размеры не переносятся. Выполнить перенос возможно, только обычными средствами вручную.

Многострочный текст в рамке

Для многострочного текста в окне Свойства доступна опция Рамка текста.

Привязка к геометрическому центру

Появился новый тип объектной привязки - Геометрический центр.

Позволяет привязаться к геометрическому центру замкнутых полилиний и сплайнов (только 2D), например, к центру многоугольника, центру тяжести полилинии и сплайна. Для обозначения этой привязки введен новый символ.

В следующей заметке я расскажу про преобразование слоев под стандарты предприятия.

23 марта выходит официальный новый релиз AutoCAD 2016. Имея доступ на бета-портал, я смог пораньше посмотреть на многие нововведения. О них и хочу рассказать.

Предупреждаю сразу: картинок не будет. По крайней мере сразу.

Прежде всего - о новостях для пользователей Начнем с самого начала.

Стартовая страница теперь (при настройках по умолчанию) остается все время доступной. Вместо системной переменной NEWTABMODE вводится новая - STARTMODE.

В любой момент пользователь может перейти на стартовую страницу, нажав Crtl+Home или введя команду _.gotostart

Введены две новые команды, позволяющие закрыть либо все документы, кроме текущего, либо вообще все (соответственно _.closeallother и _.closeall)

Создание нового документа также упрощено до невозможности: жмем значок "+" на строке закладок файлов - и вуаля, у нас новый документ, созданный по шаблону. В качестве основы шаблона берется либо последний использовавшийся шаблон, либо тот, который установлен для команды _.qnew

Из того, что хотелось бы еще отметить - уж больно оно мне понравилось - это тот факт, что статусная строка самостоятельно становится "в 2 строки", если ширина окна AutoCAD'a не позволяет поместить все в одну строку.

В ACAD2015 предпросмотр стилей, блоков и т.п. (при использовании ленты) был обязателен. Теперь можно, поменяв системную переменную GALLERYVIEW, привести все к простым спискам. Можно предсказать, что этот момент наверняка попадет в список методов для ускорения ACAD'a на слабых машинах.

К сожалению, такое понятие, как облако изменений (Revision Cloud), у нас большой популярностью не пользуется - а там тоже хватает новостей. Подробнее планирую рассказать на вебинаре в конце апреля.

Что еще из стоящего - это изменение / добавление / расширение команды _.dim. Сейчас уже мало кто помнит, что такая команда была в старых версиях ACAD'a. Вот сейчас она вернулась - в новом виде, с новым функционалом. Выбираем ее, указываем примитив (неважно - наклонный отрезок, дуга, окружность) - команда сама предлагает поставить соответствующий размер. Мало того, стоит поместить размерную линию нового размера на размерную линию параллельного - и предлагаются дополнительные опции.

Опять же, касаемо размеров: можно теперь пользовательский текст абсолютно спокойно размещать в несколько строк.

Из очень серьезного - введена новая системная переменная DIMLAYER: теперь размеры могут автоматически помещаться на определенный слой. Круто, правда?

Весьма порадовала возможность привязки к характерным точкам замкнутых полилиний (центры тяжести, центры дуговых сегментов).

В части трехмерной работы новостей тоже прилично: разрезы можно теперь делать не только на 3D-солиды. Сюда же попадают и те самые облака точек, и поверхности, и сети, и области (REGION). Введен новый тип сечения - Slice. Для сечений (кроме Slice) возможно добавление точек перелома.

То, что творится с облаками точек - это вообще песня. Уже упоминавшиеся сечения, прозрачность, привязка к плоскостям (если облако точек отвечает определенным требованиям), привязка к объектам облака точек, сохранение вариантов обрезки облака точек. В общем, тем, кто с этим работает, будет достаточно интересно.

Рендер в AutoCAD также получил свою порцию новостей. Во-первых, новый "движок". Во-вторых, изменение интерфейса и удаление некоторых установок. В-третьих, возможность указания получателя результата (окно, вид или файл).

Добавлена возможность вставки информационной модели из NavisWorks (даже если этот продукт не установлен на компьютере). Есть возможность вставки моделей из BIM Glue 360 для обеспечения совместной работы.

Если на компьютере установлена видеокарта, поддерживающая DirectX 11 и включено аппаратное ускорение, то можно будет увидеть, насколько изменена обработка кривых и весов линий. Мало того - теперь REGENMODE до конца отрабатывает свое название и полностью регулирует режим регенерации модели.

Что еще понравилось - так это режим отслеживания изменения системных переменных. Список переменных редактируется, режим оповещения об изменении также можно регулировать. Правда, я не успел выяснить, где и как хранится этот самый список переменных - но, надеюсь, это вопрос времени и интереса.

Ну и, наконец, предпоследнее: пакеты обновлений. Теперь для вертикальных решений не надо ждать отдельного пакета - тот, что был выпущен для ACAD'a, вполне корректно встанет и на вертикалку.

alt

Продолжаем изучение командной строки (КС) в AutoCAD. Если не смотрели первый урок, начните с него "Командная строка в AutoCAD. Архаизм?". В этом уроке мы рассмотрим еще 4 полезных приёма с командной строкой.

Во-первых, я покажу самый компактный способ размещения командной строки. Это позволит вам экономить графическое пространство, сделав строку почти невидимой, но тем не менее вся необходимая информация будет видна в необходимом объеме. Также поговорим о прозрачных командах, поиске по блокам, а главное, вы узнаете, что делать, если Автокад стал сохранять/открывать файлы через командную строку.


Что делать, если Автокад сохраняет через командную строку?

Рис. 1 – Сохранение и открытие файлов происходит через командную строку AutoCAD

Сохранение в Автокаде через командную строку происходит, потому что значение системной переменной FILEDIA =0.

В AutoCAD отключение командной строки при сохранении / открытии файлов происходит, когда для системной переменной FILEDIA установлено значение «1».

Рис. 2 – Измените значение системной переменной Автокад FILEDIA на <1>

Журнал команд в Автокаде

Если открепить командную строку, то нужно выполнить настройку числа строк временного запроса.

Рис. 3 – Временные запросы AutoCAD в незакрепленном окне команд

Чтобы убрать оперативный журнал (всплывающие доп. строки командной строки) при выполнении команды, или задать другое фиксированное количество строк – нужно воспользоваться системной переменной CLIPROMPTLINES.

В программе можно указать от 0 до 50 строк. Как показывает практика, удобно, когда значение CLIPROMPTLINES = <0>, т.е. всплывающие строки выводиться не будут.


Как задать прозрачность командной строке?

Чтобы оптимизировать рабочее пространство, командную строку можно сделать прозрачной. При этом в момент наведения на нее курсора она будет принимать привычный вид. Для этого нажмите ПКМ по командной строке и в ниспадающем списке выберите «Прозрачность».


Откроется диалоговое окно, в котором можно настроить прозрачность КС для двух режимом: когда она не активна (обычно это значение прозрачности я задаю «20» или «0»), а также прозрачность для командной строки в момент ее активности.

Читайте также: