Первые шаги в мир программирования под nanoCAD
Когда в ноябре прошлого года вышел бесплатный nanoCAD 2.0, мы говорили, что в выпускаемой версии уже заложены инструменты для разработки приложений. В частности, для основной массы пользователей предоставляется возможность быстрого написания утилит и небольших приложений с помощью сценариев (скриптов) на базе ActiveX Automation (Java-script или VB-script). Но кто знает, как воспользоваться этой возможностью? :-)
Предлагаю сделать совместные первые шаги в мир программирования под nanoCAD и создать небольшую программу, которая взаимодействует с пользователем через командную строку и автоматически вычерчивает линии в заданном порядке на рабочем чертеже nanoCAD. Отталкиваясь от этого скрипта и дав волю фантазии, вы сможете сделать свое приложение, которое, например, автоматически делает за вас диплом :-)
В этом демонстрационном примере мы должны получить примерно вот такое:

А понадобится нам для этого следующее:
Кстати, ищете интересную работу, связанную с программированием? У нас открыты вакансии: http://habrahabr.ru/company/nanosoft/vacancies/
На каком языке писать выполняемый скрипт в общем-то не важно: nanoCAD поддерживает как Java-script, так и Visual Basic script. Для данной статьи я выбрал VB, так как в последнее время я его чаще использую.
Когда я размышлял на основе чего продемонстрировать работу VB-скрипта, у меня возникло желание перевести какой-либо LISP-скрипт на VB-скрипт, продемонстрировав таким образом, что это возможно. Поискав в Интернет, я наткнулся на курсовой проект «Разработка программы на языке LISP для построения кривых Серпинского i-го порядка». В нем приведен достаточно подробный алгоритм, объясняющий как с помощью рекурсивных функций построить фигуру, приведенную на рисунке 1. Давайте сделаем то же самое, но на VBS.
VBS-программа под nanoCAD не подразумевает никакой входной функции – скрипт начинает исполняться с первых строчек и до конца. Основная процедура программы достаточно простая – один цикл. С него и начнем:
Из кода (да и из описания курсового проекта) мы видим, что кривая Серпинского строится четырьмя рекурсивными функциями: они названы A(), B(), C() и D() функциями. Плюс к этому существует специализированная функция Line(Direction, Size), которая просто рисует обычную линию в нужном масштабе и под нужным углом. Определения этих функций осуществляется обычными средствами VBS – например, вот так будет выглядеть функция A() на LISP и на VBS:
Эти дополнительные пять функций размещаем в конце основного скрипта. Осталось только узнать, как выводить графику в nanoCAD и как взаимодействовать с пользователем.
Во-первых, VB-скрипт – это обычный текстовый файл с расширением .vbs. Он может быть вызван в среде nanoCAD с помощью команды VBS (см. рисунок 2, соответственно Java-скрипт с помощью команды JS). Все просто — указываем путь до скрипта и, если он написан без ошибок, то он выполняется. Если в скрипте допущены ошибки, то сообщение об этом появится в командной строке.
VB-синтаксис абсолютно стандартный, поэтому смело используем DIM, SET, FOR-NEXT, IF-THEN-ELSE, объявления переменных, массивы, стандартные функции (типа, CStr() или MsgBox()), объявления функций и/или операции целочисленного деления. Все должно работать и особо этому учить не буду :-)
Для доступа к текущему открытому чертежу используем ThisDrawing. При этом если мы планируем чертить в пространстве модели (т.е. в основном чертеже, закладка Модель), то определяем коллекцию ModelSpace через вот такую конструкцию:
Доступ к командной строке осуществляется через объект Utility. В частности, нижеприведенный скрипт выводит в командную строку классическое приветствие:
С помощью функций GetInteger(), GetPoint(), GetString(), GetReal(), GetEntity(), GetDistance(), GetAngle() и некоторых других можно запросить данные из командной строки. Например, вот так:
Зная куда выводить данные и как взаимодействовать с пользователем, мы можем приступить к созданию более осмысленной программы.
Какие еще функции можно использовать в программе под nanoCAD? В общем-то все те, что определены структурой DWG файла: создание линии, дуги, окружности, штриховки, получение точки, полярных координат, операции с открытие/закрытием файла, работа со слоями, переменными и т.д. Эти функции обычно описаны в SDK-документации к DWG: либо Autodesk (www.autodesk.com, раздел Developer Center), либо Open Design Alliance (http://www.opendwg.org/, раздел DWGdirect).
Мы будем активно использовать функцию AddLine(startpoint, endpoint), которая создает обычную 2D линию. Также в своих скриптах вы можете воспользоваться:
Все координаты, которые вы передаете в nanoCAD могут быть трехмерными. При этом изначально это должен быть трехмерный массив, но удобнее передавать строчку вида «x,y,z», где – x, y, z трехмерные координаты. Т.е. вот таким образом:
Еще в своем скрипте я решил раскладывать линии по различным слоям. Для этого я создал два новых слоя в начале программы, а затем менял активный слой:
Вот что мы получаем в результате – см. рисунок 3. Конечно, практической полезности (кроме как эстетического удовольствия) этот результат не дает, но дает пищу для размышления и самосовершенствования.
Демонстрационный скрипт можно скачать здесь: demoscript.rar. Скачайте, разархивируйте, например, на C:\, откройте в текстовом редакторе, изучите и запустите на исполнение в nanoCAD 2.0. И небольшой совет: не задавайте порядок кривых выше 4 — подвиснете :-)
Предлагаю сделать совместные первые шаги в мир программирования под nanoCAD и создать небольшую программу, которая взаимодействует с пользователем через командную строку и автоматически вычерчивает линии в заданном порядке на рабочем чертеже nanoCAD. Отталкиваясь от этого скрипта и дав волю фантазии, вы сможете сделать свое приложение, которое, например, автоматически делает за вас диплом :-)
В этом демонстрационном примере мы должны получить примерно вот такое:

