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


Добро пожаловать!

Войдите или зарегистрируйтесь сейчас!

Войти

Статус темы:

Закрыта.

Страница 1 из 11


  1. BearDyugin

    Форумчанин

    Регистрация:
    30 ноя 2007
    Сообщения:
    2.717
    Симпатии:
    2.460
    Адрес:

    Сибирь

    Пользователь Disney разместил новый ресурс:

    Импорт координат из текстового файла в AutoCAD (версия 2.8) — Импорт координат из текстовых файлов форматов txt, sdr, csv и других в AutoCAD
    [​IMG]

    1. Файл. Доступна загрузка файлов с расширением txt, sdr и csv
    2. Разделитель. Выбираем что служит разделителем данных, доступно при расширении фала txt.
    3. Выбор строк.Если поставить галочку в чекбоксе, то будет доступен выбор строк из загруженного файла, если галочку убрать то будут загружены все данные из файла. К сожалению при ручном выборе строк есть ограничение, выбрать можно любое количество, но загрузятся не больше 256 строк.
    4. Формат данных. Возможна смены форматов данных, причём под Xподразумевается направление на Север.
    5. Основной объект. Выбираем объект, который будет построен(начерчен) по координатам из файла, при выборе объекта Блок, будет предложено выбрать имя блока из списка существующих в чертеже.
    6. Второстепенные объекты. Возможно подписать номер, отметку и описание каждой точки, если в качестве основного объекта будет выбран блок, и он содержит атрибуты, то значение может быть записано в атрибуты. Кроме данных, взятых из файла, можно задать новые:
      • Номер.формат ввода *#*, где * — префикс\суффикс можно опустить, # — целое число.
      • Отметка.формат ввода — вещественное число, если ввести со знаком + или -, то оно будет прибавлено или отнято соответственно от отметки из файла.
      • Описание. свободный формат ввода.
    7. Слой.Для каждого объекта можно выбрать слой из списка уже существующих в чертеже или создать новый.
    8. Цвет.Для каждого объекта можно выбрать цвет.
    9. Высота текста. Устанавливаем высоту текста

    Узнать больше об этом ресурсе…

    #1

    Последнее редактирование: 8 фев 2023


  2. Sta1917

    Форумчанин

    Регистрация:
    23 мар 2009
    Сообщения:
    143
    Симпатии:
    8
    Адрес:

    СПб

    Disney Ставил на AutoCAD 2007 x32, удалось импортировать только *.csv с последовательным сохранением в csv(разделитель-запятая)->csv(MS DOS) при разделителе целой/дробной части точкой. При одинарном сохранении выдает ошибку.Импорт *.txt удавался только из файла созданного на другом компьютере в виде:


    пример txt (раскрыть)
    пример txt (свернуть)

    1,4765232.682,8704448.054,11.1
    2,4766802.925,8704525.166,22.2
    3,4767413.573,8701976.161,33.3
    4,4767389.205,8701148.875,44.4

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

    Вложения:

    #2


  3. BearDyugin

    Форумчанин

    Регистрация:
    30 ноя 2007
    Сообщения:
    2.717
    Симпатии:
    2.460
    Адрес:

    Сибирь

    Добавил, качай версию 2.0, в описании смотри пункт #3Чем были созданы эти файлы?

    1. 30(с разделителями табуляции).txt

      Причина сбоя — лишние знаки табуляции, если открыть файл в Word-е и включить «отображение скрытых символов форматирования», то можно увидеть следующее

      , где — табуляция, — переход на новую строчку
      При разделители «табуляция» мы имеем

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

    2. 10 (разделители_запятые_сохр_1_раз).csv
      30(MS-DOS).csv
      30(разделители_запятые).csv

      формат всех твоих csv файлов абсолютно одинаков, т.е. во всех них разделителем данных служит ;(точка с запятой), убедиться в этом ты можешь открыв их с помощью Блокнота, а причиной ошибки были всё те же пустые данные, находящиеся в конце каждого файла

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

    #3


  4. Krovlaf

    Форумчанин

    Регистрация:
    15 дек 2009
    Сообщения:
    207
    Симпатии:
    42
    Адрес:

    Хабаровск

    Но Point Manager не работает с динамическими блоками! А Geo_import работает!
    По моему, следующим шагом в усовершенствовании Geo_import’а должно (но необязано, на усмотрение автора) стать возможность вставки всех атрибутов в блоках (как в Point Manager). На данный момент Geo_import работает в основном для вставки съемочных точек — номер, координаты, описание. Но цель программы «Построение (создание) объектов AutoCAD по координатам из текстового файла». Так что модернизация напрашивается сама собой.

    #4


  5. BearDyugin

    Форумчанин

    Регистрация:
    30 ноя 2007
    Сообщения:
    2.717
    Симпатии:
    2.460
    Адрес:

    Сибирь

    Исправил, работает!

    Нет, это абсолютно разные вещи, сейчас программа работает с 5 полями, 2 обязательных (X и Y) и 3 не обязательных (Отметка, Номер и Описание), и в программе есть возможность выбора где какое поле, и их кол-во фиксировано и за ранее известное 5 не больше не меньше.

    Да, для этого она и была написана, т.к. для этих целей плохо подходил Point Manager, я просил Lee Mac чуть-чуть доработать(изменить) свою программу, но он отказал, что и подтолкнуло меня к написание Geo_Export и Geo_Import.

    Вложения:

    #5


  6. delfin8407

    Регистрация:
    24 июл 2010
    Сообщения:
    3
    Симпатии:
    1

    После подгрузки точек, акад выдал ошибку:
    ; ошибка: неверный тип аргумента: (or stringp symbolp): nil
    В чем может быть проблемма?

    #6


  7. BearDyugin

    Форумчанин

    Регистрация:
    30 ноя 2007
    Сообщения:
    2.717
    Симпатии:
    2.460
    Адрес:

    Сибирь

    Это означает, что в какой-то строке не достаточно данных
    например вот в таком файле

    точка 105-300 вбита вручную и из 3 координат введена была только Z, потому что эта точка является репером для установки станции по высоте.
    Так вот на подобную строчку(точку) программа и выдаст такое сообщение
    (or stringp symbolp): nil
    , потому что между ,,(запятых) она пытается найти строку(stringp) или(or) символ(simbol), а их там нет(nil)

    Два варианта решения:

    1. До загрузки очистить файл от подобных строк,
    2. При загрузке использовать опцию «Выбор строк», через Shift выбрать все строки, а потом через Ctrl снять выделение с ненужных

    #7


  8. AAFur

    Регистрация:
    29 апр 2012
    Сообщения:
    9
    Симпатии:
    0

    Программка — супер, уже даже и не надеялся найти что то подобное!!! Автор Вы — гений, большое спасибо, счет кошелька записал, обязательно вышлю благодарность))) Единственная просьба или даже вопрос — как ограничить количество знаков после точки в xyz??? Подробнее — у меня прибор пишет 3 знака после целого числа, например 9846.345 — текстовый файл у меня получается с такими же числами. Как сделать или можно добавить в прогу, что бы в свойствах z (высоты) можно было ограничить (либо округлить) до двух знаков после точки???

    #8


  9. BearDyugin

    Форумчанин

    Регистрация:
    30 ноя 2007
    Сообщения:
    2.717
    Симпатии:
    2.460
    Адрес:

    Сибирь

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

    #9


  10. Айдын

    Форумчанин

    Конечно же огромное спасибо вам за такую программу. Теперь о проблемах:
    1. Загрузил файл, но не все точки загрузились. Использую версию 2,4.
    2. Нельзя ли ввести команду для высоты текста, а то приходиться искать как это сделать, я читал описание про то как их изменять, но мы люди такие, что хотим что бы все было под руками)
    3. Еще одно предложение, когда загружаем много точек, некоторые точки прикрываются надписами высот или именами, можно ли сделать так, что бы при выборе точки или имени, высоты выделялось все, но так же расскидовалось по слоям. Я такое видел в программе кредо дат и топоплан.
    4. И случайно вы не создали приложение для отрисовки рельефа?!

    #10


  11. BearDyugin

    Форумчанин

    Регистрация:
    30 ноя 2007
    Сообщения:
    2.717
    Симпатии:
    2.460
    Адрес:

    Сибирь

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

    Добавил, качай из первого поста версию 2.6

    Для этих целей можно использовать блок (прикладываю к сообщению), Блок с 3-мя атрибутами, каждый лежит на разных слоях, каждый можно «перетаскивать»

    Нет, и не собираюсь.

    Вложения:

    #11


  12. timoshetc

    Регистрация:
    6 ноя 2012
    Сообщения:
    7
    Симпатии:
    1

    не желает вставлять коды…автоматически становится неактивной, хотя код присутствует (123.txt)

    немного исправленный файл (точки.txt)

    Вложения:

    • 123.txt
      Размер файла:
      22,8 КБ
      Просмотров:
      131
    • точки.txt
      Размер файла:
      14,8 КБ
      Просмотров:
      119

    #12


  13. BearDyugin

    Форумчанин

    Регистрация:
    30 ноя 2007
    Сообщения:
    2.717
    Симпатии:
    2.460
    Адрес:

    Сибирь

    Из файла 123.txt, не то что коды, программа вообще ни чего не сможет вставить, там разделение идёт не каким-либо знаком, а количеством символов для каждого значения, как в формате SDR
    Файл точки.txt уже лучше,но программа определяет наличие полей, по первым 3-м строкам файла, добавь код в любую из первых 3-х строк и тогда программа их распознает.

    #13


  14. tumash

    Регистрация:
    9 апр 2012
    Сообщения:
    2
    Симпатии:
    4
    Адрес:

    Мінск

    Импорт получился.
    Но пришлось ориентироваться по вашему скриншоту. У меня англоязычный виндовс и автокад — все русские надписи внутри лиспа отобразились в виде каракулей (см. рис.). Есть какое-нибудь решение?


    скрин диалога с каракулями (раскрыть)
    скрин диалога с каракулями (свернуть)

    #14


  15. BearDyugin

    Форумчанин

    Регистрация:
    30 ноя 2007
    Сообщения:
    2.717
    Симпатии:
    2.460
    Адрес:

    Сибирь

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


    Англицкий диалог (раскрыть)
    Англицкий диалог (свернуть)

    Geo_Import_en.jpg

    А узнать русский ли AutoCAD, мне помогает системная переменная SYSCODEPAGE, вбей её в командную строку и напиши чего тебе ответит AutoCAD

    Хотя, вот тебе, качай новую версию программы 2.8 из первого поста, и вызывай команду Geo_Import_en тогда диалог будет принудительно на англицком.
    Макрос на кнопку: ^C^C^P(if (not C:Geo_import_en)(load «Geo_Import_v2_8» ) );^PGeo_import_en;

    #15


  16. Saray

    Форумчанин

    Регистрация:
    28 июл 2008
    Сообщения:
    34
    Симпатии:
    0
    Адрес:

    С-Пб, Россия

    Disney, опять спасибо! Программа гениально подходит для отрисовки фасадных съемок. Было бы, конечно, удобней, если бы в окне импорта было бы больше столбцов с данными и в шапке можно было выбирать какому из них какой тип данных соответствует (Х, У, Н, описание, номер и т.д.), а какой вообще не используется, как это реализовано при создании пользовательского формата импорта в Civil 3D. Так можно было бы редактировать данные в Excel (пересчитать высоты, например) и не приводить конечный файл в один из форматов, пригодных для работы этой программы.

    #16


  17. BearDyugin

    Форумчанин

    Регистрация:
    30 ноя 2007
    Сообщения:
    2.717
    Симпатии:
    2.460
    Адрес:

    Сибирь

    Нет, это практически полное переписывание программы…По простому программа сама умеет пересчитывать отметки.

    #17


  18. X-Y-H

    Команда форума
    Форумчанин

    Регистрация:
    18 май 2007
    Сообщения:
    21.655
    Симпатии:
    6.967
    Адрес:

    Россия

    Александр, автокад 2013, версия последняя, при импорте файла, после его окончания файл который закидывали остается занят приложением (в данном случае автокадом) пока не закроешь, в некоторые программы не закинуть.

    #18


  19. Палыч

    Форумчанин

    Регистрация:
    16 июл 2007
    Сообщения:
    2.330
    Симпатии:
    175
    Адрес:

    Беларусь

    В результате импорта у отметки три знака после запятой, а хочу ДВА. Туплю,уже долго.::sad24.gif::

    #19


  20. BearDyugin

    Форумчанин

    Регистрация:
    30 ноя 2007
    Сообщения:
    2.717
    Симпатии:
    2.460
    Адрес:

    Сибирь

    Количество знаков после запятой, программа смотрит по их количеству в отметке в самой первой строчке файла, измени в файле всего одну первую отметку до нужного количества знаков, и все точку при загрузке подпишутся с такой же точностью

    #20

