ПрограммированиеФорумОбщее

gui-построитель -> схема -> конвертация в карту. Какой формат взять?

Страницы: 1 2 Следующая »
#0
10:42, 17 июля 2010

Как в делфи или билдере. Открыл окно дизайнера, накидал элементов, связал линиями или просто расположил. Расположение,связи, характеристики элементов запоминаются. При открытии файла графич. представление восстанавливается из описания схемы. Какой формат использовать для хранения данных о схеме? Кроме xml  в голову ничего не приходит.

#1
10:54, 17 июля 2010

Бинарный, XML, HTML(?)  КО

#2
11:46, 17 июля 2010

.L
А если выбирать с прицелом на дальнейшую конвертацию в графический файл либо бинарник?

#3
12:06, 17 июля 2010

loonypy
> А если выбирать с прицелом на дальнейшую конвертацию в графический файл либо
> бинарник?
Если НЕ планируется "вручную" (без редактора, в блокноте) редактировать файлы GUI то храни в бинарнике иначе же - в любом удобном тебе текстовом формате. У меня всё в своём формате.

А при чём тут вообще графический файл и что ты собрался конвертировать то? о_О  Ты собрался "схему" сохранить(со всеми связями и т.п.) ?  Ну пусть редактор загружает GUI и экспортирует в картинку - тут жэ экспорт и формат хранения НИ КАК не связаны.

#4
12:26, 17 июля 2010

.L
У меня только идея, как хочу реализовать, а как реализовать - не знаю.
.L
> А при чём тут вообще графический файл и что ты собрался конвертировать то?
Как в визио: нарисовал схему, потом либо сохранил как графику, либо как визиовский файл. Вот что интересует. Я понятия не имею, Что сохраняется в визиовский файл: то ли текстовое описание, по которому восстанавливается графика самим визио, то ли сама графика. Если смотреть на это через MVC, то выходит - что хранится только "модель" - текстовое описание, а "вид" - это уже визио строит.

#5
12:38, 17 июля 2010

Короче делаешь так:
Сохраняется схема в XML, НЕ В КАРТИНКУ, однако РЕДАКТОР имеет возможность экспорта в тупо КАРТИНКУ. Тоесть формату пофиг на то, можно ли его экспортировать.  Например mp3 тоже можно экспортировать в картинку или вообще любой файл : D

#6
13:06, 17 июля 2010

.L
> Сохраняется схема в XML, НЕ В КАРТИНКУ
это понятно.
> однако РЕДАКТОР имеет возможность экспорта в тупо КАРТИНКУ.
Вот тут - нет. Я понятия не имею, как можно: 1. экспортировать один формат в другой;
2. а так же как читать форматы (если формат свой, когда для него нет стороннего компонента, типа XML).
Знаю, что каждый формат хранится согласно своей структуре: это количество байт - на заголовок, это - на то-то и т.п. Но как с этим работвать?
Можешь объяснить или подсказать, у кого об этом почитать?

#7
14:19, 17 июля 2010

loonypy
1. Файл ЛЮБОГО формата - это всего лишь набор байт. Как ты его представишь - дело твое. Конечно, если тупо взять тело мп3-файла и распарсить как бмп - ничего осмысленного не выйдет. Тем не менее, цель будет достигнута - ты получишь графическое представление мп3 =)
Но это все лирика, .L тебе говорил немного о другом. Имелось в виду, что редактор должен уметь нарисовать картинку по текстовому (ну или бинарному) файлу с описанием. После того, как эта картинка нарисована - редактор может сделать с ней ВСЕ, ЧТО УГОДНО - например снять скриншот =) получишь графический файл. Не надо пытаться напрямую файл описания превращать в картинку - это задача редактора.

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

#8
14:20, 17 июля 2010

loonypy
> 1. экспортировать один формат в другой;
При чём тут вообще файл??  У тебя редактор, в него загружен GUI.  Все контролы твоего GUI отрисовываешь в изображение и это изображение сохраняешь! Если ты не знаешь как рисовать в картинку то тебе рано делать редакторы.

loonypy
> Знаю, что каждый формат хранится согласно своей структуре: это количество байт
> - на заголовок, это - на то-то и т.п. Но как с этим работвать?
> Можешь объяснить или подсказать, у кого об этом почитать?
погугли например функции fopen, fread    - читаешь заголовок, поределяешь где и сколько компонентов лежат и читаешь их. 

Бери в руки библию Страуструпа и читай до посинения (это если ты на С++ хочешь писать)

