Сообщество программистов Autodesk в СНГ
ADN Club => AutoCAD .NET API => Тема начата: Андрей Лаврентьев от 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/)
Какой метод выбрать? Может я что-то, упустил читая справку? Пожалуйста, подскажите.
-
Можно создать 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, по идее.
-
Идеальный способ для моей задачи - это построение дуги по двум точкам и внутреннему углу.
В Лиспе это раз плюнуть. Выбираем крайние точки отрезков, задаем фиксированный угол.
Имеешь в виду командными методами? Тоже самое можно проделать используя .NET (Editor.Command). Но это не интересно. Немного аналитической геометрии и ты можешь получить третью точку дуги, а потом построить по трём точкам дугу.
-
В справке, похоже, ошибка. Вот в этом:
Цитировать
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?
-
P.S.: Кстати, а почему CircularArc2d, когда можно и нужно использовать CircularArc3d?
В случае если точно будет 2D чертёж тоже? И по производительности?
-
Так ведь у CircularArc3d, вроде как, судя по справке, нет такого конструктора: начало, конец и центральный угол.
Хотя, если так стоит задача:
Расстояние между отрезками всегда разное и лежать они могут под разными углами относительно осей координат.
То, действительно, CircularArc2d - не вариант.
-
В случае если точно будет 2D чертёж тоже? И по производительности?
Это в терминах проектировщиков есть понятие 2D-чертеж. А с точки зрения программиста чертеж AutoCAD всегда 3D, даже если все примитивы лежат в плоскости X0Y.