Хочу написать программку для черчения принципиальных схем. Первой идеей было создать библиотеку компонентов в формате SVG. Т.к. он поддерживается QT, легко создать в редакторе (например Inkscape). Рабочее поле программы должно представлять виджет для рисования SVG, способное загружать файлы SVG (комоненты из библиотеки) и способное рисовать новые элементы, такие как соединительные линии, тексты и т.д. Рисовать линии надо по определенным правилам- схема должна получаться по ГОСТ, а пользователь должен рисовать легко и просто.
Собственно в чем вопрос заключается... Почитал документацию по модулю SVG у QT и так и не понял- способен он на это или нет? Обображать SVG он может, как я понял, а может ли рисовать? Всмысле мышкой на рабочей области )
Стоит смотреть в сторону SVG или нет?
Проект http://fritzing.org/ использует такой подход, он с открытыми исходниками.
Но идея - ГОВНО.
XML - формат пригодный только для межинструментального обмена, он содержит гигантское кол-во лишних данных, долго анализируется.
Я преобразовывал DWG (~2,5 МБ) в SVG? получил ~120 МБ!
Ну SVG можно легко сжать, ведь это текстовый документ. Я так и собираюсь- библиотека компонентов будет представлять из себя файл с каким то расширением, но на самом деле это будет архив, в котором будет лежать XML файл описи компонентов и собственно сами файлы компонентов. Каждому компоненту может потребоваться до трех файлов- Условное Графическое Обозначение для принципиалок, посадочное место на плату и файл описания компонента. По моему удобно. Можно будет например править библиотеки руками- с помощью gzip.
Сама по себе схема может вовсе и не быть SVG файлом. А просто хранить данные о том какие компоненты установлены, их координаты и связи. Никаких километровых чертежей, для которых предназначен DWG, не нужно будет. Да и потом возможно у вас просто конвертор не самый лучший был. А компоненты не бывают такими большими и сложными. анализироваться должно быстро.
Другой вариант- придумать свой простой формат. Основанный опять же на XML так как бинарные файлы я с роду не переношу, а писать свой парсер текста- на Perl- я с удовольствием, а на си не тянет. Ну а рисовать тогда все средствами рисования QT? Я к сожалению не знаю его возможностей пока столь хорошо, поэтому и консультируюсь.
Когда-то в тяжелом детстве я писал на Visual Basic и отлично помню сложности с рисованием в нем. Надо заботиться о перерисовке всей сцены при малейшем ее изменении. А чтобы сделать линию с двух сторон с "квадратиками", чтобы мышкой ее растягивать- это уже целая программа будет. Вот я не хочу заниматься этой мелочевкой.
Я видел в QT Demo пример хороший, где кривую бизье можно легко "шевелить мышкой". Вот что-то типа того и надо.. Только линия не должны быть кривой, она должна быть по ГОСТ )))
Самый правильный способ - это рисование с помощью http://doc.crossplatform.ru/qt/4.5.0/graphicsview.html. А расположение и свойства объектов сохранять в любом удобном формате - хоть в xml, хоть в dxf.
Вот. Это как раз то, что я хотел услышать, то, что нужно. Спасибо.
rcdimon, С Юрием, по поводу электроники и программ облегчающих его не легкий труд, лучше не спорить
2 rcdimon,
хотите сделать нечто похожее на PCad ?
Идея: а что если вместо XML хранить все эти компоненты, либы и т.п в какой нить базе данных, т.е. в формате *.db ?
Если уж очень невмоготу использовать XML файл для хранения схем и при этом желателен минимальный размер, обратите внимание на это: http://ru.wikipedia.org/wiki/Matroska
Прочитав первый параграф, удивитесь Да, все уже написано!
Не читая википедию, если мне не изменяет память, "Матрёшка" разрабатывалась изначально, как универсальный двоичный контейнер, и только потом его под хранение видео приспособили.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)