Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.16;
Скачать: CL | DM;

Вниз

Отрисовка линии Canvas в   Найти похожие ветки 

 
Тфьу   (2003-06-04 13:05) [0]

Есть ли простой способ рисовать линюю только тогда, когда она проходит над определенным цветом? (используя Canvas)


 
Skier ©   (2003-06-04 13:15) [1]

Бррр...Конечная цель какая ?


 
Тфьу   (2003-06-04 13:18) [2]

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


 
Calm ©   (2003-06-04 13:35) [3]

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


 
Skier ©   (2003-06-04 13:36) [4]

Боюсь что придётся по пикселям рисовать.
(у канвы есть свойство для этого)
Вообще хотелось бы по-подробнее узнать что ты пишешь.
Может случится так что ты не тем путём идёшь. (т.е. может быть
можно проще и красивее...)


 
Тфьу   (2003-06-04 13:46) [5]

Skier ©, Calm ©: Можно рисовть и по пикселам. Правда я хотел избежать такого гемороя. А проект огромный, поэтому нет возможности изложить все сжато. Коротко говоря это отрисовка 3-х мерной модели с несколькими степенями приоритетов.
Причем программа может быть запущена на любом компе, следовательно на DirectX и OpenGL опираться нельзя.

Разве что посоветуйте более скоростное рисование, чем Pixel[x,y]?


 
Skier ©   (2003-06-04 13:51) [6]


> Надо провести темнозеленую линию от верхнего угла до нижнего

угла формы ? Или ащё чего ?


 
Kudatsky   (2003-06-04 13:53) [7]

Используй функцию LineDDA.


 
Calm ©   (2003-06-04 13:54) [8]


> Причем программа может быть запущена на любом компе, следовательно
> на DirectX и OpenGL опираться нельзя.

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

А по пикселям будет очень долго. Если только время не критично, а важен только результат.


 
Тфьу   (2003-06-04 14:08) [9]

Kudatsky: Я не понял, как LineDDA работает.
Судя по описанию надо создать процедуру, которая на переданные точки как-то реагирует. Но можно подробнее описать?

Calm ©: Надо попробовать...

Skier ©: Не суть важно положение. Главное - линия пересекает разные фигуры.


 
Skier ©   (2003-06-04 14:14) [10]

>Тфьу (04.06.03 14:08)
А описание полигонов и/или их свойства (в общем какая-либо информация) где-то хранится или они просто рисуются и всё...
нарисовали и забыли ?


 
Kudatsky   (2003-06-04 14:17) [11]

Вызов такой:
LineDDA(X1,Y1,X2,Y2,@UFunc,Integer(Canvas));

UFunc-пользовательская функция
procedure UFunc(X,Y:Integer;Canvas:TCanvas);stdcall;

В LineDDA передаются координаты начала и конца линии.
LineDDA перебирает все точки линии и координаты каждой
точки передаёт в пользовательскую функцию. И в ней уже
нужно програмно определить, что с этой точкой делать.


 
Тфьу   (2003-06-04 14:26) [12]

Skier ©: Нарисовали и забыли.

Kudatsky: Спасибо. Оценю скорость - устроит ли меня.



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

Текущий архив: 2003.06.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
7-50535
tararasyk
2003-04-12 12:01
2003.06.16
Как узнать зарегистрированный ли в системе ActiveX Automation Obj


1-50285
AbrosimovA
2003-06-04 14:27
2003.06.16
Помогите разобраться с типизиров. и нетипизир. файлами


3-50210
etem
2003-05-26 11:21
2003.06.16
Как выполнить связь к связи join ?


14-50476
DiamondShark
2003-05-30 14:28
2003.06.16
Нужен козырный снимок акулы


14-50470
Андрей
2003-05-29 23:00
2003.06.16
Программа на Delphi управляет второстипенными устройствами