Ошибка неверный тип аргумента stringp nil в автокаде

Обновлено: 07.07.2024

мне нужно использовать update-directory-autoloads функция в маленьком El-скрипте. Когда я пытаюсь вызвать эту функцию с аргументом, который является имя каталога, я получаю эту ошибку:

Wrong type argument: stringp, nil.

вызов выглядит так: (update-directory-autoloads "

генерация файлов автозапуска плохо документирована. Вы испытываете проблему, которая возникает, потому что вы не установили переменную generated-autoload-file . Попробуйте следующее:

обновить generated-autoloads-file привязка должна быть местом, где вы хотите жить.

когда вы Wrong type argument: foo, bar. вы должны M-: (setq debug-on-error t) RET а затем воспроизвести ошибку, чтобы получить обратную трассировку. На самом деле, вы можете установить debug-on-error как это в вашем .в Emacs и Emacs, как правило, остается вполне доступной.

Эта лекция описывает особенности написания программы и отладки в среде VisualLISP.

СОДЕРЖАНИЕ:

Текст программы в редакторе

Возьмем пример для отладки: Пример.

если пользоваться редактором VLISP, то программирование облегчено благодаря контекстно настраиваему интерфейсу редактора. Можно настроить цвета основных элементов программы. Стандартно цвета настроены следующим образом:

Описание кода программы в редакторе

Скобки

При отображении скобок, при вводе закрывающей скобки курсор указывает, с какой открывающей скобкой будет связана закрывающая.
При двойном щелчке мыши на любой скобке, выделяется всё выражение объединенное этой парой скобок.

Далее, если вы написали всё что хотели в теле программы, переходим к следующему этапу.

Загрузка программы

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

Программа не загружается

Программа выдает ошибки различного характера.

; error: какая-то ошибка

Давайте рассмотрим их:

Скобки

; error: malformed list on input

; error: extra right paren on input

A если при загрузке вдруг начинается выполнение кода.

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

Кавычки

; error: malformed string on input

Оператор If

Наиболее часто встречаемая ошибка:

; error: too many arguments: (IF (= A B) (SETQ A 3) (PRINT A) (SETQ A 4))

Напомню синтаксис оператора : (if (условие) (выражение-то) (выражение-иначе)). Если необходимо в каждом из выражений осуществить более одного действия, то надо пользоваться оператором progn. Но об этом забывают часто и в одном операторе if получается более трех аргументов. Если больше, то будет ошибка.

Оператор setq

Напомню синтаксис оператора : (setq имя_переменной выражение имя_переменной выражение . ). Таким образом, идет попарное присваивание аргументов, стоящих на четных местах, в переменные, записанные на нечетных местах

(setq firs "1" 4 as (- (length lst) 1))
; bad variable name in SETQ: 4

(setq firs "1" 4 as)
; error: too few arguments in SETQ: (SETQ FIRS "1" 4 AS)

Если неизвестно, где в коде программы возможна ошибка, а код программы содержит несколько подпрограмм, необходимо разделить загрузку на отдельные этапы. Например, проводить загрузку последовательно по подпрограммам. Тогда легче определить, где содержится ошибка.

Если исключены ошибки вышеперечисленных типов и программа загружается успешно, это победа 🙂

Программа загружена

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

Дальше можно переходить в Автокад и тестировать программу. Запуск программы осуществляется через командную строку:

(имя_функции аргументы)

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

Ошибки, которые обнаруживаются при выполнении программы

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

(nth 3 b)
; error: bad argument type: consp nil

(setq a (list 1 2 3 4))
(nth "3" a)
; error: bad argument type: fixnump: "3"

error: Too many arguments

error: Too few arguments

error: bad argument type

error: no function definition.

Последовательность действий при отладке

Программа загружается, но не работает как нужно. Тогда будем просматривать код программы для поиска места, в котором программа совершает ошибку.

Необходимо поставить паузу/останов на код программы на тот этап, в котором предполагается ошибка. Снова производим запуск программы.

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

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

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

Шаги выхода из отладки и перезапуска

1. исправляем ошибку
2. расставляем новые паузы, избавляемся от лишних
3. сохраняем код программы
4. Загружаем программу
5. прерываем отладку
6. запускаем программу

Функции, отклоняемые AutoCADом

Аргументы проходящих в AutoCAD функций недействительны ( таких, как функции GETVAR "NOSUCH" или SETVAR с только читаемыми системными переменными), или функция, переходящая сама в себя, недействительна в текущем контексте.

Функция снабжена некорректным типом аргумента.( Например, вы не можете взять STRLEN как целое.)

Список , объявленный функцией ASSOC, не состоит из "(нужная кла- виша ) списков.

Аргумент, проходящий в функцию ENTMOD,имеет неподходящий вход списка данных (так же , как возвращаемый функцией ENTGET).

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

Неподходяще организован список, которым снабжена функция. Это мо- жет случиться , если действительное число начинает десятичная точка; в таком случае вы должны использовать введение 0.

Недействителен пункт , встречаемый функцией TYPE.

Недействителен пункт , встречаемый функцией FOREACH.

Недостаточно определена точка ( список двух действительных чисел) проходящая в функцию , ожидающую точку. Будьте внимательны, не начинайте действительное число с десятичной точки; в таком случае, вы должны ис- пользовать введение 0.

То же самое ,что выше.

Первый аргумент функции BOOLE (Булева функция) должно быть це- лое мажду 0 и 15.

Эта ошибка может быть вызвана неправильным местоположением деся- тичной точки и с другой стороны, недостаточно сформулированным выражени- ем.

Пользователь ввел CTRL C , в то время , когда функция обрабаты- валась.

Деление на нуль не разрешается.

Встретились одни или более лишние правые скобки.

Описатель файла для операции ввода-вывода (I/O) не такой , как у доступного файла.

Пользователь нажал CTRL C в ответ на подсказку.

Аргумента, обозначенного в функциях LOG или SQRT,нет в диапазоне.

Аргумент функции вместо целого числа обозначен действительным. Например, (LSH val 1.2)

Аргумент в GCD отрицательное число или ноль.

Количество аргументов определяемой пользователем функции не соот- ветствует количеству формальных аргументов, объявленных функцией DEFUN.

Недостаточен участок памяти node , для того чтобы вместить потреб- ные действия. См. главу 6.

Недостаточен участок памяти heap , чтобы вместить строку текста. См. главу 6.

Неправильный тип аргумента или аргумент вне диапазона.

Выражение содержит неверный знак.

Точечные пары-это списки, содержащие два элемента, разде- ленные конструкцией "space-period-space". Вы можете получить это сооб- щение об ошибке , если вы начинаете действительное число с десятичной точки; в таком случае вы должны использовать введение 0.

Стек AutoLISPа переполнен. Это происходит из-за чрезмерного повторения функции или очень больших списков аргументов функции. Попы- тайтесь увеличить среду LISPSTACK для переменных.

Это может иметь место , если действительное число начинает деся- тичная точка; в таком случае вы должны использовать введение 0 .

Была сделана попытка вычислить функцию , которая имеет нулевой определитель.

Это результат вызова функций QUIT или EXIT. Эти функции сейчас не используются в AutoLISPе.

Мне пришлось изменить стили текста и атрибуты ширины нескольких блоков в Autocad. Было 10-30 блоков на каждого dwg и почти 100 dgg, и я не мог потрудиться вручную конвертировать каждый блок в новый стандарт.

Учитывая то, что сценарий с простым изменением ширины на 1 работает 100% времени, я решил, что проблема не в том, чтобы добавить его в набор автозагрузки / открыть его в редакторе визуальных шрифтов, а скорее в моем добавлении к самому коду. Однако строка, которую я добавил, чтобы изменить стиль текста (entmod (subst (cons 7 "Standard") (assoc 7 entinfo) entinfo)) не отличается от строки для изменения ширины текста.

Если у кого-то есть понимание, я буду признателен. У меня есть опыт работы с другими языками программирования, но я начинающий, когда дело доходит до Autolisp / lisp.

2 ответа

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

Без аргумента списка фильтров, разрешающего только приписанные блоки, ваш выбор может включать любой тип сущности, то есть вызов entnext вернет вызов nil для любых объектов без субтитр. Следовательно, вызов entget вернет следующую ошибку, свидетелем которой вы являетесь:

ошибка: неверный тип аргумента: lentityp nil

Решение состоит в том, чтобы включить список фильтров, чтобы разрешить только выбор приписанных блоков:

Строка режима _:L также исключает объекты на заблокированных слоях.

(setq sslen (sslength ss))

Без проверки правильности выбора переменная ss может быть nil , что приведет к (sslength ss) возвращению ошибки:

ошибка: неверный тип аргумента: lselsetp nil

(entmod (subst (cons 41 1) (assoc 41 entinfo) entinfo))
(entmod (subst (cons 7 "Standard") (assoc 7 entinfo) entinfo))

Здесь второе subst выражение заменяет группу 7 DXF в оригинале списке данных DXF, а не данные DXF, которые были изменены после замены группы 41 DXF. Это приведет к обращению изменения коэффициента ширины.

Внедрение исправлений для вышеуказанных проблем (и несколько других изменений) может привести к следующему коду:

плохой ; ошибка: неверный тип аргумента: lentityp nil

Является результатом использования пустой переменной для сущности.

Когда вы используете (setq ent (entnext blck)) , вам следует проверить, не равен ли ему ноль.

При устранении неполадок AutoLisp, когда вы видите lentityp или stringp = nil, тогда используемая вами переменная была установлена на nil, и вам нужно найти, где и почему.

Когда Вы начнёте писать свои программы, то неизбежно столкнетесь с необходимостью решения проблем, которые в программировании носят название отладка программы.

Давайте рассмотрим некоторые технические приемы, которые помогут нам при создании новых программ на языке AutoLISP. К таким приемам относятся:

  • Проверка фрагментов кода в окне «КонсольVisual LISP».
  • Отслеживание парных кавычек.
  • Поиск парных скобок в процессе и после написания кода.
  • Использование окна «Контрольное значение»

Проверка фрагментов кода в окне «КонсольVisual LISP».

Вы можете проверить, насколько правильно вы понимаете синтаксис функции.

Давайте для примера рассмотрим функцию getpoint . Функция getpoint помогает нам задать координаты точки при помощи мыши. Давайте поищем эту функцию в справочной системе. Система выдаст следующую информацию. См. Рис. 1.

Отладка программы

Мы видим, что функция getpoint имеет два аргумента .

Первый, из которых pt – это координаты точки.

При чем оба аргумента не являются обязательными. Это следует из того, что они заключены в квадратные скобки ( [pt] [msg] )

Давайте откроем окно « КонсольVisual LISP » щелкнув по одноименной кнопке. См. Рис. 2.

Отладка программы

Рис. 2. Добавляем ( getpoint )

Введем функцию ( getpoint ) без аргументов и нажмем <Enter> .

Активным станем AutoCAD, где надо указать любую точку.

После указания точки, AutoCAD снова вернет нас в редактор Visual LISP.

В консоли появятся координаты указанной точки. См. Рис. 3.

Отладка программы

Рис. 3. Координаты указанной точки.

Теперь давайте попробуем использовать аргументы . Введем функцию с первым аргументом ( getpoint pt ) и нажмем <Enter> . См. Рис. 4.

Отладка программы

Рис. 4. Ошибка: не верный тип аргумента

Очевидно, переменная pt не содержит в себе значения. (значение nil означает, что аргумент не имеет значения). Давайте это проверим. Наберем в следующей строке pt и нажмем <Enter> . См. Рис. 5.

Отладка программы

Рис. 5. Проверка значения переменной pt .

Консоль подтвердит наши предположения.

Давайте подставим, вместо pt координаты точки начало координат ( getpoint ( 0 0 0 )) и нажмем <Enter> . См. Рис. 6.

Отладка программы

Рис. 6. Ошибка: неверная функция.

1) После открывающийся скобки добавить функцию list : ( list 0 0 0 )