Страница 1 из 11

Статус темы:

Закрыта.

Поделиться этой страницей

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

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

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

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

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

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

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

Рис. 1. «Окно справка»

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

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

А второй msg — текст, который будет показан пользователю.

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

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

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

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

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

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

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

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

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

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

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

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

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

Консоль выдаст нам сообщение об ошибке: неверный тип аргумента: point: nil.

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

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

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

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

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

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

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

Консоль выдает сообщения об ошибке: неверная функция : 0. Скорее всего, координаты в скобках Visual LISP принял за функцию с именем 0 (вспоминаем, что после открывающийся скобки всегда следует имя функции). Как объяснить Visual LISP, что это не функция, а список координат? Для этого есть, два способа:

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. Координаты указанной точки.

Давайте теперь разберемся со вторым аргументом. Напомню, что это msg — текст, который будет показан пользователю. Поскольку это текст (string), то писать его нужно в кавычках. Давайте добавим к нашей функции надпись: “Проверка”. См. Рис. 10.

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

Рис.. 10.    Добавляем (getpoint(0 0 0) «Проверка»)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Стоит отметить, что в программах AutoLISP нужно всегда использовать кавычки вида “ ” (кавычки « » — не воспринимаются)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рис. 18. Добавление переменных в окно «Контрольное значение».

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

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

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

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

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

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

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

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

