Построение дуги

Автор Тема: Построение дуги  (Прочитано 6931 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Андрей ЛаврентьевАвтор темы

  • ADN OPEN
  • Сообщений: 9
  • Карма: 0
Построение дуги
« : 07-09-2017, 15:26:40 »
Добрый день! Так хочется освоить C#, в частности, писать под AutoCAD, но увы дается это очень тяжело.
Ставлю себе простые задачи и пытаюсь их реализовать.
В AutoCAD имеется стандартная команда - построение дуги. Можно выбрать несколько способов.
Моя задача - построить дугу между двумя отрезками. Идеальный способ для моей задачи - это построение дуги по двум точкам и внутреннему углу.

В Лиспе это раз плюнуть. Выбираем крайние точки отрезков, задаем фиксированный угол.

А вот судя по Net API можно построить дугу, лишь немногими способами. Зная точку центра, радиус, начальный и конечный угол, в другом случае еще и вектор направления.
Либо есть метод по 3м точкам, используя CircularArc3d.
Все эти методы не годятся, так как появляются неизвестные. Расстояние между отрезками всегда разное и лежать они могут под разными углами относительно осей координат.


Какой метод выбрать? Может я что-то, упустил читая справку? Пожалуйста, подскажите.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Построение дуги
« Ответ #1 : 07-09-2017, 20:11:26 »
Можно создать CircularArc2d конструктором: http://help.autodesk.com/view/OARX/2018/ENU/?guid=OREFNET-Autodesk_AutoCAD_Geometry_CircularArc2d_CircularArc2d_Point2d_Point2d_double__MarshalAsUnmanagedType_U1__bool. Как раз требуются: начальная точка, конечная точка и кривизна (вычисляется из угла).
А потом из этой геометрии получить все нужные данные: точки, радиусы и пр, по которым уже построить объект дуги типа Arc.
В справке, похоже, ошибка. Вот в этом:
Цитировать
If bulgeFlag is false, then bulge is interpreted to be the maximum distance between the arc and the chord between the two input points. If bulgeFlag is false, then bulge is interpreted to be the tangent of 1/4 the included angle (tan(ang/4)), where ang is the angle of the arc segment between the two input points.
Вместо false должно быть где-то true, по идее.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Построение дуги
« Ответ #2 : 08-09-2017, 00:20:26 »
Идеальный способ для моей задачи - это построение дуги по двум точкам и внутреннему углу.
В Лиспе это раз плюнуть. Выбираем крайние точки отрезков, задаем фиксированный угол.
Имеешь в виду командными методами? Тоже самое можно проделать используя .NET (Editor.Command). Но это не интересно. Немного аналитической геометрии и ты можешь получить третью точку дуги, а потом построить по трём точкам дугу.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Построение дуги
« Ответ #3 : 08-09-2017, 00:29:38 »
В справке, похоже, ошибка. Вот в этом:
Цитировать

    If bulgeFlag is false, then bulge is interpreted to be the maximum distance between the arc and the chord between the two input points. If bulgeFlag is false, then bulge is interpreted to be the tangent of 1/4 the included angle (tan(ang/4)), where ang is the angle of the arc segment between the two input points.

Вместо false должно быть где-то true, по идее.
Поэтому смотрим первоисточник (т.е. чистый ObjectARX): http://help.autodesk.com/view/OARX/2018/ENU/?guid=OREF-AcGeCircArc2d__AcGeCircArc2d_AcGePoint2d__AcGePoint2d__double_Adesk__Boolean
Цитировать
If bulgeFlag is Adesk::kTrue, then bulge is interpreted to be the maximum distance between the arc and the chord between the two input points. If bulgeFlag is Adesk::kFalse, then bulge is interpreted to be the tangent of 1/4 the included angle (tan(ang/4)), where ang is the angle of the arc segment between the two input points.
P.S.: Кстати, а почему CircularArc2d, когда можно и нужно использовать CircularArc3d?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн RevitTormentor

  • ADN OPEN
  • ***
  • Сообщений: 162
  • Карма: 6
Re: Построение дуги
« Ответ #4 : 08-09-2017, 04:32:11 »
P.S.: Кстати, а почему CircularArc2d, когда можно и нужно использовать CircularArc3d?
В случае если точно будет 2D чертёж тоже? И по производительности?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Построение дуги
« Ответ #5 : 08-09-2017, 08:08:27 »
Так ведь у CircularArc3d, вроде как, судя по справке, нет такого конструктора: начало, конец и центральный угол.
Хотя, если так стоит задача:
Расстояние между отрезками всегда разное и лежать они могут под разными углами относительно осей координат.
То, действительно, CircularArc2d - не вариант.
« Последнее редактирование: 08-09-2017, 10:25:16 от Дмитрий Загорулькин »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Построение дуги
« Ответ #6 : 08-09-2017, 15:22:01 »
В случае если точно будет 2D чертёж тоже? И по производительности?
Это в терминах проектировщиков есть понятие 2D-чертеж. А с точки зрения программиста чертеж AutoCAD всегда 3D, даже если все примитивы лежат в плоскости X0Y.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение