|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Как программно сделать окно активным?
Помидорка
Регистрация: 03.02.2012
Сообщений: 135
|
||
Просмотров: 13648
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Xara, активация окна другого файла автоматически останавливает выполнение лиспа.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Помидорка Регистрация: 03.02.2012
Сообщений: 135
|
Да, Алексей, это я знаю, а как же быть, если есть задача выполнить ряд действий с несколькими чертежами:
1. Проверить, все ли размеры нужного стиля; 2. Проверить, все ли тексты/мультитексты нужного стиля; 3. Проверить переменные в среде чертежа; 4. Проверить UNITS в каждом чертеже. Это, стало быть, невозможно?
__________________
Боишься - не делай. Делаешь - не бойся. |
|||
![]() |
|
||||
Возможно. Просто тебе нужно помнить, что LISP работает в контексте чертежа, а соответственно, тебе твой lisp код нужно грузить в каждый открытый документ. Кроме того, тебе наверняка будет не лишним использовать реакторы, уведомляющие об открытии др. чертежей, а так же о создании новых, дабы твой код автоматом обрабатывал и их.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Регистрация: 17.06.2010
Сообщений: 438
|
У Кулика на сайте есть заметка, как работать с неактивным документом (сам автор почему-то про нее не вспомнил
![]() http://autolisp.ru/2010/04/08/procee...tive-document/ |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Psyakrev, на момент моего ответа фразы по обработке неактивного документа еще не было
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Помидорка Регистрация: 03.02.2012
Сообщений: 135
|
Спасибо большое, ребята!
Почитаю, постараюсь разобраться! ps: "тебе твой lisp код нужно грузить в каждый открытый документ" - как это сделать? Что-то мне подсказывает, что статья Алексея не поможет, там ограниченное количество методов, подходящего не нашел ![]()
__________________
Боишься - не делай. Делаешь - не бойся. Последний раз редактировалось Xara, 11.01.2013 в 15:32. |
|||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Цитата:
![]() мдаа, НЕ НУЖНО! зы 100500 Раз говорил уже: научитесь четко формулировать задачу, для этого надо в совершенстве владеть инструментом, с автолиспом это намного проще сделать, чем с другими языками. зызы Зачем нужны такие телодвижения я так и не понял ![]() |
|||
![]() |
|
||||
Есть разные способы... На вскидку могу перечислить такие:
1. Самый простой - добавить твой LISP в автозагрузку через всем известный "чемоданчик" (это очень просто сделать как вручную, так и программно, добавив запись в реестр): 2. Через файл acad.lsp, но нужно установить соответствующую галочку: 3. С помощью плагинов, которые грузятся в AutoCAD в контексте приложения, а не в контексте документа (как это делает Lisp) - т.е. воспользовавшись ObjectARX или .NET. Но думаю, что это не твой вариант, если не привык к подобному. Судя по этому: Цитата:
![]()
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Цитата:
|
||||
![]() |
|
||||
Цитата:
1. Пути к DWS файлам в DWG файлах прописываются в абсолютной форме. Относительная форма и использование в пути системных переменных, например %ProgramFiles%, %AppData% и т.п. не допускаются. К тому же у разных пользователей AutoCAD установлен в разные каталоги (зависит и от разрядности платформы). Отсюда постоянно вылезающие проблемы, что не у всех юзеров AutoCAD находит DWS файлы - порой приходится переназначать пути. Но переназначив под одну машину, автоматом "запортачишь" путь для другой. 2. Те модули нормоконтроля, которые входят в стандартную поставку AutoCAD являются очень ограниченными по возможностям и не имеют возможности конфигурировать их. Например - настроить правила формирования допустимых имён для слоёв чертежа. 3. Отсутствует большое количество необходимых модулей нормоконтроля (например - проверка стилей Таблиц). 4. "Родной " API для написания модулей нормоконтроля отвратительно документирован и качество его реализации оставляет желать лучшего. Можно было бы значительно упростить его и получить при этом гораздо бОльшую гибкость.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Thượng Tá Quân Đội Nhân Dân Việt Nam Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372
|
Цитата:
1. Надо написать функцию, которая это всё делает (или всё, что угодно, требуемое в каждом чертеже). Назвать её, например (defun C:007 ()....) 2. Включить эту функцию в acaddoc.lsp (не в acad.lsp!). Этот файл автоматически загружается в каждый открытый dwg. Никаких "чемоданчиков" тут не нужно. Можно в acaddoc.lsp не саму функцию записать, а загрузку её из какого-то файла. 3. Если надо эти действия выполнять автоматически, то сделать в acaddoc.lsp вызов этой функции на выполнение в конце файла. В виде (C:007). Если не автоматически - "повесить на кнопку". Или просто вызывать с клавиатуры: Command: 007 |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Xara, Посмотри Последовательное применение lisp-функции к множеству файлов DWG
К неактивному чертежу можно обратиться с помощью ObjectDBX (п.5 по ссылке выше)
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Помидорка Регистрация: 03.02.2012
Сообщений: 135
|
Спасибо, посмотрю... ObjectDBX для меня - темный лес, но я пытаюсь разобраться с ним... Как верно подметил hwd - "Но думаю, что это не твой вариант, если не привык к подобному"
![]() Да, именно так! Функция проверки файлов на соответствие стандарту для нормоконтролеров. Цитата:
Задача у меня такая - есть, к примеру, 100 чертежей. Необходимо запустить приложение в акаде, которое при указании директории, в которой находятся все 100 чертежей, проверит в каждом файле вышеуказанные пункты последовательно, сформировав отчет, и выведет его, к примеру, в текстовый файл. Мне не нужна автозагрузка в каждый открываемый файл, мне нужно проверить пачку чертежей, и не грузить лисп каждый раз (тут-то все просто было бы), а открывать каждый чертеж, прогонять в нем функцию, записать отчет, закрыть файл и брать следующий...
__________________
Боишься - не делай. Делаешь - не бойся. |
|||
![]() |
|
||||
Я использую своё решение, вместо предлагаемого Автодеском. Мне не нравятся ограничения, и костыли стандартного решения, да и реализовано так, что неудобно пользоваться. Результаты сохраняю в XML, который скармливаю генератору отчётов, а уж из него, в любой формат вывожу.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Оно написано на C#, поэтому, если учитывать что
Цитата:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Помидорка Регистрация: 03.02.2012
Сообщений: 135
|
Век живи - век учись. Почитаю, разберусь, научусь
![]() Можно хоть немного конкретики?))
__________________
Боишься - не делай. Делаешь - не бойся. |
|||
![]() |
|
||||
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
Цитата:
![]() Цитата:
Интерфейс может быть таким: Код:
Цитата:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
я про запуск его функции во всех файлах, для сбора статистики...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны. /Сунь Цзы/ |
||||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
Вот от таких, как Вы, Xara, я сделал программку для брикскада, которая пуржит файлы в заданной директории. Чтоб было понятно, в нем нет ни объектДБХ, ни нет, ни аркс, ни даже вба, то есть есть, но не для всех, а местный лисп справился на ура. Но вам я ее тоже не покажу
![]() зы влом было переключать раскладку... зызы ну, hwd - знатный троль... |
|||
![]() |
|
||||
Об этом я тебя и предупреждал - смысл спрашивать, если не пишешь на .net?
Если объяснять на пальцах, то визуально (т.е. для пользователей), это безобразие выглядит например таким образом (у тебя может быть свой вариант безобразия):
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
На реакторах нельзя использовать команды. Поэтому штатный нормоконтроль сразу отпадает. Остальное реализовывалось не раз и не два.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Если под "штатным" подразумевается "родной автокадовский" нормоконтроль, то он как раз и использует "реакторы" (события в C#). И понятное дело, что в них он использует не командную строку автокада, а непосредственно работает с базой данных чертежа через API.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Я имел в виду вызов _checkstandards, а не внутренний механизм работы команды.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Я в своей реализации отказался от использования событий и жёсткого прописывания путей к DWS файлам (как это сделано в автокаде). Имхо удобней, когда проверка запускается только по требованию самого пользователя, а в именах к DWS файлам можно указывать относительные пути и системные переменные. Если автор вопроса не будет завязываться на реакторы, то и реализовать аналог на лиспе не составит особого труда.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
строю, ломаю Регистрация: 03.04.2008
Украина
Сообщений: 5,515
|
|
|||
![]() |
|
||||
Помидорка Регистрация: 03.02.2012
Сообщений: 135
|
Попробую...
Кто-нибудь может подсказать, как перебить функцию под этот метод, чтобы лисп работал с этими файлами? Код:
__________________
Боишься - не делай. Делаешь - не бойся. Последний раз редактировалось Xara, 28.01.2013 в 12:42. |
|||
![]() |
|
||||
Регистрация: 24.06.2009
Сообщений: 94
|
Цитата:
![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Молодец. Решение показывай. А заодно и можешь посмотреть http://autolisp.ru/2014/10/21/execut...t-opening-dwg/
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 24.06.2009
Сообщений: 94
|
Ну, посмотрел, как то все там для меня тяжеловато читать.
У меня как то проще получилось, может конечно многим не подойдет, но для меня самый раз. (command "_sdi" 1) ;здесь мы вынуждаем работать только с 1 файлом (setq Ch1 (command "_open" "_no" (strcat papka1 "\\01-00.00.000 СБ-Опорные элементы.dwg") (strcat papka1 "\\01-01.00.002-Косынка.dwg"))) ;так как активный файл может быть один мы открывая другой файл принудительно сохраняя предыдущий закрываем, и открывшийся файл становиться активным. затем я возвращаю (command "_sdi" 0) и программа дальше продолжает работать но уже с новым открытым файлом Может конечно это совсем неграмотно, но у меня работает. Да и я еще новичок. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Ok. Делай таким образом:
Открываем новый экземпляр AutoCAD, ни один рабочий файл не загружен. Пустой файл создан и активирован. Переход в VLIDE и запуск функции test: Код:
P.S. Работа с нетекущим документом через lisp обсуждалась на форуме не раз и не два. И выводы постоянно были одни и те же.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 24.06.2009
Сообщений: 94
|
Цитата:
|
|||
![]() |
|
||||
Регистрация: 18.12.2010
Сообщений: 5,108
|
Как известно Тор с вырезанным диском («проколотый») можно вывернуть наизнанку непрерывным образом (топологически, то есть серией диффеоморфизмов).
![]() Конечно, всё можно сделать, но на лиспе это будет выглядеть как на иллюстрации выше, зато на dotNET всё просто... |
|||
![]() |
|
||||
Регистрация: 24.06.2009
Сообщений: 94
|
Цитата:
пишу (setq Ch1 (command "_open" (strcat papka1 "\\01-01.00.002-Косынка.dwg") "_w")) а он мне выдает что (strcat papka1 "\\01-01.00.002-Косынка.dwg") неизвестная команда. Пытался прописать именно путь, тоже самое |
|||
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
OpenDCL vs C#.NET | Sleekka | .NET | 18 | 02.07.2013 22:31 |
AutoCAD Automation: как правильно программно прервать Utility.GetPoint (выполняется в другом потоке) | IvanShkuropadsky | Программирование | 2 | 17.08.2011 11:10 |
Как сделать окно Autocad активным при запуске из VBA Excel? | AlexV | Программирование | 1 | 20.08.2009 12:40 |
BricsCAD 8.2.8 | Кулик Алексей aka kpblc | Другие CAD системы | 17 | 24.04.2008 17:01 |
Текстовое окно не появляется при нажатии F2 | Боныч | AutoCAD | 3 | 09.04.2008 16:21 |