Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TCanvas [D6, XP]


Страницы:   1 2

alll_23 ©   (2007-11-13 16:46:00) 

Здравствуйте, я делаю программу по   графическому построению графа(в качестве вершин графа у меня применяется компонент TShape(создаётся динамически по действию), в качесве рёбер просто ресую линию на ТImage методами MoveTo и LineTo при этом параллельно в матрицу инцендентности(извените если не правильно) заносится еденичка для тех вершин от которой до которой прорисовывается линия(марица нулевая динамическая кол-во вершин на кол-во вершин )  и всё
у меня нормально работает(соеденяю вершины разрываю всё это отображается в матрице и в графическом представлении связей  на экране), разрывая связи в матрицу присваевается ноль а линия прорисовывалась белым цветом так как я не знаю каким методом правильно ее стереть. Но вопрос в следующем: я хочу премещать
Вершину при этом должны прорисовываться все ёё связи тоже это получается но не совсем, не пойму как стереть статые координаты и даже если я их "сотру" таким способом как присваевания просто белого цвета на белом фоне тогда у меня сотрётся какая то часть какой то линии которая ёё может пересекать.
Ой вот это я накрутил, вобщем подскажите как при перемещении вершины ёё связи-линии не стирали другие.


Virgo_Style   (2007-11-16 12:40:00) [1]

> @!!ex ©   (16.11.07 10:24) [30]


А это уже смотря для чего. Если наш граф символизирует собой, ну не знаю, маршрут из дома на работу и обратно, а по пути расположены кинотеатр, автозаправка и гараж, и каждый пункт - это объект со своими свойствами, то зачем и как это держать в матрице - я себе действительно плохо представляю. Если же это всего лишь граф с пронумерованными (а не носящими какой-то индивидуальный характер) вершинами, то проще (и "стандартнее") пользоваться классической матрицей. Можно ли пройти по маршруту 1-3-5? Result := S[1,3] and S[3,5], и все. И наоборот, если начать запихивать в матрицу кинотеатр и гараж, да еще и не по одному разу, то головная боль начинает маячить на горизонте.

Как обычно, каждому овощу свой фрукт...


@!!ex   (2007-11-16 10:24:00) [2]

> [28] Virgo_Style ©   (15.11.07 21:45)

Да вопрос не в том, можно или не можно.
А в том - удобно или нет.
ИМХО не очень...


Virgo_Style   (2007-11-15 21:52:00) [3]

Я такой редактор писал когда-то, кстати... Возможно даже, что он до сих пор лежит в Кладовке, ключевые слова - "формула Мейсона". Код там, конечно, такой, что я сам боюсь туда смотреть, но ведь работало же... %-)

Хотя... нет, по-моему, связи я при перетаскивании не рисовал, и данные сохранял как матрицу смежности.


Virgo_Style   (2007-11-15 21:45:00) [4]

> @!!ex ©   (15.11.07 19:56) [27]


Не "пойди расскажи", а "пойду расскажу". И напишу по всем адресам, выданным по запросу "теория графов матрица". По всем 93 500 адресам. Шоб знали)


@!!ex   (2007-11-15 19:56:00) [5]

> [26] Virgo_Style ©   (15.11.07 19:33)

Я преподаю студентам программирование уже 2,5 месяца.
Разговор с самим собой - это шизофрения, поэтому сорри, вашему совету следовать не буду, ;)


Virgo_Style   (2007-11-15 19:33:00) [6]

> @!!ex ©   (15.11.07 17:08) [17]
> Кстати, использовать матрицу для хранения связей между элементами
> графа - это идиотизм.


Пойду расскажу об этом своему институтскому преподавателю, а то он не в курсе...


@!!ex   (2007-11-15 18:27:00) [7]

> Вообще то, деревья возможно хранить в массиве, мало того,
> даже некоторые БД основанные на релякционной системе спокойно
> хранят древо видные данные.

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


Malik   (2007-11-15 18:13:00) [8]


>  А деревья в массивах вы хранить не пробовали?

Вообще то, деревья возможно хранить в массиве, мало того, даже некоторые БД основанные на релякционной системе спокойно хранят древо видные данные.
Что касается автора ветви,то  от себя я могу сказать только одно:
"я представлю себе решение данной задачи так: заведи себе матрицу [4XN], где N-число ребер графа, где значения в массиве будут реальные координаты Шапов на канве формы или Имейджа (на твоё усмотрение)... дальше заводиш продцедуру, которая будет перерисовывать графическое представление графа в памяти (этот момент обязателен), при надобной тебе ситуации"


