Сегодня в связи с уходом Autodesk с российского рынка многие проектные организации рассматривают Платформу nanoCAD для замены AutoCAD.
Меня зовут Олег Кирьянов, я руковожу отделом внедрения и инженерной поддержки САПР в компании «Системный софт», которая является премьер- и фокус-партнером «Нанософт» по направлениям «Конструкции» и «Машиностроение». Мы получаем от пользователей множество вопросов к технической поддержке, и один из самых частых: «Как в nanoCAD создавать сложные динамические объекты и “дружит” ли эта платформа с автокадовскими динамическими блоками?». Постараюсь дать развернутый ответ и на примерах описать все нюансы.
Перенос динамических блоков из AutoCAD
Платформа nanoCAD – многоцелевой инструмент черчения, разработанный компанией «Нанософт». Она изначально поддерживает файлы *.dwg, предлагает знакомый пользователям AutoCAD макет и набор инструментов. Программное обеспечение включает инструменты редактирования таблиц в стиле Excel, ускоряя работу с документацией, позволяя встраивать макросы и формулы в каждую ячейку. Платформа nanoCAD также располагает открытыми наборами API для создания приложений, автоматизирующих выполнение задач и экономящих время пользователя.
Динамические блоки – это двумерные параметрические объекты с настраиваемым набором свойств. Они предоставляют возможность сохранить в одном блоке (наборе простейших геометрических форм, с которыми может работать система) несколько геометрических реализаций, отличающихся друг от друга размером, взаимным расположением частей блока, видимостью отдельных элементов и т. п. С помощью динамических блоков можно сократить библиотеки стандартных элементов (один динамический блок заменяет несколько обычных). Также активное использование динамических блоков в ряде случаев позволяет значительно ускорить выпуск рабочей документации.
Динамические блоки в AutoCAD – это нечто вроде обычных блоков, но на стероидах. В обычном блоке AutoCAD вы можете использовать одну базовую точку, чтобы повернуть ее или масштабировать, и это будет почти вся гибкость, которую он способен предложить. А в динамическом блоке вы можете растянуть его, изменить его форму, полностью изменить на другой тип и многое другое.
Например, используя единый динамический блок, можно создать металлический профиль с выбором различных типов сечений и размеров этих сечений, а также с указанием необходимого представления (сбоку, сверху и т.п.), на котором можно будет динамически изменять длину профиля и т.д.
Платформа nanoCAD поддерживает динамические блоки, созданные в AutoCAD. Но не всё так просто. С довольно сложными в исполнении автокадовскими динамическими блоками возникают проблемы. Затруднительно спрогнозировать, будет ли «сломан» конкретный автокадовский динамический блок в nanoCAD или нет, но, как показывает практика, чем больше в динамическом блоке параметров, связанных с управлением геометрией объекта, тем выше риск, что в nanoCAD он будет работать некорректно.
Несколько примеров для наглядности. Представленные на иллюстрациях динамические блоки созданы в AutoCAD. Откроем *.dwg‑файл с этими блоками в nanoCAD и рассмотрим, как они будут отрабатывать при внесении изменений.
Первый пример: линейный обрыв. Здесь представлены один линейный параметр, один параметр поворота, две линейных «ручки» и одна «ручка» поворота (рис. 1).

В nanoCAD объект работает без проблем: геометрия корректно изменяется при перемещении «ручек» (рис. 2).

Второй пример: неравнополочный уголок (рис. 3). Здесь на геометрию наложено большое количество зависимостей и параметров. В AutoCAD этот динамический блок работает согласно примененным зависимостям.

В nanoCAD же он «ломается»: при внесении изменений в представление «Сбоку» некорректно изменяется длина (рис. 4), а при попытке выбора другого типа уголка геометрия сечения никак не изменяется.

Еще один пример некорректной работы автокадовского динамического блока в nanoCAD: текст не следует за перемещением выноски, а «ручка», которая отвечает за изменение диаметра круга, лежит за пределами круга (рис. 5).

Проблему усугубляет тот факт, что при попытке, применяя Редактор блоков, открыть и отредактировать в nanoCAD сложные в исполнении динамические блоки, пользователь увидит сообщение, показанное на рис. 6.

Открыть и отредактировать более простые автокадовские динамические блоки через Редактор блоков nanoCAD можно, но особого смысла в этом нет. Например, в случае уже рассмотренного нами линейного обрыва мы увидим результат, представленный на рис. 7.