Рис. 20.   Кнопка  «Добавить контрольное значение».

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

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

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

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

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

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

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

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

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

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

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

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

Рис. 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 стала для Вас теперь легкой, занимательной головоломкой.

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

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

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

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

Я с удовольствием отвечу на ваши комментарии.

Если вы хотите получать новости с моего сайта. Оформляйте подписку.

До новых встреч.

 «Автор: Михаил Орлов»

Google

Также на эту тему Вы можете почитать:

#1 24 июля 2015г. 16:35:04

  • Blackjek
  • Участник
  • На форуме с 24 июля 2015г.
  • Сообщений: 2
  • Спасибо: 0

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

Добрый день коллеги.
Моим товарищем было написан лисп:
(defun c:11 (/  xyfill osm ocmd spt ept cla)

 
  ;;—————————————————————————
  ;; функция заливки прямоугольника, определенного точками 1pt и 2pt в текущей ПСК,
  ;; блоками с именем bname на максимальном расстоянии maxdist
  (defun xyfill (1pt 2pt maxdist bname / n_meas nx ny dx dy sx sy ix iy)

    (defun n_meas (1p 2p d / n) ;_ возвращает количество точек деления по координате
      (max (fix (if (not (zerop (- (abs (- 2p 1p)) (* (fix (setq n (/ (abs (- 2p 1p)) d))) d))))
                  (1+ n)
                  n
                ) ;_  if
           ) ;_  fix
           1 ;_ минимум одна точка деления
      ) ;_  max
  ) ;_  defun n_meas

        (setq dimlf1 (getvar «DIMLFAC»));; установка масштаба блока «Оросители»
    (setq mashbloka1 (/ 1.0 dimlf1))
    (setq nx (n_meas (car 1pt) (car 2pt) maxdist))
    (setq ny (n_meas (cadr 1pt) (cadr 2pt) maxdist))
    (setq dx (/ (- (car 2pt) (car 1pt)) nx)) ;_ шаг по X
    (setq dy (/ (- (cadr 2pt) (cadr 1pt)) ny)) ;_ шаг по Y
    (princ (list «рядов по X=» nx «, по Y=» ny «, шаг X=» dx «, шаг Y=» dy));;писанина
    (setq sx (+ (car 1pt) (* dx 0.5)))
    (setq sy (+ (cadr 1pt) (* dy 0.5)))
    (setq ix sx)
    (repeat nx
      (setq iy sy)
      (repeat ny
        (vl-cmdf «_.insert» bname (list ix iy) mashbloka1 mashbloka1 0)
        (setq iy (+ iy dy))
      ) ;_  repeat
      (setq ix (+ ix dx))
    ) ;_  repeat
  ) ;_  defun xyfill
  ;;—————————————————————————

  ;; собственно программа

;; Установка слоёв
(setq ocmd1 (getvar «cmdecho»))
  (setvar «cmdecho» 0)
   (if (setq layget (tblsearch «LAYER» «Оросители»)) ; проверка на наличие слоя
    (cond                               ; если есть, то проверка его состояния
      ((= (logand 1 (cdr (assoc 70 layget))) 1)
       (alert «Слой «Оросители», заморожен!nnДальнейшая работа, увы, невозможна…»)
       (exit)
      )
      ((= (logand 4 (cdr (assoc 70 layget))) 4)
       (alert «Слой «Оросители» заблокирован!nnДальнейшая работа, увы, невозможна…»)
       (exit)
      )
      ((minusp (cdr (assoc 62 layget)))
       (alert «Внимание!!!nnСлой «Оросители», на котором будет отрисован объект, невидим!»)
      )
    ) ;_  cond
    (vl-cmdf «_.layer» «_n» «Оросители» «_c» 20 «Оросители» «») ; создание слоя, если такого нет
  ) ;_  if
(setvar «cmdecho» ocmd1)
  ;;конец функции установки слоев

    (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
  (setq cla (getvar «CLAYER»))
  (setq ocmd (getvar «cmdecho»))
  (setq osm (getvar «osmode»))
  (setq bname1 «Ороситель») ;; Имя блока
  (princ (strcat «nЗаливка прямоугольника блоками » bname1 «.»))
  (initget 1)
  (setq spt (getpoint «nОдин угол >»))
  (initget 1)
  (setq ept (getpoint «nДругой угол >»))
  (princ «nМинуточку…..n»)
  (setvar «CLAYER» «Оросители»)
  (setvar «cmdecho» 0)
  (setvar «osmode» 0)
  (xyfill spt ept (/ (atof(getenv «min-dist»)) (getvar «dimlfac»)) bname1)  ;_ указать минимальную дистанцию и имя блока заливки
  (setvar «cmdecho» ocmd)
  (setvar «CLAYER» cla)
  (setvar «osmode» osm)
  (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
  (princ «nГотово smile«)
  (princ (strcat «nШаг между оросителями составляет : » (getenv «min-dist») «мм»))
  (princ)
) ;_  defun

(vl-load-com)

;;;**********************************************************************************************************
(defun min-dist-orosit (/ i)
;; (min-dist-orosit)
(or (getenv «min-dist») (setenv «min-dist» «4000»))
(initget «» 6)
(if (setq i
           (getdist
            (strcat «n Укажите минимальную дистанцию между блоками [» (getenv «min-dist») «]»)
           ) ;_  getint
     ) ;_  setq
  (setenv «min-dist» (rtos i 2 3))
) ;_  if
(atof (getenv «min-dist»))
) ;_  defun

Смысл данной программы заключается:
1. Создается слой
2. равномерное распределение блока «ороситель» по всей площади помещения с указанием шаг оросителя.

В старых версиях программы все работало  — а  для в автокаде 2012 не работает, выдает ошибку:
Ошибка: неверный тип аргумента: stringp nil.
Помогите и разъясните , чтоб понять в чем ошибка и куда смотреть?
Спасибо.

#2 Ответ от Alan 26 июля 2015г. 14:31:56

  • Alan
  • Активный участник
  • Откуда: Украина / Киев
  • На форуме с 2 апреля 2002г.
  • Сообщений: 1,345
  • Спасибо: 15

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

Про (getenv «min-dist») я отвечал на соседнем форуме

#3 Ответ от Blackjek 27 июля 2015г. 08:46:23

  • Blackjek
  • Участник
  • На форуме с 24 июля 2015г.
  • Сообщений: 2
  • Спасибо: 0

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

Спасибо за совет  — «Там была определена переменная среды min-dist, а в новом нет — (getenv «min-dist») — nil

Задайте её и будет вам счастье…»

а Вы можете, чайнику подсказать что и где править?

Спасибо

#4 Ответ от kpblc 27 июля 2015г. 09:05:14

  • kpblc
  • kpblc
  • Активный участник
  • Откуда: С.-Петербург
  • На форуме с 29 ноября 2004г.
  • Сообщений: 8,348
  • Спасибо: 23

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

Сначала запусти функцию min-dist-orosit

#5 Ответ от Alan 27 июля 2015г. 12:06:56

  • Alan
  • Активный участник
  • Откуда: Украина / Киев
  • На форуме с 2 апреля 2002г.
  • Сообщений: 1,345
  • Спасибо: 15

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

Дмитрий Беляков пишет:

а Вы можете, чайнику подсказать что и где править?

Ну или добавь вызов  функции min-dist-orosit в начало своего текста

(defun c:11 (/ xyfill osm ocmd spt ept cla) 
;;; вызов функции задания  дистанции между блоками
(min-dist-orosit) 
..............

тогда при вызове команды 11, функция min-dist-orosit будет отрабатывать автоматически.
Как мне кажется в этом тексте есть еще достаточно подводных камней типа ошибок.
Совет.
Если хочешь изучать работу ЛИСПа, открывай тексты в редакторе ВизуалЛиспа и запускай пошаговую отладку

#6 Ответ от Alan 6 августа 2015г. 14:47:20 (изменено: Alan aka Александр Назаров, 6 августа 2015г. 14:47:51)

  • Alan
  • Активный участник
  • Откуда: Украина / Киев
  • На форуме с 2 апреля 2002г.
  • Сообщений: 1,345
  • Спасибо: 15

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

убрал дубль

Issue

You received an error message beginning with the words Error: ‘Bad argument type’. Here are some examples:

  • Error: ‘Bad argument type: Numberp nil’
  • Error: ‘Bad argument type: Stringp nil’
  • Error: ‘Bad argument type: VLA-object nil’
  • Error: ‘Bad argument type: lentityp nil’
  • Error: ‘Bad argument type: VLA-object-collection’
  • Sys-error: ‘Bad argument type: 2D/3D point: nil’
  • Error: ‘Bad argument type: consp nil’
  • Error: ‘Bad argument type: INT nil’

Solution

You might see any number of possible errors that begin with Bad argument type, Before getting into the specific error you saw, it’s important to go through a few simple troubleshooting steps:

• What to do first when you see a Bad Argument Type error

If you receive any error message that includes the text «bad argument type» – including all specific error messages listed on this page – go through the following three steps before getting into any of the various bad argument type error messages listed below. Any bad argument type error can potentially stem from either drawing corruption or a bug in the code, so you’ll need to either rule out or resolve these two causes first.

Step 1: Take a screenshot of the error report

Immediately after receiving the error, press the F2 key on your keyboard. Pressing F2 will open the error report in your AutoCAD Command line, and you’ll be able to see actually generated the bad argument error. It’s important that you take a screenshot of the error report in the Command line and save it to your desktop. You may need it later to figure out what caused the error, and we may ask you to send that screenshot to our tech support team to help us diagnose the issue. 

Closed the error message already? No worries – just do the same thing you did to get the error (place a plant, select a valve, etc.). The error will likely pop up again and you can press F2 and screenshot the error report.

Step 2: Rule out, or address, drawing corruption

Bad argument type errors often result from corruption in your drawing. To check for corruption, open a fresh new DWG drawing file and try the same action that generated the error. For example, if you saw the error immediately after placing a plant or setting your drawing scale, do that same thing in the blank drawing. 

***Important***: It’s crucial that you follow our specific steps to duplicate an error in a blank drawing.

  • Did you get the same bad argument type error in the blank drawing? If so, move on to Step 3.
  • Were you able to complete the same action in the blank drawing without generating the error? If so, the issue is almost certainly the result of drawing corruption. Here’s what to do:

1. Open the file where you first saw the error, and follow our steps to clean your drawing.

2. Configure our recommended settings for showing Proxy information. These settings will help you determine whether your drawing file is still corrupt.

3. Open the cleaned drawing file. If you configured the Proxy information settings correctly, you should see a Proxy Information dialog box immediately. Does this dialog box show no Proxy Objects? If so, your file is clean. Now try the same action (placing a plant, setting the scale, etc.) that generated the error.

  • No error? You’ve resolved the issue.
  • Still getting a bad argument type error? Move on to Step 3.  

Step 3: Check for a bug in the code

Once you’ve either ruled out or addressed drawing corruption, it’s time to check whether the error is the result of a bug in the code of our software.

Note that a bad argument type error will always mean that a variable in the code is not what the system is expecting. In fact, it could be the result of a simple bug – the most common of which is a typo in the code. In this case, the “object” in question may be just fine, but the variable name was mistyped in the code. (Yes, even programmers are human!) So of course the misspelled version is certainly not an object reference and is therefore nil – hence the error message.

The easiest way to check for a bug is to check our list of recent updates.

  • Don’t see a recent update that’s related to what you tried to do when you saw the error? You’ve likely ruled out a bug. It’s time to locate and address the specific bad argument type error message you’re seeing.
  • Do you see a recent update that’s related to what you tried to do when you saw the error? If so, there’s a good chance you’ve detected a bug in the code. For example, if you saw a bad argument type error when you attempted to place a Reference Note Callout, and a recent update has to do with Reference Note Callouts, there’s your bug! If you think you’ve found a bug, please let us know by sending us a technical support ticket. Make sure to include the following items in the ticket:

    • The exact text of the error message, and a screenshot of the error message (if you have it)
    • A description of the action you took that generated the error message (such as placing a plant, editing a detail, etc.)
    • A screenshot of the error report you generated by pressing the F2 key after seeing the error message. Don’t have a screenshot? Just do the same thing that caused the error. You’ll see the bad argument type error message. Press F2 now, and take a screenshot of the entire AutoCAD Command line. Include this screenshot in the technical support ticket.

Based on your ticket, we’ll take a look at the code and determine whether there is indeed a bug. If so, we’ll get right on repairing it in an update. You’ve helped us improve the software!

 Close

Specific ‘Bad Argument Type’ Errors

If you went through the «What to do first» steps above and are still seeing the error, it’s time to get into the specific Bad argument type error you’re seeing.

We’re continually logging the causes and solutions of new Bad argument type errors as we see them. Here are the specific ones we’ve seen:

• Error: ‘Bad argument type: Numberp: nil’

  • If you saw this error when trying to use our Nuke tool, your Proxy settings are configured incorrectly. Please follow our recommendations for the Proxy settings in the Options dialog box. You should then be able to Nuke properly.
  • Are you getting this message when using our Verify tool for Lighting? If so, make sure you don’t have any looped wire sections in your wire paths to fixtures.
  • Otherwise, this error will invariably be the result of drawing corruption. Follow our steps to clean your drawing.

 Close

• Error: ‘Bad argument type: Stringp nil’

You might see this error when you:

  • Tried to use our Verify Labels tool, or when working specifically with plants.
  • Had our Color Render tool turned on.
  • Attempted to open AutoCAD or F/X CAD, and it completely froze.
  • Tried to add a dripline hatch to your project.
  • Tried to place a block from our Discipline Graphics library

As you can see, this particular Bad argument error has several possible causes and, as a result, potential solutions. See our Error: ‘Bad Argument Type: Stringp Nil’ article to find your solution.

 Close

• Error: ‘Bad argument type: VLA-OBJECT nil’

A bad argument type error containing the text VLA-object nil means the software is expecting something in your drawing to be a «smart» object, but a variable in the code has caused that thing to not actually be an object. (In other words, it’s nil.) As a result, the software was not able to reference that object, which in turn prevented it from carrying out the action you were trying to complete and generated the error message.

As for the actual issue, it will depend on what you were trying to do when you received the error, as well as which object reference is now nil. Here are a few possible causes:

  • You have Local Data (MySQL), and your database connection object is nil

First, make absolute sure that you’ve followed our steps for what to do first when you see a bad argument type error – especially Step 3: Check for a bug in the code. Take note of exactly what you did (or tried to do) that resulted in the error, and check it against our recent updates, as described in those steps. 

If you can rule out a bug in the software based on those steps, your next step should be to diagnose a possible problem with your MySQL database server – but only if you’re using our software with a local (MySQL) database. Ask your IT administrator to troubleshoot your office’s MySQL database server, as described on our slow Land F/X performance troubleshooting article. Don’t know whether you’re using Local Data? Your CAD manager or IT admin can let you know.

  • You attempted to create a colorized plan using our Color Render tool 

In this case, the problematic object is a Truecolor object. If you’re getting this error every time you try to apply plant color, you can repair the error by following our steps to uninstall and reinstall AutoCAD or F/X CAD.

  • An XML file is damaged or missing

Are you getting this error right when opening CAD? Is CAD freezing up and you’re unable to use our software? If so, a file named _install_.xml, stored in your LandFX folder, is likely damaged or missing.

In this case, follow our steps to restore the install.xml file.

  • You attempted to perform one of several possible actions with a detail

Finally, you might receive this error when working with a detail. For example, you may have tried to edit, save, copy, or place a detail when you received the error.

In this case, the system is unable to read or write in that detail’s XML file. This can occur for several possible reasons:

  • You don’t have read/write permissions for the folder where that XML file lives. Have your IT administrator ensure that you have all the proper permissions to work with your office’s details. 
  • Your details are stored at a UNC path, which we don’t recommend. Ask your IT administrator to ensure that the folder containing your details is mapped to a letter drive.
  • Any number of issues with your Windows installation – another potential set of troubleshooting steps for your IT admin to complete.
  • Malware (less common). Your IT administrator should ensure that your computer and network are free of malware.

If you’ve ruled out all of the causes listed above, it’s likely that the XML file is missing from the location where the detail is stored. If so, copy the detail to your desktop and use our Save Detail tool to save it into the system.

Still getting the error? If you’ve ruled out permissions, a UNC path, your Windows installation, and malware, it’s possible that you or someone in your office has attempted to import the detail into a Land F/X project but clicked on the wrong XML file.  

Specifically, this error is the result of importing the file _index_.xml rather than the correct XML file for the detail you intended to import.

Instead, you need to import the XML file from the corresponding exported detail. Open the Detail Explorer and click Import.

You’ll then be prompted to select a detail export file.

Navigate to the location where you’ve exported the detail.

Open that folder, and select the file details.xml. Click Open.

You should now be able to work with that detail without receiving the error.

 Close

• Error: ‘Bad argument type: lentityp nil’

A bad argument type error containing the text lentityp nil can have several possible causes, including:

  • Drawing corruption (most commonly), or a bug in the software code

Make absolute certain that you’ve followed our steps for what to do first when you see a bad argument type error. Those steps include instructions on how to check for corruption in your drawing and how to check for a bug in the software.

Note that drawing corruption is the most common cause of this error. If you detect drawing corruption when completing the «what to do first» steps, follow our steps to clean your drawing and all Xrefs. We always recommend cleaning every single drawing you receive from someone else before you start working on it. Keeping your drawings clean will prevent a host of issues (including this error) and save you tons of time.

  • Locked layers in a drawing that contains callouts

If you’ve ruled out a bug and drawing corruption, the error is likely the result of locked layers that are preventing you from working with callouts in your drawing. These can include:

  • Plant labels
  • Reference Notes (RefNotes) 
  • Detail callouts
  • Valve callouts

To unlock layers in your drawing, see our lock/unlock layers documentation section. Note: We don’t recommend locking layers in your drawings – except those that contain your Xrefs.

At the very least, unlock all layers that contain callouts (or portions of callouts). You should now be able to continue working without seeing the error message.

 Close

• Error: ‘Bad argument type: VLA-object collection, VLA-object’

An error message containing the text ‘Bad argument type: vla-object collection’ is always the result of the software attempting (and failing) to determine which sheet you are working on. You might receive this error when:

  • Setting the drawing scale
  • Working with details or detail callouts
  • Doing anything that requires the software to know which sheet you are working on

Follow our steps to resolve this specific error.

 Close

• Sys-error: ‘Bad argument type: 2D/3D point: nil’

You’ll most commonly see this error when trying place or copy an object, or carry out a similar type of action, using one of our tools. You’re seeing the error because the system is unable to calculate an intersection in your drawing. Specifically, it’s trying (and failing) to calculate the distance between the cursor and the object you’re trying to place, copy, or verify. (We’ve seen it happen with placing plants or irrigation equipment such as valves, or using tools such as our Plant Mirror tool that copy objects in a drawing.)

Here’s a past example of this error message:

 [3.33] (sys-error «bad argument type: 2D/3D point: nil»)

:ERROR-BREAK.28 nil
[4.25] (ANGLE (907.216 795.06 0.0) nil)
[5.19] (C:VALVECALLOUT)

In this example, the user tried to place a valve callout but was unsuccessful because the system was unable to calculate the angle between the cursor and valve that was being called out. (Note that the issue can affect any number of items, from irrigation to plant labeling, site objects, etc.) 

This error most commonly results from:

• Corruption in your drawing

Drawing corruption is by far the most common cause of this error. Your first step should be to follow our instructions to clean the drawing and all Xrefs.

Cleaning your drawing will often take care of the error.

Still seeing the error after cleaning your drawing? Read on.

A bad argument type error containing the text 2D/3D point: nil can also result from:

• A bug in the software code

Make absolute sure you’ve followed our steps for what to do first when you see a bad argument type error – especially Step 3: Check for a bug in the code. Take note of exactly what you did (or tried to do) that resulted in the error, and check it against our recent updates, as described in those steps.

• Working in Paper Space rather than Model Space

Check whether you are working in Paper Space. If so, open the Model tab and work in Model Space. Try the same action that generated the error, but in Model Space. If you don’t see the error, you’ve resolved the issue.

You might also see this error if you’re labeling in a Paper Space viewport with the intention that the labels will be moved to Paper Space. If so, the error is occurring because of a problem with either the viewport or the User Coordinate System (UCS) you’re currently using.

Try labeling in a different Paper Space viewport. If you don’t see the error, you’ve isolated the problem to the other viewport.

• A problem with the current User Coordinate System (UCS)

The UCS you’re currently using for your drawing may have an issue that’s preventing the software from calculating angles between the cursor and objects in your plan. To check for and resolve this issue:

  • Use our Restore UCS tool to return your drawing to the World Coordinate System (WCS). Then try the action that generated the error (such as placing a valve callout).

    • Don’t see the error when attempting the same action in the WCS? If not, use our New UCS tool to set a new UCS for your drawing. Make sure you use our New UCS tool – not the AutoCAD UCS command.
    • Does the error persist in the WCS? If so, make absolute sure you’re working in Model Space and not Paper Space.

• An object with a Z elevation

You might see this error when clicking on an object that mistakenly has a Z elevation set to it. For example, you may be trying to call out a plant or a valve with a Z elevation.

Select the object you clicked.

Then open the Properties panel by typing Prop in the Command line and pressing Enter.

In the Properties panel, check the Position Z entry. If it’s anything other than 0, set it to 0. (If it’s already at 0, the object does not have a Z elevation.)

If you changed the Z elevation to 0, try the action that generated the error. Are you able to click the object without getting the error? You’ve solved the issue.

• Attempting to click objects on a locked layer

You might be trying to select an object on a locked layer. For example, you may be trying to call out a plant or valve whose layer is locked. See our section on locked and unlocked layers for instructions on how to unlock layers.

We generally don’t recommend locking layers – except those that contain your Xrefs.

• Using our Verify Labels tool when one of the blocks in your plan is empty – that is, no linework or objects inside the block

In this case, check the Command line history for the name of the object that caused the error. Check the Land F/X object data to determine which block is assigned. Then use one of the following possible solution options:

Option 1: Edit the data to use a different block that isn’t empty.

Option 2: Fix the empty block by either:

  • Using our Using our REDEFINEBLOCK tool, or
  • Editing the block manually to add linework inside it

Option 3: If using Reference Notes (RefNotes), consider whether the reason for the empty block is that you don’t actually want the block to be visible in your drawing.

If you don’t in fact want the block to be visible, change the RefNote from an Amenity RefNote to a Notation RefNote. Then use the Quick Select command to select and delete all the empty blocks and place Notation callouts instead.

 Close

• Error: ‘Bad argument type: consp nil’

This error can result from:

  • A bug in the software code

Make absolute sure you’ve followed our steps for what to do first when you see a bad argument type error – especially Step 3: Check for a bug in the code. Take note of exactly what you did (or tried to do) that resulted in the error, and check it against our recent updates, as described in those steps.

  • Attempting to select an item in your plan that is no longer in the current Land F/X project 

Once you’ve ruled out a bug, it’s time to check whether an object you’re attempting to select, such as a plant or a piece of irrigation equipment, has been removed from your project. If so, you’ll need to add that item back to your project.

  • A font issue

Did you get this error when trying to place text? Solution >

  • Update didn’t complete

Did you get this error after trying to run an update? The update may not have completed correctly. Follow our steps to Revert to a previous version after an update. Then run the update again and restart your computer.

 Close

• Error: ‘Bad argument type: INT nil’

We’ve seen this error pop up right after clicking the Site Color palette, but you might see it when you select or use other Land F/X tools as welll.

You can resolve this error quickly by following our steps to install the latest OpenDCL library.

 Close

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

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

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

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

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

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

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

Рис. 1. «Окно справка»

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

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

А второй msg — текст, который будет показан пользователю.

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

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

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

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

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

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

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

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

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

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

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

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

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

Консоль выдаст нам сообщение об ошибке: неверный тип аргумента: point: nil.

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

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

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

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

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

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

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

Консоль выдает сообщения об ошибке: неверная функция : 0. Скорее всего, координаты в скобках Visual LISP принял за функцию с именем 0 (вспоминаем, что после открывающийся скобки всегда следует имя функции). Как объяснить Visual LISP, что это не функция, а список координат? Для этого есть, два способа:

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. Координаты указанной точки.

Давайте теперь разберемся со вторым аргументом. Напомню, что это msg — текст, который будет показан пользователю. Поскольку это текст (string), то писать его нужно в кавычках. Давайте добавим к нашей функции надпись: “Проверка”. См. Рис. 10.

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

Рис.. 10.    Добавляем (getpoint(0 0 0) «Проверка»)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Стоит отметить, что в программах AutoLISP нужно всегда использовать кавычки вида “ ” (кавычки « » — не воспринимаются)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рис. 18. Добавление переменных в окно «Контрольное значение».

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

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

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

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

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

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

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

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

Рис. 20.   Кнопка  «Добавить контрольное значение».

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

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

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

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

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

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

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

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

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

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

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

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

Рис. 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 стала для Вас теперь легкой, занимательной головоломкой.

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

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

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

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

Я с удовольствием отвечу на ваши комментарии.

Если вы хотите получать новости с моего сайта. Оформляйте подписку.

До новых встреч.

 «Автор: Михаил Орлов»

Google

Также на эту тему Вы можете почитать:

#1 24 июля 2015г. 16:35:04

  • Blackjek
  • Участник
  • На форуме с 24 июля 2015г.
  • Сообщений: 3
  • Спасибо: 0

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

Добрый день коллеги.
Моим товарищем было написан лисп:
(defun c:11 (/  xyfill osm ocmd spt ept cla)

 
  ;;—————————————————————————
  ;; функция заливки прямоугольника, определенного точками 1pt и 2pt в текущей ПСК,
  ;; блоками с именем bname на максимальном расстоянии maxdist
  (defun xyfill (1pt 2pt maxdist bname / n_meas nx ny dx dy sx sy ix iy)

    (defun n_meas (1p 2p d / n) ;_ возвращает количество точек деления по координате
      (max (fix (if (not (zerop (- (abs (- 2p 1p)) (* (fix (setq n (/ (abs (- 2p 1p)) d))) d))))
                  (1+ n)
                  n
                ) ;_  if
           ) ;_  fix
           1 ;_ минимум одна точка деления
      ) ;_  max
  ) ;_  defun n_meas

        (setq dimlf1 (getvar «DIMLFAC»));; установка масштаба блока «Оросители»
    (setq mashbloka1 (/ 1.0 dimlf1))
    (setq nx (n_meas (car 1pt) (car 2pt) maxdist))
    (setq ny (n_meas (cadr 1pt) (cadr 2pt) maxdist))
    (setq dx (/ (- (car 2pt) (car 1pt)) nx)) ;_ шаг по X
    (setq dy (/ (- (cadr 2pt) (cadr 1pt)) ny)) ;_ шаг по Y
    (princ (list «рядов по X=» nx «, по Y=» ny «, шаг X=» dx «, шаг Y=» dy));;писанина
    (setq sx (+ (car 1pt) (* dx 0.5)))
    (setq sy (+ (cadr 1pt) (* dy 0.5)))
    (setq ix sx)
    (repeat nx
      (setq iy sy)
      (repeat ny
        (vl-cmdf «_.insert» bname (list ix iy) mashbloka1 mashbloka1 0)
        (setq iy (+ iy dy))
      ) ;_  repeat
      (setq ix (+ ix dx))
    ) ;_  repeat
  ) ;_  defun xyfill
  ;;—————————————————————————

  ;; собственно программа

;; Установка слоёв
(setq ocmd1 (getvar «cmdecho»))
  (setvar «cmdecho» 0)
   (if (setq layget (tblsearch «LAYER» «Оросители»)) ; проверка на наличие слоя
    (cond                               ; если есть, то проверка его состояния
      ((= (logand 1 (cdr (assoc 70 layget))) 1)
       (alert «Слой \»Оросители\», заморожен!\n\nДальнейшая работа, увы, невозможна…»)
       (exit)
      )
      ((= (logand 4 (cdr (assoc 70 layget))) 4)
       (alert «Слой \»Оросители\» заблокирован!\n\nДальнейшая работа, увы, невозможна…»)
       (exit)
      )
      ((minusp (cdr (assoc 62 layget)))
       (alert «Внимание!!!\n\nСлой \»Оросители\», на котором будет отрисован объект, невидим!»)
      )
    ) ;_  cond
    (vl-cmdf «_.layer» «_n» «Оросители» «_c» 20 «Оросители» «») ; создание слоя, если такого нет
  ) ;_  if
(setvar «cmdecho» ocmd1)
  ;;конец функции установки слоев

    (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
  (setq cla (getvar «CLAYER»))
  (setq ocmd (getvar «cmdecho»))
  (setq osm (getvar «osmode»))
  (setq bname1 «Ороситель») ;; Имя блока
  (princ (strcat «\nЗаливка прямоугольника блоками » bname1 «.»))
  (initget 1)
  (setq spt (getpoint «\nОдин угол >»))
  (initget 1)
  (setq ept (getpoint «\nДругой угол >»))
  (princ «\nМинуточку…..\n»)
  (setvar «CLAYER» «Оросители»)
  (setvar «cmdecho» 0)
  (setvar «osmode» 0)
  (xyfill spt ept (/ (atof(getenv «min-dist»)) (getvar «dimlfac»)) bname1)  ;_ указать минимальную дистанцию и имя блока заливки
  (setvar «cmdecho» ocmd)
  (setvar «CLAYER» cla)
  (setvar «osmode» osm)
  (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
  (princ «\nГотово smile«)
  (princ (strcat «\nШаг между оросителями составляет : » (getenv «min-dist») «мм»))
  (princ)
) ;_  defun

(vl-load-com)

;;;**********************************************************************************************************
(defun min-dist-orosit (/ i)
;; (min-dist-orosit)
(or (getenv «min-dist») (setenv «min-dist» «4000»))
(initget «» 6)
(if (setq i
           (getdist
            (strcat «\n Укажите минимальную дистанцию между блоками [» (getenv «min-dist») «]»)
           ) ;_  getint
     ) ;_  setq
  (setenv «min-dist» (rtos i 2 3))
) ;_  if
(atof (getenv «min-dist»))
) ;_  defun

Смысл данной программы заключается:
1. Создается слой
2. равномерное распределение блока «ороситель» по всей площади помещения с указанием шаг оросителя.

В старых версиях программы все работало  — а  для в автокаде 2012 не работает, выдает ошибку:
Ошибка: неверный тип аргумента: stringp nil.
Помогите и разъясните , чтоб понять в чем ошибка и куда смотреть?
Спасибо.

#2 Ответ от Alan 26 июля 2015г. 14:31:56

  • Alan
  • Активный участник
  • Откуда: Украина / Киев
  • На форуме с 2 апреля 2002г.
  • Сообщений: 1,345
  • Спасибо: 15

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

Про (getenv «min-dist») я отвечал на соседнем форуме

#3 Ответ от Blackjek 27 июля 2015г. 08:46:23

  • Blackjek
  • Участник
  • На форуме с 24 июля 2015г.
  • Сообщений: 3
  • Спасибо: 0

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

Спасибо за совет  — «Там была определена переменная среды min-dist, а в новом нет — (getenv «min-dist») — nil

Задайте её и будет вам счастье…»

а Вы можете, чайнику подсказать что и где править?

Спасибо

#4 Ответ от kpblc 27 июля 2015г. 09:05:14

  • kpblc
  • kpblc
  • Активный участник
  • Откуда: С.-Петербург
  • На форуме с 29 ноября 2004г.
  • Сообщений: 8,348
  • Спасибо: 23

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

Сначала запусти функцию min-dist-orosit

#5 Ответ от Alan 27 июля 2015г. 12:06:56

  • Alan
  • Активный участник
  • Откуда: Украина / Киев
  • На форуме с 2 апреля 2002г.
  • Сообщений: 1,345
  • Спасибо: 15

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

Дмитрий Беляков пишет:

а Вы можете, чайнику подсказать что и где править?

Ну или добавь вызов  функции min-dist-orosit в начало своего текста

(defun c:11 (/ xyfill osm ocmd spt ept cla) 
;;; вызов функции задания  дистанции между блоками
(min-dist-orosit) 
..............

тогда при вызове команды 11, функция min-dist-orosit будет отрабатывать автоматически.
Как мне кажется в этом тексте есть еще достаточно подводных камней типа ошибок.
Совет.
Если хочешь изучать работу ЛИСПа, открывай тексты в редакторе ВизуалЛиспа и запускай пошаговую отладку

#6 Ответ от Alan 6 августа 2015г. 14:47:20 (изменено: Alan aka Александр Назаров, 6 августа 2015г. 14:47:51)

  • Alan
  • Активный участник
  • Откуда: Украина / Киев
  • На форуме с 2 апреля 2002г.
  • Сообщений: 1,345
  • Спасибо: 15

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

убрал дубль

Issue

You received the following error message: Error: ‘bad argument type: stringp nil‘.

Error: 'bad argument type: stringp nil

You may have seen this message when you:

  • Tried to use our Verify Labels tool, or when working specifically with plants.
  • Had our Color Render tool turned on.
  • Attempted to open AutoCAD or F/X CAD, and it completely froze.
  • Tried to add a dripline hatch to your project.
  • Tried to place a block from our Discipline Graphics library

Seeing a different bad argument type error? See our Error: Bad argument type landing page.

Causes & Solutions

The solution to this error will depend on what you were doing (or trying to do) when you saw the error:

You tried to open CAD, and it froze. You’re unable to use Land F/X at all.

1. Ensure that the Microsoft Visual C++ Runtimes are up to date on your system.

If you’ve verified that you have the latest Microsoft Visual C++ Runtimes but you’re still seeing the error, move on to the next step.

2. Close CAD.

3. With CAD still closed, open your LandFX folder.

Locate and open a file named _install_.xml.

Your LandFX folder might be located on your computer, on an office server, or on a shared online folder. Not sure where it is? Ask your IT administrator or CAD manager.

_install_xml file in LandFX folder

_install_xml file open in Notepad showing Support ID

4. The file will open in your default text application, such as Notepad.

Verify that the information in the file, including your office’s Land F/X Support ID, is complete in the file.

5. If any information, such as your Support ID, is missing from the _install_.xml file, close the file and locate it in your LandFX folder. Change the file’s name, giving it the name _install_.xmlOLD.

Renaming _install_.xml file

6. Locate a file named _install_.xml.bak. Change this file’s name to _install_.xml (don’t forget the underscores).

Renaming _install_.xml.bak to _install_.xml

7. Open CAD. Can you access your Land F/X tools without errors? If so, you’ve resolved the issue.

Still getting the error? Move on to the next step.

8. Copy the following text, including the parentheses, and paste it into the Command line: (getenv «username»)

Press Enter.

If you now see the text ‘nil’ in the Command line, complete the following steps to resolve the error:

     8A. Follow our steps to uninstall CAD.

Follow steps 1 through 5 in the article linked above, including deleting all additional registries and files. Do not reinstall CAD quite yet – you’ll do that after the next step.

     8B. Follow our steps to uninstall the F/X Workstation component.

     8C. Now reinstall your version of CAD.

If you’re reinstalling AutoCAD (not F/X CAD), you’ll need to reinstall the F/X Workstation component to be able to see your Land F/X menus. The F/X Workstation component is included in the F/X CAD installer, so F/X CAD users won’t need to reinstall F/X Workstation at this point.

 Close

You tried to to use our Verify Labels tool, or you were working specifically with plants.

Check whether your plant layers are locked – especially if you received the error when attempting to use our Verify Labels tool.

Here’s an example of several locked plant layers as shown in the Layers Properties Manager:

Layers Properties Manager showing several locked plant layers

If your plant layers are locked, unlock them. For instructions, see our lock/unlock layers documentation section.

Once you’ve unlocked your plant layers (if applicable), run the Verify Labels tool. If it functions correctly, you’ve resolved the issue.

 Close

You have our Color Render tool turned on.

If you are able to use the software (ruling out the damaged XML file) and your plant labels are all unlocked (ruling out the locked layers issue), our Color Render tool may be causing the problem. Do you have Color Render turned on? Read on.

1. Our Color Render tool can also cause this error from time to time. Your next step should be to turn Color Render off for now.

Turning Color Render off

2. Now repeat the action that generated the error. You should be able to complete that step without seeing the error message.

This error can also occur as a result of clicking the OK button in the Colorization dialog box when no plant color symbols have been assigned. In this case, the drawing will still appear with 2D symbols instead of color symbols, but will be in Color Render mode and potentially cause this error. You should still perform the troubleshooting step of clicking Turn Off Color – even if the plan doesn’t look colorized – which may very well resolve the issue.

You can turn Color Render back on when ready to present your design.

 Close

You tried to add an Area for Dripline hatch.

If so, your drip hatch XML file is missing, which is causing the error.

1. Ensure that your installation is up to date. Follow our steps to update Land F/X.

3. Select the Drip tab, and place any generic drip hatch. This step will restore your drip hatch XML file.

Hatch dialog box, Drip tab

4. Add your dripline area equipment again.

You should be able to add the equipment without seeing the error.

 Close

You tried to place a block from our library of Discipline Graphics

You saw this error because the block you tried to place is saved in the main Discipline Graphics folder (LandFX/Blocks/discipline_graphics) instead of one of its subfolders.

Move the block’s source files to a subfolder within the folder discipline_graphics, such as user_defined. You should now be able to place the block without seeing the error.

Moving a block's source files into the LandFX/Blocks/discipline_graphics/user_defined folder

 Close

None of the above, or are the other solutions not working? Check for drawing corruption.

If none of the other scenarios listed above apply, or if you’ve followed the solution steps and you’re still seeing the error, you most likely have corruption in your drawing.

Follow our steps to clean your drawing and all Xrefs.

Open the clean file and attempt the same action that generated the error. If you’re not getting the error, you’ve cleaned your drawing successfully and can keep working in the clean drawing.

Don’t want to clean your drawing? You can try to replicate the error in a blank drawing. Take care to open the blank drawing based on either the acad.dwt (Imperial units) or acadiso.dwt (metric units) templates. Repeat the action that seemed to cause the error, such as placing a plant or generating a Reference Notes Schedule – whatever you tried to do when you saw the error. If you don’t see the error in the blank drawing, you’re likely facing drawing corruption in the original drawing where you saw the error, and will need to clean it anyway.

 Close

Понравилась статья? Поделить с друзьями:
  • Ошибка неверный тип аргумента numberp nil
  • Ошибка не удалось запустить программу clangbackend
  • Ошибка неверный домен ключа при регистрации
  • Ошибка не удалось запустить проверочный звук
  • Ошибка неверный домен ключа ucoz