SmApiCurves.h#

Fully qualified name: SM_API/inc/SmApiCurves.h

File members: SM_API/inc/SmApiCurves.h

// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0

/**********************************************************************
FILE NAME: SmCurves.h

PURPOSE:
   Contains popular high level "C" type functions that create/modify curves.
    Additional functions exist in SMLib

GENERAL NOTES:
    High level functions may assume some input parameters
    for ease of use. For maximum flexibility, related functions
    can be found in SMLib
**********************************************************************/

#ifndef __SmApiCurves_H__
#define __SmApiCurves_H__

#ifndef __SmApiTypes_H__
#include <SmApiTypes.h>
#endif

#include <SmTArray.h>
#include <SmCurveTypes.h>

class SmContext;
class SmPoint3d;
class SmLine;
class SmCircle;
class SmCurve;

SMAPI_EXPORT SmApiStatus SmApiCreateLineSegment(
    const SmPoint3d& crStartPt,
    const SmPoint3d& crEndPt,
    SmLine*&  rpResult
);

SMAPI_EXPORT SmApiStatus SmApiCreateLine(
    const SmPoint3d& crStartPt,
    const SmVector3d& crDirection,
    SmLine*&  rpResult
);

SMAPI_EXPORT SmApiStatus SmApiCreateCircle(
    const SmPoint3d& crCenterPt,
    double dRadius,
    SmBSplineCurve*&  rpResult
);

SMAPI_EXPORT SmApiStatus SmApiCreateCircle(
    const SmPoint3d& crCenterPt,
    double dRadius,
    SmCircle*&  rpResult
);

SMAPI_EXPORT SmApiStatus SmApiCreateEllipse(
    const SmPoint3d& crOrigin,
    double dRadius1,
    double dRadius2,
    SmEllipse*&  rpResult
);

SMAPI_EXPORT SmApiStatus SmApiCreateArc(
    const SmPoint3d& crCenterPt,
    double dRadius,
    double dStartAngleDeg,
    double dEndAngleDeg,
    SmBSplineCurve*& rpResult
);

SMAPI_EXPORT SmApiStatus SmApiCreateHelix(
    const SmPoint3d& crOrigin,
    double dHeight,
    double dRadiusStart,
    double dRadiusEnd,
    double dNumTurns,
    SmBoolean bRightHanded,
    double dTolerance,
    SmBSplineCurve*& rpResult
);

SMAPI_EXPORT SmApiStatus SmApiCreateRectangle(
    const SmPoint3d& crCenterPt,
    double dLength,
    double dWidth,
    SmTArray<SmBSplineCurve*>& rpResult
);

SMAPI_EXPORT SmApiStatus SmApiCreateRegularPolygon(
    const SmPoint3d& crCenterPt,
    ULONG nSides,
    double dRadius,
    SmTArray<SmBSplineCurve*>& rpResult
);

SMAPI_EXPORT SmApiStatus SmApiCreateCurve(
    const SmTArray<SmPoint3d>& crPoints,
    SmBSplineCurve*&  rpResult
);

SMAPI_EXPORT SmApiStatus SmApiCreateCanonicalCurve(
    const SmTArray<SmPoint3d>& crPoints,
    const SmTArray<double>& crKnots,
    const SmTArray<ULONG>& crKnotMultiplicities,
    const SmTArray<double>* crWeights,
    ULONG lDegree,
    SmBSplineCurveForm eBSplineCurveForm,
    SmBSplineCurve*&  rpResult
);

SMAPI_EXPORT SmApiStatus SmApiCreateCurveApproxPoints(
    const SmTArray<SmPoint3d>& crPoints,
    SmCurve*&  rpResult
);

SMAPI_EXPORT SmApiStatus SmApiCreateCurveInterpPoints(
    const SmTArray<SmPoint3d>& crPoints,
    SmCurve*&  rpResult,
    SmCurveParameterizationType eParameterization = SM_CP_UNIFORM
);

SMAPI_EXPORT SmApiStatus SmApiOffsetCurve(
    SmBSplineCurve* pCurveToOffset,
    double dOffsetDistance,
    SmBSplineCurve*&  rpResult
);

SMAPI_EXPORT SmApiStatus SmApiEvaluateCurve(
    const SmCurve* pCurve,
    double dParameter,
    SmVector3d*& crPoint,
    SmVector3d*& crDeriv1,
    SmVector3d*& crDeriv2
);

SMAPI_EXPORT SmApiStatus SmApiEvaluateContinuity(
    const SmCurve* pCurve,
    double dParameter,
    SmContinuityType& crType
);

SMAPI_EXPORT SmApiStatus SmApiProjectCurve(
    const SmBSplineCurve* pCurve,
    const SmSurface* pSurface,
    SmTArray<SmBSplineCurve*>* pOptCurves2d,
    SmTArray<SmBSplineCurve*>* pOptCurves3d
);

SMAPI_EXPORT SmApiStatus SmApiDropCurveToSrf(
    SmBSplineCurve* pCurve,
    SmSurface* pSurface,
    SmTArray<SmBSplineCurve*>* pOptCurves2d,
    SmTArray<SmBSplineCurve*>* pOptCurves3d
);

SMAPI_EXPORT SmApiStatus SmApiLiftUVCurveFromSrf(
    const SmBSplineCurve* pUVCurve,
    const SmSurface* pSurface,
    SmTArray<SmBSplineCurve*>* pCurves3d
);

SMAPI_EXPORT SmApiStatus SmApiMakeCurvesCompatible(
    SmTArray<SmBSplineCurve*>& pCurves
);

SMAPI_EXPORT SmApiStatus SmApiOrderCurves(
    SmTArray<SmBSplineCurve*>& pCurves
);

SMAPI_EXPORT SmApiStatus SmApiRemoveCurveKnots(
    SmCurve* pCurve
);

SMAPI_EXPORT SmApiStatus SmApiConvertToLinesAndArcs(
    SmBSplineCurve* pCurve,
    SmTArray<SmBSplineCurve*>& pLinesAndArcs
);

#endif