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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Не работает код ЛИСП: невозможно создать новые слои...

Не работает код ЛИСП: невозможно создать новые слои...

Ответ
Поиск в этой теме
Непрочитано 09.10.2010, 17:27 #1
Не работает код ЛИСП: невозможно создать новые слои...
Иван Hayes
 
Регистрация: 29.08.2010
Сообщений: 46

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

Код:
[Выделить все]
; FLEXIBLE DUCTS
;
;This lisp will draw flexible duct on the selected entity.
;Type fd & enter
;User needs to select the centre line of flexible & provide diameter.
;Thats all. You will have flexible duct in a blink of
;your eye
;
;
(defun c:fd(/ ce osm clyr fr cin c1 c2 c3 c4 c5 c6 c7 cl fb fdia bn terr)
(princ "\n Made easy for you by Vivian Carvalho")
(setq ce(getvar "cmdecho")
osm(getvar "osmode")
clyr(getvar "clayer")
fr(getvar "filletrad"))
(setq terr *error*)
(setq *error* SAD_SET)
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(setq cl(car (entsel "\n Select the centre line of flexible : ")))
(setq fdia(getdist "\n Specify Diameter of the flexible : "))
(if (> 200 fdia)
(setvar "filletrad" 100)
(setvar "filletrad" 200))
(if (null (tblsearch "layer" "DUCTING"))
(command "layer" "n" "DUCTING" "c" "magenta" "DUCTING" "")
(princ))
(if (= "LWPOLYLINE" (cdr (assoc 0 (entget cl))))
(command "fillet" "p" cl)
(princ))
(command "change" cl"" "p" "la" "DUCTING" "")
(setq cin(cdr (assoc 10 (entget cl)))
c1(polar cin 1.570796 (/ fdia 2))
c2(polar cin 4.712387 (/ fdia 2))
c3(polar cin 0.0 20)
c4(polar c3 1.570796 50)
c5(polar c3 4.712387 50)
c6(polar c5 3.141592 40)
c7(polar c4 3.141592 40))
(command "pline" c1 c4 c5 c2 c6 c7 "c")
(setq fb(entlast))
(command "change" fb"" "p" "la" "DUCTING" "c" "7" "")
(setq bn (strcat "FLEX"(rtos fdia 2 0)))
(if (null(tblsearch "block" bn))
(progn(command "block" bn cin "previous" "")
(command "measure" cl "b" bn "y" "40"))
(progn (command "measure" cl "b" bn "y" "40")
(command "erase" fb"")))
(command "clayer" clyr)
(command "osmode" osm)
(command "filletrad" fr)
(command "cmdecho" ce)
(princ))
(defun SAD_SET (ERRORMSG)
(command nil nil nil)
(if (not (member ERRORMSG '("console break" "Function Cancelled")))
(princ (strcat "\nError:" ERRORMSG)))
(setvar "cmdecho" ce)
(setvar "osmode" osm)
(setvar "clayer" clyr)
(princ "\nAttention! An Error Has Occurred!")
(princ "\nProgram Now Restoring The User Settings.")
(terpri)
(setq *error* terr)
(princ)
)
Ошибку выдает такую:
Код:
[Выделить все]
Команда: _appload
fd.lsp успешно загружено.


Команда:
Команда:
Команда: _fd

 Made easy for you by Vivian Carvalho
 Select the centre line of flexible :
 Specify Diameter of the flexible : 1
Неизвестная команда "N".  Для вызова справки нажмите F1.
Неизвестная команда "DUCTING".  Для вызова справки нажмите F1.
Неизвестная команда "C".  Для вызова справки нажмите F1.
Неизвестная команда "MAGENTA".  Для вызова справки нажмите F1.
Неизвестная команда "DUCTING".  Для вызова справки нажмите F1.
Неизвестная команда "FD".  Для вызова справки нажмите F1.
Неизвестная команда "FILLET".  Для вызова справки нажмите F1.
Неизвестная команда "P".  Для вызова справки нажмите F1.
<имя объекта: 7EF06688>

Последний раз редактировалось Кулик Алексей aka kpblc, 09.10.2010 в 21:58.
Просмотров: 2459
 
Непрочитано 09.10.2010, 17:58
#2
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Иван Hayes, попробуй так
Код:
[Выделить все]
; FLEXIBLE DUCTS
;
;This lisp will draw flexible duct on the selected entity.
;Type fd & enter
;User needs to select the centre line of flexible & provide diameter.
;Thats all. You will have flexible duct in a blink of
;your eye
;
;
(defun c:fd(/ ce osm clyr fr cin c1 c2 c3 c4 c5 c6 c7 cl fb fdia bn terr)
(princ "\n Made easy for you by Vivian Carvalho")
(setq ce(getvar "cmdecho")
osm(getvar "osmode")
clyr(getvar "clayer")
fr(getvar "filletrad"))
(setq terr *error*)
(setq *error* SAD_SET)
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(setq cl(car (entsel "\n Select the centre line of flexible : ")))
(setq fdia(getdist "\n Specify Diameter of the flexible : "))
(if (> 200 fdia)
(setvar "filletrad" 100)
(setvar "filletrad" 200))
(if (null (tblsearch "layer" "DUCTING"))
(command "_-layer" "_n" "DUCTING" "_c" "_magenta" "DUCTING" "")
(princ))
(if (= "LWPOLYLINE" (cdr (assoc 0 (entget cl))))
(command "_fillet" "_p" cl)
(princ))
(command "_change" cl "" "_p" "_la" "DUCTING" "")
(setq cin(cdr (assoc 10 (entget cl)))
c1(polar cin 1.570796 (/ fdia 2))
c2(polar cin 4.712387 (/ fdia 2))
c3(polar cin 0.0 20)
c4(polar c3 1.570796 50)
c5(polar c3 4.712387 50)
c6(polar c5 3.141592 40)
c7(polar c4 3.141592 40))
(command "_pline" c1 c4 c5 c2 c6 c7 "_c")
(setq fb(entlast))
(command "_change" fb"" "_p" "_la" "DUCTING" "_c" "7" "")
(setq bn (strcat "FLEX"(rtos fdia 2 0)))
(if (null(tblsearch "block" bn))
(progn(command "_-block" bn cin "_previous" "")
(command "_measure" cl "_b" bn "_y" "40"))
(progn (command "_measure" cl "_b" bn "_y" "40")
(command "_erase" fb"")))
(command "clayer" clyr)
(command "osmode" osm)
(command "filletrad" fr)
(command "cmdecho" ce)
(princ))
(defun SAD_SET (ERRORMSG)
(command nil nil nil)
(if (not (member ERRORMSG '("console break" "Function Cancelled")))
(princ (strcat "\nError:" ERRORMSG)))
(setvar "cmdecho" ce)
(setvar "osmode" osm)
(setvar "clayer" clyr)
(princ "\nAttention! An Error Has Occurred!")
(princ "\nProgram Now Restoring The User Settings.")
(terpri)
(setq *error* terr)
(princ)
)
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 09.10.2010, 18:15
#3
Иван Hayes


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


Спасибо!

Заработало, но криво. Может еще где подчеркивания нужны? Буду пробовать...

Пишет:
Цитата:
Неизвестная команда "P". Для вызова справки нажмите F1.
Неизвестная команда "LA". Для вызова справки нажмите F1.
Неизвестная команда "DUCTING". Для вызова справки нажмите F1.
Неизвестная команда "FD". Для вызова справки нажмите F1.

Последний раз редактировалось Иван Hayes, 09.10.2010 в 18:26.
Иван Hayes вне форума  
 
Непрочитано 09.10.2010, 18:22
#4
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от Иван Hayes Посмотреть сообщение
Заработало, но криво. Может еще где подчеркивания нужны? Буду пробовать...
Криво... Как именно криво. Там где нужны подчеркивания, они нужны не для того, чтобы лучше или хуже работало, а чтобы работало вообще
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 09.10.2010, 19:02
#5
Иван Hayes


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


Работает криво вот так:
Цитата:
Команда: fd
Made easy for you by Vivian Carvalho
Select the centre line of flexible :
Specify Diameter of the flexible : 16
Неизвестная команда "P". Для вызова справки нажмите F1.
Неизвестная команда "LA". Для вызова справки нажмите F1.
Неизвестная команда "DUCTING". Для вызова справки нажмите F1.
Неизвестная команда "FD". Для вызова справки нажмите F1.
Это несмотря на то, что я добавил "_" перед DUCTING. Т.е. в коде выполняется лишь часть функций - нет выдавливания по сечениям, например.
Миниатюры
Нажмите на изображение для увеличения
Название: Flex.jpg
Просмотров: 92
Размер:	34.3 Кб
ID:	46349  
Иван Hayes вне форума  
 
Непрочитано 09.10.2010, 19:18
#6
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от Иван Hayes Посмотреть сообщение
Работает криво вот так:
Это несмотря на то, что я добавил "_" перед DUCTING. Т.е. в коде выполняется лишь часть функций - нет выдавливания по сечениям, например.

Иван Hayes, как раз перед DUCTING подчеркивание не нужно, так это имя слоя (если конечно ты не хочешь так слой назвать _DUCTING)
Цитата:
Неизвестная команда "P". Для вызова справки нажмите F1.
Неизвестная команда "LA". Для вызова справки нажмите F1.
Неизвестная команда "DUCTING". Для вызова справки нажмите F1.
Неизвестная команда "FD". Для вызова справки нажмите F1.
В выложенном тобой коде только в одной строке есть такая последовательность, а именно в строке (command "change" cl"" "p" "la" "DUCTING" ""), так вот в моем коде она исправлена на (command "_-layer" "_n" "DUCTING" "_c" "_magenta" "DUCTING" "")
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 09.10.2010, 20:36
#7
Иван Hayes


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


Ну, дык я твой код-то и тестирую. Про _DUCTING я понял, что это слой. Однако ж пишет: "команда "DUCTING". Вот я и решил поставить подчеркивание на всяк пожарный - не помогло. В итоге, сам видишь, что гофру не строит и выдает ошибки

Еще раз проверил эту строчку в файле - все верно, как ты и написал: command "_-layer" "_n" "DUCTING" "_c" "_magenta" "DUCTING". Из-за чего же тогда ошибка?
Иван Hayes вне форума  
 
Непрочитано 09.10.2010, 20:57
#8
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Иван Hayes, у меня все работает. В своем предыдущем посте я не много ошибся, вместо (command "change" cl"" "p" "la" "DUCTING" "") должно быть (command "_change" cl "" "_p" "_la" "DUCTING" ""), а command "_-layer" "_n" "DUCTING" "_c" "_magenta" "DUCTING" это в другом месте
__________________
cadtools
TararykovDG вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Не работает код ЛИСП: невозможно создать новые слои...



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание форм и шрифтов для AutoCAD Shoorup AutoCAD 6 25.01.2013 17:43
Новые слои появились в атокаде с @, непонятно почему? dextron3 AutoCAD 6 13.09.2010 15:28
Не работает вкладка слои в режиме классический автокад(autocad2010) Lars AutoCAD 3 06.02.2010 14:05
AutoCAD 2007 создает новые слои Sneginka_Clan AutoCAD 7 26.05.2009 21:09
Не работает код программы отрисовки линии сечения цилиндра Lev_37 Программирование 1 09.01.2009 10:15