![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
GenkaRu |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 5.4.2010 Репутация: нет Всего: нет |
Для чего мне это нужно: На чертеже изображена стена дома в виде прямой, определённой двумя точками, она содержит две стороны (могут принадлежать разным комнатам), содержать разную отделку и т.д. Необходимо реализовать подсветку конкретной стороны по наведению курсора, ну и выбор по клику, ну и подсветку при выборе стороны стены в списке объектов, чтобы пользователь видел какую конкретно сторону стенки он будет модифицировать.
Для варианта подсветки при выборе стороны в списке объетов я пробовал искать отрезок - перпендикуляр через середину стены, чтобы потом через нужную его конечную точку проводить линию "подсветки", но не получилось его ограничить (скажем 3мя пикселами). Ещё как вариант можно было бы переделать алгоритм определения принадлежности курсора прямой для определения принадлежности курсора заданному корридору в те же 3 пиксела, но тоже не выходит пока.. Этот алгоритм я скопировал отсюда: http://forum.sources.ru/index.php?showtopi...mp;view=showall он такой:
Если кто-то знает хорошие решения или наставит на путь истинный в поисках оных буду очень признателен! |
|||
|
||||
GenkaRu |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 5.4.2010 Репутация: нет Всего: нет |
По идее проблему должна решить следующая последовательность действий: 1) Из уравнения прямой, перпендикулярной данной прямой, получить координаты точки их пересечения 2) Проверить лежит ли точка пересечения на вожделенном отрезке 3) Проверить в какой полуплоскости относительно нашего отрезка был сделан клик, и определить с какой стороны рисовать подсветку. Код получился вот такой, вызывается по MouseMove:
Проблема в том, что перпендикуляр строится избирательно, для большинства прямых - неверно, уходит куда-то под уклоном к ним за пределы экрана, но к некоторым строится верно. Баловство со знаками приводило к нужным результатам для одних прямых, и к неприемлемым к другим. Особенно, кажется, проблемны прямые близкие к вертикальным или горизонтальным, но таковыми не являющиеся. Буду пока пересчитывать, либо есть ошибка в вычислениях, либо чего-то не учёл.. |
|||
|
||||
GenkaRu |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 5.4.2010 Репутация: нет Всего: нет |
Ураа, координаты надо считать вот так, sweet Mary mother of Jesus оно работает, всем спасибо!))
|
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |