Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

как обрабатывать линии?   Найти похожие ветки 

 
negrila   (2004-10-16 18:02) [0]

Как мне можно размещать на форме прямые линии, и при щелчке на них однозначно идентифицировать, что это именно та или иная линия?


 
Cobalt ©   (2004-10-16 18:37) [1]

Какие ещё линии?
Ты более архитектурно говори.


 
DrPass ©   (2004-10-16 18:38) [2]


> Как мне можно размещать на форме прямые линии

Хорошо, что прямые. Кривые размещать намного труднее...


 
negrila   (2004-10-16 20:19) [3]

Юмористы. Я не про рисование говорю. Нужно создать объект, который визуально будет выглядеть как линия, соединяющая две точки. Таких объектов может быть много. То есть на форме должно быть множество отрезков с определенной длинной и координатами. Данные отрезки должны реагировать на выделение их мышкой. Я могу создать потомки TControl и используя регионы добиться того, что они будут выглядет как линии (прямоугольник прозрачный, а там где идет линия - нет), но тогда я не смогу различать кили на разных прямых, идущих параллельно на разных расстояниях. Или рисовать прямо на форме, а потом по щелчку строить в памяти все точки прямой и проверять место щелчка на вхождение?


 
DrPass ©   (2004-10-16 20:30) [4]


> Или рисовать прямо на форме, а потом по щелчку строить в
> памяти все точки прямой и проверять место щелчка на вхождение?

Вполне разумный вариант


 
iZEN ©   (2004-10-16 22:08) [5]

TShape?


 
vidiv ©   (2004-10-16 22:29) [6]


> negrila   (16.10.04 20:19) [3]

приложи немного математики и все у тебя получится!

o.t.
Я, помню, както сердечко рисовал с помощью прямых линний :)


 
TUser ©   (2004-10-16 22:44) [7]


> но тогда я не смогу различать кили на разных прямых

Это еще почему - Tag им разный поставь и проверяй его в OnClick.


 
default ©   (2004-10-16 22:45) [8]

да как хочешь так и обрабатывай
самое быстрое естественно создавать таблицу навроде
Array[0..MaxX, 0..MaxY] of TYourClass;
массив естественно будет динамическим если максимальные куски по X и по Y не известны заранее или память зря тратить не хочется задавая в статическом массиве максимальные границы
Array[CurrentX, CurrentY] даст объект на котором кликнули или 0 если нет в этом месте никакого объекта
само собой что таблицу придётся пересртаивать при изменении положения объектов, поэтому данный способ будет более предпочтительным если изменения положений прямых заметно меньше чем определение точки формы принадлежности объекту


 
negrila   (2004-10-17 00:14) [9]

Теперь раскрою карты окончательно. Нужно реализовать построение неориентированного графа. Есть лимит на макс. кол-во вершин и на макс. кол-во дуг. Поэтому вершины создал как аналог TShape, только потомком от TWinControl (у TShape Perform не работал для перетаскивания по форме, да и перерисовку заодно переделал) и загнал их в массив с динамическим добавлением/удалением. Дуги и их веса рисовал просто так, соответственно не могу отследить клики на них, чтобы реализовать добавление/удаление.


 
iZEN ©   (2004-10-17 00:49) [10]

Дуги/веса - ячейки двумерного массива NxN, где N=1..n-номера узлов, хотя такое ГОРАЗДО лучше-оптимальнее описывается треугольным массивом с количеством ячеек (NxN)/2-N, поэтому можно подумать о создании динамического массива массивов для хранения весов дуг с направлениями, конечно, в виде "+/-" в простейшем случае, либо выходить в "третье" измерение, типизируя дугу в ячейке.


 
iZEN ©   (2004-10-17 00:51) [11]

Очепятка, исправляю: N=1..n-номера ВЕРШИН.


 
Fenik   (2004-10-17 13:42) [12]

Всего нужен один компонент, который будет производить отрисовку и обработку событий мыши. Он держит в памяти растр, на которов рисует разными цветами линии или дуги, короче, то что надо, и растр на котором будет граф в нормальном виде (то, что надо выводить на экран). Тот, что содержится только в памяти можно взять 8-битный, если потенциально объектов не больше 256, иначе - 16-битный. При клике мышкой проверяем цвет соответствующей точки на этом битмапе. Т.к. определенный цвет соответствует какому-то обекту, нетрудно определить что это за объект и далле уже с ним работать. Если после нажатия перемещается мышь, перерисовываем в памяти оба графа как надо и выводим на канву компонента. Достаточно TPaintBox или TPanel. Думаю это самый быстрый и простой способ.


 
Palladin ©   (2004-10-17 15:27) [13]


> Теперь раскрою карты окончательно.

ахренеть... нашел блин поле чудес...


 
negrila   (2004-10-17 21:49) [14]

Я отказался от компонент. Сделал все на Panel"ьке. При щелчке проверяю на объекты, а для линий получаю уравнение вида kx+b и по abs разницы расчетного расположения и места щелчка ( +-3 точки) ищу где был щелчок. Всем спасибо



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.033 c
4-1095785758
Kitty-Kat
2004-09-21 20:55
2004.11.07
Помогите с печатью, минуя механизм Windows


9-1089256974
COOLer
2004-07-08 07:22
2004.11.07
Помогите с DelphiX


1-1098331929
TeNY
2004-10-21 08:12
2004.11.07
.CHM HELP


1-1098394798
Makhanev A.S.
2004-10-22 01:39
2004.11.07
Директивы условной компиляции...


1-1098708402
dfgdfgh
2004-10-25 16:46
2004.11.07
Как выделить другим цветом некоторые элементы в списке TListBox?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский