Тема: Нужно написать просмотрщик dwf на С++

Мне нужно периодически обновлять участки схемы (dwf-файла). Для этого я хочу использовать Whip Toolkit 5.5.
Если кто-нибудь работал с ним, подскажите, пожалуйста, с чего начать (или какую-нибудь другую технологию).
Задача в том, чтобы отобразить dwf-файл, а потом, по мере поступления данных в программу, вставлять их в нужные места файла.

Re: Нужно написать просмотрщик dwf на С++

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

Whip Toolkit рационально использовать по назначению - для разных манипуляций с DWF-файлами. Например, с его помощью можно сделать "обратный транслятор" из DWF в DWG (лучше не напрямую, а через XML или DXF). Или писать программы, которые делают DWF из других систем. Например, публикация карт Mapinfo в DWF без посредничества AutoCAD.

Просматривать DWF лучше через OCX, которые можно усовершенствовать по своему вкусу.

Надо учитывать, что внутри Autodesk тоже идет какая-то война группировок (технологии Volo и Whip). Чем все кончится - пока неизвестно. Скорее всего победит вообще DesignXML.

А начинать надо с изучения поставляемых примеров.

Re: Нужно написать просмотрщик dwf на С++

> Изменения
надо делать в DWG, отражать в DWF.
Мне нужно передовать DWF по сети на машину, где нет AutoCAD и отобразить его. Затем периодически изменять небольшие участки схемы и показывать изменения.
Поэтому DWG не доступен.

> Просматривать DWF лучше через OCX, которые можно усовершенствовать по своему вкусу.
Я просмотрел возможности ActiveX Volo View Express и Whip! - там ничего подобного на изменение элементов схемы не нашёл. Они ведь для этого и не предназначены.

> А начинать надо с изучения поставляемых примеров.
Примеры изучены. Кстати, интересная вещь: dwf-файлы, генерируемые примерами из Whip Toolkit 5.5, не просматриваются Volo View Express 2.0 !
Как читать dwf-файл, вроде, понятно. Но вот как его отобразить? - это совершенно не ясно. Библиотека, считав очередной примитив из файла, раскидывает сведения о нём по своим многочисленным классам. И как эти данные собрать вместе и вложить в "надёжные руки" для отображения ?..

Сейчас я скачал HEIDI Tollkit и пытаюсь извлечь пользу из него :)

Re: Нужно написать просмотрщик dwf на С++

Так ведь в том и идея DWF, чтобы его нельзя было изменять! И даже, если превратить его обратно в DWG (можно, можно), то получаются уже НЕ исходные примитивы. По крайней мере не всегда. Вместо широких линий могут получится кобинации SOLID и т.п.

Autodesk, естественно, все привязывает к AutoCAD. Чтобы его покупали больше. И сделать редактор DWF с изменениями "небольших" участков - все равно, что сделать маленький AutoCAD. Редактировать надо DWG, изменения для просмотра передавать в DWF на машину без AutoCAD.

Что касается несовместимости (есть такое), то тут очередные глупости внутри Autodesk. Бросаются в разные направления. Могли бы сделать и разные форматы, а лучше совместимость, для них то это просто. Но нет, один divizion делает как будто назло другому. А еще хотят, чтобы другие фирмы присоединялись...

Re: Нужно написать просмотрщик dwf на С++

> Так
ведь в том и идея DWF, чтобы его нельзя было изменять!
Всё ж таки, почему нельзя?  Если я знаю, в каком примитиве и что, мне надо изменить, то при считывании dwf-файла, после обнаружения искомого примитива, я изменяю какие-то его свойства (например, цвет заливки или вместо числа "10" поставить "110" и т.п.) динамически, т.е. в памяти и вывожу уже этот модифицированный приимтив на экран. В принципе, можно делать вывод и в файл. Вывести dwf на экран - тоже задача, наверное, посильная (я видел много не Автодесковских, буквально, любительских, прог-просмотрщиков файлов Автокад на www.download.com).

> Редактировать надо DWG, изменения для просмотра передавать в DWF на машину без AutoCAD.
В принципе, меня бы это устраивало. Но изменять изображение на клиенте (т.е. на машине без AutoCAD) нужно каждые секунд 10 и поэтому "моргалово" получится не хилое, если каждые 10 сек. полностью перегружать картинку.