То есть будет видна только геометрия объекта, но не «ручки» и не те параметры, которые представлены в Редакторе блоков AutoCAD. Редактор блоков nanoCAD не содержит инструментария для создания геометрических параметров, поэтому мы не сможем добавить здесь новые геометрические параметры, а также отредактировать существующие.
Очевидно, что существует вопрос совместимости динамических блоков при переносе из AutoCAD в nanoCAD. И универсального решения этой головоломки на сегодня нет.
Рабочий вариант – тестировать и проверять, как работает тот или иной динамический блок в nanoCAD. Если он отрабатывает корректно и результаты устраивают, его можно использовать в рабочих чертежах, создаваемых в nanoCAD.
Если же динамический блок «ломается», значит нужно создавать новый, с нуля, учитывая возможности инструментов nanoCAD. Об этом дальше.
Стандартный функционал для создания динамических блоков в nanoCAD
Как уже сказано, Редактор блоков nanoCAD не содержит инструментария для создания геометрических параметров. Но управлять геометрией блоков в nanoCAD можно с помощью состояний видимости (рис. 8). Принцип создания таких блоков очень прост: можно создавать в Редакторе блоков различные примитивы, после чего присваивать им соответствующее представление. А уже в самом проекте переключать созданные представления, показывая или скрывая те или иные примитивы в блоке.

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

Создаем геометрию, как показано на рис. 9, и вызываем команду БЛОК, затем указываем имя будущего блока и объекты, которые будут в этот блок входить (красные линии и зеленую дугу) – (рис. 10).

Далее через команду БЛОКРЕД открываем созданный блок в Редакторе блоков (рис. 11). В группе Видимость нажимаем кнопку Состояния видимости. Нажимаем ОК. После этого графически указываем любое удобное положение «ручки» видимости и название параметра (назовем его ТипДвери_План).

В следующем диалоговом окне для параметра ТипДвери_План создаем необходимый набор состояний видимости. По умолчанию одно состояние видимости, с наименованием Состояние видимости0, уже создано (рис. 12). Переименуем его в Д21-9.

При создании новых состояний видимости (будем называть их Д21-10 и Д21-11) заранее ставим переключатель в положение Скрыть все существующие объекты (рис. 13).

После подтверждения в группе Видимость станет доступен выпадающий список состояний видимости. В Д21-9 у нас уже есть геометрия. Поэтапно переключимся с помощью этого списка на следующие состояния видимости и добавим в каждом примитивы с соответствующей геометрией (в Д21-10 ширина проема будет равна 1000, а в Д21-11 – 1100). Также в группе Видимость можно включить опцию Режим видимости (рис. 14), которая позволит видеть все примитивы в блоке независимо от включенного состояния видимости.

В результате у нас получился объект, геометрией которого мы управляем с помощью «ручки» видимости (рис. 15).

Но что же делать, если нужно создать сложные блоки с возможностью параметризации их геометрии? Здесь на помощь приходит модуль «СПДС» и его инструмент, который называется Мастер объектов.
Модуль «СПДС»
Мастер объектов – параметрический инструмент создания типовых объектов, позволяющий формировать правила их поведения в контексте сборки или заимствовать свойства существующих объектов из базы данных. Все объекты, созданные в Мастере, можно хранить в единой БД (рис. 16), обеспечивая тем самым централизованный доступ специалистов к этой базе данных.

В этом инструменте представлены встроенный механизм распознавания пользовательской графики с возможностью указания табличных параметров (рис. 17), редактор скриптов (рис. 18), редактор форм (форма (рис. 19-20) – это диалоговое окно с параметрами и представлениями, которое открывается при вставке или редактировании объекта).




Вернемся к нашему условному обозначению дверного проема с линией открывания двери и создадим его с помощью Мастера объектов. Для начала создаем геометрию объекта посредством примитивов и образмериваем ее так, как показано на рис. 20.

Горизонтальная зеленая линия нужна здесь для простановки углового размера, в дальнейшем ее скрываем.
Далее переходим на вкладку СПДС Ò группа Мастер объектов. Нажимаем кнопку Точка вставки для указания точки вставки будущего объекта. Затем нажимаем кнопку Установить параметр и поочередно выбираем проставленные размеры, чтобы назначить параметры, которые будут управлять размерами объекта (параметр для размера 200 назовем t, параметр для размера 900 – A, параметр для углового размера – v) – (рис. 21).

Снова нажимаем Установить параметр и выбираем горизонтальную зеленую линию. В поле Отображать диалогового окна Свойства объекта указываем 0 (рис. 22) – это означает, что после создания объекта и его последующей вставки в чертеж данная линия не будет выводиться на экран.

