Я испытываю несоответствие между графическим изображением, нарисованным в координатах мира, в UserControl и результатами GraphicsPath.IsVisible() для Hit. Протестируйте фигуру с помощью мыши.GraphicsPath.IsVisible() не соответствует реальному пути?
Я выполнил небольшой тест, в котором была сделана карта, где IsVisible() вернена, относительно формы GraphicsPath, которая была нарисована. Результаты показывают очень «низкую разрешающую» версию формы, которую я рисую.
Ссылка на разделяемой Google Drive изображение, показывающее результаты: http://goo.gl/zd6xiM
там что-то, что я делаю или не делаю правильно, что причиной этого?
Спасибо!
Вот большинство из моего обработчика событий OnMouseMove():
protected override void OnMouseMove(MouseEventArgs e)
{
//base.OnMouseMove(e);
debugPixel = Point.Empty;
PointF worldPosition = ScreenToWorld(PointToClient(Cursor.Position));
if (_mouseStart == Point.Empty) // Just moving mouse around, no buttons pressed
{
_objectUnderMouse = null;
// Hit test mouse position against each canvas object to see if we're overtop of anything
for (int index = 0; index < _canvasObjects.Count; index++) // Uses front to back order
{
NPCanvasObject canvasObject = _canvasObjects[index];
if (canvasObject is NPCanvasPart)
{
NPCanvasPart canvasPart = (canvasObject as NPCanvasPart);
NPPart part = canvasPart.Part;
GraphicsPath gp = canvasPart.GraphicsPath;
// Set the object under the mouse cursor, and move it to the "front" so it draws on top of everythign else
if (gp.IsVisible(worldPosition))
{
// DEBUG
debugPixel.X = e.X;
debugPixel.Y = e.Y;
_objectUnderMouse = canvasObject;
_canvasObjects.MoveItemAtIndexToFront(_canvasObjects.IndexOf(canvasObject));
break; // Since we're modifying the collection we're iterating through, we can't reliably continue past this point
}
}
}
}
else
{
...
}
}
Позже разрисованной коды я рисую пиксель, когда debugPixel = Point.Empty!. Я временно подавил очистку перед рисованием, чтобы я мог видеть их всех.
Некоторые другие данные, которые могут попросить, или может быть полезно для устранения неполадок:
- Я пробовал различные настройки Graphics.InterpolationMode, но это, кажется, не имеют никакого эффекта
- Я применял TranslateTransform и ScaleTransform к основному графическому изображению, но основная карта HitTest, похоже, масштабируется и преобразуется в значение GraphicsPath
- Для моего основного рисованного холста Graphics.PageUnit = GraphicsUnit.Inch, за исключением случаев, когда я делаю пиксельные оверлейные материалы