|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
как закрыть файл из лиспа
Проектировщик ВК. LISP-любитель.
Москва
Регистрация: 15.12.2003
Сообщений: 1,202
|
||
Просмотров: 9731
|
|
||||
Инженер по системам безопасности Регистрация: 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,202
![]() |
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,291
|
Если сделать переменную 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. |
|||
![]() |
|
||||
LISP-программист Регистрация: 25.08.2003
Тутэйшы
Сообщений: 238
|
Как и обещал, отчитываюсь.
1. С использованием ActiveX и LISP можно закрыть все рисунки, кроме текущего. 2. То, что предложил leha, работает. Это из той же оперы, что и открытие рисунка. (command "_.OPEN") не работает, а при помощи VBA работает. Пункты 1 и 2 связаны с тем, что LISP'ы грузятся в пространства имен рисунка. Именно поэтому объектная модель не поддерживается LISP'ом на 100%. А вот VBA поддерживается. 3. Конструкция (command "_.CLOSE") (command "_Yes") у меня работает из командной строки. А если из функции (программы), то ругается теми же самыми словами: "_yes Unknown command "YES". Press F1 for help."
__________________
Там все есть для счастья - меня там только нет. Так это значит, что я там - буду! |
|||
![]() |
|
||||
Регистрация: 12.03.2013
Сообщений: 611
|
Нужен лиспик для закрытия сразу всех чертежей без сохранения и без "общения" с диалоговым окном подтверждения.
В лиспе пока не очень силен, по ентому и спрашиваю. Т.е. например закрытие всех чертежей с сохранением всех чертежей просто - ^C^Csaveall ^C^C_closeall А вот закрытие без сохранения на подобии ^C^C(command "_closeall" "Д") (у меня 2017 русский акад) - "заcтавляет общаться" с диалоговым окном подтверждения. нужно я так понимаю цикл организовать с щетчиком равным кол-ву открытых чертежей А может все и проще - но я пока не знаю) Последний раз редактировалось allar8, 13.08.2019 в 13:42. |
|||
![]() |
|
||||
Регистрация: 12.03.2013
Сообщений: 611
|
Цитата:
----- добавлено через ~9 ч. ----- Цитата:
----- добавлено через ~9 ч. ----- закоментировал вроде получилось |
|||
![]() |
|
||||
Регистрация: 12.03.2013
Сообщений: 611
|
Цитата:
и еще одну версию приложил чтоб докучи и с закрытием автокада см. вложения |
|||
![]() |