![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
CyraxZ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 10.12.2006 Репутация: нет Всего: нет |
Методу graph.DrawArc(...) нужно передать прямоугольник, начальный угол и изменение угла.
В формате Visio 2003 vdx параметры эллиптической дуги совсем другие: 1. Начальная и конечная точки дуги 2. A - The distance from the arc's midpoint to the midpoint of its chord 3. B - The y-coordinate of an arc's control point 4. C - The angle of an arc's major axis relative to the x-axis of its parent 5. D - The ratio of an arc's major axis to its minor axis. Despite the usual meaning of these words, the major axis does not have to be greater than the minor axis, so this ratio does not have to be greater than 1. Setting this element to a value less than or equal to 0 or greater than 1000 can lead to unpredictable results Как из этих параметров получить обычные параметры, необходимые методу graph.DrawArc(...) ? |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
CyraxZ, а вопрос вообще о чём ? О рисовании в Visio средствами C# ? И что такое graph ?
![]() -------------------- ![]() |
|||
|
||||
CyraxZ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 10.12.2006 Репутация: нет Всего: нет |
Тьфу, не graph, а Graphics...
Скажем, читаю vdx-файл и рисую схему на форме. Для рисования дуг методом Graphics.DrawArc(...) нужно знать координаты прямоугольника, в который вписана дуга, начальный угол (startAngle) и изменение угла (sweepAngle). Но в vdx-файле сохраняются другие параметры дуги - 1-5 (указаны в 1-м посте). Как с помощью этих параметров нарисовать на форме дугу методом Graphics.DrawArc(...) ? Т.е. фактически из этих параметров нужно получить обычные параметры (прямоугольник, углы)... |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Лучше кривые Безье использовать, там даются опорные точки через которые проводится кривая - всё намного проще и удобнее.
-------------------- ![]() |
|||
|
||||
CyraxZ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 10.12.2006 Репутация: нет Всего: нет |
Сформулирую вопрос следующим образом:
Как построить дугу с помощью методов объекта Graphics, зная параметры 1-5 (1-й пост). Значение A - понятно. В - тоже понятно. С, D - нет... |
|||
|
||||
CyraxZ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 10.12.2006 Репутация: нет Всего: нет |
Ситуация следующая.
Дуга в Visio - это кривая Безье 2-го порядка. Т.е. такую дугу нужно рисовать в C# методом DrawBezier(4 точки). Смысл параметров дуги в Visio следующий: 1. Начальная и конечная точки дуги 2. A - The x-coordinate of the arc's control point— a point on the arc. The control point is best located about halfway between the beginning and ending vertices of the arc. 3. B - The y-coordinate of an arc's control point (A;B) - точка на дуге, которую можно перемещать вдоль этой дуги. Через эту точку проходит прямая, соединяющая две контрольные точки (в терминах кривых Безье control_1 - control_2) дуги/кривой. 4. C - The angle of an arc's major axis relative to the x-axis of its parent Поскольку термины major axis и minor axis применяются по отношению к эллипсу, то судя по всему, имеется ввиду угол между большой осью эллипса, частью которого является дуга, и горизонталью (если нет parent'а). Бльшая ось этого эллипса параллельна прямой (control_1, control_2), т.е. параметр C - это угол C на рис. 5. D - The ratio of an arc's major axis to its minor axis. Despite the usual meaning of these words, the major axis does not have to be greater than the minor axis, so this ratio does not have to be greater than 1. Setting this element to a value less than or equal to 0 or greater than 1000 can lead to unpredictable results Отношение большого диаметра эллипса к малому. Т.е. у нас имеются: 1) 3 точки дуги (начальная P1, конечная P2 и точка (A;B) на дуге). 2) Угол наклона большого диаметра/полуоси эллипса, частью которого является дуга. 3) Отношение большого диаметра/полуоси эллипса к малому Для рисования такой дуги средствами C# есть 2 способа: 1) Метод DrawArc() - здесь нужно получить прямоугольник и 2 угла. Слишком сложные ручные вычисления... 2) Метод DrawBezier() - лучший вариант. Начальная и конечная точки уже известны. Осталось вычислить контрольные точки control_1 и control_2. У нас известна точка (A;B), через которую проходит прямая (control_1, control_2) и угол наклона этой прямой. Поскольку обе точки control_1 и control_2 равноудалены от точки (A;B), то достаточно найти это расстояние... Т.е. задача формулируется следующим образом: Найти это расстояние, зная отношение большого диаметра эллипса (частью которого является дуга) к малому... Известно также, что при приближении этого расстояния к 0 (точки control_1 и control_2 совмещаем с точкой (A;B)) отношение диаметров эллипса приближается к 1, т.е. получаем окружность... Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
CyraxZ, попробуй сформулировать задачу с кривыми Безье как геометрическую и кинуть этот вопрос в раздел "Алгоритмы". Там знающие люди, по геометрии помогут.
-------------------- ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [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. |