Кривая пересечения
Кривая пересечения — это пространственная кривая, лежащая одновременно на двух поверхностях, вдоль линии их пересечения. Обе поверхности должны быть созданы заранее и передаются по идентификаторам.
StartIntersectionCurve(ID: string; FirstSurfID, SecondSurfID: string; L1, L2: TSTLimitType; BaseParam, BaseScale: STFloat) — начать формирование кривой пересечения двух поверхностей.
ID— идентификатор создаваемой сущности;FirstSurfID— идентификатор первой поверхности;SecondSurfID— идентификатор второй поверхности;L1— тип начальной границы (см.TSTLimitType);L2— тип конечной границы (см.TSTLimitType);BaseParam— параметр первой точки, лежащей на кривой пересечения;BaseScale— масштаб параметризации.
AddIntersectionCurvePoint(Position: TST3DPoint) — добавить точку пересечения.
Position— координаты точки.
CloseIntersectionCurve() — завершить формирование кривой пересечения.
Перечисление TSTLimitType задаёт тип границы на концах кривой пересечения (L1 — начало, L2 — конец) — как именно кривая ограничивается с каждой стороны:
| Значение | Тип границы | Описание |
|---|---|---|
H |
вспомогательный вектор | Конец задаётся вспомогательным («help») вектором направления. |
T |
терминатор | Кривая обрывается в явно заданной точке-терминаторе; для такой границы в кривую добавляют граничную точку методом AddIntersectionCurvePoint. |
L |
произвольная граница | Произвольное ограничение конца кривой. |
B |
граница направляющей | Конец ограничен краем области направляющей (spine). |
U |
не задана | Граница не определена (ограничение отсутствует). |
Эти же типы границ используются и при создании поверхности скругления (CreateBlendedSurface, см. Поверхность скругления).
Пример импорта кривой пересечения. Предполагается, что обе поверхности уже сохранены, а точки кривой и параметры границ получены из CAD. Кривая пишется как последовательность точек; для границ типа T (терминаторов) дополнительно добавляются явные граничные точки.
// Кривая пересечения CAD-системы: две опорные поверхности + точки
class CADIntersectionCurve
{
public string Id; // идентификатор кривой в CAD
public string Surf1Id; // идентификатор первой поверхности (уже сохранена)
public string Surf2Id; // идентификатор второй поверхности (уже сохранена)
public TSTLimitType StartLim; // тип начальной границы
public TSTLimitType EndLim; // тип конечной границы
public double BaseParam; // параметр первой точки на кривой
public double BaseScale; // масштаб параметризации
public CADPoint[] Points; // точки кривой пересечения
public CADPoint StartPoint; // граничная точка (для границы типа T)
public CADPoint EndPoint; // граничная точка (для границы типа T)
}
bool SaveIntersectionCurve(CADIntersectionCurve curve)
{
sgr.StartIntersectionCurve(curve.Id, curve.Surf1Id, curve.Surf2Id,
curve.StartLim, curve.EndLim, curve.BaseParam, curve.BaseScale);
try
{
// координаты CAD-точек приводим к TST3DPoint
if (curve.StartLim == TSTLimitType.T)
sgr.AddIntersectionCurvePoint(ToPoint(curve.StartPoint));
foreach (CADPoint v in curve.Points)
sgr.AddIntersectionCurvePoint(ToPoint(v));
if (curve.EndLim == TSTLimitType.T)
sgr.AddIntersectionCurvePoint(ToPoint(curve.EndPoint));
}
finally
{
sgr.CloseIntersectionCurve();
}
return true;
}