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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как программно сделать окно активным?

Как программно сделать окно активным?

Ответ
Поиск в этой теме
Непрочитано 11.01.2013, 13:26 #1
Как программно сделать окно активным?
Xara
 
Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135

Всем привет!
Подскажите пожалуйста, как через LISP сделать окно чертежа активным, которое открывается через функцию:

Код:
[Выделить все]
 (vla-open (vla-get-documents (vlax-get-acad-object))
               Item1 ;имя файла
               :vlax-false
               ""
               )
А то открыть-то он открывает, а активный чертеж тот, что уже был открыт...
__________________
Боишься - не делай. Делаешь - не бойся.
Просмотров: 13648
 
Непрочитано 11.01.2013, 13:33
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Xara, активация окна другого файла автоматически останавливает выполнение лиспа.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.01.2013, 13:42
#3
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Да, Алексей, это я знаю, а как же быть, если есть задача выполнить ряд действий с несколькими чертежами:
1. Проверить, все ли размеры нужного стиля;
2. Проверить, все ли тексты/мультитексты нужного стиля;
3. Проверить переменные в среде чертежа;
4. Проверить UNITS в каждом чертеже.
Это, стало быть, невозможно?
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Непрочитано 11.01.2013, 13:48
#4
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Возможно. Просто тебе нужно помнить, что LISP работает в контексте чертежа, а соответственно, тебе твой lisp код нужно грузить в каждый открытый документ. Кроме того, тебе наверняка будет не лишним использовать реакторы, уведомляющие об открытии др. чертежей, а так же о создании новых, дабы твой код автоматом обрабатывал и их.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 11.01.2013, 14:19
#5
Psyakrev


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


У Кулика на сайте есть заметка, как работать с неактивным документом (сам автор почему-то про нее не вспомнил )
http://autolisp.ru/2010/04/08/procee...tive-document/
Psyakrev вне форума  
 
Непрочитано 11.01.2013, 15:02
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Psyakrev, на момент моего ответа фразы по обработке неактивного документа еще не было
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.01.2013, 15:04
#7
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Спасибо большое, ребята!
Почитаю, постараюсь разобраться!

ps: "тебе твой lisp код нужно грузить в каждый открытый документ" - как это сделать?
Что-то мне подсказывает, что статья Алексея не поможет, там ограниченное количество методов, подходящего не нашел
__________________
Боишься - не делай. Делаешь - не бойся.

Последний раз редактировалось Xara, 11.01.2013 в 15:32.
Xara вне форума  
 
Непрочитано 11.01.2013, 18:53
#8
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Xara Посмотреть сообщение
как это сделать?
Цитата:
Сообщение от Xara Посмотреть сообщение
1. Проверить, все ли размеры нужного стиля;
2. Проверить, все ли тексты/мультитексты нужного стиля;
3. Проверить переменные в среде чертежа;
4. Проверить UNITS в каждом чертеже.
Это, стало быть, невозможно?
Откройте справку и почитайте внимательно про объектную модель автокада, а если не дойдет то и вынимательно
Цитата:
Сообщение от hwd Посмотреть сообщение
тебе твой lisp код нужно грузить в каждый открытый документ.
мдаа, НЕ НУЖНО!

зы 100500 Раз говорил уже: научитесь четко формулировать задачу, для этого надо в совершенстве владеть инструментом, с автолиспом это намного проще сделать, чем с другими языками.
зызы Зачем нужны такие телодвижения я так и не понял
gomer вне форума  
 
Непрочитано 11.01.2013, 21:00
#9
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Xara Посмотреть сообщение
- как это сделать?
Есть разные способы... На вскидку могу перечислить такие:

1. Самый простой - добавить твой LISP в автозагрузку через всем известный "чемоданчик" (это очень просто сделать как вручную, так и программно, добавив запись в реестр):



2. Через файл acad.lsp, но нужно установить соответствующую галочку:



3. С помощью плагинов, которые грузятся в AutoCAD в контексте приложения, а не в контексте документа (как это делает Lisp) - т.е. воспользовавшись ObjectARX или .NET. Но думаю, что это не твой вариант, если не привык к подобному.

Судя по этому:
Цитата:
Сообщение от Xara
1. Проверить, все ли размеры нужного стиля;
2. Проверить, все ли тексты/мультитексты нужного стиля;
3. Проверить переменные в среде чертежа;
4. Проверить UNITS в каждом чертеже.
похоже, что ты пишешь что-то вроде модулей нормоконтроля. Полезное занятие
Миниатюры
Нажмите на изображение для увеличения
Название: 1.png
Просмотров: 725
Размер:	42.0 Кб
ID:	94098  Нажмите на изображение для увеличения
Название: 2.png
Просмотров: 721
Размер:	46.0 Кб
ID:	94099  
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 11.01.2013, 21:09
#10
Do$

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


Цитата:
Сообщение от Xara Посмотреть сообщение
Да, Алексей, это я знаю, а как же быть, если есть задача выполнить ряд действий с несколькими чертежами:
1. Проверить, все ли размеры нужного стиля;
2. Проверить, все ли тексты/мультитексты нужного стиля;
3. Проверить переменные в среде чертежа;
4. Проверить UNITS в каждом чертеже.
Это, стало быть, невозможно?
Может достаточно будет делать проверку по стандарту? Я имею в виду файлы dws.
Do$ вне форума  
 
Непрочитано 11.01.2013, 21:21
#11
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Do$ Посмотреть сообщение
Может достаточно будет делать проверку по стандарту? Я имею в виду файлы dws.
Данный вариант имеет ряд минусов:

1. Пути к DWS файлам в DWG файлах прописываются в абсолютной форме. Относительная форма и использование в пути системных переменных, например %ProgramFiles%, %AppData% и т.п. не допускаются. К тому же у разных пользователей AutoCAD установлен в разные каталоги (зависит и от разрядности платформы). Отсюда постоянно вылезающие проблемы, что не у всех юзеров AutoCAD находит DWS файлы - порой приходится переназначать пути. Но переназначив под одну машину, автоматом "запортачишь" путь для другой.

2. Те модули нормоконтроля, которые входят в стандартную поставку AutoCAD являются очень ограниченными по возможностям и не имеют возможности конфигурировать их. Например - настроить правила формирования допустимых имён для слоёв чертежа.

3. Отсутствует большое количество необходимых модулей нормоконтроля (например - проверка стилей Таблиц).

4. "Родной " API для написания модулей нормоконтроля отвратительно документирован и качество его реализации оставляет желать лучшего. Можно было бы значительно упростить его и получить при этом гораздо бОльшую гибкость.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 12.01.2013, 05:14
#12
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
если есть задача выполнить ряд действий с несколькими чертежами:
1. Проверить, все ли размеры нужного стиля;
2. Проверить, все ли тексты/мультитексты нужного стиля;
3. Проверить переменные в среде чертежа;
4. Проверить UNITS в каждом чертеже.
Это, стало быть, невозможно?
Это элементарно.

1. Надо написать функцию, которая это всё делает (или всё, что угодно, требуемое в каждом чертеже). Назвать её, например (defun C:007 ()....)

2. Включить эту функцию в acaddoc.lsp (не в acad.lsp!). Этот файл автоматически загружается в каждый открытый dwg. Никаких "чемоданчиков" тут не нужно.
Можно в acaddoc.lsp не саму функцию записать, а загрузку её из какого-то файла.

3. Если надо эти действия выполнять автоматически, то сделать в acaddoc.lsp вызов этой функции на выполнение в конце файла. В виде (C:007). Если не автоматически - "повесить на кнопку". Или просто вызывать с клавиатуры: Command: 007
ShaggyDoc вне форума  
 
Непрочитано 12.01.2013, 05:30
#13
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Все эт, конечно, потреотично, но в последствии оказывается хламом
gomer вне форума  
 