2) Или перед открывающийся скобкой поставить апостроф: ‘ ( 0 0 0 )

Давайте снова напишем функцию, но уже с апострофом ( getpoint ‘ ( 0 0 0 )) и нажимаем <Enter> . См. Рис. 7.

Отладка программы

Рис. 7. Добавляем ( getpoint ‘ ( 0 0 0 )) .

Функция сделает активным AutoCAD и мы увидим, что указатель мыши как будто привязан ниточкой к началу координат. См. Рис. 8.

Отладка программы

Рис. 8. Точка задается относительно другой точки.

И теперь мы можем задать точку, относительно другой точки, координаты которой являются первым аргументом функции getpoint . Щелкните в любом месте, и консоль вернет координаты выбранной точки. См. Рис. 9.

Отладка программы

Рис. 9. Координаты указанной точки.

Отладка программы

Нажимаем <Enter> . И видим, что наша надпись появилась в командной строке. См. Рис. 11.

Отладка программы

Рис. 11. Надпись в командной строке.

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

Давайте посмотрим пример применения этой функции в программе my_otr, которую я приводил в уроке: Построение отрезков в AutoCAD.

Открываем эту программу, выделяем вторую и третью строки и нажимаем на кнопку « Загрузить выделенный фрагмент ». См. Рис. 12.