От Heidi я уже отказался (шибко много весит), а вот с Whip хотелось бы разобраться. По-моему, это стоящая библиотека.

Re: Нужно написать просмотрщик dwf на С++

Если имеется некоторое заранее известное и конечное количество возможных изображений (например мнемосхема) то можно:
1. Сделать требуемые варианты на разных слоях (возможно именованных видах)
2. Встроить Whip в свою программу, отключив стандартный интерфейс с контекстным меню.
3. Наставить свои кнопки
4. Для изменения вида программно управлять видимостью требуемых слоев (можно по данным из динамически обновляющегося файла). Изменения будут происходить бытро и без миганий и перегрузок файла.

Можно даже сделать свой универсальный расширитель Whip, натасканный на такую работу. Про форматы файлов в этом случае знать и не надо. Пусть их совершенствует или гробит Аутодеск.

Re: Нужно написать просмотрщик dwf на С++

> Если
имеется некоторое заранее известное и конечное количество возможных изображений (например мнемосхема)
Имеется конечный набор электрических схем, переход между которыми происходит по ссылкам. Но характеристики элементов каждой схемы (отображаемой в данный момент) изменяются каждые 10 сек.
По-моему, Ваш вариант алгоритма немножко для другого случая. Вы ведь предлагаете управлять видимостью слоёв, причём слои зараннее заготовлены. А здесь слои зараннее заготовить совершенно не возможно. :(

Re: Нужно написать просмотрщик dwf на С++

> Но
характеристики элементов каждой схемы (отображаемой в данный момент) изменяются каждые 10 сек
В таком случая, лучше использовать SVG, это ХМЛ спецификация, которая включает возможность динамического изменения свойств элементов и данных. Просматривается с помощью Адобовского плагина, он также бесплатен.

Re: Нужно написать просмотрщик dwf на С++

2 Viacheslav
Не могли бы вы поподробней объяснить, что есть SVG или оставить ссылку на инфо о нём?
Спасибо!

Re: Нужно написать просмотрщик dwf на С++

Возвращаясь к WMF. Я понимаю, что он очень компактный. Но для удобного изменения параметров схемы не лучше ли использовать DXF? Его ведь и читать, и писать легко. И в памяти хранить не так сложно.

Re: Нужно написать просмотрщик dwf на С++

Понимаю что эта ветка уже древняя, но сегодня я нахожусь в очень подобной,
на мой взгляд, ситуации. Я задумал попробывать разработать приложение
на C++ под Windows помогающее при написании управляющей программы(на ISO-7bit) для станков с ЧПУ. Смысл в том чтобы получить 2D-чертеж(или может даже 3D-модель) детали из AutoCAD и использовать его при симуляции процесса обработки этой детали в этом приложении. Тоесть нужно программно отобразить полученный чертеж(или 3D-модель) на экране и динамически изменять отображение по мере надобности(возможно с поддержкой функции undo). Неплохо бы было также иметь возможность трансформировать(поворачивать, увеличивать и т.д.) все это хозяйство по ходу действия.
Если кто-то уже решил подобный вопрос и мог бы посоветовать пригоден ли DWF Toolkit (с входящим в него WHIP! Tookit) и формат DWF для такой задумки.
Понятно что есть альтернативы, но для меня необходимым является чтобы это был совместимый с AutoCAD формат данных и полностью бесплатный инструментарий разработчика без каких-либо ограничений. Ничего более подходящего мне пока найти не удалось.
  После просмотра прилагаемой документации к пакету DWF Toolkit я так толком и не понял подходит ли этот пакет для моих целей и откуда вообще надо начинать копать. Пытался в инете найти какие-нибудь советы или примеры и в итоге создалось такое впечатление что никто этим не занимается. Может кто-то мог бы подкинуть какие-нибудь ссылки на полезную информацию по этому вопросу(можно на английском) и, может быть, дать наводящие советы.
Заранее всем весьма признателен

Re: Нужно написать просмотрщик dwf на С++

Похоже ветка уже "мертвая".
Перенес вопрос в немного измененном виде на
https://www.caduser.ru/forum/topic33414.html