|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
как закрыть файл из лиспа
Проектировщик ВК. LISP-любитель.
Москва
Регистрация: 15.12.2003
Сообщений: 1,185
|
||
Просмотров: 9066
|
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
А про какой файл идет речь, про чертеж или про текстовый. Если текстовый то сначала открываем файл:
(setq fileTag (open "название файла" "режим")) Потом закрываем (close fileTag) Если это чертеж, то вот пример с www.afralisp.com Код:
|
|||
![]() |
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
Я пытался один раз сделать (command "_.close" "_Y"). Но любимая софта не хочет принимать это самое "_Y" и упорно спрашивает в командной строке не надо ли сохранить изменения. Тогда я тоже ничего не соображал в ActiveX и плюнул на это дело.
На самом деле все не так уж сложно. Сам недавно пользуюсь, но мне нравится. Сразу обращаешься к чему то конкретному и управляешь не абстрактными цифрами а вполне конкретными свойствами и применяешь конкретные методы. Правда примитивы надо преобразовывать в VLA-объекты командой (setq vla_Entity (vlax-ename->vla-object "примитив")) Зато потом если хотим получить например цвет (setq color (vla-get-color vla_Entity)) С примитивами это ерунда, этот принцип сохраняеться для всех объектов, включая листы, стили печати, системные установки и т. д. Это веселее чем рытся в словарях, таблицах и DXF кодах. Хотя надо сказать что некоторые вещи "по простому" делаються легче. Еще в ActiveX функциях не редки глюки, которые относяться скорее к разделу "багов". Думаю что без ActiveX, возможно как нибудь закрыть активный документ, для неактивного без этого я думаю не обойтись. |
|||
![]() |
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
Прошу прощения, вот полностью ссылка http://www.afralisp.com/newsletter/2002/2002-06.htm.
Вообще примеров куча (я просто взял первый попавшийся на английском). Надо зайти на GOOGLE и прямо в окне поиска написать имя функции. В вашем случае vla-close и получите 3 страницы примеров. Как кстати и к любым ActiveX функциям... |
|||
![]() |
|
||||
LISP-программист Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238
|
Цитата:
Код:
Код:
__________________
Там все есть для счастья - меня там только нет. Так это значит, что я там - буду! |
|||
![]() |
|
||||
Проектировщик ВК. LISP-любитель. Регистрация: 15.12.2003
Москва
Сообщений: 1,185
![]() |
Fantomas, да, хорошая программка, понравилась.
Но невозможно закрыть активный файл, а нужно мне было именно это. kos, да, работает (command "_.CLOSE") если в файле нет изменений, но если были (command "_.CLOSE" "_Yes") не работает! Код:
И еще, интересно, после манипуляций с (command "_.close" "_Yes") акад не выдает окно Yes/No при попытке закрыть файл крестиком сверху. |
|||
![]() |
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
>kos У меня с (command "_.close" та же ерунда.
>Apelsinov Думаю что можно сделать документ неактивным с помощью метода vla-Activate. Т.е. сделать на время активным другой документ. Но это мои догадки, собираюсь на днях поэксперементировать. В много документном режиме как я понял много тонкостей. В частности необходимость передачи функций и переменных через внедокументное пространство. Ведь надо сделать документ в котором работала функция неактивным, а она должна продолжать работать. Не знаю относиться ли это к VLA-объектам? Пока это вопрос к ActiveX-Profi типа Kos. Мне тоже до этого надо добраться, у меня задачка сгенерить один чертеж на основании другого его сохранить и вернуться в исходный. Планировал заняться эти чуть позже, через две три недели. |
|||
![]() |
|
||||
LISP-программист Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238
|
Прошу прощений за неточность. Должно быть так (в случае, если в рисунке были изменения):
Код:
Цитата:
__________________
Там все есть для счастья - меня там только нет. Так это значит, что я там - буду! |
|||
![]() |
|
||||
LISP-программист Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238
|
Да, совсем забыл. Нашел переменную, которая хранит информацию о изменениях в рисунке. Ее имя DBMOD (целое). Если она равна 0, то изменений не было.
__________________
Там все есть для счастья - меня там только нет. Так это значит, что я там - буду! |
|||
![]() |
|
||||
LISP-программист Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238
|
Цитата:
__________________
Там все есть для счастья - меня там только нет. Так это значит, что я там - буду! |
|||
![]() |
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
>kos
Код:
|
|||
![]() |
|
||||
Проектировщик свиноводство Регистрация: 21.08.2003
Сообщений: 2,259
|
Если сделать переменную EXPERT=2, то даже измененный рисунок закроется без лишних вопросов по команде:
(command "_close") http://www.caduser.ru/acad/index.php?var_name=EXPERT |
|||
![]() |
|
||||
ACAD, UG, CATIA - программирование Регистрация: 17.09.2003
Таганрог
Сообщений: 9
|
Самое простое:
(command "_.vbastmt" "ThisDrawing.Close False") При желании, для последнего документа можно даже: (command "_.vbastmt" "ThisDrawing.Close False : AcadApplication.Quit") Но с выходом из самого ACAD таким образом иногда бывают какие-то глюки. Сейчас точно не помню, но в некоторых случаях бывало, что ACAD закрывался, но с предсмертным воплем об ошибке инициализации VBA. |
|||
![]() |