А понадобится нам для этого следующее:
- nanoCAD 2.0 (можно скачать на сайте nanocad.ru или
torrents.rurutracker.org); - любой текстовый редактор (я использую Notepad++).
Кстати, ищете интересную работу, связанную с программированием? У нас открыты вакансии: http://habrahabr.ru/company/nanosoft/vacancies/
Постановка задачи
На каком языке писать выполняемый скрипт в общем-то не важно: nanoCAD поддерживает как Java-script, так и Visual Basic script. Для данной статьи я выбрал VB, так как в последнее время я его чаще использую.
Когда я размышлял на основе чего продемонстрировать работу VB-скрипта, у меня возникло желание перевести какой-либо LISP-скрипт на VB-скрипт, продемонстрировав таким образом, что это возможно. Поискав в Интернет, я наткнулся на курсовой проект «Разработка программы на языке LISP для построения кривых Серпинского i-го порядка». В нем приведен достаточно подробный алгоритм, объясняющий как с помощью рекурсивных функций построить фигуру, приведенную на рисунке 1. Давайте сделаем то же самое, но на VBS.
![]() |
| Рисунок 1. Кривая Серпинского 4-го порядка, на примере которой рассмотрим принципы программирования под nanoCAD. |
Структура программы
VBS-программа под nanoCAD не подразумевает никакой входной функции – скрипт начинает исполняться с первых строчек и до конца. Основная процедура программы достаточно простая – один цикл. С него и начнем:
| Код на LISP | Код на VBS |
|---|---|
( setq h ( div *SquareSize* 4 ) ) |
h = SquareSize \ 4 |
Из кода (да и из описания курсового проекта) мы видим, что кривая Серпинского строится четырьмя рекурсивными функциями: они названы A(), B(), C() и D() функциями. Плюс к этому существует специализированная функция Line(Direction, Size), которая просто рисует обычную линию в нужном масштабе и под нужным углом. Определения этих функций осуществляется обычными средствами VBS – например, вот так будет выглядеть функция A() на LISP и на VBS:
| Код на LISP | Код на VBS |
|---|---|
defun A ( k ) |
Sub A(k) |
Эти дополнительные пять функций размещаем в конце основного скрипта. Осталось только узнать, как выводить графику в nanoCAD и как взаимодействовать с пользователем.
Первые шаги
Во-первых, VB-скрипт – это обычный текстовый файл с расширением .vbs. Он может быть вызван в среде nanoCAD с помощью команды VBS (см. рисунок 2, соответственно Java-скрипт с помощью команды JS). Все просто — указываем путь до скрипта и, если он написан без ошибок, то он выполняется. Если в скрипте допущены ошибки, то сообщение об этом появится в командной строке.
![]() |
| Рисунок 2. Java и Visual Basic скрипты вызываются командами JS и VBS, соответственно. |
VB-синтаксис абсолютно стандартный, поэтому смело используем DIM, SET, FOR-NEXT, IF-THEN-ELSE, объявления переменных, массивы, стандартные функции (типа, CStr() или MsgBox()), объявления функций и/или операции целочисленного деления. Все должно работать и особо этому учить не буду :-)
Для доступа к текущему открытому чертежу используем ThisDrawing. При этом если мы планируем чертить в пространстве модели (т.е. в основном чертеже, закладка Модель), то определяем коллекцию ModelSpace через вот такую конструкцию:
Dim ms |
Доступ к командной строке осуществляется через объект Utility. В частности, нижеприведенный скрипт выводит в командную строку классическое приветствие:
Dim ut |
С помощью функций GetInteger(), GetPoint(), GetString(), GetReal(), GetEntity(), GetDistance(), GetAngle() и некоторых других можно запросить данные из командной строки. Например, вот так:
Do |
Зная куда выводить данные и как взаимодействовать с пользователем, мы можем приступить к созданию более осмысленной программы.
Базовые функции
Какие еще функции можно использовать в программе под nanoCAD? В общем-то все те, что определены структурой DWG файла: создание линии, дуги, окружности, штриховки, получение точки, полярных координат, операции с открытие/закрытием файла, работа со слоями, переменными и т.д. Эти функции обычно описаны в SDK-документации к DWG: либо Autodesk (www.autodesk.com, раздел Developer Center), либо Open Design Alliance (http://www.opendwg.org/, раздел DWGdirect).
Мы будем активно использовать функцию AddLine(startpoint, endpoint), которая создает обычную 2D линию. Также в своих скриптах вы можете воспользоваться:
- AddCircle(center, radius) – окружность;
- AddArc(center, radius, startangle, endangle) – дуга;
- AddEllipse(center, majoraxis, radiusratio) – эллипс;
- AddPolyline(verticeslist) – полилиния;
- AddText(textstring, insertionpoint, height) – однострочный текст;
- AddMText(insertionpoint, width, text) – многострочный текст;
Все координаты, которые вы передаете в nanoCAD могут быть трехмерными. При этом изначально это должен быть трехмерный массив, но удобнее передавать строчку вида «x,y,z», где – x, y, z трехмерные координаты. Т.е. вот таким образом:
Dim ms |
Еще в своем скрипте я решил раскладывать линии по различным слоям. Для этого я создал два новых слоя в начале программы, а затем менял активный слой:
Set oLyrLine1 = ThisDrawing.Layers.Add("Связи") |
Результат
Вот что мы получаем в результате – см. рисунок 3. Конечно, практической полезности (кроме как эстетического удовольствия) этот результат не дает, но дает пищу для размышления и самосовершенствования.
![]() |
| Рисунок 3. Java и Visual Basic скрипты вызываются командами JS и VBS, соответственно. |
Демонстрационный скрипт можно скачать здесь: demoscript.rar. Скачайте, разархивируйте, например, на C:\, откройте в текстовом редакторе, изучите и запустите на исполнение в nanoCAD 2.0. И небольшой совет: не задавайте порядок кривых выше 4 — подвиснете :-)



