Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

рисование многоугольника

3.2K
05 апреля 2005 года
MasterKlass
47 / / 06.03.2005
Всем здравствуйте.
Проблема такая.

есть код.
 
Код:
Private Sub Picture1_MouseMove(Button As Integer, _
                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


как вы уже догатываетесь, при движение мышки по Картинке, за курсором тянется линия (из верхнего левого угла)
потом при нажатие (что-то типо этого)

 
Код:
Private Sub Picture1_MouseUp(Button As Integer, _
                Shift As Integer, X As Single, Y As Single)
  If Button = vbLeftButton Then Picture1.Line (0, 0)-(X, Y)
End Sub


должна высвечиваться и ОСТАВТЬСЯ на картинке линия от верхнего левого угла до координат курсора мышки во время нажитии левой кнопки.
Так оно и происходит, но в след. момент это линия ЗАКРАШИВАЕТСЯ белой из события MouseMove...

как поступить?
по идее это должен быть ввод многоугольника (типа как в Paint)

(ессено, что все вершины должны запоминаться, это легко)

решение я одно вижу, это при каждом движение мышки перерисовывать все грани по запомненным вершинам, но если вершин много, то это как-то не очень.. ну не знаюю... не оптимально, чтоли...


кстати ещё вопрос, как определить цвет пиксела в Picture?
459
06 апреля 2005 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by MasterKlass
Всем здравствуйте.
Проблема такая.

есть код.
 
Код:
Private Sub Picture1_MouseMove(Button As Integer, _
                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


как вы уже догатываетесь, при движение мышки по Картинке, за курсором тянется линия (из верхнего левого угла)
потом при нажатие (что-то типо этого)

 
Код:
Private Sub Picture1_MouseUp(Button As Integer, _
                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.
А какова в целом твоя задача?
Рисовать многоугольник по кликам? Зачем рисовать линию при движении мышки?

3.2K
06 апреля 2005 года
MasterKlass
47 / / 06.03.2005
Цитата:
Originally posted by gacol
Определить цвет пиксела можно методом POINT.
А какова в целом твоя задача?
Рисовать многоугольник по кликам? Зачем рисовать линию при движении мышки?



что за метод POINT? можно по-подробнее.

ну да. линию можно и не рисовать,можно просто строить прямую между 2х точек-кликов, но с рисованием нагляднее. =)

задача в общем:
реализация алгоритмов затравки и заполнения многоугольников (такие как закраска с упорядоченным списком рёбер, закрачка по рёбрам, с "перегородкой", с "флагом", построчный затравочный и тд).

459
07 апреля 2005 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by MasterKlass
что за метод 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
и тогда повторное рисование линии восстанавливает фон, т.е. он остается неизменным.

3.2K
03 мая 2005 года
MasterKlass
47 / / 06.03.2005
Цитата:
Originally posted by gacol
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 есть такое...?

3.2K
03 мая 2005 года
MasterKlass
47 / / 06.03.2005
Цитата:
Originally posted by MasterKlass
Позднее спасибо!
Ещё вопрос:
во время выполнения алгоритма закрашивания многоугольника мне нужно визуально наблюдать за процессом, но апишная Слип не даёт этого. В результате я получаю задержку, но во вромя этой задержки вроде как всё равно выполняется алгоритм и в конце концов я вижу не построковое заполнение, а просто сразу закрашенный многоугольник... Как избавится?
у знакомых в Дэлфях пишут после
sleep (123)
Application.ProcessMessages

может и в VB есть такое...?



я тут подумал и понял, что это виновато свойство PictureBox.AutoRedraw
если 0, то всё ок
если 1, то хреново..., зато картинка не стирается при свёртывание окна...

425
04 мая 2005 года
sq_deep
498 / / 18.02.2005
Обратите внимание на то, что написал gacol про DrawMode=7. Это то, что вам нужно.
3.2K
04 мая 2005 года
MasterKlass
47 / / 06.03.2005
Цитата:
Originally posted by sq_deep
Обратите внимание на то, что написал gacol про DrawMode=7. Это то, что вам нужно.



да-да!
спасибо. я пробывал.. естественно получается быстрее алгоритм, чем по пикселам закрашивать, но препод требует имено по пикселам.. =(

425
05 мая 2005 года
sq_deep
498 / / 18.02.2005
Цитата:
Originally posted by MasterKlass
да-да!
спасибо. я пробывал.. естественно получается быстрее алгоритм, чем по пикселам закрашивать, но препод требует имено по пикселам.. =(

Расскажите преподу про DrawMode. Думаю, откроете для него много нового и интересного :D Только сделайте это после сдачи работы, дабы не оскорбить его своими превосходящими знаниями.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог