В качестве примера представьте, что у вас есть прямоугольные часы. Рука сделана из заполненного треугольника с рамкой. Граница рисуется ручкой gdi +, толщина может варьироваться от 1 и выше.
Проблема в том, что стрелка всегда должна находиться в пределах циферблата. Использование Alignment.Inset для пера решает эту проблему, но, поскольку он выглядит ужасно, это не вариант.
Чтобы убедиться, что стрелка находится в пределах часов, я нахожу точку пересечения на границе на основе угла. Затем я поворачиваю 2 точки у основания руки на тот же угол и соединяю точки, чтобы сформировать треугольник.
Теперь, это гарантирует, что точка находится на границе на основе линии в 1 пиксель, но при рендеринге с более толстой линией она кровоточит по краю. Чтобы учесть это, я сделал несколько основных триггеров, чтобы предсказать длину линии после рендеринга, основываясь на толщине пера, а затем уменьшил границы границ часов до нахождения точки пересечения.
Это помогло, но не было достаточно точным. Должно быть, я что-то упускаю из-за того, как точно рендерится границы в gdi + в зависимости от толщины пера. Если у кого-то есть знания, пожалуйста, дайте мне знать. Если кто-то считает, что тратить время, пытаясь объяснить это, является пустой тратой времени, то, опять же, дайте мне знать и сохраните мне день.
ETA: ниже приведен пример скриншота, который отображает руку с шириной пера, превышающей 1. Игнорируйте круг и представьте, что две линии расширяются, образуя треугольник в центре круга. Мне нужен способ предсказать длину части, которая выходит за границы, на основе размера пера, угла и размера часов, чтобы я мог сначала уменьшить размер руки.
альтернативный текст http://www.freeimagehosting.net/uploads/d3b5afb064.jpg