Главная страница
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.016 c
14-50516
lameridze
2003-05-31 20:28
2003.06.16
procedure


1-50293
me2
2003-06-04 13:40
2003.06.16
MDIChild со стилем bsDialog


14-50434
Anics
2003-05-29 13:43
2003.06.16
Кто знает, есть ли такой компонент ?


1-50271
Denwill
2003-06-03 08:53
2003.06.16
Как в Delphi создать панельки, такие как в MSOffice?


9-50198
[Baradoo]
2003-01-05 21:44
2003.06.16
Почему XP не дружит с OpenGL?