Точка и аналитические кривые
Кривые строятся в локальной плоскости XY: vT — центр, vZ — нормаль (ось из плоскости), vX — ось X локальной системы, ось Y вычисляется как векторное произведение Z и X (поэтому её не нужно передавать). Построение кривой начинается от направления vX (это начальная точка её параметризации) и идёт против часовой стрелки вокруг vZ; в том же направлении откладываются и углы. Созданные объекты можно либо добавить в геометрическое дерево через AddEntity, либо использовать как строительные блоки для других объектов — например, в качестве кривых петли для обрезки поверхностей.
Примитивы точки и аналитических кривых:
- 3D-точка —
CreatePoint. - Система координат —
CreateCoordinateSystem. - Отрезок —
CreateLineSeg. - Окружность —
CreateCircle. - Дуга окружности —
CreateArc. - Эллипс —
CreateEllipse. - Дуга эллипса —
CreateEllipseArc. - Коническая спираль —
CreateConicalSpiral. - NURBS-кривая —
StartNurbsCurve…CloseNurbsCurve. - Составная кривая — плоская (2D) и пространственная (3D).
Пример сохранения аналитической кривой
SaveCurve — диспетчер: получает кривую CAD-системы и, в зависимости от её типа, вызывает соответствующий обработчик (SaveLine, SaveCircle, …). Каждый обработчик пишет геометрию в SGF подходящим вызовом из Кривые и точки и возвращает флаг успеха. Ниже показаны сам диспетчер и один из обработчиков (SaveLine); остальные устроены аналогично.
// Сохраняет кривую любого типа; возвращает признак успеха (Id уже задан в CADCurve)
bool SaveCurve(CADCurve curve)
{
switch (curve.Type)
{
case "Line": return SaveLine(curve.Id, curve.Param);
case "Circle": return SaveCircle(curve.Id, curve.Param); // обработчики остальных
case "Arc": return SaveArc(curve.Id, curve.Param); // типов устроены так же
case "Ellipse": return SaveEllipse(curve.Id, curve.Param);
case "Nurbs": return SaveNurbsCurve(curve.Id, curve.Param);
// … прочие типы кривых (см. «Кривые и точки»)
default: return false; // тип не поддерживается
}
}
// Один из обработчиков — сохранение отрезка
bool SaveLine(string id, CADLineParam param)
{
// координаты CAD-точек приводим к TST3DPoint
return sgr.CreateLineSeg(id, ToPoint(param.Start), ToPoint(param.End));
}