Непрочитано 12.01.2013, 13:45
1 | #14
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Xara, Посмотри Последовательное применение lisp-функции к множеству файлов DWG
К неактивному чертежу можно обратиться с помощью ObjectDBX (п.5 по ссылке выше)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 14.01.2013, 17:03
#15
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Спасибо, посмотрю... ObjectDBX для меня - темный лес, но я пытаюсь разобраться с ним... Как верно подметил hwd - "Но думаю, что это не твой вариант, если не привык к подобному"

Цитата:
Сообщение от hwd Посмотреть сообщение
похоже, что ты пишешь что-то вроде модулей нормоконтроля. Полезное занятие
Да, именно так! Функция проверки файлов на соответствие стандарту для нормоконтролеров.

Цитата:
Сообщение от Do$ Посмотреть сообщение
Может достаточно будет делать проверку по стандарту? Я имею в виду файлы dws.
Нет, результаты проверки через DWS не извлечь, а мне нужно на выходе получить отчет по каждому файлу, если в нем есть хоть одно несоответствие, или пометка, что все ОК.

Задача у меня такая - есть, к примеру, 100 чертежей. Необходимо запустить приложение в акаде, которое при указании директории, в которой находятся все 100 чертежей, проверит в каждом файле вышеуказанные пункты последовательно, сформировав отчет, и выведет его, к примеру, в текстовый файл. Мне не нужна автозагрузка в каждый открываемый файл, мне нужно проверить пачку чертежей, и не грузить лисп каждый раз (тут-то все просто было бы), а открывать каждый чертеж, прогонять в нем функцию, записать отчет, закрыть файл и брать следующий...
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Непрочитано 14.01.2013, 17:08
#16
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Я использую своё решение, вместо предлагаемого Автодеском. Мне не нравятся ограничения, и костыли стандартного решения, да и реализовано так, что неудобно пользоваться. Результаты сохраняю в XML, который скармливаю генератору отчётов, а уж из него, в любой формат вывожу.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 14.01.2013, 17:17
#17
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


hwd, Какое конкретно решение? Можно поподробнее?
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Непрочитано 14.01.2013, 17:31
#18
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Xara Посмотреть сообщение
hwd, Какое конкретно решение? Можно поподробнее?
Оно написано на C#, поэтому, если учитывать что
Цитата:
это не твой вариант
то тут особо пояснять нечего... Ну покажу я тебе исходный код интерфейса модуля, и что тебе это даст?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 14.01.2013, 17:40
#19
Елпанов Евгений

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


используя консольный акад 2013, это можно довольно просто сделать, причем, запуск будет довольно быстрым...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 14.01.2013, 17:46
#20
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Цитата:
Сообщение от hwd Посмотреть сообщение
и что тебе это даст?
Век живи - век учись. Почитаю, разберусь, научусь

Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
это можно довольно просто сделать, причем, запуск будет довольно быстрым
Можно хоть немного конкретики?))
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Непрочитано 14.01.2013, 17:56
#21
Елпанов Евгений

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


Цитата:
Сообщение от Xara Посмотреть сообщение
Можно хоть немного конкретики?))
http://www.cadtv.ru/aur-2012-avtomat...spol-zovaniem/
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 14.01.2013, 18:05
#22
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Елпанов Евгений
запуск будет довольно быстрым...
А самое интересное будет как раз таки после троеточия... Правда, Женя?

Цитата:
Можно хоть немного конкретики?))
Можно. Сначала пишешь свой Check Standard Manager - это твой GUI, в котором у юзера запрашиваешь файлы, которые нужно обработать (там же предоставляешь выбор: файлы каталога, файлы подшивки, произвольный набор файлов, ну и т.д.). в этом же окне у тебя в виде TreeView сгруппированы модули нормоконтроля, с CheckBox напротив каждого. Установленная галочка означает проверку этим модулем. Сами модули лежат во вложенном каталоге modules по своим подкаталогам. Твой модуль загружая эти сборки, ищет в них классы, реализующие назначенный тобою интерфейс (у меня это IStandardModule). Каждый модуль содержит свой собственный визуальный контрол для работы, оптимально настроенный на решение задачи, под которую этот модуль написан. Этот контрол будет в ходе решения подставляться в окно твоего Manager.

