Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Система рисования. Печать _ Работа с SVG

Автор: rcdimon 23.11.2009, 12:29

Хочу написать программку для черчения принципиальных схем. Первой идеей было создать библиотеку компонентов в формате SVG. Т.к. он поддерживается QT, легко создать в редакторе (например Inkscape). Рабочее поле программы должно представлять виджет для рисования SVG, способное загружать файлы SVG (комоненты из библиотеки) и способное рисовать новые элементы, такие как соединительные линии, тексты и т.д. Рисовать линии надо по определенным правилам- схема должна получаться по ГОСТ, а пользователь должен рисовать легко и просто.

Собственно в чем вопрос заключается... Почитал документацию по модулю SVG у QT и так и не понял- способен он на это или нет? Обображать SVG он может, как я понял, а может ли рисовать? Всмысле мышкой на рабочей области )

Стоит смотреть в сторону SVG или нет?

Автор: Litkevich Yuriy 23.11.2009, 12:50

Проект http://fritzing.org/ использует такой подход, он с открытыми исходниками.

Но идея - ГОВНО.
XML - формат пригодный только для межинструментального обмена, он содержит гигантское кол-во лишних данных, долго анализируется.
Я преобразовывал DWG (~2,5 МБ) в SVG? получил ~120 МБ!

Автор: rcdimon 23.11.2009, 13:36

Ну SVG можно легко сжать, ведь это текстовый документ. Я так и собираюсь- библиотека компонентов будет представлять из себя файл с каким то расширением, но на самом деле это будет архив, в котором будет лежать XML файл описи компонентов и собственно сами файлы компонентов. Каждому компоненту может потребоваться до трех файлов- Условное Графическое Обозначение для принципиалок, посадочное место на плату и файл описания компонента. По моему удобно. Можно будет например править библиотеки руками- с помощью gzip.

Сама по себе схема может вовсе и не быть SVG файлом. А просто хранить данные о том какие компоненты установлены, их координаты и связи. Никаких километровых чертежей, для которых предназначен DWG, не нужно будет. Да и потом возможно у вас просто конвертор не самый лучший был. А компоненты не бывают такими большими и сложными. анализироваться должно быстро.

Другой вариант- придумать свой простой формат. Основанный опять же на XML так как бинарные файлы я с роду не переношу, а писать свой парсер текста- на Perl- я с удовольствием, а на си не тянет. Ну а рисовать тогда все средствами рисования QT? Я к сожалению не знаю его возможностей пока столь хорошо, поэтому и консультируюсь.

Когда-то в тяжелом детстве я писал на Visual Basic и отлично помню сложности с рисованием в нем. Надо заботиться о перерисовке всей сцены при малейшем ее изменении. А чтобы сделать линию с двух сторон с "квадратиками", чтобы мышкой ее растягивать- это уже целая программа будет. Вот я не хочу заниматься этой мелочевкой.

Я видел в QT Demo пример хороший, где кривую бизье можно легко "шевелить мышкой". Вот что-то типа того и надо.. Только линия не должны быть кривой, она должна быть по ГОСТ )))

Автор: Litkevich Yuriy 23.11.2009, 13:50

Цитата(rcdimon @ 23.11.2009, 16:36) *
Ну SVG можно легко сжать, ведь это текстовый документ.
причём сдесь сжатие, анализоровать-то ты будешь не сжатый файл. 120/2,5 = 48 раз больше (т.е бесполезной информации)

Цитата(rcdimon @ 23.11.2009, 16:36) *
По моему удобно. Можно будет например править библиотеки руками- с помощью gzip.
Ужас!

Цитата(rcdimon @ 23.11.2009, 16:36) *
Да и потом возможно у вас просто конвертор не самый лучший был.
я тестил три комерческих, у них было ограничение на рмер входного файла (демки), по утверждению разработчиков, алгоритмы одинаковые. Возможно есть и лучше, но смысл для меня стал ясен - бездумное увлечение XML'ом.

Цитата(rcdimon @ 23.11.2009, 16:36) *
Основанный опять же на XML так как бинарные файлы я с роду не переношу
ну и зря, в бинрных файлах, для данной конкретной софтины море достоинств, для меня ключевые:
* размер
* нет соблазна лесть в него руками
* нет привязок кодировкам

Если нравится текстовый - DXF, но двоичный DWG лучше, его поймут многоие САПРы, он легкий и очень универсальный (поддерживает и 3D)

Автор: rcdimon 23.11.2009, 14:32

Цитата
* нет соблазна лесть в него руками

Люблю лазить руками.. особенно куда не просят :-D

Так всетаки вернемся к рисованию. каким способом проще всего сделать рисование? вот такое, какое я описывал. Не знаю как это называется нормально.

Автор: Kagami 23.11.2009, 14:44

Самый правильный способ - это рисование с помощью http://doc.crossplatform.ru/qt/4.5.0/graphicsview.html. А расположение и свойства объектов сохранять в любом удобном формате - хоть в xml, хоть в dxf.

Автор: rcdimon 23.11.2009, 15:12

Вот. Это как раз то, что я хотел услышать, то, что нужно. Спасибо.

Автор: niXman 26.11.2009, 3:45

rcdimon, С Юрием, по поводу электроники и программ облегчающих его не легкий труд, лучше не спорить ;)

Автор: kuzulis 26.11.2009, 15:23

2 rcdimon,

хотите сделать нечто похожее на PCad ?

Идея: а что если вместо XML хранить все эти компоненты, либы и т.п в какой нить базе данных, т.е. в формате *.db ?

Автор: niXman 26.11.2009, 18:03

Если уж очень невмоготу использовать XML файл для хранения схем и при этом желателен минимальный размер, обратите внимание на это: http://ru.wikipedia.org/wiki/Matroska

Прочитав первый параграф, удивитесь ;) Да, все уже написано!

Автор: Litkevich Yuriy 26.11.2009, 18:50

Не читая википедию, если мне не изменяет память, "Матрёшка" разрабатывалась изначально, как универсальный двоичный контейнер, и только потом его под хранение видео приспособили.

Автор: niXman 27.11.2009, 3:05

Цитата(Litkevich Yuriy @ 26.11.2009, 18:50) *
Не читая википедию, если мне не изменяет память, "Матрёшка" разрабатывалась изначально, как универсальный двоичный контейнер, и только потом его под хранение видео приспособили.

Именно так.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)