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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > повторная загрузка _load и defun

повторная загрузка _load и defun

Ответ
Поиск в этой теме
Непрочитано 04.10.2009, 00:46 #1
повторная загрузка _load и defun
shinyur
 
Регистрация: 02.09.2009
Сообщений: 10

я внешней программой генерирую лисп файл в котором
Код:
[Выделить все]
 
(defun myfun()
     (command "_line" "1000,0" "1000,1000" "")
     (command "_text" "1000,1000" "50" "" "140.325")
     и т.п. очень много строк...
)(myfun)
вызываю его по кнопочке в автокаде (^C^C(load "c:/my lisp/cool.lsp")) всё работает.

Но если я повторно жму на кнопочку то рисуется уже совсем не тоже что в первый раз. приходится закрывать файл (dwg) и снова открывать. может быть его (lsp) нужно както выгружать? или отменить каким то способом определение функции myfun()?
или это проблема при совместном доступе к файлу, помогите разобраться.
Просмотров: 3086
 
Непрочитано 04.10.2009, 02:08
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Скорее всего дело в неотключенных привязках, использовании глобальных переменных и прочих косяках "начального программирования". Новый рисунок привязываеться к старому...
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 04.10.2009, 06:20
#3
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Цитата:
вызываю его по кнопочке в автокаде (^C^C(load "c:/my lisp/cool.lsp")) всё работает.
Странно мне - ведь такой макрос никак не может вызвать функцию myfun на выполнение.
Profan вне форума  
 
Непрочитано 04.10.2009, 09:22
#4
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Profan Посмотреть сообщение
Странно мне - ведь такой макрос никак не может вызвать функцию myfun на выполнение.
обрати внимание на последнюю строку программы, там прописан запуск...

Код:
[Выделить все]
(defun myfun()
     (command "_line" "1000,0" "1000,1000" "")
     (command "_text" "1000,1000" "50" "" "140.325")
     и т.п. очень много строк...
)(myfun)
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 04.10.2009, 09:33
#5
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Да, не обратил внимание. Запуск внутри лиспа.
Profan вне форума  
 
Автор темы   Непрочитано 04.10.2009, 11:57
#6
shinyur


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


И правда, отключение объектных привязок решило проблему.
а первый раз всё срабатывало потому что зум был большой при котором привязки не влияли.
Тогда вопрос:
что нужно дописать в начале lisp файла чтобы отключалась привязка (та которая по F3)?

Последний раз редактировалось shinyur, 04.10.2009 в 12:04.
shinyur вне форума  
 
Непрочитано 04.10.2009, 14:24
#7
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Четыре способа избавиться от привязок:
Во всех способах пишу эквивалент команды
Код:
[Выделить все]
(command "_line" '(100 100) '(300 300) "")
Детские (без обид)
1.
Код:
[Выделить все]
(setq privaz (getvar "osmode"));сохранение привязок
(setvar "osmode" 0);отключение
здесь идет код, в процессе которого мы молимся чтоб программа не прервалась - иначе привязки наши будут утеряны навсегда
Код:
[Выделить все]
(setvar "osmode" privaz);восстановление
2. Используя ключевое слово "_none" перед КАЖДОЙ координатой
Код:
[Выделить все]
(command "_line" "_none" '(100 100) "_none" '(300 300) "")
.
Взрослые (незазнаваясь)
3. Посредством DXF
Код:
[Выделить все]
(entmakex '((0 . "line") (10 100 100) (11 300 300)))
.
4. Посредством VLA
Код:
[Выделить все]
(vl-load-com)
(vla-addline (vlax-get-property (vlax-get-property (vlax-get-acad-object) 'ActiveDocument) 'Modelspace)
(vlax-3d-point '(100 100)) (vlax-3d-point '(300 300))
)
ну если рисовать более одной прямой (и не только прямой) имеет смысл сохранить выделенное в переменную (ну например ModelSpace).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 05.10.2009, 00:23
#8
shinyur


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


спасибо за подробный ответ.
я воспользовался вариантом 1 из детских
shinyur вне форума  
 
Непрочитано 05.10.2009, 10:41
#9
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Не забывай молиться
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 05.10.2009, 10:44
#10
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


А попросту выломай клавишу Esc.
Profan вне форума  
 
Непрочитано 05.10.2009, 11:23
#11
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
здесь идет код, в процессе которого мы молимся чтоб программа не прервалась - иначе привязки наши будут утеряны навсегда
"Спасаем" привязки:
Код:
[Выделить все]
(defun myfun ( / *error* privaz)

     (defun *error* (msg)
     (if privaz (setvar "osmode" privaz))
     (alert "Работа программы прервана!")
     )
     
     (setq privaz (getvar "osmode"));сохранение привязок
     (setvar "osmode" 0);отключение
     (command "_line" "1000,0" "1000,1000" "")
     (command "_text" "1000,1000" "50" "" "140.325")     
;;;     и т.п. очень много строк...
     (setvar "osmode" privaz);восстановление
)(myfun)
Но там еще эхо комманд будет засорять коммандную строку...

Цитата:
Сообщение от Profan Посмотреть сообщение
А попросту выломай клавишу Esc.
Не трогай Esc! Этой программе он не враг
Do$ вне форума  
 
Непрочитано 05.10.2009, 11:42
#12
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Там же "очень много строк..." И поэтому неизвестно, что еще "спасать" надо. Да и в отношении переменных () неясно.
Profan вне форума  
 
Непрочитано 05.10.2009, 12:08
#13
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Дело в том, что у командных методов беда не только с привязками и чем раньше с ними покончишь тем самому же проще.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > повторная загрузка _load и defun



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединение разбитого на слова текста Mist AutoCAD 46 24.05.2020 21:08
до работка конвектора(защита файла) DEM Программирование 16 03.11.2015 16:36
3D Konstruktor для проектировщиков КМ. Дима_ Готовые программы 17 10.07.2008 10:03
структурированный список Holon Программирование 22 11.09.2007 14:09
защита чертежа Ден Программирование 2 26.11.2004 22:10