Аналогично установим параметр на дуговую линию открывания двери. В поле Отображать напишем будущее название параметра, который будет управлять отображением дуги, – dol, а в поле Тип линии укажем 2 – чтобы данная дуга всегда создавалась тонкой линией (рис. 23).

Все необходимые манипуляции над эскизом нашего объекта мы выполнили. Теперь вызываем Мастер объектов. Для создания нового объекта в диалоговом окне выбираем Объект Ò Новый, указываем папку, в которую будет сохранен объект, а также прописываем название объекта (рис. 24).

После этого находим в дереве Мастера объектов раздел Исполнение и правой кнопкой мыши вызываем контекстное меню, где выбираем Добавить исполнение (рис. 25).

В правой части диалогового окна щелкаем правой кнопкой мыши на появившемся исполнении и выбираем Параметрическое распознавание вида (рис. 26), после чего указываем все необходимые объекты в пространстве модели, включая размеры.

После успешного распознавания появится сообщение, показанное на рис. 27.

Теперь можно приступить к созданию скрипта. Начинающим пользователям предлагается Мастер скриптов – механизм самостоятельного пошагового составления алгоритмов, управляющих поведением объекта в момент его вставки и редактирования. Данный механизм позволяет в большинстве случаев не прибегать к ручному написанию скрипта. Вызывается он в разделе Мастер Ò Мастер скриптов.
На шаге «Основные свойства» заполняются основные данные скрипта. Здесь необходимо заполнить значения основных параметров: Описание объекта (описывает общее название объекта), Имя объекта (указанное значение будет отображаться в шапке диалогового окна выбора параметров объекта), Тип объекта (служит для идентификации объекта как принадлежащего к какой-либо группе. Эту информацию желательно внести латинскими буквами) и Подтип объекта (определяет подтип конкретного ГОСТа. Здесь также желательно заполнение латинскими буквами). Без указания значений перечисленных параметров Мастер скриптов не позволит перейти к следующему шагу.
Изменение параметров сразу же отображается в окне обзора скрипта (рис. 28).

На шаге «Свойства параметров» устанавливаются свойства и начальные значения выбранных параметров всех распознанных видов (рис. 29). Установим здесь следующие значения:
· параметр А: зеленая галочка Доступен для редактирования, описание параметра: Ширина проема, значение по умолчанию – 900;
· параметр t: зеленая галочка Доступен для редактирования, описание параметра: Толщина стены, значение по умолчанию – 200;
· параметр v: красная галочка Используется, описание параметра: Угол, значение по умолчанию – 30.

Также на этом шаге добавим параметр, управляющий отображением дуги (dol) – (рис. 30). Для этого необходимо щелкнуть на любом параметре, ввести в поле ввода/редактирования названия параметра значение dol и нажать кнопку Добавить параметр (направленная вверх зеленая стрелка).

Установим для него следующие значения (рис. 31): красная галочка Используется, описание параметра: Линия открывания двери, значение по умолчанию – 1.

На следующем шаге, «Вычисление параметров», устанавливается способ выбора значений параметров, используемых в скрипте. Оставляем для всех параметров стандартное значение Отображать диалог и нажимаем кнопку Вперед (рис. 32).

Шаг «Условия отрисовки». Здесь определяются условия отображения некоторых компонентов диалога редактирования объекта, в зависимости от параметров.
Введем название переключателя: «Линия открывания двери». Добавим переключатель «Линия открывания двери» в список переключателей, нажав на направленную вверх зеленую стрелку. В поле Включен пропишем dol=1, в поле Выключен – dol=0. Поставим галочку Включен по умолчанию (рис. 33). Таким образом можно отдельно управлять отображением дуговой линии открывания двери.

Добавим еще два переключателя: «Угол 30» и «Угол 90», которые будут сгруппированы (рис. 34).
Для «Угол 30» в поле Включен пропишем v=30, в поле Выключен – v!=30 (и поставим галочку Включен по умолчанию).
Для «Угол 90» в поле Включен пропишем v=90, в поле Выключен – v!=90 (галочку Включен по умолчанию здесь не ставим).
Теперь мы можем управлять углом открывания двери с помощью выпадающего списка с фиксированными значениями в 30 и 90 градусов.

