рисование многоугольника
Проблема такая.
есть код.
Shift As Integer, X As Single, Y As Single)
Static b As Double
Static c As Double
Picture1.Line (0, 0)-(b, c), vbWhite
Picture1.Line (0, 0)-(X, Y)
b = X
c = Y
End Sub
как вы уже догатываетесь, при движение мышки по Картинке, за курсором тянется линия (из верхнего левого угла)
потом при нажатие (что-то типо этого)
Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then Picture1.Line (0, 0)-(X, Y)
End Sub
должна высвечиваться и ОСТАВТЬСЯ на картинке линия от верхнего левого угла до координат курсора мышки во время нажитии левой кнопки.
Так оно и происходит, но в след. момент это линия ЗАКРАШИВАЕТСЯ белой из события MouseMove...
как поступить?
по идее это должен быть ввод многоугольника (типа как в Paint)
(ессено, что все вершины должны запоминаться, это легко)
решение я одно вижу, это при каждом движение мышки перерисовывать все грани по запомненным вершинам, но если вершин много, то это как-то не очень.. ну не знаюю... не оптимально, чтоли...
кстати ещё вопрос, как определить цвет пиксела в Picture?
Всем здравствуйте.
Проблема такая.
есть код.
Shift As Integer, X As Single, Y As Single)
Static b As Double
Static c As Double
Picture1.Line (0, 0)-(b, c), vbWhite
Picture1.Line (0, 0)-(X, Y)
b = X
c = Y
End Sub
как вы уже догатываетесь, при движение мышки по Картинке, за курсором тянется линия (из верхнего левого угла)
потом при нажатие (что-то типо этого)
Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then Picture1.Line (0, 0)-(X, Y)
End Sub
должна высвечиваться и ОСТАВТЬСЯ на картинке линия от верхнего левого угла до координат курсора мышки во время нажитии левой кнопки.
Так оно и происходит, но в след. момент это линия ЗАКРАШИВАЕТСЯ белой из события MouseMove...
как поступить?
по идее это должен быть ввод многоугольника (типа как в Paint)
(ессено, что все вершины должны запоминаться, это легко)
решение я одно вижу, это при каждом движение мышки перерисовывать все грани по запомненным вершинам, но если вершин много, то это как-то не очень.. ну не знаюю... не оптимально, чтоли...
кстати ещё вопрос, как определить цвет пиксела в Picture?
Определить цвет пиксела можно методом POINT.
А какова в целом твоя задача?
Рисовать многоугольник по кликам? Зачем рисовать линию при движении мышки?
Определить цвет пиксела можно методом POINT.
А какова в целом твоя задача?
Рисовать многоугольник по кликам? Зачем рисовать линию при движении мышки?
что за метод POINT? можно по-подробнее.
ну да. линию можно и не рисовать,можно просто строить прямую между 2х точек-кликов, но с рисованием нагляднее. =)
задача в общем:
реализация алгоритмов затравки и заполнения многоугольников (такие как закраска с упорядоченным списком рёбер, закрачка по рёбрам, с "перегородкой", с "флагом", построчный затравочный и тд).
что за метод POINT? можно по-подробнее.
ну да. линию можно и не рисовать,можно просто строить прямую между 2х точек-кликов, но с рисованием нагляднее. =)
задача в общем:
реализация алгоритмов затравки и заполнения многоугольников (такие как закраска с упорядоченным списком рёбер, закрачка по рёбрам, с "перегородкой", с "флагом", построчный затравочный и тд).
POINT описан в MSDN
Returns, as a long integer, the red-green-blue (RGB) color of the specified point on a Form or PictureBox.
Syntax
object.Point(x, y)
А с задачей в целом - тебе наверняка пригодится свойство DrawMode (см. в MSDN)
Например задаешь
DrawMode=7
и тогда повторное рисование линии восстанавливает фон, т.е. он остается неизменным.
POINT описан в MSDN
Returns, as a long integer, the red-green-blue (RGB) color of the specified point on a Form or PictureBox.
Syntax
object.Point(x, y)
А с задачей в целом - тебе наверняка пригодится свойство DrawMode (см. в MSDN)
Например задаешь
DrawMode=7
и тогда повторное рисование линии восстанавливает фон, т.е. он остается неизменным.
Позднее спасибо!
Ещё вопрос:
во время выполнения алгоритма закрашивания многоугольника мне нужно визуально наблюдать за процессом, но апишная Слип не даёт этого. В результате я получаю задержку, но во вромя этой задержки вроде как всё равно выполняется алгоритм и в конце концов я вижу не построковое заполнение, а просто сразу закрашенный многоугольник... Как избавится?
у знакомых в Дэлфях пишут после
sleep (123)
Application.ProcessMessages
может и в VB есть такое...?
Позднее спасибо!
Ещё вопрос:
во время выполнения алгоритма закрашивания многоугольника мне нужно визуально наблюдать за процессом, но апишная Слип не даёт этого. В результате я получаю задержку, но во вромя этой задержки вроде как всё равно выполняется алгоритм и в конце концов я вижу не построковое заполнение, а просто сразу закрашенный многоугольник... Как избавится?
у знакомых в Дэлфях пишут после
sleep (123)
Application.ProcessMessages
может и в VB есть такое...?
я тут подумал и понял, что это виновато свойство PictureBox.AutoRedraw
если 0, то всё ок
если 1, то хреново..., зато картинка не стирается при свёртывание окна...
Обратите внимание на то, что написал gacol про DrawMode=7. Это то, что вам нужно.
да-да!
спасибо. я пробывал.. естественно получается быстрее алгоритм, чем по пикселам закрашивать, но препод требует имено по пикселам.. =(
да-да!
спасибо. я пробывал.. естественно получается быстрее алгоритм, чем по пикселам закрашивать, но препод требует имено по пикселам.. =(
Расскажите преподу про DrawMode. Думаю, откроете для него много нового и интересного :D Только сделайте это после сдачи работы, дабы не оскорбить его своими превосходящими знаниями.