#c# #.net #pdfsharp
#c# #.net #pdfsharp
Вопрос:
Итак, я не очень хорошо разбираюсь в функциях C # / .Net / PDFsharp, и, похоже, я не могу найти подходящего ответа для решения моей проблемы.
По сути, у меня есть простая программа, которая должна рисовать контур объекта (он может быть изогнутым и т. Д.) Из пользовательского ввода.
У меня есть радиус и градусы угла, чтобы нарисовать 2 дуговые линии.
При 360 градусах радиус одного круга меньше на X толщины, которую вводит пользователь, поэтому «внутренняя часть» двух кругов имеет ту же толщину, что и весь черновик.
Наконец, то, что мне нужно, чтобы программа сделала, — это нарисовать две линии на 2 сторонах дуговых линий, чтобы «соединить их», чтобы создать правильный контур, я могу достаточно легко управлять начальной линией, поскольку она не является динамической, однако конечная линия зависит от радиуса и степенейугол.
Как мне правильно найти конечные координаты, я полагаю, дуг, чтобы он успешно рисовал конечную линию в конце независимо от введенного пользователем радиуса / толщины / угла.
Вот некоторый код для того, как я нарисовал дуги, начальную строку и мою неудачную попытку найти конечную строку (которая просто рисует линию слишком далеко от всего черновика).
Ввод — это пользовательский элемент управления, в котором пользователь может вводить переменные (требуется несколько, но в итоге получается один, поэтому использование пользовательского элемента управления окна формы звучит бесполезно).
mmradius, толщина, mmangle — это все пользовательские входные данные, Innerradius — радиус внутренней окружности.
var innerradius = Input.mmradius- Input.thickness;
gfx.DrawArc(pen, start_x, start_y, mmradius*2, mmradius*2, 0, mmangle);
gfx.DrawLine(pen, start_x mmradius innerradius, start_y mmradius,
(start_x mmradius) mmradius, start_y mmradius);
gfx.DrawArc(pen, (start_x mmradius) - innerradius,
(start_y mmradius) - innerradius, innerradius*2, innerradius*2, 0, mmangle);
var CenterX = start_x mmradius;
var CenterY = start_y mmradius;
double degrees = mmangle * (Math.PI / 180);
var end_x = mmradius CenterX * Math.Cos(degrees);
var end_y = mmradius CenterY * Math.Sin(degrees);
gfx.DrawLine(pen, end_x, end_y, end_x - innerradius, end_y - 2);
Надеюсь, это понятно, чего я хочу, если нет, я постараюсь сделать все возможное, чтобы прояснить!
Ответ №1:
Может быть, это работает лучше так:
var end_x = CenterX mmradius * Math.Cos(degrees);
var end_y = CenterY mmradius * Math.Sin(degrees);
Не удается запустить его, поэтому, возможно, необходимы еще некоторые изменения.
Комментарии:
1. … Я не могу поверить, что такое смешение переменных, которое я не замечал в течение нескольких дней, устранило проблему… Да, кажется, что он идеально фиксирует один конец DrawLine в правильном месте, если это так, я уверен, что смогу исправить другой, теперь, когда я знаю, что это была просто плохая формула для поиска конечных координат. Большое вам спасибо, хотя это была такая глупая моя ошибка!