SmApiBrep.h#
Fully qualified name: SM_API/inc/SmApiBrep.h
File members: SM_API/inc/SmApiBrep.h
// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
/**********************************************************************
FILE NAME: SmBrep.h
PURPOSE:
Contains high level "C" type functions that operate on SmBreps.
GENERAL NOTES:
High level functions may assume some input parameters
for ease of use. For maximum flexibility, related functions
can be found in SmMerge, etc
**********************************************************************/
#ifndef __SmApiBrep_H__
#define __SmApiBrep_H__
#ifndef __SmApiTypes_H__
#include <SmApiTypes.h>
#endif
#include <SmMerge.h>
#include <SmPrimitiveCreation.h>
#include <SmFilletSolver.h>
#include <SmTArray.h>
#include <SmApiTessellationParams.h>
class SmContext;
class SmBrep;
class SmPolyBrep;
class SmEdge;
class SmFace;
class SmVertex;
class SmSurface;
class SmBSplineCurve;
class SmSweepOptions;
SMAPI_EXPORT SmApiStatus SmApiBoolean(
SmBrep* pBrep1,
SmBrep* pBrep2,
SmBooleanOperationType lOperation,
SmBrep*& rpResult
);
SMAPI_EXPORT SmApiStatus SmApiBooleanUnion(
SmBrep* pBrep1,
SmBrep* pBrep2,
SmBrep*& rpResult
);
SMAPI_EXPORT SmApiStatus SmApiBooleanDifference(
SmBrep* pBrep1,
SmBrep* pBrep2,
SmBrep*& rpResult
);
SMAPI_EXPORT SmApiStatus SmApiBooleanIntersection(
SmBrep* pBrep1,
SmBrep* pBrep2,
SmBrep*& rpResult
);
SMAPI_EXPORT SmApiStatus SmApiBooleanMerge(
SmBrep* pBrep1,
SmBrep* pBrep2,
SmBrep*& rpResult
);
SMAPI_EXPORT SmApiStatus SmApiMergeBreps(
SmTArray<SmBrep*>& rBreps,
SmBooleanOperationType lOperation,
SmBrep*& rpResult
);
SMAPI_EXPORT SmApiStatus SmApiBooleanWithCurves(
SmBrep* pBrep1,
SmBrep* pBrep2,
SmBooleanOperationType lOperation,
SmBrep*& rpResult,
SmTArray<SmEdge*>& rIntersectionEdges
);
SMAPI_EXPORT SmApiStatus SmApiBoolean2d(
SmBrep* pBrep1,
SmBrep* pBrep2,
Sm2DBooleanOperationType eOpType,
SmBrep*& rpResult
);
SMAPI_EXPORT SmApiStatus SmApiTessellate(
SmBrep* pBrep,
SmPolyBrep*& rpResult,
const SmTessellationParams& rParams = SmTessellationParams(),
SmBoolean bAllowPartial = FALSE,
SmTArray<SmTessellationFailure>* pFailures = nullptr,
SmTessellationReport* pReport = nullptr
);
SMAPI_EXPORT SmApiStatus SmApiTessellateBoundaries(
SmBrep* pBrep,
double dAngleTolDeg,
SmTArray<SmPoint3d>& rPoints,
SmTArray<ULONG>& rVertexCounts,
SmTArray<SmEdge*>& rEdges
);
SMAPI_EXPORT SmApiStatus SmApiTurnToNurbs(
SmBrep* pBrep
);
SMAPI_EXPORT SmApiStatus SmApiProjectBrepOntoPlane(
SmBrep* pBrep,
const SmVector3d& rPlanePt,
const SmVector3d& rPlaneNormal,
SmTArray<SmCurve*>& rProjectionCurves
);
SMAPI_EXPORT SmApiStatus SmApiCut(
SmBrep* pBrep,
const SmVector3d& rPlanePt,
const SmVector3d& rPlaneNormal
);
SMAPI_EXPORT SmApiStatus SmApiProjectAndTrim(
SmBrep* pBrep,
SmBSplineCurve* rCurveToProject,
const SmVector3d& rProjectionDir,
const SmPoint3d& rRefPt
);
SMAPI_EXPORT SmApiStatus SmApiCreateSilhouetteCurves(
SmBrep* pBrep,
const SmVector3d& rPlanePt,
const SmVector3d& rPlaneNormal,
SmTArray<SmCurve*>& rProjectionCurves
);
SMAPI_EXPORT SmApiStatus SmApiProjectCurve(
SmBrep* pBrep,
SmBSplineCurve* pCurveToProject,
const SmVector3d& projectionVector,
SmTArray<SmCurve*> & r3DCurves
);
SMAPI_EXPORT SmApiStatus SmApiStitch(
SmBrep* pBrep
);
SMAPI_EXPORT SmApiStatus SmApiStitch(
SmBrep* pBrep,
SmFace* pFaceToStitch
);
// Family of Sweep Functions
// These all create SmBrep.
// For simple sweep functions that create a single surface, refer to SmSurfaces
SMAPI_EXPORT SmApiStatus SmApiCreateLinearSweep(
const SmTArray<SmCurve*>& rCurvesToSweep,
const SmVector3d& rSweepDir,
double dSweepDist,
SmBoolean bCapEnds,
SmBrep*& rpResult
) ;
SMAPI_EXPORT SmApiStatus SmApiCreateRotationalSweep(
const SmTArray<SmCurve*>& rCurvesToSweep,
const SmPoint3d& rBasePt,
const SmVector3d& rAxis,
double dAngleDeg,
SmBoolean bCapEnds,
SmBrep*& rpResult
);
SMAPI_EXPORT SmApiStatus SmApiCreateDraftSweep(
const SmTArray<SmCurve*>& rCurvesToSweep,
double dHeight,
double dAngleDeg,
SmBoolean bCornerType,
int iCapEnds,
SmBrep*& rpResult
);
SMAPI_EXPORT SmApiStatus SmApiCreatePipeSweep(
double dPipeRadius,
SmBSplineCurve * pPathCurve,
SmBoolean bCapEnds,
SmBrep*& rpResult
);
SMAPI_EXPORT SmApiStatus SmApiCreateSweepAlongPlanarPath(
SmTArray<SmCurve*>& rProfileCurves,
SmTArray<SmCurve*>& rPathCurves,
SmBoolean bMoveProfile,
int iCapEnds,
SmBrep*& rpResult
);
// Advanced Sweep Functions
SMAPI_EXPORT SmApiStatus SmApiCreateCurveSweep(
SmTArray<SmCurve*>& rProfileCurves,
SmBSplineCurve* pPathCurve,
SmBSplineCurve* pScaleReference,
SmBSplineCurve* pScaleCurve,
SmSweepOptions* pOptions,
SmBrep*& rpResult,
SmTArray<SmFace*>* pOptStartFaces,
SmTArray<SmFace*>* pOptSideFaces,
SmTArray<SmFace*>* pOptEndFaces
);
SMAPI_EXPORT SmApiStatus SmApiCreateCurveSweepFromFaces(
SmTArray<SmFace*>& rFaces,
SmBSplineCurve* pPathCurve,
SmBSplineCurve* pScaleReference,
SmBSplineCurve* pScaleCurve,
SmSweepOptions* pOptions,
SmBrep*& rpResult,
SmTArray<SmFace*>* pOptStartFaces,
SmTArray<SmFace*>* pOptSideFaces,
SmTArray<SmFace*>* pOptEndFaces
);
SMAPI_EXPORT SmApiStatus SmApiCreateCurveSweepFromEdges(
SmTArray<SmEdge*>& rEdges,
SmBSplineCurve* pPathCurve,
SmBSplineCurve* pScaleReference,
SmBSplineCurve* pScaleCurve,
SmSweepOptions* pOptions,
SmBrep*& rpResult,
SmTArray<SmFace*>* pOptStartFaces,
SmTArray<SmFace*>* pOptSideFaces,
SmTArray<SmFace*>* pOptEndFaces
);
SMAPI_EXPORT SmApiStatus SmApiCreateTaperExtrude(
const SmTArray<SmCurve*>& rCurves,
double dHeight,
double dDraftAngleDeg,
int iEndCaps,
SmBoolean bFilletCorner,
SmBrep*& rpResult
);
SMAPI_EXPORT SmApiStatus SmApiCreateLinearSweepWithRepetitions(
const SmTArray<SmCurve*>& rCurvesToSweep,
const SmVector3d& rSweepDir,
double dSweepDist,
ULONG nRepetitions,
SmBoolean bCapEnds,
SmBrep*& rpResult
);
SMAPI_EXPORT SmApiStatus SmApiCreateRotationalSweepWithRepetitions(
const SmTArray<SmCurve*>& rCurvesToSweep,
const SmPoint3d& rBasePt,
const SmVector3d& rAxis,
double dAngleDeg,
ULONG nRepetitions,
SmBoolean bCapEnds,
SmBrep*& rpResult
);
SMAPI_EXPORT SmApiStatus SmApiNonManifoldSweep(
SmBrep* pBrepToSweep,
SmBrep* pRegionBrep,
const SmVector3d& rSweepDir,
double dSweepDist,
SmBoolean bDoStitching,
SmBoolean bDoMerge,
SmTArray<SmFace*>* pOptFaces,
SmTArray<SmEdge*>* pOptEdges,
SmTArray<SmVertex*>* pOptVertices
);
SMAPI_EXPORT SmApiStatus SmApiNonManifoldRotationalSweep(
SmBrep* pBrepToSweep,
SmBrep* pRegionBrep,
const SmPoint3d& rBasePt,
const SmVector3d& rAxis,
double dAngleDeg,
SmBoolean bDoStitching,
SmBoolean bDoMerge,
SmTArray<SmFace*>* pOptFaces,
SmTArray<SmEdge*>* pOptEdges,
SmTArray<SmVertex*>* pOptVertices
);
// Advanced Boolean Functions
SMAPI_EXPORT SmApiStatus SmApiBooleanWithOptions(
SmBrep* pBrep1,
SmBrep* pBrep2,
SmBooleanOperationType eOperation,
SmBoolean bCookieCutter,
SmBoolean bImprinting,
SmBoolean bBooleanPostProcess,
SmBoolean bImprintAndClassifyFaces,
SmBoolean bKeepOtherBrep,
SmBrep*& rpResult
);
SMAPI_EXPORT SmApiStatus SmApiNonManifoldBoolean(
SmBrep* pBrep1,
SmBrep* pBrep2,
SmBooleanOperationType eOperation,
SmBrep*& rpResult
);
SMAPI_EXPORT SmApiStatus SmApiPiecewiseMerge(
SmBrep* pBrep1,
SmBrep* pBrep2,
SmBoolean bCreateNewBrepsForFaces,
SmBrep*& rpResult
);
SMAPI_EXPORT SmApiStatus SmApiBooleanLists(
const SmTArray<SmBrep*>& rBreps1,
const SmTArray<SmSurface*>& rSurfaces1,
const SmTArray<SmBrep*>& rBreps2,
const SmTArray<SmSurface*>& rSurfaces2,
int operation,
SmTArray<SmBrep*>& rResultBreps,
SmTArray<SmSurface*>& rResultSurfaces
);
SMAPI_EXPORT SmApiStatus SmApiBooleanTrees(
SmTArray<SmBrep*>& rBreps,
SmTArray<long>& rPostFixTrees
);
// Advanced Fillet Functions
SMAPI_EXPORT SmApiStatus SmApiFilletEdges(
SmBrep* pBrep,
SmTArray<SmEdge*>& rEdges,
double dRadius,
ULONG lXSectType,
ULONG lContinuity,
double dThumbweight
);
SMAPI_EXPORT SmApiStatus SmApiFilletEdgesPerEdge(
SmBrep* pBrep,
SmTArray<SmEdge*>& rEdges,
SmTArray<double>& rRadii,
SmTArray<SmFilletSurfaceGeneratorType>& rXSectTypes,
ULONG lContinuity,
double dThumbweight
);
SMAPI_EXPORT SmApiStatus SmApiVariableRadiusFillet(
SmBrep* pBrep,
SmTArray<SmEdge*>& rEdges,
double dStartRadius,
double dEndRadius,
ULONG lXSectType,
ULONG lContinuity
);
SMAPI_EXPORT SmApiStatus SmApiSurfaceSurfaceFillet(
SmSurface* pSurface1,
SmSurface* pSurface2,
double dRadius1,
double dRadius2,
double dTolerance,
SmBrep*& rpResult,
ULONG lXSectType,
SmBoolean bMirror,
SmBoolean bComplement
);
SMAPI_EXPORT SmApiStatus SmApiFilletPreview(
SmBrep* pBrep,
SmTArray<SmEdge*>& rEdges,
double dRadius,
SmTArray<SmSurface*>& rPreviewSurfaces
);
SMAPI_EXPORT SmApiStatus SmApiSetBevelCorners(
SmBrep* pBrep,
SmTArray<SmEdge*>& rEdges,
double dRadius,
SmTArray<SmVertex*>& rBevelVertices
);
// Advanced Offset / Shell Functions
SMAPI_EXPORT SmApiStatus SmApiShellBrepFull(
const SmBrep* pBrep,
double dOffsetDistance,
SmBoolean bDoExtendedOffset,
SmBoolean bDoSelfInt,
SmBoolean bCreateOffsetSolid,
const SmTArray<const SmFace*>& rFacesToShell,
SmBrep*& rpResult
);
SMAPI_EXPORT SmApiStatus SmApiOffsetBrepFull(
SmBrep* pBrep,
double dOffsetDistance,
SmBoolean bDoExtendedOffset,
SmBoolean bDoSelfInt,
SmBrep*& rpResult
);
// Advanced Stitching Functions
SMAPI_EXPORT SmApiStatus SmApiStitchIntoSolid(
SmBrep* pBrep,
SmBoolean& rbProducesASolid,
ULONG& rlStitchedEdges,
double& rdMaxVertexGap,
double& rdMaxEdgeGap
);
SMAPI_EXPORT SmApiStatus SmApiStitchIntoShell(
SmBrep* pBrep,
SmBoolean& rbShellIsWellFormed,
double dMaxStitchingRatio,
ULONG& rlStitchedEdges,
double& rdMaxVertexGap,
double& rdMaxEdgeGap
);
SMAPI_EXPORT SmApiStatus SmApiUnifyNormals(
SmBrep* pBrep,
SmFace* pStartFace,
ULONG lNumSamples,
SmTArray<SmFace*>& rFlippedFaces
);
SMAPI_EXPORT SmApiStatus SmApiSimpleFaceStitch(
SmBrep* pBrep,
const SmTArray<SmFace*>& rFacesToKeep,
const SmTArray<SmFace*>& rFacesToDelete,
ULONG& rlStitchedEdges,
double& rdMaxVertexGap,
double& rdMaxEdgeGap
);
SMAPI_EXPORT SmApiStatus SmApiStitchAdvanced(
SmBrep* pBrep,
double dStitchTol3d,
SmBoolean bSqueezeSmallEdges,
SmBoolean bSplitEdgesWithVertices,
SmBoolean bMakingManifoldSolid,
SmBoolean bRemoveLaminarSlivers,
ULONG& rlStitchedEdges,
ULONG& rlLaminaEdges,
double& rdMaxVertexGap,
double& rdMaxEdgeGap
);
#endif