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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp некорректно обрабатывает определённый участок кода

Lisp некорректно обрабатывает определённый участок кода

Ответ
Поиск в этой теме
Непрочитано 17.03.2025, 15:45 #1
Lisp некорректно обрабатывает определённый участок кода
Mr_Poltinik
 
Регистрация: 17.03.2025
Сообщений: 4

Я написал код для создания 3d модели, после чего написал ещё участок , который должен строить параллелепипед , чтобы потом вычесть его из модели и сделать вырез. До написания кода с параллелепипедом всё работало нормально, но после его написания и загрузки автокад не хочет его строить, как будто не видит его. Я вставлял его в разные участки кода, автокад выполняет код до него , потом надо щёлкунть на чертеже и только потом он выполнит оставшейся код, а построение параллелепипеда просто игнорирует. Также если загружать файл с этим участком в конце кода(обычно в консоли появляется сообщение что 2 форм загружено ), то после нажатия загрузки в консоли ничего не происходит,а после вызова команды на построение , строится модель и автокад просит указать первую точку угла(хотя я вроде указываю координаты для построения), а к командной строке появляется сообщение:Укажите точку первого угла или [Фаска/Уровень/Сопряжение/Толщина/Ширина]: ; ошибка: неверное значение аргумента: Команда AutoCAD: #<SUBR @0000021725204d88 LIST>. При вызове других команд по типу "_box" , он тоже видит только команду , но не координаты для построения.
Вот сам код :
Код:
[Выделить все]
 (defun bldob ()
  (setq a   90 ; длина нижнего основания
        b   60 ; ширина нижнего основания
	a1  75.5 ; длина основания, этот размер не указан на чертеже
	b1  55.5 ; ширина основания, этот размер не указан на чертеже
	h1  20 ; высота основания
	c   50 ; длина верхнего основания трапеции
	w   24 ; ширина трапеции
	h2  35 ; высота трапеции
	f   44 ; длина цилидра
	d1  40 ; внешний диаметр
	d2  16 ; внутренний диаметр
	aa  (/ a 2)
	bb  (/ b 2)
	w1  (/ w 2)
	c1  (/ c 2)
	aa1 (/ a1 2)
	bb1 (/ b1 2)
	ha  (+ h1 h2)
	ff  (/ f 2)
        )
  (defun c:osmode_off (/)
 (setq osmode_old_ (getvar "osmode") )
 (setvar "osmode" 0)
 (prin1))
  /defun (c:osmode_off)

  (setq pt1 (list (- 0 aa ) (- 0 bb))
       pt2 (list aa bb))
  (command "_rectang" pt1 pt2) ; нижнее основание
  (setq ob1 (entlast))
  ( setq pt3 (list (- 0 aa1) (- 0 bb1) h1)
	 pt4 (list aa1 bb1 h1))
  (command "_rectang" pt3 pt4) ; основание 
  (setq ob2 (entlast))
  (command "_loft" ob1 ob2 "" "")
  (setq ob3d (entlast))
  (setq pt5 (list (- 0 aa1) (- 0 w1) h1)
	pt6 (list aa1 w1 h1))
  (command "_rectang" pt5 pt6)
  (setq ob3 (entlast))
  (setq pt7 (list (- 0 c1) (- 0 w1) ha)
	pt8 (list c1 w1 ha))
  (command "_rectang" pt7 pt8)
  (setq ob4 (entlast))
  (command "_loft" ob3 ob4 "" "")
  (command "_union" ob3d (entlast)"")
  (command "_ucs" (list 0 0 ha) "")
  (command "_ucs" "x" -90)
  (command "_circle" (list 0 0 (- 0 ff)) (/ d1 2))
  (setq ob5 (entlast))
  (command "_extrude" ob5 "" f)
  (command "_union" ob3d (entlast)"")
  (command "_circle" (list 0 0 (- 0 ff)) (/ d2 2))
  
  (command "_extrude" (entlast) "" f)
  (command "_subtract" ob3d "" (entlast) "")
  
  (command "_ucs" "x" 90)
  (command "_ucs" (list 0 0 (- 0 ha)) "")

 ;  (setq pt9 list(8 (- 0 12) 55)
 ; 	 pt10 list(20 12 55))
 ; (command "_rectang" pt9 pt10)
 ; (setq ob6 (entlast))
 ; (setq pt11 list(8 (- 0 12) 75)
 ;	 pt12 list(20 12 75))
 ; (command "_rectang" pt11 pt12)
 ; (setq ob7 (entlast))
 ; (command "_loft" ob6 ob7 "" "") 
  
)
  

