Страница: 1 |
Страница: 1 |
Вопрос: Вопрос по графике в VB.NET
Добавлено: 10.05.09 02:37
Автор вопроса: _Serega
Вопрос к профессионалам VB.NET: Можно ли при выводе графических объектов - текста, прямоугольников, линий, элипсов создавать что то навроде их объектной копии и позже при нажатии мышкой на область на которой они отрисованы, получать ссылку на объект? То есть отрисован к примеру на форме круг, который отрисован с элипса и можно ткнув мышкой в этот круг знать что нажато на этот круг, при этом приадлежность к кругу мы должны определять по занимаемой закрашенной области формы, то есть считать не прямоугольник внутри которого элипс в форме круга и отрисован, потаму что внутри такого прямоугольника тоже будет незакрашенная область, но она нам не нужна, а именно круг?
Ответы
Всего ответов: 8
Номер ответа: 1
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #1
Добавлено: 10.05.09 02:48
Вопрос не осилил, а телепаты уже наверно спят.
Номер ответа: 2
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #2
Добавлено: 10.05.09 03:11
телепаты не нужны. человеку нада нечто вроде векторного редактора. типа по отражению получать объект, который выбран мышкой.
Номер ответа: 3
Автор ответа:
_Serega
Вопросов: 1
Ответов: 43
Профиль | | #3
Добавлено: 10.05.09 03:12
Попробую пояснить.
В Graphics есть методы считывания прямоугольников, в которых отрисованы объекты, например я внутри кода считываю размеры текстовых сообщений и корректирую построение самого изображения, к примеру:
Dim szLabelX As SizeF
szLabelX.Width = e.MeasureString(strLabelX, _ Me.Font).Width
szLabelX.Height = e.MeasureString(strLabelX, _ Me.Font).Height
Сохранив размеры и координаты, как объект и позже по нажатии мышкой на экран считать координаты нажатия мышки и соответсвенно определить принадлежность к объекту - но объектов в данном случае является прямоугольник. Можно ли определить не по области прямоугольника, а по закрашенной области принадлежность к объекту? Подобную реализацию я как то видел на C# на .Net и там это было сделано через DC вывод, но не могу найти этот код у себя.
Номер ответа: 4
Автор ответа:
_Serega
Вопросов: 1
Ответов: 43
Профиль | | #4
Добавлено: 10.05.09 03:18
Нет, это не векторный редактор. Я написал свой компонент вывода графиков и он уже работает и автошкалирует вводимые значения матрицирует - тут все в порядке, сейчас вот хотелось бы добавить некоторых возможностей, например, пользовательского рисования на имеющемся графике.
Номер ответа: 5
Автор ответа:
Стас
Вопросов: 5
Ответов: 13
Профиль | | #5
Добавлено: 10.05.09 09:17
Можно поробовать получать координаты выделенного пикселя и его цвет и сранивать с цветом закрашеной области
Номер ответа: 6
Автор ответа:
_Serega
Вопросов: 1
Ответов: 43
Профиль | | #6
Добавлено: 10.05.09 11:01
Спасибо, наверное в крайнем случае так и придется сделать, честно говоря я тоже думал об этом. Но в таком решении есть несколько недостатков, например, мы используем градиентную заливку или альфу - прозрачность для кисти и тогда получаемый с пикселя цвет не фиксированный, тогда возникает проблема связывать цвет объекта с цветом пикселя или другой частный случай, когда выбран один и тот же цвет для формирования несколько объектов визуально разделенных просто границами.
Номер ответа: 7
Автор ответа:
Стас
Вопросов: 5
Ответов: 13
Профиль | | #7
Добавлено: 10.05.09 11:13
в таком случае можно (если это круг) делать проверку : если координаты мышки меньше радиуса круга значит мы внутри границы, второй способ, если заливка с альфа прозрачностью, то проверять прозрачность пикселя, если же это многоугольник, то придумай функцию которая будет перебирать все точки многоугольника и проверять на ближайшее расстояние к центру, если мыша (координаты) дальше какой либо из точек расстояние от точки до центра > расстояния мыши до центра, то мы за пределами многоугольника
Номер ответа: 8
Автор ответа:
_Serega
Вопросов: 1
Ответов: 43
Профиль | | #8
Добавлено: 10.05.09 11:39
Насчет подобного перебора - тут проблемка, мы просто задаем в Framework тип графического объекта, его параметры и его координаты с размерами для рисования при выводе, а алгоритм формирования объекта попиксельно нам неизвестен, в общем то при работе с API было тож самое - просто используешь готовые вызовы, мы же не на ассемблере работаем, на ассемблере можно было бы такой проект пожизненно писать, но такого приговора нам не было.))) Тут остается для использования только возвращаемая область прямоугольника, занимаемая объектом или всеж где то найти, как используются ссылки на создаваемые графические объекты - решение должно быть где то там.