Отладка программы

Рис. 12. Загрузка выделенного фрагмента.

Далее на просьбу в командной строке, выбираем первую точку (координаты этой точки при помощи функции присвоения setq запоминают в переменной р1 ). Появится следующая просьба. Вторую точку мы уже выбираем, ориентируясь на первую.

После указания второй точки в окне консоли появятся координаты выбранных точек. См. Рис. 13.

Отладка программы

Рис. 13. Координаты выбранных точек.

Таким образом, мы проверили, как у нас работает выделенный фрагмент программы.

Я думаю, что после такова исследования, мы уже имеем четкое представление о том, как работает эта функция.

Отслеживание парных кавычек.

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

В 2000 году с появлением Visual LISP этот процесс стал значительно более простым.

Давайте начнем с простого и рассмотрим двойные кавычки. В Visual LISP применяется кодирование цветом, поэтому любая строка, заключенная в кавычки, на экране пурпурная . Кодирование цветом применяется в процессе ввода, поэтому после того, как вы поставили открывающиеся кавычки, остальная часть файла становится пурпурной до тех пор, пока вы не введете закрывающиеся кавычки. См. Рис. 14.

Отладка программы

Рис. 14. Не закрытые кавычки.

Ставим в нужном месте закрывающиеся кавычки, и пурпурным сделается только текст, заключенный в кавычки с двух сторон. См. Рис. 15.

Отладка программы

Рис. 15. Кавычки с двух сторон.

Поиск парных скобок в процессе и после написания кода.

С парными скобками все немного сложнее. Но в редакторе Visual LISP есть инструменты, которые помогают нам избежать лишних или недостающих скобок.

Прыгающий курсор.

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

Двойной щелчок возле скобок.

В редакторе Visual LISP проблема отслеживания перемещений курсора решена при помощи подсветки (выделения). Поместите курсор непосредственно перед открывающейся скобкой или после закрывающейся и щелкните дважды левой кнопкой мыши. Все содержимое скобок станет подсвеченным. Теперь вы видите, где находится парная скобка. См. Рис. 16.

Отладка программы

Рис. 16. Выделение содержимого скобок.

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

Для начала определите, как далеко продвинулась ваша программа, прежде чем прекратила работать. Это можно сделать, если проверить значения присвоенные переменным.

Типы переменных.

В программах AutoLISP используются два типа переменных:

1) Системные переменные , которые описаны в AutoCAD (Пример: osmode).

2) Программные переменные , которые описаны и именованы вами.

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

Когда вы добавляете в свою программу новую переменную, то по умолчанию она глобальная . Для того, чтобы она стала локальной ее нужно добавить в список временных переменных функции defun . См. Рис. 17.

Отладка программы

Рис. 17. Список временных переменных.

Окно «Контрольное значение»

Для проверки значения переменных удобнее всего использовать окно « Контрольное значение ». Для того, чтобы добавить переменную в это окно, поместите курсор на имени переменной р1 и нажмите на кнопку « Добавить контрольное значение ». См. Рис. 18.

Отладка программы

Появится окно « Добавление контрольных значений », в котором нажимаем кнопку « ОК ».

Наша переменная появится в окне « Контрольное значение ». См. Рис. 19.

Отладка программы

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

Давайте добавим в это окно и другие переменные.

