![](https://habrastorage.org/getpro/habr/upload_files/1d9/b71/8ab/1d9b718ab26d81adb63506b338439bbc.png)
Все привыкли к тому, что первый инструмент проектировщика — это AutoCAD, который доминирует в мире черчения и проектирования с момента создания с 1980-х годов. Известность AutoCAD в сообществе САПР сравнима с известностью Photoshop в сообществе фоторедакторов, и одним из несомненных плюсов AutoCAD является возможность создания динамических блоков, использование которых обеспечивает большую гибкость и эффективность при проектировании. Лидерство AutoCAD не мешает конкурентам выпускать собственные версии САПР с поддержкой DWG. Эти альтернативы уже заработали своих лояльных пользователей. Одной из них является Платформа nanoCAD.
Сегодня в связи с уходом Autodesk с российского рынка многие проектные организации рассматривают именно Платформу nanoCAD как самую очевидную альтернативу AutoCAD.
Меня зовут Олег Кирьянов, я руковожу отделом внедрения и инженерной поддержки САПР в компании «Системный софт». Мы получаем большое количество вопросов пользователей к технической поддержке, и один из самых частых: «Как в nanoCAD создавать сложные динамические объекты и „дружит“ ли эта платформа с автокадовскими динамическими блоками?». В этой статье я постараюсь дать развернутый ответ и на примерах описать все нюансы.
Перенос динамических блоков из AutoCAD
Платформа nanoCAD — это многоцелевой инструмент для черчения, разработанный компанией «Нанософт». Он изначально поддерживает файлы DWG и предлагает знакомый макет и набор инструментов для пользователей AutoCAD. Программное обеспечение предлагает инструменты редактирования таблиц в стиле Excel, ускоряя работу с документацией, позволяя встраивать макросы и формулы в каждую ячейку. Платформа nanoCAD также имеет открытые наборы API для создания приложений автоматизации задач, которые могут сэкономить время.
Динамические блоки — это двухмерные параметрические объекты, набор свойств которых можно настраивать. Они предоставляют возможность сохранения в одном блоке (наборе простейших геометрических форм, с которыми может работать система) нескольких геометрических реализаций, отличающихся друг от друга размером, взаимным расположением частей блока, видимостью отдельных элементов и т. п. С помощью динамических блоков можно сократить библиотеки стандартных элементов (один динамический блок заменяет несколько обычных). Также активное использование динамических блоков в ряде случаев позволяет значительно ускорить выпуск рабочей документации.
Динамические блоки в AutoCAD — это как, если бы обычные блоки были на стероидах. В обычном блоке AutoCAD вы можете использовать одну базовую точку, чтобы повернуть или масштабировать её, и это будет почти вся гибкость, которую он может предложить. Но в динамическом блоке вы можете растянуть его, изменить его форму, изменить его полностью на другой тип и многое другое.
Например, используя единый динамический блок, можно создать металлический профиль с выбором различных типов сечений и размеров этих сечений, а также с указанием необходимого представления (сбоку, сверху и т. п.), на котором можно будет динамически изменять длину профиля, и многое другое.
Платформа nanoCAD поддерживает динамические блоки, созданные в AutoCAD. Но не всё так просто. С довольно сложными в своём исполнении автокадовскими динамическими блоками возникают проблемы. Сложно спрогнозировать, будет ли «сломан» конкретный автокадовский динамический блок в nanoCAD или нет, но, как показывает практика, чем больше в динамическом блоке параметров, связанных с управлением геометрией объекта, тем выше шанс того, что в nanoCAD он будет работать некорректно.
Несколько примеров для наглядности. Данные динамические блоки были созданы в AutoCAD, где они работают корректно. Откроем dwg‑файл с этими блоками в nanoCAD и рассмотрим, как они будут отрабатывать при внесении изменений.
Первый пример: линейный обрыв. В данном объекте присутствует 1 линейный параметр, 1 параметр поворота, 2 линейных ручки и 1 ручка поворота.
![Динамический блок в AutoCAD Динамический блок в AutoCAD](https://habrastorage.org/getpro/habr/upload_files/532/449/f12/532449f128ee6fa137dc4243e56dc93c.png)
В nanoCAD объект работает без проблем: геометрия изменяется корректно при перемещении ручек.
![Тот же динамический блок в nanoCAD Тот же динамический блок в nanoCAD](https://habrastorage.org/getpro/habr/upload_files/aad/2b7/a5d/aad2b7a5d1aac1789618e9a1baa389b8.png)
Второй пример: неравнополочный уголок. Здесь на геометрию наложено большое количество зависимостей и параметров. В AutoCAD данный динамический блок работает в соответствии с примененными зависимостями.
![](https://habrastorage.org/getpro/habr/upload_files/d85/4f0/6a0/d854f06a08e9919cdb06a6daf81c9f56.png)
В nanoCAD же данный динамический блок «ломается»: при попытке внести изменения в представлении «Сбоку» некорректно изменяется длина, а при попытке выбора другого типа уголка геометрия сечения никак не изменяется.
![Результат изменения длины уголка на представлении «Сбоку» Результат изменения длины уголка на представлении «Сбоку»](https://habrastorage.org/getpro/habr/upload_files/e10/33a/3e8/e1033a3e81249531e22aa5647fb08d74.png)
Еще один пример некорректной работы автокадовского динамического блока в nanoCAD: текст не следует за перемещением выноски, а ручка, которая отвечает за изменение диаметра круга, лежит за пределами круга.
![](https://habrastorage.org/getpro/habr/upload_files/59a/f2b/793/59af2b7935b3dbee1fba358040f5406b.png)
Данную проблему усугубляет тот факт, что при попытке открыть и отредактировать в nanoCAD сложные в своём исполнении динамические блоки через «Редактор блоков», пользователь увидит данное сообщение:
![](https://habrastorage.org/getpro/habr/upload_files/63a/b00/6dc/63ab006dcc818ea0a15257c22a51d010.png)
Открыть и отредактировать более простые автокадовские динамические блоки через «Редактор блоков» nanoCAD можно, но особого смысла в этом нет. На примере уже рассмотренного линейного обрыва (первый пример) мы увидим такой результат:
![](https://habrastorage.org/getpro/habr/upload_files/754/ae8/dd9/754ae8dd9df082a692e594d5f9b88867.png)
То есть в данном случае мы будем иметь возможность видеть только геометрию объекта: самих ручек и параметров, которые мы видели в Редакторе блоков AutoCAD, здесь мы не увидим. «Редактор блоков» nanoCAD не содержит инструментария по созданию геометрических параметров, поэтому мы не сможем здесь добавить новые геометрические параметры, а также отредактировать существующие.
Очевидно, существует вопрос совместимости динамических блоков при переносе из AutoCAD в nanoCAD. И универсального решения данной головоломки на сегодняшний день, пока нет.
Рабочий вариант — тестировать и проверять, как работает тот или иной динамический блок в nanoCAD. Если он корректно отрабатывает и результаты устраивают, то динамический блок можно использовать дальше в рабочих чертежах, создаваемых в nanoCAD.
Если же динамический блок «ломается» и некорректно работает, значит нужно создавать данный блок с нуля, учитывая возможности инструментов nanoCAD. Об этом дальше.
Стандартный функционал для создания динамических блоков в nanoCAD
Как отмечалось выше, «Редактор блоков» nanoCAD не содержит инструментария по созданию геометрических параметров. Однако, в nanoCAD можно управлять геометрией блоков с помощью состояний видимости. Принцип создания таких блоков в nanoCAD очень прост: можно создавать в редакторе блоков различные примитивы, а затем присваивать разным примитивам соответствующее представление. А в самом проекте уже переключать созданные представления, показывая или скрывая нужные примитивы в блоке.
![Состояния видимости Состояния видимости](https://habrastorage.org/getpro/habr/upload_files/0ab/081/8ae/0ab0818ae922ffee6d77c7c60cb0217c.png)
Допустим, нам нужно создать условное обозначение дверного проёма с линией открывания двери. При этом мы хотим, чтобы ширина проёма (и длина полотна двери, соответственно) изменялась в зависимости выбранного типа двери.
![](https://habrastorage.org/getpro/habr/upload_files/986/262/c48/986262c4861c3350e957aa397531fb29.png)
Создаем геометрию как на рисунке и вызываем команду БЛОК, после чего указываем имя будущего блока и объекты, которые будут входить в блок (красные линии и зеленую дугу).
![](https://habrastorage.org/getpro/habr/upload_files/fad/cdd/f57/fadcddf5770b6f8d4d7e9fc99f02adaf.png)
Далее через команду БЛОКРЕД открываем созданный блок в «Редакторе блоков». В группе «Видимость» нажимаем на кнопку «Состояния видимости» и нажимаем ОК. После этого графически указываем любое удобное положение ручки видимости и название параметра (назовём его ТипДвери_План).
![](https://habrastorage.org/getpro/habr/upload_files/435/4d0/e26/4354d0e264bde23e38bcad1b4119b688.png)
В следующем диалоговом окне для параметра ТипДвери_План создаём необходимый набор состояний видимости. По умолчанию уже создано одно состояние видимости с наименованием «Состояние видимости0». Переименуем его в «Д21-9».
![](https://habrastorage.org/getpro/habr/upload_files/d36/ea0/036/d36ea003610d126c5a5b76becc2b88df.png)
При создании новых состояний видимости (будем наименовывать их Д21-10 и Д21-11) заранее ставим переключатель в положение «Скрыть все существующие объекты».
![](https://habrastorage.org/getpro/habr/upload_files/6a2/49a/b49/6a249ab49a6fa15df9dcd5a965c1ee54.png)
После подтверждения в группе «Видимость» станет доступен выпадающий список состояний видимости. В Д21–9 у нас уже есть геометрия. Поэтапно переключаемся с помощью этого списка на следующие состояния видимости и добавляем в каждом примитивы с соответствующей геометрией (в Д21–10 ширина проёма будет равна 1000, в Д21–11 будет равна 1100). Также в группе «Видимость» можно включить опцию «Режим видимости», который позволит видеть все примитивы в блоке, независимо от включенного состояния видимости.
![](https://habrastorage.org/getpro/habr/upload_files/567/dfa/ee1/567dfaee11c201efb8d48aa65f192670.png)
В результате у нас получился объект, геометрией которого мы управляем с помощью ручки видимости:
![](https://habrastorage.org/getpro/habr/upload_files/53b/839/7bb/53b8397bbe6fe325216ec6e8ffbde32a.png)
Но что же делать, если нужно создать сложные блоки с возможностью параметризации его геометрии? Здесь на помощь приходит Модуль «СПДС» и его инструмент, который называется «Мастер объектов».
Модуль «СПДС»
«Мастер объектов» — параметрический инструмент создания типовых объектов, позволяющий формировать правила поведения объекта в контексте сборки или заимствовать свойства существующих объектов из базы данных. Все объекты, созданные в «Мастере объектов», можно хранить в единой БД, обеспечивая тем самым централизованный доступ специалистов к этой базе данных.
![](https://habrastorage.org/getpro/habr/upload_files/697/ef7/33d/697ef733d794fa81d6f0c24e876d7b84.png)
В данном инструменте присутствуют встроенный механизм распознавания пользовательской графики с возможностью указания табличных параметров, редактор скриптов, редактор форм (форма – это диалоговое окно с параметрами и представлениями, которое открывается при вставке или редактировании объекта).
![](https://habrastorage.org/getpro/habr/upload_files/61a/8b5/d8e/61a8b5d8ec79880f8fad47177e29ea95.png)
![](https://habrastorage.org/getpro/habr/upload_files/7ee/07a/1bb/7ee07a1bb16c4e12cb5af396f0f04b74.png)
![](https://habrastorage.org/getpro/habr/upload_files/16b/138/f1f/16b138f1f2d86efeefc539bd517108c4.png)
![](https://habrastorage.org/getpro/habr/upload_files/06b/ed7/ed4/06bed7ed4c84f965924cab86608f3960.png)
Вернемся к нашему условному обозначению дверного проёма с линией открывания двери и создадим его с помощью Мастера объектов. Для начала создаем геометрию объекта с помощью примитивов и образмериваем ее следующим образом:
![](https://habrastorage.org/getpro/habr/upload_files/35c/c40/de6/35cc40de6fc4be9b79f8732b9a9c4f3c.png)
Горизонтальная зеленая линия здесь нужна для простановки углового размера, в будущем данную линию скрываем.
Далее переходим на вкладку СПДС – группа «Мастер объектов». Нажимаем кнопку «Точка вставки» для указания точки вставки будущего объекта. Далее нажимаем кнопку «Установить параметр» и поочередно выбираем проставленные размеры, чтобы назначить параметры, которые будут управлять размерами объекта (параметр для размера 200 назовём t, параметр для размера 900 – A, параметр для углового размера — v).
![](https://habrastorage.org/getpro/habr/upload_files/f78/395/379/f78395379163adbceb4c545040a41fca.png)
Снова нажимаем «Установить параметр» и выбираем горизонтальную зелёную линию. В диалоговом окне «Свойства объекта» в поле «Отображать» указываем 0 – это будет означать, что после создания объекта и его последующей вставки в чертеж данная линия не будет выводиться на экран.
![](https://habrastorage.org/getpro/habr/upload_files/8ea/e22/f5e/8eae22f5edae06ad2289644efe132183.png)
Аналогично установим параметр на дуговую линию открывания двери: в поле «Отображать» напишем будущее название параметра, который будет управлять отображением дуги – dol, в поле «Тип линии» укажем 2 – чтобы данная дуга всегда создавалась тонкой линией.
![](https://habrastorage.org/getpro/habr/upload_files/f6a/316/109/f6a3161093147751a5a919d0e39d1d5c.png)
Все необходимые манипуляции над эскизом нашего объекта мы выполнили. Теперь вызываем «Мастер объектов». Для создания нового объекта в диалоговом окне выбираем Объект – Новый, указываем папку, в которую будет сохранен объект, а также прописываем название объекта.
![](https://habrastorage.org/getpro/habr/upload_files/e6f/a32/7d7/e6fa327d7ce138d6058da44e891c792a.png)
После этого находим в дереве Мастера объектов раздел «Исполнение» и правой кнопкой мыши вызываем контекстное меню, в котором выбираем «Добавить исполнение».
![](https://habrastorage.org/getpro/habr/upload_files/7e8/9b0/722/7e89b07229c4b9ca7dd5bbcef19335ba.png)
В правой части диалогового окна кликаем правой кнопкой мыши на появившееся исполнение и выбираем «Параметрическое распознавание вида», после чего выбираем указываем все необходимые объекты в пространстве модели, включая размеры.
![](https://habrastorage.org/getpro/habr/upload_files/0fb/622/0c3/0fb6220c353d8b7fe932661f23d3bf3d.png)
После успешного распознавания на экран будет выведено данное сообщение:
![](https://habrastorage.org/getpro/habr/upload_files/d6e/d70/5e5/d6ed705e5edcec933eb621780504ed7b.png)
Теперь можно приступить к созданию скрипта. Для начинающего пользователя предусмотрен инструмент «Мастер скриптов» – механизм для самостоятельного пошагового составления алгоритмов, управляющих поведением объекта в момент вставки и редактирования объекта. Данный механизм позволяет в большинстве случаев не прибегать к ручному написанию скрипта. Мастер скриптов вызывается в разделе «Мастер» — «Мастер скриптов».
На шаге «Основные свойства» заполняются основные данные скрипта. Здесь необходимо заполнить значения основных параметров: Описание объекта (описывает общее название объекта), Имя объекта (указанное значение будет отображаться в шапке диалогового окна выбора параметров объекта), Тип объекта (служит для идентификации объекта как принадлежащего к какой-либо группе, желательно заполнить латинскими символами) и Подтип объекта (определяет подтип конкретного ГОСТа, желательно заполнить латинскими символами). Без указания значений данных параметров Мастер скриптов не позволит перейти к следующему шагу.
Изменение параметров моментально отражается в скрипте в окне обзора:
![](https://habrastorage.org/getpro/habr/upload_files/157/901/814/1579018149abe27705d308cfbc71c059.png)
На шаге «Свойства параметров» устанавливаются свойства и начальные значения для выбранных параметров всех распознанных видов. Здесь установим следующие значения:
Параметр А: зелёная галочка «Доступна для редактирования», описание параметра – Ширина проёма, значение по умолчанию – 900.
Параметр t: зелёная галочка «Доступна для редактирования», описание параметра – Толщина стены, значение по умолчанию – 200.
Параметр v: красная галочка «Используется», описание параметра – Угол, значение по умолчанию – 30.
![](https://habrastorage.org/getpro/habr/upload_files/341/f8c/11b/341f8c11bc740805b0871b74d9b3c045.png)
Также на этом шаге добавим параметр, управляющий отображением дуги (dol). Для этого необходимо кликнуть на любой параметр, в поле ввода/редактирования названия параметра ввести значение dol и нажать на кнопку "Добавить параметр" (направленная вверх зеленая стрелка).
![](https://habrastorage.org/getpro/habr/upload_files/dd3/08a/b74/dd308ab74ff334b7976233358304532d.png)
Установим для него следующие значения: красная галочка «Используется», описание параметра – Линия открывания двери, значение по умолчанию – 1.
![](https://habrastorage.org/getpro/habr/upload_files/ad3/e13/e29/ad3e13e2958f6abf02964d063405cfb7.png)
Переходим на следующий шаг – «Вычисление параметров». На этом шаге устанавливается способ выбора значений параметров, используемых в скрипте. Оставляем для всех параметров стандартное значение «Отображать диалог» и переходим «Вперёд».
![](https://habrastorage.org/getpro/habr/upload_files/5e1/621/769/5e162176991695f96eb7557a6b7258a2.png)
Условия отрисовки – здесь производится управление условиями отображения некоторых компонентов диалога редактирования объекта, в зависимости от параметров.
Введём название переключателя - «Линия открывания двери». Добавим переключатель «Линия открывания двери» в список переключателей, нажав на направленную вверх зеленую стрелку. В поле «Включён» пропишем dol=1, в поле «Выключен» — dol=0. Поставим галочку «Включён по умолчанию». Таким образом можно отдельно управлять отображением дуговой линии открывания двери.
![](https://habrastorage.org/getpro/habr/upload_files/02d/278/802/02d278802beab254a5db076ffe6e74be.png)
Добавим ещё 2 переключателя: «Угол 30» и «Угол 90», которые будут сгруппированы. Для «Угол 30» в поле «Включён» пропишем v=30, в поле «Выключен» — v!=30 (и поставим галочку «Включен по умолчанию»).
Для «Угол 90» в поле «Включён» пропишем v=90, в поле «Выключен» — v!=90 (галочку «Включен по умолчанию» здесь не ставим).
Таким образом в дальнейшем можно управлять углом открывания двери с помощью выпадающего списка с фиксированными значениями в 30 и 90 градусов.
![](https://habrastorage.org/getpro/habr/upload_files/fd9/652/d24/fd9652d24038f78a6b8c34075e680767.png)
Шаг «Рабочие плоскости» пропускаем, в нашем случае здесь ничего указывать не надо, переходим к шагу «Скрыть/показать параметры». На данном шаге указываем, какие параметры будут отображаться в диалоге вставки и редактирования объекта. Убираем галочки с параметров v и dol – значения данных параметров будем определять с помощью переключателей, поэтому их отображение в диалоге вставки и редактирования излишне.
![](https://habrastorage.org/getpro/habr/upload_files/155/cf9/bcb/155cf9bcb5b01c99a1c01a8545aa49d4.png)
Шаг «Условия отображения» пропускаем, а на шаге «Переключатели управления» дополнительно ставим галочку «Отрисовывать объект во время вставки», чтобы при выборе точки вставки и вектора направления объект отрисовывался на экране.
![](https://habrastorage.org/getpro/habr/upload_files/c49/4d4/0fb/c494d40fb274b20a28d930c2e73791ab.png)
На шаге «Текущий скрипт» можно проверить скрипт и сохранить его. Созданный объект отобразится в базе элементов.
![](https://habrastorage.org/getpro/habr/upload_files/3a9/3df/4af/3a93df4af897127a2d96f89cacbecec1.png)
При вставке будет отображаться диалоговое окно, в котором можно задавать значения параметров: указывать размеры, включать или отключать отображение линии открывания двери и выбирать нужный угол открывания.
![](https://habrastorage.org/getpro/habr/upload_files/5e4/197/56f/5e419756fdab5da04075de877d8ad93e.png)
![](https://habrastorage.org/getpro/habr/upload_files/1c7/f55/ded/1c7f55ded8f2565027794114b9c1b1f0.png)
![](https://habrastorage.org/getpro/habr/upload_files/f65/4de/40e/f654de40e2a25cc9e47082b55bddbd3c.png)
Кроме этого, так как на шаге «Свойства параметров» для параметров A и t мы ставили зелёную галочку «Доступна для редактирования», то значения данных параметров можно вводить и через панель «Свойства»:
![](https://habrastorage.org/getpro/habr/upload_files/77b/bfc/af3/77bbfcaf3c9f67a86840e5f26859a3ac.png)
При необходимости можно усложнить данный объект. Например, можно ввести табличные параметры, чтобы использовать фиксированные значения параметров:
![](https://habrastorage.org/getpro/habr/upload_files/96c/bd9/53b/96cbd953bb2412f2b5be3622b9aa8855.png)
После обновления скрипта при вставке нашего объекта в диалоге редактирования объекта можно будет выбирать заданные значения в разделе «Табличные параметры»:
![](https://habrastorage.org/getpro/habr/upload_files/b1f/503/10b/b1f50310b61c76de91431bd6892a079b.png)
Если нужно добавить ручку на объекте, с помощью которой графически можно будет управлять параметром t, то в таком случае нужно будет уже вручную дополнить скрипт. В нашем случае в Мастере объектов выбираем раздел «Методы» — Обработчики событий – SetGripPoint и прописываем следующий текст (выделен на рисунке):
function SetGripPoint {
NGrip = 2;
pntGrip0 = pntOrigin;
pntGrip1 = pntOrigin-t*vecPlane;
};
![](https://habrastorage.org/getpro/habr/upload_files/558/cf8/3d9/558cf83d9d10d62b60057f050ce09a92.png)
Теперь выбираем раздел «Методы» — Обработчики событий – OnMoveGripPoint и добавляем следующий текст (выделен на рисунке):
function OMoveGripPoint {
if (NMovingGrip == 0) {
pntOrigin = pntGrip0;
};
//ручка толщины стены
if (NMovingGrip == 1) {
t = max ((vecLen(pntGrip0 - pntGrip1)/rScl),1);
vecPlane = pntGrip1 + pntGrip0;
};
};
![](https://habrastorage.org/getpro/habr/upload_files/917/e54/37a/917e5437affe536e8a0b84d39d8ecea3.png)
После сохранения скрипта на объекте появится дополнительная ручка, которую можно тянуть, чтобы изменять длины отрезков, которые связаны с параметром t:
![](https://habrastorage.org/getpro/habr/upload_files/737/f90/987/737f9098794e086a42a3772474ad2cc2.png)
Функционал Мастера объектов довольно обширный, здесь показаны лишь несколько примеров, как его можно использовать. Для его самостоятельного изучения есть необходимая документация. В разделе «Помощь» можно открыть подробную справку по работе с «Мастером объектов» или сразу перейти в раздел «Синтаксис языка скриптов». Также в данной справке собраны различные примеры с пошаговым описанием создания объекта, с помощью которых можно потренироваться и понять логику работы «Мастера объектов».
![](https://habrastorage.org/getpro/habr/upload_files/717/8f6/6ba/7178f66bafe428d1a620f1e899a1c88c.png)
При этом в базу элементов Модуля «СПДС» уже включён обширный набор наиболее часто используемых условных обозначений, металлических профилей, сборных железобетонных изделий, деталей креплений и др.
Каждый объект имеет параметры, соответствующие стандарту, ГОСТу, серии. Поэтому с большей долей вероятности пользователь сможет найти для себя все нужные объекты в предоставляемой библиотеке.
Надеюсь, что помог вам данной статьей немного разобраться с нюансами работы с динамическими блоками в nanoCAD. ПО есть куда расти, особенно в части корректного переноса динамических блоков из AutoCAD. Но, если разобраться в деталях, то работать с динамическими блоками в nanoCAD вполне реально, особенно если речь идет о создании новых объектов.
Если возникли вопросы, смело оставляйте комментарии к статье, постараюсь оперативно ответить. Спасибо за внимание.
Surrogate
@o_kiryanov, спасибо за столь подробный разбор!!!
Для любого блока в нанокаде, можно прописать скрипт?
o_kiryanov Автор
Добрый день!
Скрипты создаются только для тех объектов, которые Вы создаете с помощью Мастера объектов модуля СПДС. Если блок создается в стандартном Редакторе блоков nanoCAD, то в таком случае скрипт не создается.