Шаг «Рабочие плоскости» пропускаем (в нашем случае здесь никаких операций производить не надо) и переходим к шагу «Скрыть/показать параметры». На этом шаге мы указываем, какие параметры будут отображаться в диалоге вставки и редактирования объекта. Убираем галочки параметров v и dol (рис. 35) – значения данных параметров будем определять с помощью переключателей, поэтому их отображение в диалоге вставки и редактирования излишне.

Шаг «Условия отображения» пропускаем, а на шаге «Переключатели управления» дополнительно ставим галочку Отрисовывать объект во время вставки (рис. 36), чтобы при выборе точки вставки и вектора направления объект отрисовывался на экране.

На шаге «Текущий скрипт» можно проверить скрипт и сохранить его. Созданный объект отобразится в базе элементов (рис. 37).

При вставке будет отображаться диалоговое окно, в котором можно задавать значения параметров: указывать размеры, включать или отключать отображение линии открывания двери и выбирать нужный угол открывания (рис. 38).



Кроме того, поскольку на шаге «Свойства параметров» мы ставили для параметров A и t зеленую галочку Доступна для редактирования, значения данных параметров можно вводить и через панель Свойства (рис. 39).

При необходимости данный объект можно усложнить. Например, ввести табличные параметры, чтобы использовать фиксированные значения параметров (рис. 40).

После обновления скрипта при вставке нашего объекта можно будет выбирать заданные значения в диалоге редактирования объекта (раздел Табличные параметры) – (рис. 41).

Если на объекте требуется добавить «ручку», с помощью которой можно будет графически управлять параметром t, понадобится дополнить скрипт уже вручную. В нашем случае выбираем в Мастере объектов раздел Методы Ò Обработчики событий Ò SetGripPoint и прописываем следующий текст (он выделен на рис. 42):
function SetGripPoint {
NGrip = 2;
pntGrip0 = pntOrigin;
pntGrip1 = pntOrigin-t*vecPlane;
};

Далее выбираем раздел Методы Ò Обработчики событий Ò OnMoveGripPoint и добавляем следующий текст (выделен на рис. 43):
function OMoveGripPoint {
if (NMovingGrip == 0) {
pntOrigin = pntGrip0;
};
//ручка толщины стены
if (NMovingGrip == 1) {
t = max ((vecLen(pntGrip0 - pntGrip1)/rScl),1);
vecPlane = pntGrip1 + pntGrip0;
};
};

После сохранения скрипта на объекте появится дополнительная «ручка» (рис. 44), посредством которой можно изменять длины отрезков, связанных с параметром t.

Функционал Мастера объектов довольно обширен (рис. 45), здесь мы коснулись лишь нескольких примеров его использования. Для самостоятельного изучения есть необходимая документация. Можно в разделе «Помощь» открыть подробную справку по работе с Мастером объектов или сразу перейти в раздел «Синтаксис языка скриптов». В справке собраны различные примеры с пошаговым описанием создания объекта – они позволят потренироваться и понять логику работы Мастера.

При этом в базу элементов модуля «СПДС» уже включен обширный набор наиболее часто используемых условных обозначений, металлических профилей, сборных железобетонных изделий, деталей креплений и др.
Каждый объект имеет параметры, соответствующие стандарту, ГОСТу, серии. Поэтому в предоставленной библиотеке пользователь с большей долей вероятности сможет найти для себя все нужные объекты.
Надеюсь, что статья помогла вам лучше понять нюансы работы с динамическими блоками в Платформе nanoCAD.
Олег Кирьянов,
руководитель отдела внедрения
и инженерной поддержки САПР
ООО «Системный софт»
Surrogate
В конце 2016 года NanoSoft подогнали нашей конторе 10 лицензий nanocad + лицензии на вертикальные решения типа СКС/ОПС на несколько месяцев на пробу.
Потестировали все устраивает:
весь функционал AutoCAD который используем имеется;
много полезных фич собственной разработки.
Начали думать о "импортозамещении" на этот продукт, писать мануалы для 30 коллег внутри компании использующих AutoCAD.
Беда пришла откуда не ждали - работаем мы не в сферическом вакууме, а есть свое окружение: Заказчики/Подрядчики/Партнеры которые тогда не успели/не хотели "импортозамещаться именно на nanocad". В AutoCAD/nanocad есть объект таблицы, после редактирования этого объекта в nanocad этот документ уже никак не откроется в AutoCAD !!!!
Недавно стал снова интересоваться этим нюансом. Коммент на Хабре от 19.10.2022 говорит о том, что в тот момент проблема оставалась:
Подскажите пожалуйста удалось ли nanocad подружиться с таблицами AutoCAD?