Когда окно « Контрольное значение » открыто, можно добавлять переменные через кнопку « Добавить контрольное значение » расположенную в этом окне. См. Рис. 20.

Отладка программы

Теперь для того, чтобы увидеть значения переменных, после того как программа прекратила работать, нам необходимо все переменные сделать глобальными . Для этого их нужно убрать из списка временных переменных функции defun .

Затем загрузить нашу программу, нажав на кнопку « Загрузить активное окно редактора ». См. Рис. 21.

Отладка программы

Рис. 21. Загрузка программы.

Далее переходим в AutoCAD, нажав на кнопку « Активизация AutoCAD ».

Набираем в командной строке mp_kub . См. Рис. 22.

Отладка программы

Рис. 22. Вводим в командной строке mp_kub

Нажимаем <Enter> и на просьбу, указать базовую точку, указываем любую точку в рабочем окне AutoCAD.

Наша программа, которая должна была нарисовать куб. Этого не сделала .

Давайте вернемся в редактор Visual LISP и посмотрим в окно « Контрольное значение ». См. Рис. 23.

Отладка программы

Мы видим, что переменные р1 и р2 имеют значения, а все остальные переменные нет. Очевидно, что ошибка произошла при расчете переменной р3 . Находим эту строчку в программе и видим, что координаты точки р3 рассчитываются относительно самой себя. А должны были рассчитываться относительно точки р2 .

Давайте, исправим ошибку, и снова загрузим нашу программу.

Перейдем в AutoCAD, набираем в командной строке mp_kub и нажмем <Enter> .

Указываем базовую точку, и наша программа нарисует куб. См. Рис. 24.

Отладка программы

Рис. 24. Программа нарисовала куб.

Давайте снова вернемся в редактор Visual LISP и посмотрим в окно « Контрольное значение ». См. Рис. 25.

Отладка программы

Рис. 25. Все переменные имеют значение.

Мы видим, что все наши переменные имеют значения.

После того, как программа отлажена:

  1. Нужно вернуть все локальные переменные в список временных переменных функции defun.
  2. Сохранить свою LISP-программу.
  3. Закрыть редактор Visual LISP и AutoCAD, чтобы очистить все значения переменных. Этот шаг очень важен . Возможно, что некоторые переменные всё еще сохраняют присвоенные им значения.

Теперь давайте снова запустим AutoCAD и редактор Visual LISP. Откроем окно « Контрольное значение ». Если переменные исчезли, то добавьте их снова. См. Рис. 26.

Отладка программы

Рис. 26. Все переменные не имеют значений.

Мы видим, что все переменные не имеют значений.

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

Для этого нам необходимо в программе поставить точки останова – места, в которых во время выполнения программа будет останавливаться.

Для этого помещаем курсор в то место программы, где мы хотели бы установить точку останова и нажимаем на кнопку « Точка останова вкл/выкл ». См. Рис. 27.

Отладка программы

Рис. 27. Точка останова.

Точка останова выделится красным .

Давайте добавим еще пару точек останова, загрузим программу и перейдем в AutoCAD. См. Рис. 28.

Отладка программы

Рис. 28. Добавляем точки останова и загружаем программу.

Набираем в командной строке mp_kub . Нажимаем <Enter> и на просьбу, указать базовую точку, указываем любую точку в рабочем окне AutoCAD.

AutoCAD вернет нас в редактор Visual LISP, и мы увидим, что наша программа остановилась в первой точки останова . См. Рис. 29.

Отладка программы

Рис. 29. Первая точка останова.

Обратим внимания на окно « Контрольное значение ». В данной точки останова переменная р1 уже имеет текущее значение. Для продолжения программы нажимаем на кнопку « Продолжить ». См. Рис. 30.

Отладка программы

Рис. 30. Следующая точка останова.

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

Снова нажимаем на кнопку « Продолжить ». См. Рис. 31.

Отладка программы

Рис. 31. Последняя точка останова.

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

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

В конце программы мы снова окажемся в AutoCAD, где будет нарисован куб. См. Рис. 32.

Отладка программы

Рис. 32. Программа нарисовала куб.

Теперь давайте вернемся в редактор Visual LISP и посмотрим в окно « Контрольное значение ». См. Рис. 33.

Отладка программы

Рис. 33. Все переменные не имеют значений.

