SmApiUsd.h#

Fully qualified name: SM_API_USD/inc/SmApiUsd.h

File members: SM_API_USD/inc/SmApiUsd.h

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

/******************************************************************/
#ifndef _SM_API_USD_H_
#define _SM_API_USD_H_

#include "SmApiUsdConfig.h"
#include <SmApiTessellationParams.h>
#include <SmMessages.h>
#include <SmTypes.h>
#include <SmTArray.h>
#include <cstdint>
#include <string>
#include <vector>

class SmBrep;
class SmPolyBrep;
class SmContext;

struct SmApiUsdBrepImportResult
{
    std::string     m_sPrimPath;
    std::int64_t    m_iPackedBrepIndex = -1;
    SmBrep        * m_pBrep = nullptr;
    SmStatus        m_sStatus = SM_ERR;
    std::string     m_sMessage;
};

struct SmApiUsdMeshTessellationResult
{
    std::string     m_sPrimPath;
    std::int64_t    m_iPackedBrepIndex = -1;
    std::string     m_sMeshPath;
    SmStatus        m_sStatus = SM_ERR;
    std::size_t     m_lFailedFaceCount = 0;
    std::size_t     m_lPointCount = 0;
    std::string     m_sMessage;
};

struct SmApiUsdBrepArrayHealResult
{
    std::string     m_sPrimPath;
    std::string     m_sLayer;
    SmStatus        m_sStatus = SM_ERR;
    std::size_t     m_lBrepCount = 0;
    std::string     m_sMessage;
};

// ---------------------------------------------------------------------------
//  Plugin management
// ---------------------------------------------------------------------------

SM_API_USD_EXPORT SmStatus SmApiUsdEnsurePluginRegistered();

// ---------------------------------------------------------------------------
//  USD -> SMLib
// ---------------------------------------------------------------------------

SM_API_USD_EXPORT SmStatus SmApiUsdImportBreps
(
    const char               * pFileName,
    std::vector<SmBrep*>     & rSmBreps,
    SmBoolean                  bHealerIsEnabled = TRUE
);

SM_API_USD_EXPORT SmStatus SmApiUsdImportBreps
(
    const char                                  * pFileName,
    std::vector<SmBrep*>                        & rSmBreps,
    SmBoolean                                     bHealerIsEnabled,
    SmBoolean                                     bAllowPartial,
    std::vector<SmApiUsdBrepImportResult>       * pImportResults
);

SM_API_USD_EXPORT SmStatus SmApiUsdImportBrep
(
    const char               * pFileName,
    const char               * pPrimPath,
    SmBrep                  *& rpSmBrep,
    SmBoolean                  bHealerIsEnabled = TRUE
);

// ---------------------------------------------------------------------------
//  UsdGeomMesh <-> SmPolyBrep
// ---------------------------------------------------------------------------

SM_API_USD_EXPORT SmStatus SmApiUsdImportMeshes
(
    const char                 * pFileName,
    std::vector<SmPolyBrep*>   & rSmPolyBreps
);

SM_API_USD_EXPORT SmStatus SmApiUsdImportMesh
(
    const char                 * pFileName,
    const char                 * pPrimPath,
    SmPolyBrep                *& rpSmPolyBrep
);

// ---------------------------------------------------------------------------
//  SMLib -> USD
// ---------------------------------------------------------------------------

SM_API_USD_EXPORT SmStatus SmApiUsdExportBreps
(
    const char               * pFileName,
    std::vector<SmBrep*>     & rSmBreps,
    SmBoolean                  bExportUVCurves = TRUE,
    SmBoolean                  bBoundUnboundedFaceRanges = FALSE
);

SM_API_USD_EXPORT SmStatus SmApiUsdExportBrep
(
    const char               * pFileName,
    SmBrep                   * pSmBrep,
    SmBoolean                  bExportUVCurves = TRUE,
    SmBoolean                  bBoundUnboundedFaceRanges = FALSE
);

SM_API_USD_EXPORT SmStatus SmApiUsdExportMeshes
(
    const char                 * pFileName,
    std::vector<SmPolyBrep*>   & rSmPolyBreps
);

SM_API_USD_EXPORT SmStatus SmApiUsdExportMesh
(
    const char                 * pFileName,
    SmPolyBrep                 * pSmPolyBrep
);

// ---------------------------------------------------------------------------
//  USD <-> SMLib  (append to existing stage)
// ---------------------------------------------------------------------------

SM_API_USD_EXPORT SmStatus SmApiUsdAppendBreps
(
    const char               * pFileName,
    std::vector<SmBrep*>     & rSmBreps,
    SmBoolean                  bExportUVCurves = TRUE,
    SmBoolean                  bBoundUnboundedFaceRanges = FALSE
);

SM_API_USD_EXPORT SmStatus SmApiUsdAppendMeshes
(
    const char                 * pFileName,
    std::vector<SmPolyBrep*>   & rSmPolyBreps
);

// ---------------------------------------------------------------------------
//  Scene tessellation
// ---------------------------------------------------------------------------

SM_API_USD_EXPORT SmStatus SmApiUsdTessellateFile
(
    const char                                      * pInputFile,
    const char                                      * pOutputFile,
    const SmTessellationParams                      & crParams,
    SmBoolean                                         bHealerIsEnabled,
    int                                               iThreadCount,
    std::vector<SmApiUsdMeshTessellationResult>     & rResults
);

SM_API_USD_EXPORT SmStatus SmApiUsdHealFile
(
    const char                                      * pInputFile,
    const char                                      * pOutputFile,
    int                                               iThreadCount,
    std::vector<SmApiUsdBrepArrayHealResult>        & rResults
);

#endif // _SM_API_USD_H_