#9
19:20, 17 июля 2010

.L
> тебе рано делать редакторы
ты прав, т.к. я про загрузку GUI мало что понял. Но и начинать с чего-то стоит, а то вся эта механика с чтением форматов, представлением текстовой инфы в графическом виде - для меня пока как черная коробка, даже не знаю, с какой стороны подойти.

Помеха
> Не надо пытаться напрямую файл описания превращать в картинку - это
> задача редактора.
Так редактор же мне писать.

Помеха
> Как ты его представишь - дело твое.
.L
> погугли например функции fopen, fread - читаешь заголовок, поределяешь где и
> сколько компонентов лежат и читаешь их.
Например, известно, что данные начинаются с n-байта - я перебираю до этого байта, а затем начинаю читать в свою внутреннюю структуру?
Писать хочу на питоне, так как язык не знаю.

#10
20:58, 17 июля 2010

loonypy
Посмотри формат SVG и опционально исходники Dia.

#11
22:18, 17 июля 2010

значитсо
сохранение во внутренем формате это одно, картинка это второе
после загрузки схемы редактор её должен отобразить - попросту говоря нарисовать на экране.
не знаю чем и как ты её рисуешь но если юзаешь делфи, но предположу что на канве (Canvas) формы
выдели код рисования отдельно в процедуру, например Draw(dest:TCanvas).
Далее создаешь TBitmap соответсвующего размера и просто рисуешь в неё.

что-то типа этого:
тут куча опшипок, делфи не видел лет 7 уже многое не помню.

procedure SaveToFile;
var
  btm : TBitmap;
begin
   btm = TBitmap.Create;
// ClientRect - размер клиентской части формы, не помню названия свойства.
   btm.Width := Form1.ClientRect.Width;
   btm.Height := Form1.ClientRect.Height;
   Draw(btm.Canvas);
   btm.SaveToFile("filename.bmp");
   btm.Free;
end;

procedure OnPaint(...)
begin
   Draw(Form1.Canvas);
end;

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

<schema>
   <block id="1" form="roundrect" color="green" rect="0,0,100,20">Start</block>
   <block id="2" form="rect" color="white" rect="0,50,100,20">Next</block>
   <block id="3" form="roundrect" color="red" rect="0,100,100,20">End</block>
   <link>
       <start point="bottom">1</start>
       <end point="top">2</end>
   </link>
   <link>
       <start point="bottom">2</start>
       <end point="top">3</end>
   </link>
   <link>
       <start  point="left">1</start>
       <start  point="left">2</start>
       <end  point="left">3</end>
   </link>
<schema>

в результате что-то вида
111 | gui-построитель -> схема -> конвертация в карту. Какой формат взять?

UPD:
сбило с толку "редактор как в делфи", но собственно в любом случае тебе на чем-нибудь рисовать а потом это что-то выводить на экран или в файл суть не меняетсо

#12
9:44, 18 июля 2010

Собираюсь писать на python, скорее всего с помощью pyqt. Посмотрел - там есть классы для работы с xml, в самом питоне тоже нашел elementtree, BeautifulSoup. Но хочется понимать саму механику. Файлы состоят из байтов; в файлах хранится текст, кавычки, прочие знаки препинания, управляющие символы; из с++ и других языков знаю, что 1 символ - 1 байт (не юникод). Получается, каждый из этих символов (буквы, кавычки, <,.{} и т.п.) хранится ровно в одном байте и нужно только вытянуть из структуры информацию, в каком формате хранится текст, с какого байта от начала файла он начинается и на каком байте заканчивается (поиск for'ом до символа конца файла)?

#13
14:05, 18 июля 2010

loonypy
грубо говоря - да. Особенно верно, если файл - текстовый (например xml)
если вручную - просматриваешь файл в поисках символа "<" - открывающий тег. Затем читаешь все, что до ">" - получаешь название секции например, или чего-то еще. И в том же духе продолжаешь дальше.
Всяческие библиотеки и компоненты облегчают этот процесс - они сами парсят исходный файл, а ты к ним обращаешься затем в стиле "Дай мне значение ключа в секции main" ну или типа того.

#14
14:20, 18 июля 2010

Помеха
То есть просто читаешь каждый байт и проверяешь, является ли он управляющим символом, специальным или обычным? Если юникод - то читать по 2 байта?

Страницы: 1 2 Следующая »
ПрограммированиеФорумОбщее

Тема в архиве.