Тема: Считывания XRecord из .dwg-файлов без Автокада

Из программы на Visual Basic требуется получить записи из словарей для списка .dwg-файлов. Т. е. есть список ссылок на эти файлы и из известного словаря (Dictionary) каждого хочется извлечь записи (XRecord). Открывать каждый файл в Автокаде и считывать их через Lisp или VBA не хочется, долго.

Что пока нашел в интернете:
RealDWG — дорого, не подходит;
DWGdirect от Open Design Alliance — не очень дорого, но требуется бумажная волокита для приобретением, пока этот способ в резерве;
LibreDWG — не понятно, есть у этой библиотеки на данный момент такие возможности, она пока недоработанная.

Что можете посоветовать в этой ситуации, может есть еще какие-нибудь средства? И еще, как программы с применением ObjectARX взаимодействуют с файлами .dwg? Надо запускать Автокад, открывать отдельный файл, и только для конкретно этого файла запускать программу, или можно после запуска Автокада вызвать программу, передать ей список ссылок, которые она уже сможет обработать пачкой?

Re: Считывания XRecord из .dwg-файлов без Автокада

Что пока нашел в интернете:
RealDWG — дорого, не подходит;
DWGdirect от Open Design Alliance — не очень дорого, но требуется бумажная волокита для приобретением, пока этот способ в резерве;
LibreDWG — не понятно, есть у этой библиотеки на данный момент такие возможности, она пока недоработанная.

на сколько я знаю, только RealDWG - это детище автодеска. все остальное стороннее, следовательно возможность работы с новыми типами DWG файлов у них будет выходить с опозданием, а возможно и вообще не будет выходить :) (например, фирма распалась и все.)

Открывать каждый файл в Автокаде и считывать их через Lisp или VBA не хочется, долго.

а зачем каждый файл открывать в автокаде, если можно открыть только его базу без визуального отображения.

И еще, как программы с применением ObjectARX взаимодействуют с файлами .dwg?

ну тут вообще интересно :) программ с применением ObjectARX нет в принципе (автодеск ооб этом позаботился :(). в результате компиляции сего детеща получается dll-файл (автодеск назвал его .ARX) и он запускается ТОЛЬКО из автокада, причем той ветки, для которой компилировался. Например, нельзя скомпилировать в ObjectARX 2004 и запустить это всё в AutoCAD 2009.

Надо запускать Автокад, открывать отдельный файл, и только для конкретно этого файла запускать программу, или можно после запуска Автокада вызвать программу, передать ей список ссылок, которые она уже сможет обработать пачкой?

достатьчно загрузить автокад, загрудить в него скомпилированную ARX и вызвать команду, а внутри команды получить список файлов (например текстовый файл в котором лежит это список или как-то иначе), и через readDwgFile открывать последовательно все эти файлы (без визуального отображения), выбирать все что интересует и закрывать их :)

Re: Считывания XRecord из .dwg-файлов без Автокада

Из программы на Visual Basic можно запустить Автокад без окна, и чтобы он сразу начал выполнение arx? Можно ли передать в arx свои параметры извне (ссылки на файлы) и получить обратный результат, т. е. массив XRecord, выбранных из файлов? Насколько шустро это будет работать при обработке нескольких десятков файлов? Автокад 2007.
Спасибо за ответы.

Re: Считывания XRecord из .dwg-файлов без Автокада

_Valery_ пишет:

Из программы на Visual Basic можно запустить Автокад без окна, и чтобы он сразу начал выполнение arx?

Можно.

_Valery_ пишет:

Можно ли передать в arx свои параметры извне (ссылки на файлы) и получить обратный результат, т. е. массив XRecord,

Можно. Хотя не очень понятно что ты подразумеваешь под массивом Xrecord.

_Valery_ пишет:

Насколько шустро это будет работать при обработке нескольких десятков файлов? Автокад 2007.

Это как повезет - проверь за какое время AutoCAD откроет эти файлы - это и будет приблизительное время.

Re: Считывания XRecord из .dwg-файлов без Автокада

Александр Ривилис, мне нужна просто текстовая информация, хранящаяся в XRecord. Ограничение по использованию VB состоит в том, что программа, для которой это нужно сделать, поддерживает только этот язык внутри себя. Суть того, что нужно, можно представить так: по запросу запускается VB-скрипт, который получает список адресов dwg-файлов, для каждого dwg нужно получить текст, хранящийся в XRecord, и дальше его обработать снова в VB.

за какое время AutoCAD откроет эти файлы - это и будет приблизительное время.

М-да, получается, что выигрыша от того, что мне, фактически не нужно визуальное содержимое этих файлов, почти не будет?

Если не сложно, можете рассказать, как на программном уровне можно запустить Автокад с автоматичеческим запуском arx-модуля и как передать и получить из него значения?

Еще наткнулся на библиотеки от http://www.cadsofttools.com/, но пока не понял, позволяют ли они сделать требуемое мне, не работали с ними?

Re: Считывания XRecord из .dwg-файлов без Автокада

_Valery_ пишет:

по запросу запускается VB-скрипт

Никогда на VB-скрипт не писал, поэтому его возможностей по работе с ActiveX не знаю.

_Valery_ пишет:

М-да, получается, что выигрыша от того, что мне, фактически не нужно визуальное содержимое этих файлов, почти не будет?

Будет (на ObjectARX), но небольшая.

_Valery_ пишет:

Если не сложно, можете рассказать, как на программном уровне можно запустить Автокад с автоматичеческим запуском arx-модуля и как передать и получить из него значения?

Запускать AutoCAD можно как минимум двумя способами - непосредственый запуск acad.exe (ищи сам как это на VB-cкрипт делается). В этом случае можно передать ему сразу параметр командной строки - имя загружаемого arx-файла.

<каталог содержащий acad.exe>\acad.exe /ld "путь к arx.файлу"

Второй способ - через ActiveX: что-то типа CreateObject("AutoCAD.Application") и загрузить arx-файл через AutoCAD.Application.LoadARX

Re: Считывания XRecord из .dwg-файлов без Автокада

А как можно вывести результат из arx-модуля в программу на VB или, как в вашем случае, на C++? Только через внешний файл?

Re: Считывания XRecord из .dwg-файлов без Автокада

Как на VB-скрипт - не знаю. Можно сделать на C++ (т.е. в arx) COM-сервер и обращаться к нему как к серверу. Для начала попробуй через внешний файл, т.к. объем данных у тебя будет приличный.