@!!ex   (2007-11-15 17:38:00) [9]

> [22] alll_23   (15.11.07 17:24)

Да, издеваюсь.
А покажите как выглядит ваш проект?


alll_23   (2007-11-15 17:24:00) [10]


> А деревья в массивах вы хранить не пробовали?

Что вы издеваетесь что ли есть же TreeNode, я же говоря просто чтобы не вводить вручную эту матрицу нужно это построение


alll_23   (2007-11-15 17:19:00) [11]

Да просто так


@!!ex   (2007-11-15 17:14:00) [12]

> [19] alll_23   (15.11.07 17:13)

Это к чему?


alll_23   (2007-11-15 17:13:00) [13]

А я читал про то как ты (@!!ex) сдесь писал благодарности этому форуму, трогательно конечно, но действительно нормальный форум


alll_23   (2007-11-15 17:11:00) [14]

Да понятно что место много занимает (Это курсовая моя) просто нужно реализовать некоторые алгоритмы по этом матрице.


@!!ex   (2007-11-15 17:08:00) [15]

Кстати, использовать матрицу для хранения связей между элементами графа - это идиотизм.
ГРаф сам по себе явялется великолепной структурой данных для хранения самого себя.
А деревья в массивах вы хранить не пробовали?


@!!ex   (2007-11-15 17:07:00) [16]

Z-order нафиг не нужен.
Все решается двойной буфферизацией(понятно надо забыть про компоненты и рисовать все ручками)
Вот примерно как должен выглядеть и работать
http://afera-net.narod.ru/GraphEditor.rar
манул тут:
http://afera-net.narod.ru/GraphHelpDOC.rar


alll_23   (2007-11-15 16:55:00) [17]

Ага понятно я просто в скорях подумал что этим я реализую этот z-order
по введению дополнительного слоя и по Z а недействительная область это то что под этим слоем и оно не используеся, то есть на него ничего не действует


KSergey   (2007-11-15 16:46:00) [18]

> alll_23   (15.11.07 16:38) [13]

Сделать можно всяко.
но предлагаю сделать правильно чтобы набить руку в правильных технологиях. Оно пригодится.


alll_23   (2007-11-15 16:38:00) [19]

Ага понятно, спасибо буду пробовать. А так не получится как вы думаете?
Если брать и создавать ТImage(размеры при перетягивании его меняются) при перетягивании Он становится поферх моего основного TImage или PaintBox у ТImage pransperant=true рисуется на нём затем по MouseUp картинка копируется на основную область а тот ТImage фрикается.


KSergey   (2007-11-15 14:29:00) [20]

> alll_23   (15.11.07 13:20) [11]
> А что такое Z-order, и что такое недействительная область?
>  Что это и где про это узнать можно?

Z-order - это порядок расположения рисуемых объектов по мнимой оси, расположенной перпендикулярно плоскости монитора
По сути просто показывает в каком порядке объекты отрисовывать: первыми те, что лежат "глубже" (т.е. как бы дальше от пользователя).

Недействительная область - часть окна (или все окно) которое в данный момент времени виндовс заставляет тебя перерисовать.
Сейчас меня закидают помидорами, но скажу, что для учебной задачи вполне можно все окно стереь и заново отрисовать на OnPaint.

Только для всех этих штук надо обязательно выполнить

> Рамиль ©   (13.11.07 16:53) [2]
> Перерисвывай в OnPaint всю видимую область (затирай все
> и рисуй все линии)
> Если надо перерисовать принудительно, например после изменения
> координат, вызывай Invalidate.
> И используй TPaintBox.

Иначе разговаривать не о чем, твои проблемы с частичным затиранием иначе не решить. (Можно вычислять где линии пересекаются и эти точки дорисовывать, но это извращение в чистом виде.)
На момент пока мышью перемещают объект - все перемещаемые объекты надо рисовить с маской XOR. При этом рисовать и стирать с одинаковыми настройками -тогад оно будет рисоваться и (при последующей отрисовке) стираться. А потом вызвать invalidate - и все уже хорошо перерисуется


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо