Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Андрей Лаврентьев от 07-09-2017, 15:26:40

Название: Построение дуги
Отправлено: Андрей Лаврентьев от 07-09-2017, 15:26:40
Добрый день! Так хочется освоить C#, в частности, писать под AutoCAD, но увы дается это очень тяжело.
Ставлю себе простые задачи и пытаюсь их реализовать.
В AutoCAD имеется стандартная команда - построение дуги. Можно выбрать несколько способов.
Моя задача - построить дугу между двумя отрезками. Идеальный способ для моей задачи - это построение дуги по двум точкам и внутреннему углу.
(https://s26.postimg.org/qxb0d8srp/image.jpg) (https://postimg.org/image/qxb0d8srp/)
В Лиспе это раз плюнуть. Выбираем крайние точки отрезков, задаем фиксированный угол.

А вот судя по Net API можно построить дугу, лишь немногими способами. Зная точку центра, радиус, начальный и конечный угол, в другом случае еще и вектор направления.
Либо есть метод по 3м точкам, используя CircularArc3d.
Все эти методы не годятся, так как появляются неизвестные. Расстояние между отрезками всегда разное и лежать они могут под разными углами относительно осей координат.
(https://s26.postimg.org/6aqw5nyqt/image.jpg) (https://postimg.org/image/6aqw5nyqt/)

Какой метод выбрать? Может я что-то, упустил читая справку? Пожалуйста, подскажите.
Название: Re: Построение дуги
Отправлено: Дмитрий Загорулькин от 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, по идее.
Название: Re: Построение дуги
Отправлено: Александр Ривилис от 08-09-2017, 00:20:26
Идеальный способ для моей задачи - это построение дуги по двум точкам и внутреннему углу.
В Лиспе это раз плюнуть. Выбираем крайние точки отрезков, задаем фиксированный угол.
Имеешь в виду командными методами? Тоже самое можно проделать используя .NET (Editor.Command). Но это не интересно. Немного аналитической геометрии и ты можешь получить третью точку дуги, а потом построить по трём точкам дугу.
Название: Re: Построение дуги
Отправлено: Александр Ривилис от 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?
Название: Re: Построение дуги
Отправлено: RevitTormentor от 08-09-2017, 04:32:11
P.S.: Кстати, а почему CircularArc2d, когда можно и нужно использовать CircularArc3d?
В случае если точно будет 2D чертёж тоже? И по производительности?
Название: Re: Построение дуги
Отправлено: Дмитрий Загорулькин от 08-09-2017, 08:08:27
Так ведь у CircularArc3d, вроде как, судя по справке, нет такого конструктора: начало, конец и центральный угол.
Хотя, если так стоит задача:
Расстояние между отрезками всегда разное и лежать они могут под разными углами относительно осей координат.
То, действительно, CircularArc2d - не вариант.
Название: Re: Построение дуги
Отправлено: Александр Ривилис от 08-09-2017, 15:22:01
В случае если точно будет 2D чертёж тоже? И по производительности?
Это в терминах проектировщиков есть понятие 2D-чертеж. А с точки зрения программиста чертеж AutoCAD всегда 3D, даже если все примитивы лежат в плоскости X0Y.