Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Манипулирование графическими объектами в VB


Автор: sedi 19.6.2007, 22:46
Кто из опытных поможет?
Задачка такая есть картинка (показываем ее на форме) поверх нее нужно бросить элипс и, с помощью мыши, подогнать его размеры под некоторый объект на картинке. 
Как бросить элипс понятно, но как не в конструкторе, а в процессе выполнения активизировать возможность изменять его размеры? И главное - какие методы позволяют поворачивать этот элипс, т.е. менять не только высоту и ширину, но и угол между радиусом и горизонтом?

Автор: kapbepucm 20.6.2007, 08:12
Каждый раз перерисовывать... Ну вообще, смотря, что за объект.

Автор: JusTalionis 20.6.2007, 09:16
Лично я таких способов не знаю. Я бы чертил эллипс при помощи функций синуса и косинуса (в цикле от нуля до 6.28 радиан).


Автор: kapbepucm 20.6.2007, 11:17
GDI32 не подхoдит?

Автор: sedi 20.6.2007, 19:16
Нет ВЫ не поняли, господа! Проблема не в том как нарисовать элипс, а именно как управлять его размерами и положением во время выполнения проекта. В конструкторе это все возможно, но как в действующем приложении - ?

Может я не понятно сформулировал проблему.
Задача такая. Есть картинка. Надо поверх нее расположить элипс и, с помощью мыши, обрисовать им контуры чего-то, изображенного на картинке - рубец, язва, рана, фурункул, синяк и т.п.  

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

Таким образом, при выполнении проекта надо иметь возможность растягивать/сжимать/поворачивать этот элипс.

Автор: kapbepucm 20.6.2007, 20:32
Ну, а просто кинуть и удалить, ничего не изменяя, в процессе не получается?

Автор: JusTalionis 21.6.2007, 09:54
sedi:
Нет, почему же,- я именно так и понял.
Поверх картинки начертить по точкам эллипс именно той формы и ориентации, какой нужно.
При перемещении мыши - обновляем картинку и снова отрисовываем эллипс, теперь уже в следующем, изменившемся положении - в соответствии с текущей координатой мыши.
Получается - эллипс шажками следует за движением мыши.

Громоздко, но зато дает абсолютно полный контроль над контуром эллипса.

Вот примерный код. Бросаем на форму пикчбокс Picture1, загружаем в него твою картинку и пишем:
Код

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'процедура черчения эллипса на Пикчбоксе Picture1
 If Button = 1 Then 'чертить, если нажата левая кнопка мыши
  Picture1.Refresh  'обновляем рисунок - уничтожается старый эллипс
  'черчение контура эллипса по точкам
  'x,y - координаты мыши от лев. верх. угла рисунка
  For i = 0 To 6.28 Step 0.01
    R = -0.1 / (Cos(i - Y / 1000) + 1.2)
    Picture1.PSet ((R * X * Cos(i) + 200), (R * X * Sin(i) + 200))
  Next i
 End If
End Sub

Горизонтальное движение мыши управляет размером, вертикальное - поворотом. Как именно будет вращаться эллипс - зависит от того, как обсчитать координаты X и Y.


Автор: kapbepucm 21.6.2007, 11:39
Наверное проблема в скорости исполнения?

Автор: JusTalionis 21.6.2007, 12:23
Я давно не догоняю вас, ребята!..
Подумаешь, - эллипс крутить! - задача-то на 7 строчек кода, см там выше пример написал.
А вы - GDI какие-то приплели... GDI, API, FSO все какие-то рубят.. Бейсик-то сам куда делся? найти не могу smile 

Автор: kapbepucm 21.6.2007, 14:15
JusTalionis, я использую GDI, ибо лишний раз не надо думать..., хотя с другой стороны ты прав, скоро Бейсик забудем.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)