Интерфейс может быть таким:

Код:
[Выделить все]
    /// <summary>
    /// Интерфейс модуля нормоконтроля.
    /// </summary>
    public interface IStandardModule {
        /// <summary>
        /// Целевой объект, подлежащий обработке.
        /// </summary>
        Target Target { get; }
        /// <summary>
        /// Наименование модуля нормоконтроля.
        /// </summary>
        String Name { get; }
        /// <summary>
        /// Краткое описание модуля.
        /// </summary>
        String Description { get; }

        /// <summary>
        /// Текст всплывающей подсказки.
        /// </summary>
        String Tooltip { get; }

        /// <summary>
        /// Автор продукта.
        /// </summary>
        String Author { get; }
        /// <summary>
        /// Компания, выпустившая продукт.
        /// </summary>
        String Company { get; }
        /// <summary>
        /// Сайт продукта.
        /// </summary>
        String Site { get; }
        /// <summary>
        /// Электронная почта для обратной связи с разработчиком.
        /// </summary>
        String Email { get; }
        /// <summary>
        /// Файл справочной системы.
        /// </summary>
        String HelpFile { get; }

        /// <summary>
        /// Проверка на то, содержит ли база данных чертежа объекты с нарушениями.
        /// </summary>
        /// <param name="db">База данных чертежа, подлежащая обработке.</param>
        /// <param name="ids">Коллеция идентификаторов тех объектов, которые содержат нарушения.</param>
        /// <returns>True - найдены, иначе - False.</returns>
        Boolean HasViolations(DbSrv.Database db, out DbSrv.ObjectIdCollection ids);

        /// <summary>
        /// Проверка на то, имеются ли в базе данных чертежа объекты с нарушениями, для 
        /// которых присутствует "исправление по умолчанию".
        /// </summary>
        /// <param name="db">База данных чертежа, подлежащая обработке.</param>
        /// <param name="ids">Коллеция идентификаторов тех объектов, для 
        /// которых присутствует "исправление по умолчанию".</param>
        /// <returns>True - найдены, иначе - False.</returns>
        Boolean HasDefaultVariants(DbSrv.Database db, out DbSrv.ObjectIdCollection ids);

        /// <summary>
        /// Применить "исправления по умолчанию" ко всем найденным "некорректным", для которых такие 
        /// предлагаемые исправления обнаружены.
        /// </summary>
        /// <param name="db">База данных чертежа, подлежащая обработке.</param>
        /// <returns>Коллеция идентификаторов тех объектов, для которых были применены 
        /// "исправления по умолчанию".</returns>
        DbSrv.ObjectIdCollection ApplyDefaultVariants(DbSrv.Database db);

        /// <summary>
        /// Получить визуальный элемент управления, предназначенный для 
        /// исправления выявленных нарушений.
        /// </summary>
        /// <param name="db">База данных чертежа, подлежащая обработке.</param>
        /// <returns></returns>
        winCont.UserControl GetGuiControl(DbSrv.Database db);

        /// <summary>
        /// Получить подробный отчёт обо всех обнаруженных нарушениях
        /// </summary>
        /// <param name="db">База данных чертежа, подлежащая обработке.</param>
        /// <returns>Результат проверки возвращается в виде объекта XElement.</returns>
        XElement GetXmlReport(DbSrv.Database db);
    }
Результат работы каждого модуля возвращается в виде XML объекта. Ты группируешь их по файлам и по завершению работы скармливаешь их генератору отчётов. Вот и вся песня.

Цитата:
Сообщение от Елпанов Евгений
http://www.cadtv.ru/aur-2012-avtomat...spol-zovaniem/
Женя, каким боком это относится к нормоконтролю, о котором спрашивает автор?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 14.01.2013, 19:05
#23
Елпанов Евгений

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


