Ошибка: неверный тип аргумента: stringp nil.
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Ошибка: неверный тип аргумента: stringp nil.

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

Закрытая тема
Поиск в этой теме
Непрочитано 24.07.2015, 16:37 #1
Ошибка: неверный тип аргумента: stringp nil.
Джек
 
Строительство
 
Нижний Новгород
Регистрация: 03.09.2003
Сообщений: 81

Добрый день коллеги.
Моим товарищем было написан лисп:
Код:
[Выделить все]
(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.
Помогите и разъясните , чтоб понять в чем ошибка и куда смотреть?
Спасибо.

Последний раз редактировалось Джек, 24.07.2015 в 16:41. Причина: [code]значение[/code]
Просмотров: 5452
 
Непрочитано 24.07.2015, 16:53
#2
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,834
<phrase 1=


Цитата:
Сообщение от Джек Посмотреть сообщение
В старых версиях программы все работало - а для в автокаде 2012 не работает
Там была определена переменная среды min-dist, а в новом нет - (getenv "min-dist") - nil
Задайте её и будет вам счастье...
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 24.07.2015, 21:50
#3
Бот
Moderator


 
Регистрация: 12.06.2012
Сообщений: 0


Джек, просьба изменить название темы "Ошибка: неверный тип аргумента: stringp nil." в соответствии с п.4.3. правил форума, в противном случае тема будет закрыта через 12 часов.

Как переименовать тему?

Сообщение сгенерировано автоматически, отвечать на него не нужно
Бот вне форума  
Закрытая тема
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Ошибка: неверный тип аргумента: stringp nil.



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мои макрокоманды zenon Программирование 1048 16.03.2025 07:36
Какой язык перспективен для инженера-конструктора с условием The_Mercy_Seat Программирование 705 17.03.2021 14:19
Компилированные формы, как от этого избавиться? DANZZ AutoCAD 16 12.04.2010 12:46
Несоответствие результатов в Лире s.vas Лира / Лира-САПР 19 11.11.2009 07:31
Помощь по Лире Серега М Лира / Лира-САПР 52 28.05.2007 02:47