комментарии (25)
torrents.rurutracker.org в этот раз не закроют.З.Ы. Или вы так тонко намекаете на Autodesk, что вроде как они и не предъявляли претензий к torrents.ru.
смешно и грустно. а есть биндинги к нормальным языкам типа lua или python?
почему нельзя использовать текущую БЕСПЛАТНУЮ версию nanoCAD для задач студентов и преподавателей? Учитесь — скачайте nanoCAD, установите на своем домашнем компьютере/ноутбуке, выполняйте домашние задания, свои проекты, курсовые, дипломные… Обучаете — скачайте nanoCAD, поставьте в учебном классе, разработайте учебные курсы и преподавайте на здоровье.
Регистрация на сайте nanoCAD — добровольная и НЕ обязательная! Любая установленная копия nanoCAD является лицензионной и она разрешена для коммерческой, учебной и другой проектной деятельности.
Какое особое приглашение вам необходимо?
nanoCAD ничем не ограничен, бесплатен и легален. Используйте, пожалуйста. Все регистрации на сайте — нужны только для того, чтобы особо недоверчивым сказать об этом с помощью официального сертификата. Но эта бумага не обязательна!
кстати, а у вас нет тем, чтобы быть максимально похожими на компас/акад? исключительно в цветовых гаммах
Я использую «Windows по умолчанию» — похоже на AutoCAD средних версий…
попробовал скормить акадовский файл скриптов — не съел.
Судя по этому посту, скрипты есть, и даже в более расширенном варианте
У нас пока нет диалогов (только командная строка), хорошей документации и т.д. Но все будет в дальнейшем. А сейчас можно делать первые шаги немного хакерскими способами (шевелить мозгами, пробуя «работает-не работает»). Есть большой шанс, что многое будет работать :-)
PS. В меню средств нет вкладки адаптация… версия 2.0.1541.779 сборка 1195 Механика
2. Где то есть хелп с объектной моделью и свойствами и методами всех объектов?
ЗЫ. К программированию уже не относится. В автокаде по правой кнопке мыши можно настроить повтор последней команды (с 2004го можно в зависимости от времени нажатия) — у вас только контекстное меню вылезает, можно «допилить»? И сделайте чтобы тулбары можно было закреплять. И еще как убрать вкладочки с именами чертежей?
А вообще удачи — хорошая вещь получается.
2. Хелп с объектой моделью = объектной модели DWG, которая описана в SDK-документации Autodesk и ODA. К сожалению, доступ к SDK-документации платный. Более того, компания Autodesk ограничивает доступ к своему SDK по принципу «нравишься ты ей или нет» (т.е. даже заплатив им деньги, не факт, что вам дадут доступ к SDK и формату DWG). А вот ODA более открыты — «Предлагается несколько уровней членства в Альянсе: если вы не собираетесь включать библиотеки ODA в коммерчески распространяемые продукты, то можете ограничиться уровнем ассоциативного членства ($250 за первый год и $100 за каждый последующий). Коммерческий уровень дает вам право продавать не более 100 копий производных продуктов в год и стоит $2000 за первый год и $1500 за последующие. Если вы хотите продавать свое ПО без ограничений, то придется перейти на следующий уровень и заплатить $5000 в первый год и $3000 за каждый последующий.» (http://isicad.ru/ru/articles.php?article_num=13636).
Для всех остальных остается метод проб и ошибок :-) Ну, либо искать chm файл с описанием функций DWG в просторах Интернет :-)
P.S. В nanoCAD по правой кнопке в контекстном меню также появляется последняя команда. Только в AutoCAD 2006 она сверху меню, а у нас в середине :-) Но можно сделать также как в AutoCAD.
Про закрепление тулбаров внес в пожелания. А вкладочки с именами чертежей зачем убирать — имхо, очень удобно переключаться между документами.
2. Ну то есть в принципе можно «тиснуть» хэлп от автокада — модель будет та же. Вообще чудесно
Про последнюю команду не поняли. Пример — команда рисования линии, тыкаем мышкой три раза — имеем три линии, правой кнопкой тыкнули — вышли из режима рисования линий. Теперь если опять тыкаем правую кнопку, у вас вылезает контекстное меню, в автокаде можно настроить, что повторяется последняя команда (как будто нажали Enter) — то есть опять рисуем линии. С 2004го можно настроить так, что если быстро кликнули правой кнопкой — последняя команда, если нажали и подержали — контекстное меню.
Для вкладочек лучше все таки галочку в настройках — надо/не надо. А то ИМХО у всех разное — мое например считает, что они только место занимают =)