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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Пакетная обработка чертежей

Пакетная обработка чертежей

Ответ
Поиск в этой теме
Непрочитано 03.06.2010, 15:01 #1
Пакетная обработка чертежей
hwd
 
C, C++, C#
 
С-Пб.
Регистрация: 07.10.2009
Сообщений: 2,762

Программно открываю нужный мне чертёж, активирую его (если этого не делаю, то все изменения происходят в том файле, из командной строки которого вызван код на выполнение) и выполняю нужный мне набор действий, после чего файл сохраняется и закрывается, открывается следующий файл и выполняются те же действия и т.д. для всех чертежей, которые следует обработать.

Проблема в том, что при активации открываемого файла выполнение кода приостанавливается (как будто поставили брэйкпоинт) и возобновляется только тогда, когда активируется тот документ, из командной строки которого был запущен код пакетной обработки. Нужно чтобы выполнение не прерывалось. Как это правильно реализовать?

п.с. более подробно суть проблемы изложена здесь (в самом низу страницы).
Просмотров: 7743
 
Непрочитано 03.06.2010, 15:25
#2
VVA

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


В теме Последовательное применение lisp-функции к множеству файлов DWG посмотри пост #4
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 03.06.2010, 15:34
#3
hwd

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


Цитата:
Сообщение от VVA Посмотреть сообщение
посмотрел, однако не понял, как пост #4 соотносится с моим вопросом...
hwd вне форума  
 
Непрочитано 03.06.2010, 16:02
#4
VVA

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


Впрямую. Код будет работать в том документе, откуда его запустил. В посте 4 описываются варианты как выполнить lisp в других документах, в частночти пп. 3 и 4.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 03.06.2010, 16:04
#5
hwd

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


Цитата:
Сообщение от VVA Посмотреть сообщение
Впрямую. Код будет работать в том документе, откуда его запустил. В посте 4 описываются варианты как выполнить lisp в других документах, в частночти пп. 3 и 4.
При чём здесь lisp? Я ведь не на лиспе пишу. В моём случае
Код:
[Выделить все]
CommandLine.Command("_script", scrFile);
должно выполняться именно в программно открываемом файле, а не в файле, вызвавшем процесс пакетной обработки (если документ не активировать принудительно - код выполнится не в том файле). И остановки не должно происходить. Сейчас воюю с остановкой....

Последний раз редактировалось hwd, 03.06.2010 в 16:12.
hwd вне форума  
 
Непрочитано 03.06.2010, 17:23
#6
VVA

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


Цитата:
Сообщение от hwd Посмотреть сообщение
При чём здесь lisp? Я ведь не на лиспе пишу
Sorry, ссылку не смотрел. Хотя по той же ссылке п.3 (Execute commands on all open drawings) использовалясь связка vba+scr (по моему).
Код перенесен на Exchange (OpenDwgsCmds) Может удасться почерпнуть идеи оттуда
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 03.06.2010, 17:55
#7
hwd

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


Цитата:
Сообщение от VVA Посмотреть сообщение
Execute commands on all open drawings
дело в том, что мною обрабатываются не открытые на данный момент файлы, а выполняется последовательное открытие/закрытие файлов.

Цитата:
Сообщение от VVA Посмотреть сообщение
Может удасться почерпнуть идеи оттуда
Спасибо, гляну, хотя vba - это далеко не C#...
hwd вне форума  
 
Непрочитано 03.06.2010, 19:52
#8
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от hwd Посмотреть сообщение
дело в том, что мною обрабатываются не открытые на данный момент файлы, а выполняется последовательное открытие/закрытие файлов.

Спасибо, гляну, хотя vba - это далеко не C#...
Посмотри пожалуйста здесь:
http://through-the-interface.typepad...ch_processing/
(мои наработки остались на старом компьютере, так что временно
они недоступны - я постараюсь выслать их потом)



~'J'~
Олег (jr.) вне форума  
 
Непрочитано 03.06.2010, 21:27
#9
Залётный


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


Цитата:
Сообщение от hwd Посмотреть сообщение
Пакетная обработка чертежей
Вроде эта проблема решена давно.EZSCRIPT-PRO
Залётный вне форума  
 
Автор темы   Непрочитано 03.06.2010, 22:23
#10
hwd

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


Цитата:
Сообщение от Залётный Посмотреть сообщение
Вроде эта проблема решена давно.EZSCRIPT-PRO
Спасибо за линк, программа действительно генерирует скрипт, выполняющий пакетную обработку. Однако самому сгенерировать подобный файл для меня и не было проблемой, вопрос в другом...

Мне важно разобраться что не так в моём коде, дабы в дальнейшем не наступать на те же грабли. Кроме того, мой менеджер пакетной обработки сможет (в теории, после тестирования и завершающей отладки) вызывать код любой логики программной логики (которую невозможно реализовать scr-файлами). Единственное условие - эта логика должна быть инкапсулирована в классах, реализующих несложный интерфейс (IDwgOperation).

Последний раз редактировалось hwd, 04.06.2010 в 13:22.
hwd вне форума  
 
Непрочитано 04.06.2010, 01:07
#11
vic153

проектировщик газопроводов
 
Регистрация: 04.08.2005
Петербург
Сообщений: 327


Решения по редактированию множества чертежей встретил в книге Дэн Эбботт "AutoCAD: секреты, которые должен знать каждый пользователь". Он предлагает использовать связку из командного файла (.bat), файла пакета (.scr) и файла autolisp.
Вот краткая выписка из его книги о командном файле: FOR %%f in (C:\Sybex\DWG\*.dwg) DO START /WAIT C:\"Program Files"\"AutoCAD 2007"\acad.exe "%%f" /b C:\Sybex\wbout.scr
Описание данного командного файла: FOR (Для) каждого файла, представленного замещаемым параметром %%f, находящегося в папке C:\Sybex\DWG, DO (Проделать) следующее: START (Запустить) приложение Windows и WAIT (Ждать) завершения его работы, прежде чем продолжить для следующего файла в директории. Приложением Windows является программа acad.exe. Когда она запускается, загружается файл чертежа, имя которого представлено замещаемым параметром %%f, и выполняется файл пакета wbout.scr, находящийся в папке C:\Sybex\
vic153 вне форума  
 
Автор темы   Непрочитано 04.06.2010, 09:16
#12
hwd

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


Цитата:
Сообщение от vic153 Посмотреть сообщение
Решения по редактированию множества чертежей встретил в книге Дэн Эбботт "AutoCAD: секреты, которые должен знать каждый пользователь". Он предлагает использовать связку из командного файла (.bat), файла пакета (.scr) и файла autolisp.
Вот краткая выписка из его книги о командном файле: FOR %%f in (C:\Sybex\DWG\*.dwg) DO START /WAIT C:\"Program Files"\"AutoCAD 2007"\acad.exe "%%f" /b C:\Sybex\wbout.scr
Описание данного командного файла: FOR (Для) каждого файла, представленного замещаемым параметром %%f, находящегося в папке C:\Sybex\DWG, DO (Проделать) следующее: START (Запустить) приложение Windows и WAIT (Ждать) завершения его работы, прежде чем продолжить для следующего файла в директории. Приложением Windows является программа acad.exe. Когда она запускается, загружается файл чертежа, имя которого представлено замещаемым параметром %%f, и выполняется файл пакета wbout.scr, находящийся в папке C:\Sybex\
Спасибо за информацию Она на самом деле весьма интересна, поскольку может применяться не только применительно к AutoCAD (ещё раз спасибо).

Но всё же вынужден повториться - меня интересует решение указанной мною проблемы активации файла в разрезе .net-программирования (т.е. мне важно понять, где ошибка в моём коде).

Применительно к предлагаемому вами решению:
лисп и бат-файлы это конечно хорошо, однако во первых - в указанном вами варианте не проходит рекурсивного поиска файлов по подкаталогам, во вторых - если вы захотите обработать все файлы, входящие в состав подшивки - этот метод не сработает, т.к. не факт, что все файлы находятся в указанном вами каталоге. Более того - со временем проект разрастается, появляются новые каталоги и файлы - каждый раз переписывать бат-файл, указывая ему доп. каталоги - это не удобно. Проще указать dst-файл подшивки, программно проанализировав который можно было бы извлечь информацию о том, какие файлы входят в состав подшивки. Кроме того, недостатком предложенного выше решения является постоянный запуск/закрытие приложения (на это тратится изрядное время).

п.с. Я сильно упростил пример интересующего меня кода, дабы выделить только проблемный момент и опубликовал код здесь.

Некоторое время спустя...

Вопрос насчёт ошибки при активации документа снят... Ежели кому интересно, то дело оказывается вот в чём:
если acad.DocumentManager.MdiActiveDocument уже назначена ссылка на некоторый объект Document, то при попытке назначения ему новой ссылки, которая будет указывать на тот же самый экземпляр Document, автокад выдаёт ошибку. В моём случае получалось, что метод Open не только открывал документ, но и устанавливал его активным. AutoCAD не способен обработать верно повторную инициализацию свойства acad.DocumentManager.MdiActiveDocument тем объектом, которым он уже инициализирован - поэтому и вылетала ошибка (eInvalidInput).
Т.о. нужно выполнять такое действие:
Код:
[Выделить все]
            //Открываю интересующий меня файл...
            Document dwg2 = acad.DocumentManager.Open(fileName, false);
            if (acad.DocumentManager.MdiActiveDocument != dwg2)
            {
                acad.DocumentManager.MdiActiveDocument = dwg2;
            }
Либо, как вариант можно активировать документ так:
Код:
[Выделить все]
((AcadDocument)dwg2.AcadDocument).Activate();
имхо - необходимость указанной мною проверки по меньшей мере странна (на мой взгляд)...

Последний раз редактировалось hwd, 04.06.2010 в 16:39.
hwd вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Пакетная обработка чертежей



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой метод получения чертежей выбрать, работая в Tekla Structures ? pdimav Tekla 15 12.01.2018 09:12
Стандарты оформления чертежей (бумага) Sleekka AutoCAD 23 01.12.2011 14:00
Пакетная обработка файлов, содержащих поля florbel Программирование 2 17.02.2009 21:16
Современные обозначения для чертежей электроосвещения Баркова Татьяна Поиск литературы, чертежей, моделей и прочих материалов 0 05.08.2008 16:47