Цитата:
Сообщение от hwd Посмотреть сообщение
Женя, каким боком это относится к нормоконтролю, о котором спрашивает автор?
я про запуск его функции во всех файлах, для сбора статистики...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 17.01.2013, 16:28
#24
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


hwd, да, ты был прав... Ничего мне это не дало...
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Непрочитано 17.01.2013, 19:05
#25
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Xara Посмотреть сообщение
да, ты был прав... Ничего мне это не дало...
Вот от таких, как Вы, Xara, я сделал программку для брикскада, которая пуржит файлы в заданной директории. Чтоб было понятно, в нем нет ни объектДБХ, ни нет, ни аркс, ни даже вба, то есть есть, но не для всех, а местный лисп справился на ура. Но вам я ее тоже не покажу
зы влом было переключать раскладку...
зызы ну, hwd - знатный троль...
gomer вне форума  
 
Непрочитано 18.01.2013, 16:19
#26
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Xara Посмотреть сообщение
hwd, да, ты был прав... Ничего мне это не дало...
Об этом я тебя и предупреждал - смысл спрашивать, если не пишешь на .net?
Если объяснять на пальцах, то визуально (т.е. для пользователей), это безобразие выглядит например таким образом (у тебя может быть свой вариант безобразия):

Миниатюры
Нажмите на изображение для увеличения
Название: stdMng.png
Просмотров: 316
Размер:	60.9 Кб
ID:	94643  
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 18.01.2013, 16:44
#27
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Цитата:
Сообщение от gomer Посмотреть сообщение
Но вам я ее тоже не покажу
Жадина
__________________
Боишься - не делай. Делаешь - не бойся.
Xara вне форума  
 
Непрочитано 18.01.2013, 16:57
#28
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Xara Посмотреть сообщение
Жадина
Это не от жадности, интересно, что будет, если на реакторы посадить пурж и нормоконтроль? Как долго проживет монитор...
gomer вне форума  
 
Непрочитано 18.01.2013, 16:59
#29
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


