|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
18.09.2018, 15:09 | #1 | |
Как получить список открытых в текущем сеансе файлов и перейти в один из них?
г. Норильск
Регистрация: 15.08.2005
Сообщений: 465
|
||
Просмотров: 5160
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833
|
Надеюсь, ты понимаешь, что после активации другого файла выполнение лиспа прервется?
Код без проверок: Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.02.2007
Москва
Сообщений: 611
|
В AutoCAD'е в пункте "Окно" падающего меню есть список открытых файлов. Ткнул в нужный и он выйдет на передний план. И не нужно никаких программ, и замечание Алексея теряет актуальность. Это в случае обычной работы. Если же это нужно для упражнений, то тогда лучше бы сделать диалоговое окно со списком загруженных файлов и сделать кнопку меню, чтобы она была доступна из любого загруженного файла. Овчинка выделки не стоит, IMHO. Трудно предположить, что у автора темы одновременно открыто файлов больше, чем доступно в упомянутом пункте падающего меню.
|
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,038
|
|
|||
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 465
|
Да пакетную, пакетную...
:-) Если быть точным, то пробую отказаться от давно отлаженной и работающей системы обработки через скрипт. Потому и написал, что надобно сие на ЛИСПе. Экспериментирую малость.
__________________
Счастливо, Алексей! |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833
|
Получится, но не так, как хочет ТС. ObjectDBX пока еще никуда не делся
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 21.07.2008
Луцьк
Сообщений: 179
|
|
|||
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 465
|
Всем привет!
День провёл без интернета, у нас такое случается. Спасибо за код (его, правда, пришлось чуток подправить), делает ровно то, что и хотелось. И ещё вот с этим небольшое уточнение: Цитата:
(getint "Сколько вешать в граммах?") Если диалогов нет, код чешет себе дальше...
__________________
Счастливо, Алексей! |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,038
|
Цитата:
А вообще выполнение команды может идти либо в контексте документа, либо в контексте приложения. Последнее означает, что код работает в отдельном потоке вне какого либо документа. Но при этом накладывается ряд ограничений на использование функций того же ввода, например. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833
|
Лисп работает только в контексте документа. Это не .NET / arx
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,038
|
А в .NET задается простым указанием флага Session в заголовке кода команды.
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833
|
Но здесь ни разу не NET
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 465
|
Проблема ввода (ежели таковая возникает), кстати говоря,
вполне решается библиотекой DOSLib. Типа: (setq a (dos_getint "Хочу знать" "Сколько вешать в граммах?")) И всё, код стоит, ждёт ввода. Можно даже на это время организовать "переброску фокуса" между окнами. Скажем, на "вопрошающее" (имя-то файла знаем) и обратно.
__________________
Счастливо, Алексей! Последний раз редактировалось ===AAA===, 20.09.2018 в 11:09. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,038
|
Цитата:
Цитата:
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833
|
Если ты гарантируешь загрузку DosLib, да еще и учитываешь все варианты, версии и разрядности - то пожалуйста
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 465
|
Да, в стартовом модуле стоит (getvar "acadver") с разбором
полученных данных и подгрузкой нужной версии DOSLib. Есть конечно, риск, что когда-нибудь фирма-разработчик заявит, что ей надоело поддерживать этот продукт... ----- добавлено через ~3 ч. ----- Что-то как-то не получается :-( Сбой начинается после открытия/закрытия первого же файла из списка. Вот как это выглядит (упрощённо, просто суть проблемы). Есть текущая папка, в ней куча *.dwg файлов. Получаем список lstrab ("Файл1" "Файл2" "Файл3"), при этом сами мы находимся (текущий открытый) в файле "Файл4". Тут же в этой же папке (для пробы!) делаем файл acad.lsp в который записываем строчку: (eval (vl-bb-ref 'DreamSendCommand)) и файл 123.lsp со строчками ;================================ (princ "\n \nВыполнение кода 123 !") (setq a1 18 a2 58) (print (+ a1 a2)) (command "_.qsave") (command "_.close") (princ) ;================================ Вроде бы проще некуда. Запускаем программу, доходим до участка: ;================================ (vl-bb-set 'DreamSendCommand '(load "123.lsp")) (foreach p1 lstrab (vla-open (vla-get-Documents (vlax-get-acad-object)) p1) ) И вот здесь непонятка. Если в файле 123.lsp закомментарить строчки ; (command "_.qsave") ; (command "_.close") то откроются ещё три документа и в каждом выполнится код (setq a1 18 a2 58) (print (+ a1 a2)) но если эти строчки есть, то первый файл из списка нормально открывается/закрывается, а уже на втором файле внутри foreach получаю ошибку типа: #<VLA-OBJECT IAcadDocuments 00000276627d7b90> Ошибка Automation. Ошибка при раскодировании данных И так уже и эдак пробовал. Чего ему надо-то?
__________________
Счастливо, Алексей! |
|||
|
||||
Регистрация: 15.08.2005
г. Норильск
Сообщений: 465
|
Всем привет!
Вернусь к первой части "Темы", чтобы не создавать новую. Оно вот сейчас понадобилось именно так. Как получить список открытых в текущем сеансе файлов? Цитата:
а путей и имен, т.е. что-то вроде: ("D:\Папка1\Файл-1.dwg" "D:\Папка2\Файл-2.dwg" "D:\Папка2\Файл-44.dwg" "D:\Папка с пробелом 33\Файл-ABC.dwg")
__________________
Счастливо, Алексей! |
|||
|
Опции темы | Поиск в этой теме |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как разбить один файл dwg с множеством блоков на множество файлов dwg с одним блоком? | petia | AutoCAD | 8 | 26.06.2018 12:19 |
Получить список доступных принтеров с помощью словарей | zenija2007 | LISP | 2 | 02.06.2016 15:50 |
LISP. Список файлов в каталоге и подкаталогах | WhiteShark | Готовые программы | 4 | 29.03.2015 21:51 |
Ограничение на кол-во открываемых за один раз файлов в AutoCad | Sharnir | AutoCAD | 5 | 09.03.2015 09:50 |
Как получить Список файлов в директории (поддиректорий) VBA | sf | Программирование | 2 | 17.12.2010 12:06 |