По окончании программы все переменные снова не имеют значений.

Таким образом, используя точки останова и окно « Контрольное значение », можно отслеживать значения переменных в любой точке во время выполнения программы.

Чтобы удалить все точки останова по окончании работы с ними, нажмите клавиши <Shift>+<Ctrl>+<F9> .

И так в этом уроке мы рассмотрели основные приемы отладки программы AutoLISP.

К этим приемам относятся:

  • Проверка фрагментов кода в окне «Консоль Visual LISP».
  • Отслеживание парных кавычек.
  • Поиск парных скобок в процессе и после написания кода.
  • Использование окна «Контрольное значение»

Искренне надеюсь, что отладка программ AutoLISP стала для Вас теперь легкой, занимательной головоломкой.

Пишите в комментариях:

Была ли для Вас полезной информация, данная в этом уроке?

Какие способы отладки используете Вы?

На какие вопросы программирования, Вы хотели бы, увидит ответы в следующих уроках?

Пробовал на различных примитивах в ACAD2009+СПДС.
На самом деле все давно придумали и написали, но мне хотелось посмотреть как она преобразовывает окружности. Во множество дуг? Тогда не интересно, т.к есть akspro, с более обширными настройками. Как обрабатывает блоки, тексты, размеры?
А вообще респект за старания.


Сан Саныч



Просмотр профиля

Вот неплохая утилита (axon.fas) для преобразования к аксонометрическому виду воздуховодов, трубопроводов, приточек и прочих елементов. Работает под любой версией AutoCad (разве что на самых ранних < R10 может не пойти)

Демо-ролик как запустить утилиту и использовать находится в прикрепленном файле axon_demo.exe
Для того, чтобы она подгружалась каждый раз при запуске AutoCad необходимо выбрать в меню Сервис>Приложения и в появившемся окне "Загрузка/выгрузка приложений" нажать на портфеле. Далее - нажать "Добавить" и указать путь к файлу.

С запуском добавляются функции командной строки:
axon - собственно команда аксонометрии. Можно сначала выбрать объекты а потом набрать "axon", а можно и наоборот.
axoncd - задать детализацию для изгибов (окружности, арки, элипсы и т.д.). Имеется ввиду изгибов, которые подлежат "аксонометризации". По умолчанию = 4. Можно задать любой от 1 до 99. Слишком большой делать не стоит. Можете попробовать изменить 8 и посмотреть как будет выглядеть окружность после преобразования. Достаточно задать этот параметр один раз и больше к этой команде не возвращаться.

а почему в демо ролике нет звука

Alexander Liseev:
Странно что у вас не пошло. К сожалению пока у меня нет времени разбираться с этой ошибкой т.к. загрузили работой. Не знал про Akspro. Пытался найти такую утилиту и безуспешно, поэтому начал учиться лиспу. Леониду надо как-то продвигать свою программу, а то её не видно в нете. А в своей я даже не озадачивался обработкой текстов, размеров и выносок. Штриховки между линиями у меня в Autocad 2010 сами переделываются. У них происходит contour update. В самой программе я поставил на игнор штриховки чтобы она их не обрабатывала. Сплайны обрабатываются не совсем корректно, но для большинства случаев, помоему, вполне достаточно. Всё вышеописанное попытаюсь доделать как только появиться свободное время. Блоки разрушает, но не собирает. Элипсы, окружности, изгибы, арки и т.д. - преобразует в ломаную полилинию. Пользователь может предварительно задать множество отрезков в которое будет преобразованна полная четверть окружности для этого есть команда AXONCD (сокр. AXON Change Details).

Сан Саныч:
Я не знал как втулить туда mp3.


nedrok



Просмотр профиля


oim



Просмотр профиля

Э-э-э. не работает.
Код
Укажите базовую точку для аксонометрии:; ошибка: неверный тип аргумента:
stringp nil
Пробовал на различных примитивах в ACAD2009+СПДС.
На самом деле все давно придумали и написали, но мне хотелось посмотреть как она преобразовывает окружности. Во множество дуг? Тогда не интересно, т.к есть akspro, с более обширными настройками. Как обрабатывает блоки, тексты, размеры?
А вообще респект за старания.


andrei2788

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