На реакторах нельзя использовать команды. Поэтому штатный нормоконтроль сразу отпадает. Остальное реализовывалось не раз и не два.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.01.2013, 17:02
#30
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
На реакторах нельзя использовать команды. Поэтому штатный нормоконтроль сразу отпадает. Остальное реализовывалось не раз и не два.
Если под "штатным" подразумевается "родной автокадовский" нормоконтроль, то он как раз и использует "реакторы" (события в C#). И понятное дело, что в них он использует не командную строку автокада, а непосредственно работает с базой данных чертежа через API.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 18.01.2013, 17:07
#31
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Я имел в виду вызов _checkstandards, а не внутренний механизм работы команды.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 18.01.2013, 17:13
#32
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Я в своей реализации отказался от использования событий и жёсткого прописывания путей к DWS файлам (как это сделано в автокаде). Имхо удобней, когда проверка запускается только по требованию самого пользователя, а в именах к DWS файлам можно указывать относительные пути и системные переменные. Если автор вопроса не будет завязываться на реакторы, то и реализовать аналог на лиспе не составит особого труда.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 18.01.2013, 17:49
#33
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
На реакторах нельзя использовать команды
я имел ввиду самописные пурж и нормоконтроль + заминировать все это дело алертами
Xara, если вам свербит уж так это, используйте метод Add вместо Open, всего то делов на медный грош
gomer вне форума  
 
Автор темы   Непрочитано 24.01.2013, 11:47
#34
Xara

Помидорка
 
Регистрация: 03.02.2012
Сообщений: 135


Цитата:
Сообщение от gomer Посмотреть сообщение
используйте метод Add вместо Open
Попробую...

Кто-нибудь может подсказать, как перебить функцию под этот метод, чтобы лисп работал с этими файлами?
Код:
[Выделить все]
 (defun _Checkfiles ()
  (foreach Item1 abc
    (setq file (vla-open (vla-get-documents (vlax-get-acad-object))
			 Item1
			 :vlax-false
			 ""
			 )
	  )
      
  ;;;;;;;;;;;;; НАЧАЛО ПРОВЕРОК ;;;;;;;;;;;;;
  
  ;;;;;;;;;;;;; ПРОВЕРКА 1 - ВСЕ ЛИ РАЗМЕРЫ В $-DIMS ;;;;;;;;;;;;;				;;
  (setq all$dims (ssget "_X" '((0 . "*DIMENSION"))))						;;
  (if (/= all$dims nil) (setq len$dims (sslength all$dims)))					;;
  (setq jjl 0											;;
	f$dims "")										;;
  (if (/= len$dims nil)										;;
    (while (and (> len$dims 0) (= f$dims ""))							;;
      (setq dim$ent (ssname all$dims (setq len$dims (1- len$dims)))				;;
	    layer$dim (cdr (assoc 8 (entget dim$ent))))						;;
      (if (/= layer$dim "$-DIMS") (setq f$dims "- Имеются размеры в недопустимых слоях\n"	;;
					kol$err (1+ kol$err)))					;;
      )												;;
    )												;;
  ; log f$dims											;;
  
  ;;;;;;;;;;;;; ПРОВЕРКА 2 - ВСЕ ЛИ ТЕКСТЫ SA-GENISO ;;;;;;;;;;;;;				;;		*** RED
  (setq all$text (ssget "_X" '((0 . "*TEXT") (0 . "*MTEXT"))))					;;
  (if (/= all$text nil) (setq len$text (sslength all$text)))					;;
  (setq jjl 0											;;
	f$text "")										;;
  (if (/= len$text nil)										;;
    (while (and (> len$text 0) (= f$text ""))							;;
      (setq text$ent (ssname all$text (setq len$text (1- len$text)))				;;
	    font$text (cdr (assoc 7 (entget text$ent))))					;;
      (if (/= font$text "SA-GENISO")								;;
	(setq f$text "- Имеются текстовые примитивы c использованием недопустимых шрифтов\n"	;;
	      kol$err (1+ kol$err)))								;;
      )												;;
    )												;;
  ; log f$text											;;
  
  ;;;;;;;;;;;;; ПРОВЕРКА 3 - СИСТЕМНЫЕ ПЕРЕМЕННЫЕ ;;;;;;;;;;;;;					;;
  (setq f$param "")										;;
  (if (/= (getvar "MEASUREMENT") 1) (setq f$param (strcat f$param "MEASUREMENT ")))		;;
  (if (/= (getvar "MIRRTEXT") 0) (setq f$param (strcat f$param "MIRRTEXT ")))			;;
  (if (/= (getvar "DIMASSOC") 2) (setq f$param (strcat f$param "DIMASSOC ")))			;;
  (if (/= (getvar "CMDDIA") 1) (setq f$param (strcat f$param "CMDDIA ")))			;;
  (if (/= (getvar "FILEDIA") 1) (setq f$param (strcat f$param "FILEDIA ")))			;;
  (if (/= f$param "")										;;
    (setq f$param (strcat "- Недопустимое значение системных переменных " f$param "\n")		;;
	  kol$err (1+ kol$err))									;;
    )												;;
  ; log f$param											;;
  
  ;;;;;;;;;;;;; ПРОВЕРКА 4 - ЕДИНИЦЫ ИЗМЕРЕНИЯ ;;;;;;;;;;;;;					;;
  (if (and (/= (getvar "insunits") 0) (/= (getvar "insunits") 4) (/= (getvar "insunits") 6))	;;
    (setq f$units "- Недопустимое значение единиц измерения"					;;
	  kol$err (1+ kol$err))									;;
    (setq f$units ""))										;;
  ; log f$units											;;
  
  ;;;;;;;;;;;;; СБОРКА LOG-ФАЙЛА  ;;;;;;;;;;;;;							;;		*** RED
  (if (and (/= f$dims "") (/= f$dims "") (/= f$dims "") (/= f$dims ""))
    (setq f$log (strcat "\n" f$dims f$text f$param f$units "\n\n"))
    (setq f$log (strcat "\n- Ошибок не найдено\n\n"))
    )
  
  ;;;;;;;;;;;;; ОКОНЧАНИЕ ПРОВЕРОК ;;;;;;;;;;;;;
  (setq loglist
	 (append loglist (list
			   (strcat "Чертеж " (getvar "dwgname")
				   " - проверка выполнена "
				   ;;;			       ourfilename
				   ;;;			       " at "
				   (strcat
				     (substr (rtos (getvar "cdate") 2 0) 7 2)
				     "."
				     (substr (rtos (getvar "cdate") 2 0) 5 2)
				     "."
				     (substr (rtos (getvar "cdate") 2 0) 1 4))
				   f$log)
			   )
		 )
	)
    (princ)
    (vla-Close file :vlax-true)
    )
  (princ)
  )
__________________
Боишься - не делай. Делаешь - не бойся.

Последний раз редактировалось Xara, 28.01.2013 в 12:42.
Xara вне форума  
 
Непрочитано 11.07.2015, 09:50
#35
DENBASS2004


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Xara, активация окна другого файла автоматически останавливает выполнение лиспа.
Добрый день Алексей. Копался на форумах, наткнулся на это обсуждение. Все таки я заставил что бы после открытия другого файла и делая его активным лисп не прекращал работать, а переключался на новый файл и продолжал работать
DENBASS2004 вне форума  
 
Непрочитано 11.07.2015, 15:25
#36
Кулик Алексей aka kpblc
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-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.07.2015, 16:16
#37
DENBASS2004


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Молодец. Решение показывай.
Ну, посмотрел, как то все там для меня тяжеловато читать.
У меня как то проще получилось, может конечно многим не подойдет, но для меня самый раз.
(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) и программа дальше продолжает работать но уже с новым открытым файлом
Может конечно это совсем неграмотно, но у меня работает. Да и я еще новичок.
DENBASS2004 вне форума  
 
Непрочитано 11.07.2015, 21:21
#38
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


Ok. Делай таким образом:
Открываем новый экземпляр AutoCAD, ни один рабочий файл не загружен. Пустой файл создан и активирован. Переход в VLIDE и запуск функции test:
Код:
[Выделить все]
 (defun test (/ loc_var)
  (setvar "sdi" 1)
  (setq *glob_var* "Глобальная переменная"
        loc_var    "Локальная переменная"
        ) ;_ end of setq
  (command "_open"
           "_no"
           (strcat papka1 "\\01-00.00.000 СБ-Опорные элементы.dwg")
           (strcat papka1 "\\01-01.00.002-Косынка.dwg")
           ) ;_ end of command
  (setvar "sdi" 0)
  (alert (strcat "Переменные в новом файле:\n"
                 "\t*glob_var* : "
                 (cond
                   (*glob_var*)
                   (t " не определена")
                   ) ;_ end of cond
                 "\tloc_var    : "
                 (cond (loc_var)
                       (t "Не определена")
                       ) ;_ end of cond
                 ) ;_ end of strcat
         ) ;_ end of alert
  ) ;_ end of defun
И посмотри, чему в новом файле (если он вообще откроется) будут равны значения глобальной и локальной переменных. А заодно и проверь, определена ли вообще функция test.
P.S. Работа с нетекущим документом через lisp обсуждалась на форуме не раз и не два. И выводы постоянно были одни и те же.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.07.2015, 07:53
#39
DENBASS2004


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Ok. Делай таким образом:
Открываем новый экземпляр AutoCAD, ни один рабочий файл не загружен. Пустой файл создан и активирован. Переход в VLIDE и запуск функции test:
Код:
[Выделить все]
 (defun test (/ loc_var)
  (setvar "sdi" 1)
  (setq *glob_var* "Глобальная переменная"
        loc_var    "Локальная переменная"
        ) ;_ end of setq
  (command "_open"
           "_no"
           (strcat papka1 "\\01-00.00.000 СБ-Опорные элементы.dwg")
           (strcat papka1 "\\01-01.00.002-Косынка.dwg")
           ) ;_ end of command
  (setvar "sdi" 0)
  (alert (strcat "Переменные в новом файле:\n"
                 "\t*glob_var* : "
                 (cond
                   (*glob_var*)
                   (t " не определена")
                   ) ;_ end of cond
                 "\tloc_var    : "
                 (cond (loc_var)
                       (t "Не определена")
                       ) ;_ end of cond
                 ) ;_ end of strcat
         ) ;_ end of alert
  ) ;_ end of defun
И посмотри, чему в новом файле (если он вообще откроется) будут равны значения глобальной и локальной переменных. А заодно и проверь, определена ли вообще функция test.
P.S. Работа с нетекущим документом через lisp обсуждалась на форуме не раз и не два. И выводы постоянно были одни и те же.
Да Алексей ты прав. Файл то открылся, но значения глобальных и локальных он потерял. Да ,я в ступоре. Неужели ни как это не обойти. Мне ведь обязательно надо что бы открывался не дескриптер а сам файл. А возможно ли сделать например так. Отдельно написать программу для построения чертежа конкретной детали ,а после вставить ее в первую программу где будет открываться дескриптер? И все там сделается по программе но уже не видя как он это делает?
DENBASS2004 вне форума  
 
Непрочитано 13.07.2015, 08:33
#40
trir


 
Регистрация: 18.12.2010
Сообщений: 5,108


Как известно Тор с вырезанным диском («проколотый») можно вывернуть наизнанку непрерывным образом (топологически, то есть серией диффеоморфизмов).

Конечно, всё можно сделать, но на лиспе это будет выглядеть как на иллюстрации выше, зато на dotNET всё просто...
trir вне форума  
 
Непрочитано 13.07.2015, 08:44
#41
DENBASS2004


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


Цитата:
Сообщение от trir Посмотреть сообщение
Конечно, всё можно сделать, но на лиспе это будет выглядеть как на иллюстрации выше, зато на dotNET всё просто...
Ну, как выглядеть будет мне не важно, dotNET я не знаю. Раз можно как я хочу буду пытаться сделать так. Я вот только одно не понимаю, некоторые команды пишешь по книге, но он их вообще не хочет воспринимать. Например открыть дескриптер файла, по книге это (open "файл" "режим")
пишу (setq Ch1 (command "_open" (strcat papka1 "\\01-01.00.002-Косынка.dwg") "_w")) а он мне выдает что (strcat papka1 "\\01-01.00.002-Косынка.dwg") неизвестная команда. Пытался прописать именно путь, тоже самое
DENBASS2004 вне форума  
 
Непрочитано 13.07.2015, 09:48
#42
frostmourn


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


Цитата:
Сообщение от DENBASS2004 Посмотреть сообщение
по книге это (open "файл" "режим")
пишу (setq Ch1 (command "_open" (strcat papka1 "\\01-01.00.002-Косынка.dwg") "_w"))

Буковки-то одинаковые, да не совсем...
frostmourn вне форума  
 
Непрочитано 13.07.2015, 09:54
#43
DENBASS2004


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


Цитата:
Сообщение от frostmourn Посмотреть сообщение
Буковки-то одинаковые, да не совсем...
Подскажите что именно не совсем одинаково?
DENBASS2004 вне форума  
 
Непрочитано 13.07.2015, 10:49
#44
frostmourn


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


А как по-вашему, (open) и (command "_open") - одно и то же?
frostmourn вне форума  
 
Непрочитано 13.07.2015, 10:58
#45
DENBASS2004


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


Цитата:
Сообщение от frostmourn Посмотреть сообщение
А как по-вашему, (open) и (command "_open") - одно и то же?
ну, у меня без command, open просто пишет ошибка
DENBASS2004 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как программно сделать окно активным?

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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