(defun c:blob ()
  (bldob))
А вот код построения параллелепипеда :
Код:
[Выделить все]
     (setq pt9 list(8 (- 0 12) 55)
  	 pt10 list(20 12 55))
  (command "_rectang" pt9 pt10)
  (setq ob6 (entlast))
  (setq pt11 list(8 (- 0 12) 75)
  	 pt12 list(20 12 75))
  (command "_rectang" pt11 pt12)
  (setq ob7 (entlast))
  (command "_loft" ob6 ob7 "" "")

Последний раз редактировалось Кулик Алексей aka kpblc, 17.03.2025 в 16:38.
Просмотров: 616
 
Непрочитано 18.03.2025, 13:48
#2
name02


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


Ооох, дружище. Перефразируя - ник твой известен, код твой бессмертен...
У тебя код построения параллелепипеда неправильно написан: ты пишешь list(...), а надо (list ...)
И зачем вычисления в list(8 (- 0 12) 55), можно сразу написать (list 8 -12 55)
name02 вне форума  
 
Автор темы   Непрочитано 20.03.2025, 16:13
#3
Mr_Poltinik


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


Да не, не в скобках дело. Я их правильно поставил после того как опубликовал тему, и ничего не поменялось, но он хотя бы теперь пишет что форма загружена , а не просто ничего. Вот я ставлю код от параллелепипеда в середину например и он до середины строит модель я дальше просто останавливается. Вот почему такое может быть?
Mr_Poltinik вне форума  
 
Непрочитано 20.03.2025, 16:18
#4
name02


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


Из 26 строки /defun убрал?
В твоем коде исправил 26 строку и исправил все list( на (list - строит

В середину кода не надо ставить - у тебя есть места, в которых фигурирует (entlast) - это последний созданный/измененный объект в чертеже
Поэтому лучше сделать так:
Код:
[Выделить все]
 (defun c:blob ()
  (bldob)
  
  (setq	pt9 (list
	8 (- 0 12) 55)
	 pt10
	(list 20 12 55)
  ) ;_ end of setq
  (command "_rectang" pt9 pt10)
  (setq ob6 (entlast))
  (setq	pt11 (list
	       8
	       (- 0 12)
	       75
	     ) ;_ end of list
	pt12
	     (list 20 12 75)
  ) ;_ end of setq
  (command "_rectang" pt11 pt12)
  (setq ob7 (entlast))
  (command "_loft" ob6 ob7 "" "")


) ;_ end of defun

Последний раз редактировалось name02, 20.03.2025 в 16:23.
name02 вне форума  
 
Автор темы   Непрочитано 20.03.2025, 16:21
#5
Mr_Poltinik


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


а зачем его убирать? я взял его из интернета , чтобы привязку выключить, потому что если его убрать то построение кривое будет
Mr_Poltinik вне форума  
 
Непрочитано 21.03.2025, 07:19
#6
name02


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


Из 26 строки твоего кода убери только /defun , оставь только (с:оsmode_off)
name02 вне форума  
 
Автор темы   Непрочитано 21.03.2025, 08:11
#7
Mr_Poltinik


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


Это не в 26 строке /defun надо было убрать, я просто кучу скобок нагромоздил в list, надо было (list 20 12 55), а у меня было (list( 20 12 55)). Я лишние убрал и всё построилось. Спасибо за помощь
Mr_Poltinik вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Lisp некорректно обрабатывает определённый участок кода



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Autolisp Шифрование LISP файлов mikls LISP 4 07.06.2014 16:16
Не загружается автоматически LISP Малюк LISP 3 14.01.2014 08:58
Использование чужого кода в своих программах Golem-iq Программирование 31 02.09.2013 14:33
Запуск Lisp команды в новом документе BlackHarp LISP 1 26.03.2009 23:06
загрузка DOS прог через LISP Gaa LISP 15 12.08.2005 19:19