Как получить элементы Visual / Framework рядом с указателем мыши в элементе управления Chart - PullRequest
1 голос
/ 08 февраля 2012

Я работаю над пользовательским элементом управления, который рисует на нем кривые и позволяет пользователю изменять свойства кривой, нажимая на нее.Теперь захват событий на самих кривых очень сложен, поскольку они могут быть очень тонкими (согласно требованию пользователя)

Каким-то образом я хочу увеличить выбор попадания для кривых.У меня есть решение для этого, но оно действительно дорогое, поскольку у меня есть огромное количество кривых в моем графике.Вот почему я ищу логику, с помощью которой я могу найти ограниченные кривые вокруг указателя мыши.

Я пробовал HitTest (), но это не помогает.Я много гуглил в поисках решения, но безуспешно.

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

Заранее спасибо.

1 Ответ

0 голосов
/ 27 февраля 2012

Вы должны будете реализовать эту функцию самостоятельно.То, что вы могли бы сделать, это прослушать MouseEnter / MouseLeave основной линии, и, если вы получили mousedown в пределах определенного радиуса от первоначального MouseEnter / Leave, считайте это попаданием.

Например, в псевдокоде:

OnMouseEnter()
{
    this.hittestPoint = currentMousePoint;
}

OnMouseLeave()
{
    this.hitTestPoint = currentMousePoint;
}

OnMouseDown()
{
    // Looking for mousedown within a 5 pixel radius of the line. 
    // Increase/decrease according to experimentation
    const double radius = 5;

    // Note see Euclidean distance for distance between vectors
    // http://en.wikipedia.org/wiki/Euclidean_distance
    double deltaX = (hitTestPoint.X - currentPoint.X);
    double deltaY = (hitTestPoint.Y - currentPoint.Y);
    double distance = Math.Sqrt(deltaX*deltaX + deltaY*deltaY);

    if(distance < radius) 
    {
         // Hittest detected!
    }
}
...