Помогите новичку! Параметаризация детали на AutoLISPe!!! - Страница 2
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Помогите новичку! Параметаризация детали на AutoLISPe!!!

Помогите новичку! Параметаризация детали на AutoLISPe!!!

Ответ
Поиск в этой теме
Непрочитано 16.01.2011, 14:29
Помогите новичку! Параметаризация детали на AutoLISPe!!!
Nica_019
 
Регистрация: 16.01.2011
Сообщений: 1

Нужно написать параметаризацию детали. При попытки загрузить код программы в autocad выдает ошибку: неправильно сформированный список на входе. Где ошибка, подскажите, пожалуйста!

Код:
[Выделить все]
( DEFUN show ( x y L / tmp lst R1 d1 R2 R3 R4 R5)
 ; x, y, L - параметры
 ; tmp, lst - локальные переменные
 
; зададим параметры
(SETQ R1 (* 0.15 L))
(SETQ d1 (* 0.45 L))
(SETQ R2 (* 0.35 L))
(SETQ R3 (* 0.25 L))
(SETQ R4 (* 0.11 L))
(SETQ R5 (* 2 R4))

; координата x точки p2 записывается в переменную tmp
 ( SETQ tmp x )
 ; в переменную lst записывается список координат
 ; точки p2
 ( SETQ lst ( LIST tmp ( + y ( - ( / L 2 ) R5 ) ) ) )
 ; координата x точки p3 записывается в переменную tmp
 ( SETQ tmp x )
 ; в переменную tmp записывается список координат
 ; точки p3
 ( SETQ tmp ( LIST tmp ( + y ( - ( / L 2 ) R4 ) ) ) )
 ; в список lst добавляется точка p3
 ( SETQ lst ( LIST lst tmp ) )

 ( SETQ tmp x )
 ( SETQ tmp ( LIST tmp ( + y ( / L 2 ) ) ) )
 ; в список lst добавляется точка p4
 ( SETQ lst ( LIST lst tmp ) )

( SETQ tmp ( - x R4 )
 ( SETQ tmp ( LIST tmp ( + y ( / L 2 ) ) ) )
 ; в список lst добавляется точка p5
 ( SETQ lst ( LIST lst tmp ) )

( SETQ tmp ( - x R5)
 ( SETQ tmp ( LIST tmp ( + y ( / L 2 ) ) ) )
 ; в список lst добавляется точка p6
 ( SETQ lst ( LIST lst tmp ) )

( SETQ tmp ( + x ( - ( / L 2 ) R2 ) ) )
 ( SETQ tmp ( LIST tmp ( + y ( / L 2 ) ) ) )
 ; в список lst добавляется точка p7
 ( SETQ lst ( LIST lst tmp ) )

( SETQ tmp ( + x ( - ( / L 2 ) ( / d1 2 ) ) ) )
 ( SETQ tmp ( LIST tmp ( + y ( / L 2 ) ) ) )
 ; в список lst добавляется точка p8
 ( SETQ lst ( LIST lst tmp ) )

( SETQ tmp ( + x ( - ( / L 2 ) R1 ) ) )
 ( SETQ tmp ( LIST tmp ( + y ( / L 2 ) ) ) )
 ; в список lst добавляется точка p9
 ( SETQ lst ( LIST lst tmp ) )

( SETQ tmp ( + x ( / L 2 ) )
 ( SETQ tmp ( LIST tmp ( + y ( / L 2 ) ) ) )
 ; в список lst добавляется точка p10
 ( SETQ lst ( LIST lst tmp ) )

( SETQ tmp ( + x ( / L 2 ) )
 ( SETQ tmp ( LIST tmp ( + y ( - ( / L 2 ) R1 ) ) ) )
 ; в список lst добавляется точка p11
 ( SETQ lst ( LIST lst tmp ) )

( SETQ tmp ( + x ( - ( / L 2 ) ( / d1 2 ) ) ) )
 ( SETQ tmp ( LIST tmp ( + y ( - ( / L 2 ) ( / d1 2 ) ) ) ) )
 ; в список lst добавляется точка p12
 ( SETQ lst ( LIST lst tmp ) )

( SETQ tmp ( + x ( - ( / L 2 ) R3 ) ) )
 ( SETQ tmp ( LIST tmp ( + y ( - ( / L 2 ) ( / d1 2 ) ) ) ) )
 ; в список lst добавляется точка p13
 ( SETQ lst ( LIST lst tmp ) )

( SETQ tmp ( + x ( / L 2 ) )
 ( SETQ tmp ( LIST tmp ( + y ( - ( / L 2 ) ( / d1 2 ) ) ) ) )
 ; в список lst добавляется точка p14
 ( SETQ lst ( LIST lst tmp ) )

( SETQ tmp ( + x ( - ( / L 2 ) R5 ) ) )
 ( SETQ tmp ( LIST tmp ( + y ( - ( / L 2 ) R5 ) ) ) )
 ; в список lst добавляется точка p15
 ( SETQ lst ( LIST lst tmp ) )

( SETQ tmp ( + x ( - ( / L 2 ) R3 ) ) )
 ( SETQ tmp ( LIST tmp y ) )
 ; в список lst добавляется точка p16
 ( SETQ lst ( LIST lst tmp ) )

); конец функции


( COMMAND "ПЛИНИЯ"
 ( NTH 0 lst ) ; p2
 ( LIST x y ) ; точка p1
 ( NTH 14 lst ) ; точка p16
 ( NTH 11 lst ) ; p13
  "" ) ; прерывание команды "ПЛИНИЯ"

( COMMAND "ЗЕРКАЛО"
 ( CAR lst ) ; выбрали объект, указав точку p2
 "" ; прервали выбор объектов
 ( NTH 4 lst ) ; первая точка осевой линии  
 ( NTH 8 lst ) ; вторая точка осевой линии
  "Н" ) ; старые объекты не удалять
 
( COMMAND "ПОКАЖИ" "ВСЕ" )
); конец функции

( DEFUN getdim ( / L )
; ввод длины 
; возвращаемый список: ( длина )
( SETQ L ( GETREAL "\nВведите длину : " ) )
( LIST L ) ; возвращаемое значение
) ; конец функции getdim

( DEFUN C:main ( / L x y )
 
  ( SETQ L ( getdim ) x 10 y 10 )
  ( show x y ( CAR L ) )
  ( PRIN1 )
)

Последний раз редактировалось Кулик Алексей aka kpblc, 16.01.2011 в 19:12.
Просмотров: 8655
 
Непрочитано 04.02.2011, 19:36
#21
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Для справки: в командную строку невозможно ввести команду (она же - код) длиной более 255 символов, насколько я помню. По крайней мере пару раз на такие грабли я наступал.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.02.2011, 19:56
#22
Li6-D


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


Ясно дело, что если при загрузке кода в командную строку были выданы сообщения: ((_>, ("_> или
; ошибка: лишняя закрывающая скобка на входе,
код не сбалансирован.
Сам так иногда проверяю, не заботясь о вычислениях, которые надо выполнить перед выполнением подозреваемого куска кода.
Это метод, правда, не всегда работает. В несбалансированном коде прежде, чем будут проверены скобки
могут вылезти и другие ошибки, например:
Команда: (nofun)))
; ошибка: no function definition: NOFUN
Команда: (defun fun () (1+ 2))(fun 2)))
; ошибка: слишком много аргументов
Команда: (if (< k3 3)(setq k3 0)(setq k3 (/ (ascii (substr k2 3 1))) 100.0)))
; ошибка: синтаксическая ошибка
Последняя ошибка вылезла из-за того, что из-за неправильной простановки скобок у setq получилось 3 аргумента.
Чтобы подавить вредное влияние вычислений можно в командной строке ввести "(quote(", вставить проверяемый код и добавить "))". Или ничего не добавлять, это дело вкуса.
А в командную строку можно копипастить достаточно большой код, при этом каждая строчка кода должна содержать не больше 256 символов. Код автора темы в сумме содержит больше символов, но полностью грузится, выдавая нехватку 4 закрывающихся скобок. Добавьте туда длинную строку и при вставке кода произойдет ее обрезка (в отличие от загрузки функцией load).

Последний раз редактировалось Li6-D, 05.02.2011 в 23:53.
Li6-D вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Помогите новичку! Параметаризация детали на AutoLISPe!!!



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Документация Проектировщику на Torrents DEM Разное 263 03.09.2024 12:25
Proxy-графика, как с ней бороться, помогите новичку lednev AutoCAD 18 21.03.2016 09:01
Помогите советом новичку с расчетной схемой K_Sokolsky Конструкции зданий и сооружений 9 02.02.2010 13:08
Помогите написать программу на AUTOLISP'e Сергей123 LISP 28 06.09.2007 12:20
Помогите новичку Дмитрий2 Программирование 32 14.07.2004 21:57