1809 lines
60 KiB
C
1809 lines
60 KiB
C
/*
|
|
* PROPRIETARY INFORMATION. This software is proprietary to
|
|
* Side Effects Software Inc., and is not to be reproduced,
|
|
* transmitted, or disclosed in any way without written permission.
|
|
*
|
|
*/
|
|
|
|
#ifndef __HAPI_COMMON_h__
|
|
#define __HAPI_COMMON_h__
|
|
|
|
#include "HAPI_API.h"
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Defines
|
|
|
|
#define HAPI_POSITION_VECTOR_SIZE 3
|
|
#define HAPI_SCALE_VECTOR_SIZE 3
|
|
#define HAPI_SHEAR_VECTOR_SIZE 3
|
|
#define HAPI_NORMAL_VECTOR_SIZE 3
|
|
#define HAPI_QUATERNION_VECTOR_SIZE 4
|
|
#define HAPI_EULER_VECTOR_SIZE 3
|
|
#define HAPI_UV_VECTOR_SIZE 2
|
|
#define HAPI_COLOR_VECTOR_SIZE 4
|
|
#define HAPI_CV_VECTOR_SIZE 4
|
|
|
|
#define HAPI_PRIM_MIN_VERTEX_COUNT 1
|
|
#define HAPI_PRIM_MAX_VERTEX_COUNT 16
|
|
|
|
#define HAPI_INVALID_PARM_ID -1
|
|
|
|
/// Common Default Attributes' Names
|
|
/// @{
|
|
#define HAPI_ATTRIB_POSITION "P"
|
|
#define HAPI_ATTRIB_UV "uv"
|
|
#define HAPI_ATTRIB_UV2 "uv2"
|
|
#define HAPI_ATTRIB_NORMAL "N"
|
|
#define HAPI_ATTRIB_TANGENT "tangentu"
|
|
#define HAPI_ATTRIB_TANGENT2 "tangentv"
|
|
#define HAPI_ATTRIB_COLOR "Cd"
|
|
#define HAPI_ATTRIB_NAME "name"
|
|
#define HAPI_ATTRIB_INSTANCE "instance"
|
|
/// @}
|
|
|
|
/// This is the name of the primitive group created from all the primitives
|
|
/// that are not in any user-defined group. This way, when you put all the
|
|
/// groups together you cover the entire mesh. This is important for some
|
|
/// clients where the mesh has to be defined in terms of submeshes that cover
|
|
/// the entire original mesh.
|
|
#define HAPI_UNGROUPED_GROUP_NAME "__ungrouped_group"
|
|
|
|
/// Common image file format names (to use with the material extract APIs).
|
|
/// Note that you may still want to check if they are supported via
|
|
/// HAPI_GetSupportedImageFileFormats() since all formats are loaded
|
|
/// dynamically by Houdini on-demand so just because these formats are defined
|
|
/// here doesn't mean they are supported in your instance.
|
|
/// @{
|
|
#define HAPI_RAW_FORMAT_NAME "HAPI_RAW" // HAPI-only Raw Format
|
|
#define HAPI_PNG_FORMAT_NAME "PNG"
|
|
#define HAPI_JPEG_FORMAT_NAME "JPEG"
|
|
#define HAPI_BMP_FORMAT_NAME "Bitmap"
|
|
#define HAPI_TIFF_FORMAT_NAME "TIFF"
|
|
#define HAPI_TGA_FORMAT_NAME "Targa"
|
|
/// @}
|
|
|
|
/// Default image file format's name - used when the image generated and has
|
|
/// no "original" file format and the user does not specify a format to
|
|
/// convert to.
|
|
#define HAPI_DEFAULT_IMAGE_FORMAT_NAME HAPI_PNG_FORMAT_NAME
|
|
|
|
/// Name of subnet OBJ node containing the global nodes.
|
|
#define HAPI_GLOBAL_NODES_NODE_NAME "GlobalNodes"
|
|
|
|
/// Environment variables.
|
|
#define HAPI_ENV_HIP "HIP"
|
|
#define HAPI_ENV_JOB "JOB"
|
|
#define HAPI_ENV_CLIENT_NAME "HAPI_CLIENT_NAME"
|
|
|
|
/// [HAPI_CACHE]
|
|
/// Common cache names. You can see these same cache names in the
|
|
/// Cache Manager window in Houdini (Windows > Cache Manager).
|
|
#define HAPI_CACHE_COP_COOK "COP Cook Cache"
|
|
#define HAPI_CACHE_COP_FLIPBOOK "COP Flipbook Cache"
|
|
#define HAPI_CACHE_IMAGE "Image Cache"
|
|
#define HAPI_CACHE_OBJ "Object Transform Cache"
|
|
#define HAPI_CACHE_GL_TEXTURE "OpenGL Texture Cache"
|
|
#define HAPI_CACHE_GL_VERTEX "OpenGL Vertex Cache"
|
|
#define HAPI_CACHE_SOP "SOP Cache"
|
|
#define HAPI_CACHE_VEX "VEX File Cache"
|
|
/// [HAPI_CACHE]
|
|
|
|
// Make sure our enums and structs are usable without those keywords, as-is,
|
|
// in C.
|
|
#ifdef __cplusplus
|
|
#define HAPI_C_ENUM_TYPEDEF( enum_name )
|
|
#define HAPI_C_STRUCT_TYPEDEF( struct_name )
|
|
#else
|
|
#define HAPI_C_ENUM_TYPEDEF( enum_name ) \
|
|
typedef enum enum_name enum_name;
|
|
#define HAPI_C_STRUCT_TYPEDEF( struct_name ) \
|
|
typedef struct struct_name struct_name;
|
|
#endif // __cplusplus
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Typedefs
|
|
|
|
// C has no bool.
|
|
#ifdef __cplusplus
|
|
typedef bool HAPI_Bool;
|
|
#else
|
|
typedef char HAPI_Bool;
|
|
#endif // __cplusplus
|
|
|
|
// 64-bit Integers
|
|
typedef long long HAPI_Int64;
|
|
HAPI_STATIC_ASSERT( sizeof( HAPI_Int64 ) == 8, unsupported_size_of_long );
|
|
|
|
// The process id has to be uint on Windows and int on any other platform.
|
|
#if ( defined _WIN32 || defined WIN32 )
|
|
typedef unsigned int HAPI_ProcessId;
|
|
#else
|
|
typedef int HAPI_ProcessId;
|
|
#endif
|
|
|
|
/// Has to be 64-bit.
|
|
typedef HAPI_Int64 HAPI_SessionId;
|
|
|
|
/// Use this with HAPI_GetString() to get the value.
|
|
/// See @ref HAPI_Fundamentals_Strings.
|
|
typedef int HAPI_StringHandle;
|
|
|
|
typedef int HAPI_AssetLibraryId;
|
|
|
|
/// See @ref HAPI_Nodes_Basics.
|
|
typedef int HAPI_NodeId;
|
|
|
|
/// Either get this from the ::HAPI_ParmInfo or ::HAPI_GetParmIdFromName().
|
|
/// See @ref HAPI_Parameters.
|
|
typedef int HAPI_ParmId;
|
|
|
|
/// Use this with ::HAPI_GetPartInfo().
|
|
/// See @ref HAPI_Parts.
|
|
typedef int HAPI_PartId;
|
|
|
|
/// Use this with PDG functions
|
|
typedef int HAPI_PDG_WorkitemId;
|
|
|
|
/// Use this with PDG functions
|
|
typedef int HAPI_PDG_GraphContextId;
|
|
|
|
/// When we load a HIP file, we associate a HIP file ID with the created nodes
|
|
/// so that they can be looked up later
|
|
typedef int HAPI_HIPFileId;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Enums
|
|
|
|
enum HAPI_License
|
|
{
|
|
HAPI_LICENSE_NONE,
|
|
HAPI_LICENSE_HOUDINI_ENGINE,
|
|
HAPI_LICENSE_HOUDINI,
|
|
HAPI_LICENSE_HOUDINI_FX,
|
|
HAPI_LICENSE_HOUDINI_ENGINE_INDIE,
|
|
HAPI_LICENSE_HOUDINI_INDIE,
|
|
HAPI_LICENSE_MAX
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_License )
|
|
|
|
enum HAPI_StatusType
|
|
{
|
|
HAPI_STATUS_CALL_RESULT,
|
|
HAPI_STATUS_COOK_RESULT,
|
|
HAPI_STATUS_COOK_STATE,
|
|
HAPI_STATUS_MAX
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_StatusType )
|
|
|
|
enum HAPI_StatusVerbosity
|
|
{
|
|
HAPI_STATUSVERBOSITY_0,
|
|
HAPI_STATUSVERBOSITY_1,
|
|
HAPI_STATUSVERBOSITY_2,
|
|
|
|
HAPI_STATUSVERBOSITY_ALL = HAPI_STATUSVERBOSITY_2,
|
|
///< Equivalent to ::HAPI_STATUSVERBOSITY_2.
|
|
|
|
// Used for Results.
|
|
HAPI_STATUSVERBOSITY_ERRORS = HAPI_STATUSVERBOSITY_0,
|
|
///< Equivalent to ::HAPI_STATUSVERBOSITY_0.
|
|
HAPI_STATUSVERBOSITY_WARNINGS = HAPI_STATUSVERBOSITY_1,
|
|
///< Equivalent to ::HAPI_STATUSVERBOSITY_1.
|
|
HAPI_STATUSVERBOSITY_MESSAGES = HAPI_STATUSVERBOSITY_2,
|
|
///< Equivalent to ::HAPI_STATUSVERBOSITY_2.
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_StatusVerbosity )
|
|
|
|
enum HAPI_Result
|
|
{
|
|
HAPI_RESULT_SUCCESS = 0,
|
|
HAPI_RESULT_FAILURE = 1,
|
|
HAPI_RESULT_ALREADY_INITIALIZED = 2,
|
|
HAPI_RESULT_NOT_INITIALIZED = 3,
|
|
HAPI_RESULT_CANT_LOADFILE = 4,
|
|
HAPI_RESULT_PARM_SET_FAILED = 5,
|
|
HAPI_RESULT_INVALID_ARGUMENT = 6,
|
|
HAPI_RESULT_CANT_LOAD_GEO = 7,
|
|
HAPI_RESULT_CANT_GENERATE_PRESET = 8,
|
|
HAPI_RESULT_CANT_LOAD_PRESET = 9,
|
|
HAPI_RESULT_ASSET_DEF_ALREADY_LOADED = 10,
|
|
|
|
HAPI_RESULT_NO_LICENSE_FOUND = 110,
|
|
HAPI_RESULT_DISALLOWED_NC_LICENSE_FOUND = 120,
|
|
HAPI_RESULT_DISALLOWED_NC_ASSET_WITH_C_LICENSE = 130,
|
|
HAPI_RESULT_DISALLOWED_NC_ASSET_WITH_LC_LICENSE = 140,
|
|
HAPI_RESULT_DISALLOWED_LC_ASSET_WITH_C_LICENSE = 150,
|
|
HAPI_RESULT_DISALLOWED_HENGINEINDIE_W_3PARTY_PLUGIN = 160,
|
|
|
|
HAPI_RESULT_ASSET_INVALID = 200,
|
|
HAPI_RESULT_NODE_INVALID = 210,
|
|
|
|
HAPI_RESULT_USER_INTERRUPTED = 300,
|
|
|
|
HAPI_RESULT_INVALID_SESSION = 400
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_Result )
|
|
|
|
enum HAPI_ErrorCode
|
|
{
|
|
HAPI_ERRORCODE_ASSET_DEF_NOT_FOUND = 1 << 0,
|
|
HAPI_ERRORCODE_PYTHON_NODE_ERROR = 1 << 1
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_ErrorCode )
|
|
typedef int HAPI_ErrorCodeBits;
|
|
|
|
enum HAPI_SessionType
|
|
{
|
|
HAPI_SESSION_INPROCESS,
|
|
HAPI_SESSION_THRIFT,
|
|
HAPI_SESSION_CUSTOM1,
|
|
HAPI_SESSION_CUSTOM2,
|
|
HAPI_SESSION_CUSTOM3,
|
|
HAPI_SESSION_MAX
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_SessionType )
|
|
|
|
enum HAPI_State
|
|
{
|
|
HAPI_STATE_READY, ///< Everything cook successfully without errors.
|
|
HAPI_STATE_READY_WITH_FATAL_ERRORS, ///< You should abort the cook.
|
|
HAPI_STATE_READY_WITH_COOK_ERRORS, ///< Only some objects failed.
|
|
HAPI_STATE_STARTING_COOK,
|
|
HAPI_STATE_COOKING,
|
|
HAPI_STATE_STARTING_LOAD,
|
|
HAPI_STATE_LOADING,
|
|
HAPI_STATE_MAX,
|
|
|
|
HAPI_STATE_MAX_READY_STATE = HAPI_STATE_READY_WITH_COOK_ERRORS
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_State )
|
|
|
|
enum HAPI_PackedPrimInstancingMode
|
|
{
|
|
HAPI_PACKEDPRIM_INSTANCING_MODE_INVALID = -1,
|
|
HAPI_PACKEDPRIM_INSTANCING_MODE_DISABLED,
|
|
HAPI_PACKEDPRIM_INSTANCING_MODE_HIERARCHY,
|
|
HAPI_PACKEDPRIM_INSTANCING_MODE_FLAT,
|
|
HAPI_PACKEDPRIM_INSTANCING_MODE_MAX
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_PackedPrimInstancingMode )
|
|
|
|
enum HAPI_Permissions
|
|
{
|
|
HAPI_PERMISSIONS_NON_APPLICABLE,
|
|
HAPI_PERMISSIONS_READ_WRITE,
|
|
HAPI_PERMISSIONS_READ_ONLY,
|
|
HAPI_PERMISSIONS_WRITE_ONLY,
|
|
HAPI_PERMISSIONS_MAX
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_Permissions )
|
|
|
|
enum HAPI_RampType
|
|
{
|
|
HAPI_RAMPTYPE_INVALID = -1,
|
|
HAPI_RAMPTYPE_FLOAT,
|
|
HAPI_RAMPTYPE_COLOR,
|
|
HAPI_RAMPTYPE_MAX,
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_RampType )
|
|
|
|
/// As you can see, some of these high level types share the same underlying
|
|
/// raw data type. For instance, both string and file parameter types can be
|
|
/// represented with strings, yet semantically they are different. We will
|
|
/// group high level parameter types that share an underlying raw data type
|
|
/// together, so you can always check the raw data type of a parameter based
|
|
/// on its high level data type by checking a range of values.
|
|
enum HAPI_ParmType
|
|
{
|
|
HAPI_PARMTYPE_INT = 0,
|
|
HAPI_PARMTYPE_MULTIPARMLIST,
|
|
HAPI_PARMTYPE_TOGGLE,
|
|
HAPI_PARMTYPE_BUTTON,
|
|
|
|
HAPI_PARMTYPE_FLOAT,
|
|
HAPI_PARMTYPE_COLOR,
|
|
|
|
HAPI_PARMTYPE_STRING,
|
|
HAPI_PARMTYPE_PATH_FILE,
|
|
HAPI_PARMTYPE_PATH_FILE_GEO,
|
|
HAPI_PARMTYPE_PATH_FILE_IMAGE,
|
|
|
|
HAPI_PARMTYPE_NODE,
|
|
|
|
HAPI_PARMTYPE_FOLDERLIST,
|
|
HAPI_PARMTYPE_FOLDERLIST_RADIO,
|
|
|
|
HAPI_PARMTYPE_FOLDER,
|
|
HAPI_PARMTYPE_LABEL,
|
|
HAPI_PARMTYPE_SEPARATOR,
|
|
HAPI_PARMTYPE_PATH_FILE_DIR,
|
|
|
|
|
|
// Helpers
|
|
|
|
HAPI_PARMTYPE_MAX, ///< Total number of supported parameter types.
|
|
|
|
HAPI_PARMTYPE_INT_START = HAPI_PARMTYPE_INT,
|
|
HAPI_PARMTYPE_INT_END = HAPI_PARMTYPE_BUTTON,
|
|
|
|
HAPI_PARMTYPE_FLOAT_START = HAPI_PARMTYPE_FLOAT,
|
|
HAPI_PARMTYPE_FLOAT_END = HAPI_PARMTYPE_COLOR,
|
|
|
|
HAPI_PARMTYPE_STRING_START = HAPI_PARMTYPE_STRING,
|
|
HAPI_PARMTYPE_STRING_END = HAPI_PARMTYPE_NODE,
|
|
|
|
HAPI_PARMTYPE_PATH_START = HAPI_PARMTYPE_PATH_FILE,
|
|
HAPI_PARMTYPE_PATH_END = HAPI_PARMTYPE_PATH_FILE_IMAGE,
|
|
|
|
HAPI_PARMTYPE_NODE_START = HAPI_PARMTYPE_NODE,
|
|
HAPI_PARMTYPE_NODE_END = HAPI_PARMTYPE_NODE,
|
|
|
|
HAPI_PARMTYPE_CONTAINER_START = HAPI_PARMTYPE_FOLDERLIST,
|
|
HAPI_PARMTYPE_CONTAINER_END = HAPI_PARMTYPE_FOLDERLIST_RADIO,
|
|
|
|
HAPI_PARMTYPE_NONVALUE_START = HAPI_PARMTYPE_FOLDER,
|
|
HAPI_PARMTYPE_NONVALUE_END = HAPI_PARMTYPE_SEPARATOR
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_ParmType )
|
|
|
|
/// Corresponds to the types as shown in the Houdini Type Properties
|
|
/// window and in DialogScript files. Available on HAPI_ParmInfo
|
|
/// See: <a href="http://www.sidefx.com/docs/houdini/ref/windows/optype.html#parmtypes">Parameter types</a>
|
|
///
|
|
enum HAPI_PrmScriptType
|
|
{
|
|
HAPI_PRM_SCRIPT_TYPE_INT = 0, ///< "int", "integer"
|
|
HAPI_PRM_SCRIPT_TYPE_FLOAT,
|
|
HAPI_PRM_SCRIPT_TYPE_ANGLE,
|
|
HAPI_PRM_SCRIPT_TYPE_STRING,
|
|
HAPI_PRM_SCRIPT_TYPE_FILE,
|
|
HAPI_PRM_SCRIPT_TYPE_DIRECTORY,
|
|
HAPI_PRM_SCRIPT_TYPE_IMAGE,
|
|
HAPI_PRM_SCRIPT_TYPE_GEOMETRY,
|
|
HAPI_PRM_SCRIPT_TYPE_TOGGLE, ///< "toggle", "embed"
|
|
HAPI_PRM_SCRIPT_TYPE_BUTTON,
|
|
HAPI_PRM_SCRIPT_TYPE_VECTOR2,
|
|
HAPI_PRM_SCRIPT_TYPE_VECTOR3, ///< "vector", "vector3"
|
|
HAPI_PRM_SCRIPT_TYPE_VECTOR4,
|
|
HAPI_PRM_SCRIPT_TYPE_INTVECTOR2,
|
|
HAPI_PRM_SCRIPT_TYPE_INTVECTOR3, ///< "intvector", "intvector3"
|
|
HAPI_PRM_SCRIPT_TYPE_INTVECTOR4,
|
|
HAPI_PRM_SCRIPT_TYPE_UV,
|
|
HAPI_PRM_SCRIPT_TYPE_UVW,
|
|
HAPI_PRM_SCRIPT_TYPE_DIR, ///< "dir", "direction"
|
|
HAPI_PRM_SCRIPT_TYPE_COLOR, ///< "color", "rgb"
|
|
HAPI_PRM_SCRIPT_TYPE_COLOR4, ///< "color4", "rgba"
|
|
HAPI_PRM_SCRIPT_TYPE_OPPATH,
|
|
HAPI_PRM_SCRIPT_TYPE_OPLIST,
|
|
HAPI_PRM_SCRIPT_TYPE_OBJECT,
|
|
HAPI_PRM_SCRIPT_TYPE_OBJECTLIST,
|
|
HAPI_PRM_SCRIPT_TYPE_RENDER,
|
|
HAPI_PRM_SCRIPT_TYPE_SEPARATOR,
|
|
HAPI_PRM_SCRIPT_TYPE_GEOMETRY_DATA,
|
|
HAPI_PRM_SCRIPT_TYPE_KEY_VALUE_DICT,
|
|
HAPI_PRM_SCRIPT_TYPE_LABEL,
|
|
HAPI_PRM_SCRIPT_TYPE_RGBAMASK,
|
|
HAPI_PRM_SCRIPT_TYPE_ORDINAL,
|
|
HAPI_PRM_SCRIPT_TYPE_RAMP_FLT,
|
|
HAPI_PRM_SCRIPT_TYPE_RAMP_RGB,
|
|
HAPI_PRM_SCRIPT_TYPE_FLOAT_LOG,
|
|
HAPI_PRM_SCRIPT_TYPE_INT_LOG,
|
|
HAPI_PRM_SCRIPT_TYPE_DATA,
|
|
HAPI_PRM_SCRIPT_TYPE_FLOAT_MINMAX,
|
|
HAPI_PRM_SCRIPT_TYPE_INT_MINMAX,
|
|
HAPI_PRM_SCRIPT_TYPE_INT_STARTEND,
|
|
HAPI_PRM_SCRIPT_TYPE_BUTTONSTRIP,
|
|
HAPI_PRM_SCRIPT_TYPE_ICONSTRIP,
|
|
|
|
// The following apply to HAPI_PARMTYPE_FOLDER type parms
|
|
HAPI_PRM_SCRIPT_TYPE_GROUPRADIO = 1000, ///< Radio buttons Folder
|
|
HAPI_PRM_SCRIPT_TYPE_GROUPCOLLAPSIBLE, ///< Collapsible Folder
|
|
HAPI_PRM_SCRIPT_TYPE_GROUPSIMPLE, ///< Simple Folder
|
|
HAPI_PRM_SCRIPT_TYPE_GROUP ///< Tabs Folder
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_PrmScriptType )
|
|
|
|
enum HAPI_ChoiceListType
|
|
{
|
|
HAPI_CHOICELISTTYPE_NONE, ///< Parameter is not a menu.
|
|
HAPI_CHOICELISTTYPE_NORMAL, ///< Menu Only, Single Selection
|
|
HAPI_CHOICELISTTYPE_MINI, ///< Mini Menu Only, Single Selection
|
|
HAPI_CHOICELISTTYPE_REPLACE, ///< Field + Single Selection Menu
|
|
HAPI_CHOICELISTTYPE_TOGGLE ///< Field + Multiple Selection Menu
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_ChoiceListType )
|
|
|
|
enum HAPI_PresetType
|
|
{
|
|
HAPI_PRESETTYPE_INVALID = -1,
|
|
HAPI_PRESETTYPE_BINARY = 0, ///< Just the presets binary blob.
|
|
HAPI_PRESETTYPE_IDX, ///< Presets blob within an .idx file format.
|
|
HAPI_PRESETTYPE_MAX
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_PresetType )
|
|
|
|
enum HAPI_NodeType
|
|
{
|
|
HAPI_NODETYPE_ANY = -1,
|
|
HAPI_NODETYPE_NONE = 0,
|
|
HAPI_NODETYPE_OBJ = 1 << 0,
|
|
HAPI_NODETYPE_SOP = 1 << 1,
|
|
HAPI_NODETYPE_CHOP = 1 << 2,
|
|
HAPI_NODETYPE_ROP = 1 << 3,
|
|
HAPI_NODETYPE_SHOP = 1 << 4,
|
|
HAPI_NODETYPE_COP = 1 << 5,
|
|
HAPI_NODETYPE_VOP = 1 << 6,
|
|
HAPI_NODETYPE_DOP = 1 << 7,
|
|
HAPI_NODETYPE_TOP = 1 << 8
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_NodeType )
|
|
typedef int HAPI_NodeTypeBits;
|
|
|
|
/// Flags used to filter compositions of node lists. Flags marked
|
|
/// 'Recursive Flag' will exclude children whos parent does not
|
|
/// satisfy the flag, even if the children themselves satisfy the flag.
|
|
enum HAPI_NodeFlags
|
|
{
|
|
HAPI_NODEFLAGS_ANY = -1,
|
|
HAPI_NODEFLAGS_NONE = 0,
|
|
HAPI_NODEFLAGS_DISPLAY = 1 << 0, ///< Recursive Flag
|
|
HAPI_NODEFLAGS_RENDER = 1 << 1, ///< Recursive Flag
|
|
HAPI_NODEFLAGS_TEMPLATED = 1 << 2,
|
|
HAPI_NODEFLAGS_LOCKED = 1 << 3,
|
|
HAPI_NODEFLAGS_EDITABLE = 1 << 4,
|
|
HAPI_NODEFLAGS_BYPASS = 1 << 5,
|
|
HAPI_NODEFLAGS_NETWORK = 1 << 6,
|
|
|
|
/// OBJ Node Specific Flags
|
|
HAPI_NODEFLAGS_OBJ_GEOMETRY = 1 << 7,
|
|
HAPI_NODEFLAGS_OBJ_CAMERA = 1 << 8,
|
|
HAPI_NODEFLAGS_OBJ_LIGHT = 1 << 9,
|
|
HAPI_NODEFLAGS_OBJ_SUBNET = 1 << 10,
|
|
|
|
/// SOP Node Specific Flags
|
|
HAPI_NODEFLAGS_SOP_CURVE = 1 << 11, ///< Looks for "curve".
|
|
HAPI_NODEFLAGS_SOP_GUIDE = 1 << 12, ///< Looks for Guide Geometry
|
|
|
|
/// TOP Node Specific Flags
|
|
HAPI_NODEFLAGS_TOP_NONSCHEDULER = 1 << 13 /// All TOP nodes except schedulers
|
|
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_NodeFlags )
|
|
typedef int HAPI_NodeFlagsBits;
|
|
|
|
enum HAPI_GroupType
|
|
{
|
|
HAPI_GROUPTYPE_INVALID = -1,
|
|
HAPI_GROUPTYPE_POINT,
|
|
HAPI_GROUPTYPE_PRIM,
|
|
HAPI_GROUPTYPE_MAX
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_GroupType )
|
|
|
|
enum HAPI_AttributeOwner
|
|
{
|
|
HAPI_ATTROWNER_INVALID = -1,
|
|
HAPI_ATTROWNER_VERTEX,
|
|
HAPI_ATTROWNER_POINT,
|
|
HAPI_ATTROWNER_PRIM,
|
|
HAPI_ATTROWNER_DETAIL,
|
|
HAPI_ATTROWNER_MAX
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_AttributeOwner )
|
|
|
|
enum HAPI_CurveType
|
|
{
|
|
HAPI_CURVETYPE_INVALID = -1,
|
|
HAPI_CURVETYPE_LINEAR,
|
|
HAPI_CURVETYPE_NURBS,
|
|
HAPI_CURVETYPE_BEZIER,
|
|
HAPI_CURVETYPE_MAX
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_CurveType )
|
|
|
|
enum HAPI_VolumeType
|
|
{
|
|
HAPI_VOLUMETYPE_INVALID = -1,
|
|
HAPI_VOLUMETYPE_HOUDINI,
|
|
HAPI_VOLUMETYPE_VDB,
|
|
HAPI_VOLUMETYPE_MAX
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_VolumeType )
|
|
|
|
enum HAPI_VolumeVisualType
|
|
{
|
|
HAPI_VOLUMEVISTYPE_INVALID = -1,
|
|
HAPI_VOLUMEVISTYPE_SMOKE,
|
|
HAPI_VOLUMEVISTYPE_RAINBOW,
|
|
HAPI_VOLUMEVISTYPE_ISO,
|
|
HAPI_VOLUMEVISTYPE_INVISIBLE,
|
|
HAPI_VOLUMEVISTYPE_HEIGHTFIELD,
|
|
HAPI_VOLUMEVISTYPE_MAX
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_VolumeVisualType )
|
|
|
|
enum HAPI_StorageType
|
|
{
|
|
HAPI_STORAGETYPE_INVALID = -1,
|
|
HAPI_STORAGETYPE_INT,
|
|
HAPI_STORAGETYPE_INT64,
|
|
HAPI_STORAGETYPE_FLOAT,
|
|
HAPI_STORAGETYPE_FLOAT64,
|
|
HAPI_STORAGETYPE_STRING,
|
|
HAPI_STORAGETYPE_MAX
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_StorageType )
|
|
|
|
enum HAPI_AttributeTypeInfo
|
|
{
|
|
HAPI_ATTRIBUTE_TYPE_INVALID = -1,
|
|
HAPI_ATTRIBUTE_TYPE_NONE, // Implicit type based on data
|
|
HAPI_ATTRIBUTE_TYPE_POINT, // Position
|
|
HAPI_ATTRIBUTE_TYPE_HPOINT, // Homogeneous position
|
|
HAPI_ATTRIBUTE_TYPE_VECTOR, // Direction vector
|
|
HAPI_ATTRIBUTE_TYPE_NORMAL, // Normal
|
|
HAPI_ATTRIBUTE_TYPE_COLOR, // Color
|
|
HAPI_ATTRIBUTE_TYPE_QUATERNION, // Quaternion
|
|
HAPI_ATTRIBUTE_TYPE_MATRIX3, // 3x3 Matrix
|
|
HAPI_ATTRIBUTE_TYPE_MATRIX, // Matrix
|
|
HAPI_ATTRIBUTE_TYPE_ST, // Parametric interval
|
|
HAPI_ATTRIBUTE_TYPE_HIDDEN, // "Private" (hidden)
|
|
HAPI_ATTRIBUTE_TYPE_BOX2, // 2x2 Bounding box
|
|
HAPI_ATTRIBUTE_TYPE_BOX, // 3x3 Bounding box
|
|
HAPI_ATTRIBUTE_TYPE_TEXTURE, // Texture coordinate
|
|
HAPI_ATTRIBUTE_TYPE_MAX
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_AttributeTypeInfo )
|
|
|
|
enum HAPI_GeoType
|
|
{
|
|
HAPI_GEOTYPE_INVALID = -1,
|
|
|
|
/// Most geos will be of this type which essentially means a geo
|
|
/// not of the other types.
|
|
HAPI_GEOTYPE_DEFAULT,
|
|
|
|
/// An exposed edit node.
|
|
/// See @ref HAPI_IntermediateAssetsResults.
|
|
HAPI_GEOTYPE_INTERMEDIATE,
|
|
|
|
/// An input geo that can accept geometry from the host.
|
|
/// See @ref HAPI_AssetInputs_MarshallingGeometryIntoHoudini.
|
|
HAPI_GEOTYPE_INPUT,
|
|
|
|
/// A curve.
|
|
/// See @ref HAPI_Curves.
|
|
HAPI_GEOTYPE_CURVE,
|
|
|
|
HAPI_GEOTYPE_MAX
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_GeoType )
|
|
|
|
enum HAPI_PartType
|
|
{
|
|
HAPI_PARTTYPE_INVALID = -1,
|
|
HAPI_PARTTYPE_MESH,
|
|
HAPI_PARTTYPE_CURVE,
|
|
HAPI_PARTTYPE_VOLUME,
|
|
HAPI_PARTTYPE_INSTANCER,
|
|
HAPI_PARTTYPE_BOX,
|
|
HAPI_PARTTYPE_SPHERE,
|
|
HAPI_PARTTYPE_MAX
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_PartType )
|
|
|
|
enum HAPI_InputType
|
|
{
|
|
HAPI_INPUT_INVALID = -1,
|
|
HAPI_INPUT_TRANSFORM,
|
|
HAPI_INPUT_GEOMETRY,
|
|
HAPI_INPUT_MAX
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_InputType )
|
|
|
|
enum HAPI_CurveOrders
|
|
{
|
|
HAPI_CURVE_ORDER_VARYING = 0,
|
|
HAPI_CURVE_ORDER_INVALID = 1,
|
|
HAPI_CURVE_ORDER_LINEAR = 2,
|
|
HAPI_CURVE_ORDER_QUADRATIC = 3,
|
|
HAPI_CURVE_ORDER_CUBIC = 4,
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_CurveOrders )
|
|
|
|
enum HAPI_TransformComponent
|
|
{
|
|
HAPI_TRANSFORM_TX = 0,
|
|
HAPI_TRANSFORM_TY,
|
|
HAPI_TRANSFORM_TZ,
|
|
HAPI_TRANSFORM_RX,
|
|
HAPI_TRANSFORM_RY,
|
|
HAPI_TRANSFORM_RZ,
|
|
HAPI_TRANSFORM_QX,
|
|
HAPI_TRANSFORM_QY,
|
|
HAPI_TRANSFORM_QZ,
|
|
HAPI_TRANSFORM_QW,
|
|
HAPI_TRANSFORM_SX,
|
|
HAPI_TRANSFORM_SY,
|
|
HAPI_TRANSFORM_SZ
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_TransformComponent )
|
|
|
|
enum HAPI_RSTOrder
|
|
{
|
|
HAPI_TRS = 0,
|
|
HAPI_TSR,
|
|
HAPI_RTS,
|
|
HAPI_RST,
|
|
HAPI_STR,
|
|
HAPI_SRT,
|
|
|
|
HAPI_RSTORDER_DEFAULT = HAPI_SRT
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_RSTOrder )
|
|
|
|
enum HAPI_XYZOrder
|
|
{
|
|
HAPI_XYZ = 0,
|
|
HAPI_XZY,
|
|
HAPI_YXZ,
|
|
HAPI_YZX,
|
|
HAPI_ZXY,
|
|
HAPI_ZYX,
|
|
|
|
HAPI_XYZORDER_DEFAULT = HAPI_XYZ
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_XYZOrder )
|
|
|
|
enum HAPI_ImageDataFormat
|
|
{
|
|
HAPI_IMAGE_DATA_UNKNOWN = -1,
|
|
HAPI_IMAGE_DATA_INT8,
|
|
HAPI_IMAGE_DATA_INT16,
|
|
HAPI_IMAGE_DATA_INT32,
|
|
HAPI_IMAGE_DATA_FLOAT16,
|
|
HAPI_IMAGE_DATA_FLOAT32,
|
|
HAPI_IMAGE_DATA_MAX,
|
|
|
|
HAPI_IMAGE_DATA_DEFAULT = HAPI_IMAGE_DATA_INT8
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_ImageDataFormat )
|
|
|
|
enum HAPI_ImagePacking
|
|
{
|
|
HAPI_IMAGE_PACKING_UNKNOWN = -1,
|
|
HAPI_IMAGE_PACKING_SINGLE, ///< Single Channel
|
|
HAPI_IMAGE_PACKING_DUAL, ///< Dual Channel
|
|
HAPI_IMAGE_PACKING_RGB, ///< RGB
|
|
HAPI_IMAGE_PACKING_BGR, ///< RGB Reversed
|
|
HAPI_IMAGE_PACKING_RGBA, ///< RGBA
|
|
HAPI_IMAGE_PACKING_ABGR, ///< RGBA Reversed
|
|
HAPI_IMAGE_PACKING_MAX,
|
|
|
|
HAPI_IMAGE_PACKING_DEFAULT3 = HAPI_IMAGE_PACKING_RGB,
|
|
HAPI_IMAGE_PACKING_DEFAULT4 = HAPI_IMAGE_PACKING_RGBA
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_ImagePacking )
|
|
|
|
/// This enum is to be used with ::HAPI_GetEnvInt() to retrieve basic
|
|
/// information about the HAPI implementation currently being linked
|
|
/// against. Note that as of HAPI version 2.0, these enum values are
|
|
/// guaranteed never to change so you can reliably get this information from
|
|
/// any post-2.0 version of HAPI. The same goes for the actual
|
|
/// ::HAPI_GetEnvInt() API call.
|
|
enum HAPI_EnvIntType
|
|
{
|
|
HAPI_ENVINT_INVALID = -1,
|
|
|
|
/// The three components of the Houdini version that HAPI is
|
|
/// expecting to link against.
|
|
/// @{
|
|
HAPI_ENVINT_VERSION_HOUDINI_MAJOR = 100,
|
|
HAPI_ENVINT_VERSION_HOUDINI_MINOR = 110,
|
|
HAPI_ENVINT_VERSION_HOUDINI_BUILD = 120,
|
|
HAPI_ENVINT_VERSION_HOUDINI_PATCH = 130,
|
|
/// @}
|
|
|
|
/// The two components of the Houdini Engine (marketed) version.
|
|
/// @{
|
|
HAPI_ENVINT_VERSION_HOUDINI_ENGINE_MAJOR = 200,
|
|
HAPI_ENVINT_VERSION_HOUDINI_ENGINE_MINOR = 210,
|
|
/// @}
|
|
|
|
/// This is a monotonously increasing API version number that can be used
|
|
/// to lock against a certain API for compatibility purposes. Basically,
|
|
/// when this number changes code compiled against the HAPI.h methods
|
|
/// might no longer compile. Semantic changes to the methods will also
|
|
/// cause this version to increase. This number will be reset to 0
|
|
/// every time the Houdini Engine version is bumped.
|
|
HAPI_ENVINT_VERSION_HOUDINI_ENGINE_API = 220,
|
|
|
|
HAPI_ENVINT_MAX,
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_EnvIntType )
|
|
|
|
/// This enum is to be used with ::HAPI_GetSessionEnvInt() to retrieve basic
|
|
/// session-specific information.
|
|
enum HAPI_SessionEnvIntType
|
|
{
|
|
HAPI_SESSIONENVINT_INVALID = -1,
|
|
|
|
/// License Type. See ::HAPI_License.
|
|
HAPI_SESSIONENVINT_LICENSE = 100,
|
|
|
|
HAPI_SESSIONENVINT_MAX
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_SessionEnvIntType )
|
|
|
|
/// [HAPI_CacheProperty]
|
|
enum HAPI_CacheProperty
|
|
{
|
|
/// Current memory usage in MB. Setting this to 0 invokes
|
|
/// a cache clear.
|
|
HAPI_CACHEPROP_CURRENT,
|
|
|
|
HAPI_CACHEPROP_HAS_MIN, ///< True if it actually has a minimum size.
|
|
HAPI_CACHEPROP_MIN, ///< Min cache memory limit in MB.
|
|
HAPI_CACHEPROP_HAS_MAX, ///< True if it actually has a maximum size.
|
|
HAPI_CACHEPROP_MAX, ///< Max cache memory limit in MB.
|
|
|
|
/// How aggressive to cull memory. This only works for:
|
|
/// - ::HAPI_CACHE_COP_COOK where:
|
|
/// 0 -> Never reduce inactive cache.
|
|
/// 1 -> Always reduce inactive cache.
|
|
/// - ::HAPI_CACHE_OBJ where:
|
|
/// 0 -> Never enforce the max memory limit.
|
|
/// 1 -> Always enforce the max memory limit.
|
|
/// - ::HAPI_CACHE_SOP where:
|
|
/// 0 -> When to Unload = Never
|
|
/// When to Limit Max Memory = Never
|
|
/// 1-2 -> When to Unload = Based on Flag
|
|
/// When to Limit Max Memory = Never
|
|
/// 3-4 -> When to Unload = Based on Flag
|
|
/// When to Limit Max Memory = Always
|
|
/// 5 -> When to Unload = Always
|
|
/// When to Limit Max Memory = Always
|
|
HAPI_CACHEPROP_CULL_LEVEL,
|
|
};
|
|
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_CacheProperty )
|
|
|
|
/// Type of sampling for heightfield
|
|
enum HAPI_HeightFieldSampling
|
|
{
|
|
HAPI_HEIGHTFIELD_SAMPLING_CENTER,
|
|
HAPI_HEIGHTFIELD_SAMPLING_CORNER
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_HeightFieldSampling )
|
|
|
|
/// Used with PDG functions
|
|
enum HAPI_PDG_State
|
|
{
|
|
HAPI_PDG_STATE_READY,
|
|
HAPI_PDG_STATE_COOKING,
|
|
HAPI_PDG_STATE_MAX,
|
|
|
|
HAPI_PDG_STATE_MAX_READY_STATE = HAPI_PDG_STATE_READY
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_PDG_State )
|
|
|
|
/// Used with PDG functions
|
|
enum HAPI_PDG_EventType
|
|
{
|
|
HAPI_PDG_EVENT_NULL,
|
|
|
|
HAPI_PDG_EVENT_WORKITEM_ADD,
|
|
HAPI_PDG_EVENT_WORKITEM_REMOVE,
|
|
HAPI_PDG_EVENT_WORKITEM_STATE_CHANGE,
|
|
|
|
HAPI_PDG_EVENT_WORKITEM_ADD_DEP,
|
|
HAPI_PDG_EVENT_WORKITEM_REMOVE_DEP,
|
|
|
|
HAPI_PDG_EVENT_WORKITEM_ADD_PARENT,
|
|
HAPI_PDG_EVENT_WORKITEM_REMOVE_PARENT,
|
|
|
|
HAPI_PDG_EVENT_NODE_CLEAR,
|
|
|
|
HAPI_PDG_EVENT_COOK_ERROR,
|
|
HAPI_PDG_EVENT_COOK_WARNING,
|
|
|
|
HAPI_PDG_EVENT_COOK_COMPLETE,
|
|
|
|
HAPI_PDG_EVENT_DIRTY_START,
|
|
HAPI_PDG_EVENT_DIRTY_STOP,
|
|
|
|
HAPI_PDG_EVENT_DIRTY_ALL,
|
|
|
|
HAPI_PDG_EVENT_UI_SELECT,
|
|
|
|
HAPI_PDG_EVENT_NODE_CREATE,
|
|
HAPI_PDG_EVENT_NODE_REMOVE,
|
|
HAPI_PDG_EVENT_NODE_RENAME,
|
|
HAPI_PDG_EVENT_NODE_CONNECT,
|
|
HAPI_PDG_EVENT_NODE_DISCONNECT,
|
|
|
|
HAPI_PDG_EVENT_WORKITEM_SET_INT,
|
|
HAPI_PDG_EVENT_WORKITEM_SET_FLOAT,
|
|
HAPI_PDG_EVENT_WORKITEM_SET_STRING,
|
|
HAPI_PDG_EVENT_WORKITEM_SET_FILE,
|
|
HAPI_PDG_EVENT_WORKITEM_SET_PYOBJECT,
|
|
HAPI_PDG_EVENT_WORKITEM_SET_GEOMETRY,
|
|
HAPI_PDG_EVENT_WORKITEM_MERGE,
|
|
HAPI_PDG_EVENT_WORKITEM_RESULT,
|
|
|
|
HAPI_PDG_EVENT_WORKITEM_PRIORITY,
|
|
|
|
HAPI_PDG_EVENT_COOK_START,
|
|
|
|
HAPI_PDG_EVENT_WORKITEM_ADD_STATIC_ANCESTOR,
|
|
HAPI_PDG_EVENT_WORKITEM_REMOVE_STATIC_ANCESTOR,
|
|
|
|
HAPI_PDG_EVENT_NODE_PROGRESS_UPDATE,
|
|
|
|
HAPI_PDG_EVENT_BATCH_ITEM_INITIALIZED,
|
|
|
|
HAPI_PDG_EVENT_ALL,
|
|
HAPI_PDG_EVENT_LOG,
|
|
|
|
HAPI_PDG_EVENT_SCHEDULER_ADDED,
|
|
HAPI_PDG_EVENT_SCHEDULER_REMOVED,
|
|
HAPI_PDG_EVENT_SET_SCHEDULER,
|
|
|
|
HAPI_PDG_EVENT_SERVICE_MANAGER_ALL,
|
|
|
|
HAPI_PDG_CONTEXT_EVENTS
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_PDG_EventType )
|
|
|
|
/// Used with PDG functions
|
|
enum HAPI_PDG_WorkitemState
|
|
{
|
|
HAPI_PDG_WORKITEM_UNDEFINED,
|
|
HAPI_PDG_WORKITEM_UNCOOKED,
|
|
HAPI_PDG_WORKITEM_WAITING,
|
|
HAPI_PDG_WORKITEM_SCHEDULED,
|
|
HAPI_PDG_WORKITEM_COOKING,
|
|
HAPI_PDG_WORKITEM_COOKED_SUCCESS,
|
|
HAPI_PDG_WORKITEM_COOKED_CACHE,
|
|
HAPI_PDG_WORKITEM_COOKED_FAIL,
|
|
HAPI_PDG_WORKITEM_COOKED_CANCEL,
|
|
HAPI_PDG_WORKITEM_DIRTY
|
|
};
|
|
HAPI_C_ENUM_TYPEDEF( HAPI_PDG_WorkitemState )
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Main API Structs
|
|
|
|
// GENERICS -----------------------------------------------------------------
|
|
|
|
struct HAPI_API HAPI_Transform
|
|
{
|
|
float position[ HAPI_POSITION_VECTOR_SIZE ];
|
|
float rotationQuaternion[ HAPI_QUATERNION_VECTOR_SIZE ];
|
|
float scale[ HAPI_SCALE_VECTOR_SIZE ];
|
|
float shear[ HAPI_SHEAR_VECTOR_SIZE ];
|
|
|
|
HAPI_RSTOrder rstOrder;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_Transform )
|
|
|
|
struct HAPI_API HAPI_TransformEuler
|
|
{
|
|
float position[ HAPI_POSITION_VECTOR_SIZE ];
|
|
float rotationEuler[ HAPI_EULER_VECTOR_SIZE ];
|
|
float scale[ HAPI_SCALE_VECTOR_SIZE ];
|
|
float shear[ HAPI_SHEAR_VECTOR_SIZE ];
|
|
|
|
HAPI_XYZOrder rotationOrder;
|
|
HAPI_RSTOrder rstOrder;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_TransformEuler )
|
|
|
|
// SESSIONS -----------------------------------------------------------------
|
|
|
|
struct HAPI_API HAPI_Session
|
|
{
|
|
/// The type of session determines the which implementation will be
|
|
/// used to communicate with the Houdini Engine library.
|
|
HAPI_SessionType type;
|
|
|
|
/// Some session types support multiple simultaneous sessions. This means
|
|
/// that each session needs to have a unique identifier.
|
|
HAPI_SessionId id;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_Session )
|
|
|
|
/// Options to configure a Thrift server being started from HARC.
|
|
struct HAPI_API HAPI_ThriftServerOptions
|
|
{
|
|
/// Close the server automatically when all clients disconnect from it.
|
|
HAPI_Bool autoClose;
|
|
|
|
/// Timeout in milliseconds for waiting on the server to
|
|
/// signal that it's ready to serve. If the server fails
|
|
/// to signal within this time interval, the start server call fails
|
|
/// and the server process is terminated.
|
|
float timeoutMs;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_ThriftServerOptions )
|
|
|
|
// TIME ---------------------------------------------------------------------
|
|
|
|
struct HAPI_API HAPI_TimelineOptions
|
|
{
|
|
float fps;
|
|
|
|
float startTime;
|
|
float endTime;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_TimelineOptions )
|
|
|
|
// ASSETS -------------------------------------------------------------------
|
|
|
|
struct HAPI_API HAPI_AssetInfo
|
|
{
|
|
/// Use the node id to get the asset's parameters.
|
|
/// See @ref HAPI_Nodes_Basics.
|
|
HAPI_NodeId nodeId;
|
|
|
|
/// The objectNodeId differs from the regular nodeId in that for
|
|
/// geometry based assets (SOPs) it will be the node id of the dummy
|
|
/// object (OBJ) node instead of the asset node. For object based assets
|
|
/// the objectNodeId will equal the nodeId. The reason the distinction
|
|
/// exists is because transforms are always stored on the object node
|
|
/// but the asset parameters may not be on the asset node if the asset
|
|
/// is a geometry asset so we need both.
|
|
HAPI_NodeId objectNodeId;
|
|
|
|
/// It's possible to instantiate an asset without cooking it.
|
|
/// See @ref HAPI_Assets_Cooking.
|
|
HAPI_Bool hasEverCooked;
|
|
|
|
HAPI_StringHandle nameSH; ///< Instance name (the label + a number).
|
|
HAPI_StringHandle labelSH; ///< This is what any end user should be shown.
|
|
HAPI_StringHandle filePathSH; ///< Path to the .otl library file.
|
|
HAPI_StringHandle versionSH; ///< User-defined asset version.
|
|
HAPI_StringHandle fullOpNameSH; ///< Full asset name and namespace.
|
|
HAPI_StringHandle helpTextSH; ///< Asset help marked-up text.
|
|
HAPI_StringHandle helpURLSH; ///< Asset help URL.
|
|
|
|
int objectCount; ///< See @ref HAPI_Objects.
|
|
int handleCount; ///< See @ref HAPI_Handles.
|
|
|
|
/// Transform inputs exposed by the asset. For OBJ assets this is the
|
|
/// number of transform inputs on the OBJ node. For SOP assets, this is
|
|
/// the singular transform input on the dummy wrapper OBJ node.
|
|
/// See @ref HAPI_AssetInputs.
|
|
int transformInputCount;
|
|
|
|
/// Geometry inputs exposed by the asset. For SOP assets this is
|
|
/// the number of geometry inputs on the SOP node itself. OBJ assets
|
|
/// will always have zero geometry inputs.
|
|
/// See @ref HAPI_AssetInputs.
|
|
int geoInputCount;
|
|
|
|
/// Geometry outputs exposed by the asset. For SOP assets this is
|
|
/// the number of geometry outputs on the SOP node itself. OBJ assets
|
|
/// will always have zero geometry outputs.
|
|
/// See @ref HAPI_AssetInputs.
|
|
int geoOutputCount;
|
|
|
|
/// For incremental updates. Indicates whether any of the assets's
|
|
/// objects have changed. Refreshed only during an asset cook.
|
|
HAPI_Bool haveObjectsChanged;
|
|
|
|
/// For incremental updates. Indicates whether any of the asset's
|
|
/// materials have changed. Refreshed only during an asset cook.
|
|
HAPI_Bool haveMaterialsChanged;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_AssetInfo )
|
|
|
|
struct HAPI_API HAPI_CookOptions
|
|
{
|
|
/// Normally, geos are split into parts in two different ways. First it
|
|
/// is split by group and within each group it is split by primitive type.
|
|
///
|
|
/// For example, if you have a geo with group1 covering half of the mesh
|
|
/// and volume1 and group2 covering the other half of the mesh, all of
|
|
/// curve1, and volume2 you will end up with 5 parts. First two parts
|
|
/// will be for the half-mesh of group1 and volume1, and the last three
|
|
/// will cover group2.
|
|
///
|
|
/// This toggle lets you disable the splitting by group and just have
|
|
/// the geo be split by primitive type alone. By default, this is true
|
|
/// and therefore geos will be split by group and primitive type. If
|
|
/// set to false, geos will only be split by primitive type.
|
|
HAPI_Bool splitGeosByGroup;
|
|
|
|
/// This toggle lets you enable the splitting by unique values
|
|
/// of a specified attribute. By default, this is false and
|
|
/// the geo be split as described above.
|
|
/// as described above. If this is set to true, and splitGeosByGroup
|
|
/// set to false, mesh geos will be split on attribute values
|
|
/// The attribute name to split on must be created with HAPI_SetCustomString
|
|
/// and then the splitAttrSH handle set on the struct.
|
|
HAPI_Bool splitGeosByAttribute;
|
|
HAPI_StringHandle splitAttrSH;
|
|
|
|
/// For meshes only, this is enforced by convexing the mesh. Use -1
|
|
/// to avoid convexing at all and get some performance boost.
|
|
int maxVerticesPerPrimitive;
|
|
|
|
/// For curves only.
|
|
/// If this is set to true, then all curves will be refined to a linear
|
|
/// curve and you can no longer access the original CVs. You can control
|
|
/// the refinement detail via ::HAPI_CookOptions::curveRefineLOD.
|
|
/// If it's false, the curve type (NURBS, Bezier etc) will be left as is.
|
|
HAPI_Bool refineCurveToLinear;
|
|
|
|
/// Controls the number of divisions per unit distance when refining
|
|
/// a curve to linear. The default in Houdini is 8.0.
|
|
float curveRefineLOD;
|
|
|
|
/// If this option is turned on, then we will recursively clear the
|
|
/// errors and warnings (and messages) of all nodes before performing
|
|
/// the cook.
|
|
HAPI_Bool clearErrorsAndWarnings;
|
|
|
|
/// Decide whether to recursively cook all templated geos or not.
|
|
HAPI_Bool cookTemplatedGeos;
|
|
|
|
/// Decide whether to split points by vertex attributes. This takes
|
|
/// all vertex attributes and tries to copy them to their respective
|
|
/// points. If two vertices have any difference in their attribute values,
|
|
/// the corresponding point is split into two points. This is repeated
|
|
/// until all the vertex attributes have been copied to the points.
|
|
///
|
|
/// With this option enabled, you can reduce the total number of vertices
|
|
/// on a game engine side as sharing of attributes (like UVs) is optimized.
|
|
/// To make full use of this feature, you have to think of Houdini points
|
|
/// as game engine vertices (sharable). With this option OFF (or before
|
|
/// this feature existed) you had to map Houdini vertices to game engine
|
|
/// vertices, to make sure all attribute values are accounted for.
|
|
HAPI_Bool splitPointsByVertexAttributes;
|
|
|
|
/// Choose how you want the cook to handle packed primitives.
|
|
/// The default is: ::HAPI_PACKEDPRIM_INSTANCING_MODE_DISABLED
|
|
HAPI_PackedPrimInstancingMode packedPrimInstancingMode;
|
|
|
|
/// Choose which special part types should be handled. Unhandled special
|
|
/// part types will just be refined to ::HAPI_PARTTYPE_MESH.
|
|
HAPI_Bool handleBoxPartTypes;
|
|
HAPI_Bool handleSpherePartTypes;
|
|
|
|
/// If enabled, sets the ::HAPI_PartInfo::hasChanged member during the
|
|
/// cook. If disabled, the member will always be true. Checking for
|
|
/// part changes can be expensive, so there is a potential performance
|
|
/// gain when disabled.
|
|
HAPI_Bool checkPartChanges;
|
|
|
|
/// For internal use only. :)
|
|
int extraFlags;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_CookOptions )
|
|
|
|
// NODES --------------------------------------------------------------------
|
|
|
|
struct HAPI_API HAPI_NodeInfo
|
|
{
|
|
HAPI_NodeId id;
|
|
HAPI_NodeId parentId;
|
|
HAPI_StringHandle nameSH;
|
|
HAPI_NodeType type;
|
|
|
|
/// Always true unless the asset's definition has changed due to loading
|
|
/// a duplicate asset definition and from another OTL asset library
|
|
/// file OR deleting the OTL asset library file used by this node's asset.
|
|
HAPI_Bool isValid;
|
|
|
|
/// Total number of cooks of this node.
|
|
int totalCookCount;
|
|
|
|
/// Use this unique id to grab the OP_Node pointer for this node.
|
|
/// If you're linking against the C++ HDK, include the OP_Node.h header
|
|
/// and call OP_Node::lookupNode().
|
|
int uniqueHoudiniNodeId;
|
|
|
|
/// This is the internal node path in the Houdini scene graph. This path
|
|
/// is meant to be abstracted away for most client purposes but for
|
|
/// advanced uses it can come in handy.
|
|
HAPI_StringHandle internalNodePathSH;
|
|
|
|
/// Total number of parameters this asset has exposed. Includes hidden
|
|
/// parameters.
|
|
/// See @ref HAPI_Parameters.
|
|
int parmCount;
|
|
|
|
/// Number of values. A single parameter may have more than one value so
|
|
/// this number is more than or equal to ::HAPI_NodeInfo::parmCount.
|
|
/// @{
|
|
int parmIntValueCount;
|
|
int parmFloatValueCount;
|
|
int parmStringValueCount;
|
|
/// @}
|
|
|
|
/// The total number of choices among all the combo box parameters.
|
|
/// See @ref HAPI_Parameters_ChoiceLists.
|
|
int parmChoiceCount;
|
|
|
|
/// The number of child nodes. This is 0 for all nodes that are not
|
|
/// node networks.
|
|
int childNodeCount;
|
|
|
|
/// The number of inputs this specific node has.
|
|
int inputCount;
|
|
|
|
/// The number of outputs this specific node has.
|
|
int outputCount;
|
|
|
|
/// Nodes created via scripts or via ::HAPI_CreateNode() will be have
|
|
/// this set to true. Only such nodes can be deleted using
|
|
/// ::HAPI_DeleteNode().
|
|
HAPI_Bool createdPostAssetLoad;
|
|
|
|
/// Indicates if this node will change over time
|
|
HAPI_Bool isTimeDependent;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_NodeInfo )
|
|
|
|
// PARAMETERS ---------------------------------------------------------------
|
|
|
|
/// @struct HAPI_ParmInfo
|
|
///
|
|
/// Contains parameter information like name, label, type, and size.
|
|
///
|
|
struct HAPI_API HAPI_ParmInfo
|
|
{
|
|
/// The parent id points to the id of the parent parm
|
|
/// of this parm. The parent parm is something like a folder.
|
|
HAPI_ParmId id;
|
|
|
|
/// Parameter id of the parent of this parameter.
|
|
HAPI_ParmId parentId;
|
|
|
|
/// Child index within its immediate parent parameter.
|
|
int childIndex;
|
|
|
|
/// The HAPI type of the parm
|
|
HAPI_ParmType type;
|
|
|
|
/// The Houdini script-type of the parm
|
|
HAPI_PrmScriptType scriptType;
|
|
|
|
/// Some parameter types require additional type information.
|
|
/// - File path parameters will indicate what file extensions they
|
|
/// expect in a space-separated list of wild-cards. This is set
|
|
/// in the Operator Type Properties using the File Pattern
|
|
/// parameter property.
|
|
/// For example, for filtering by PNG and JPG only: "*.png *.jpg"
|
|
HAPI_StringHandle typeInfoSH;
|
|
|
|
/// For the majority of parameter types permission will not be applicable.
|
|
/// For file path parameters these permissions will indicate how the
|
|
/// asset plans to use the file: whether it will only read it, only write
|
|
/// to it, or both. This is set in the Operator Type Properties using
|
|
/// the Browse Mode parameter property.
|
|
HAPI_Permissions permissions;
|
|
|
|
/// Number of tags on this paramter.
|
|
int tagCount;
|
|
|
|
/// Tuple size. For scalar parameters this value is 1, but for vector
|
|
/// parameters this value can be greater. For example, a 3 vector would
|
|
/// have a size of 3. For folders and folder lists, this value is the
|
|
/// number of children they own.
|
|
int size;
|
|
|
|
/// Any ::HAPI_ParmType can be a choice list. If this is set to
|
|
/// ::HAPI_CHOICELISTTYPE_NONE, than this parameter is NOT a choice list.
|
|
/// Otherwise, the parameter is a choice list of the indicated type.
|
|
/// See @ref HAPI_Parameters_ChoiceLists.
|
|
HAPI_ChoiceListType choiceListType;
|
|
|
|
/// Any ::HAPI_ParmType can be a choice list. If the parameter is a
|
|
/// choice list, this tells you how many choices it currently has.
|
|
/// Note that some menu parameters can have a dynamic number of choices
|
|
/// so it is important that this count is re-checked after every cook.
|
|
/// See @ref HAPI_Parameters_ChoiceLists.
|
|
int choiceCount;
|
|
|
|
/// Note that folders are not real parameters in Houdini so they do not
|
|
/// have names. The folder names given here are generated from the name
|
|
/// of the folderlist (or switcher) parameter which is a parameter. The
|
|
/// folderlist parameter simply defines how many of the "next" parameters
|
|
/// belong to the first folder, how many of the parameters after that
|
|
/// belong to the next folder, and so on. This means that folder names
|
|
/// can change just by reordering the folders around so don't rely on
|
|
/// them too much. The only guarantee here is that the folder names will
|
|
/// be unique among all other parameter names.
|
|
HAPI_StringHandle nameSH;
|
|
|
|
/// The label string for the parameter
|
|
HAPI_StringHandle labelSH;
|
|
|
|
/// If this parameter is a multiparm instance than the
|
|
/// ::HAPI_ParmInfo::templateNameSH will be the hash-templated parm name,
|
|
/// containing #'s for the parts of the name that use the instance number.
|
|
/// Compared to the ::HAPI_ParmInfo::nameSH, the ::HAPI_ParmInfo::nameSH
|
|
/// will be the ::HAPI_ParmInfo::templateNameSH but with the #'s
|
|
/// replaced by the instance number. For regular parms, the
|
|
/// ::HAPI_ParmInfo::templateNameSH is identical to the
|
|
/// ::HAPI_ParmInfo::nameSH.
|
|
HAPI_StringHandle templateNameSH;
|
|
|
|
/// The help string for this parameter
|
|
HAPI_StringHandle helpSH;
|
|
|
|
/// Whether min/max exists for the parameter values.
|
|
/// @{
|
|
HAPI_Bool hasMin;
|
|
HAPI_Bool hasMax;
|
|
HAPI_Bool hasUIMin;
|
|
HAPI_Bool hasUIMax;
|
|
/// @}
|
|
|
|
/// Parameter value range, shared between int and float parameters.
|
|
/// @{
|
|
float min;
|
|
float max;
|
|
float UIMin;
|
|
float UIMax;
|
|
/// @}
|
|
|
|
/// Whether this parm should be hidden from the user entirely. This is
|
|
/// mostly used to expose parameters as asset meta-data but not allow the
|
|
/// user to directly modify them.
|
|
HAPI_Bool invisible;
|
|
|
|
/// Whether this parm should appear enabled or disabled.
|
|
HAPI_Bool disabled;
|
|
|
|
/// If true, it means this parameter doesn't actually exist on the node
|
|
/// in Houdini but was added by Houdini Engine as a spare parameter.
|
|
/// This is just for your information. The behaviour of this parameter
|
|
/// is not any different than a non-spare parameter.
|
|
HAPI_Bool spare;
|
|
|
|
HAPI_Bool joinNext; ///< Whether this parm should be on the same line as
|
|
///< the next parm.
|
|
HAPI_Bool labelNone; ///< Whether the label should be displayed.
|
|
|
|
/// The index to use to look into the values array in order to retrieve
|
|
/// the actual value(s) of this parameter.
|
|
/// @{
|
|
int intValuesIndex;
|
|
int floatValuesIndex;
|
|
int stringValuesIndex;
|
|
int choiceIndex;
|
|
/// @}
|
|
|
|
/// If this is a ::HAPI_PARMTYPE_NODE, this tells you what node types
|
|
/// this parameter accepts.
|
|
HAPI_NodeType inputNodeType;
|
|
|
|
/// The node input parameter could have another subtype filter specified,
|
|
/// like "Object: Geometry Only". In this case, this value will specify
|
|
/// that extra filter. If the filter demands a node that HAPI does not
|
|
/// support, both this and ::HAPI_ParmInfo::inputNodeType will be set to
|
|
/// NONE as such a node is not settable through HAPI.
|
|
HAPI_NodeFlags inputNodeFlag;
|
|
|
|
/// See @ref HAPI_Parameters_MultiParms.
|
|
/// @{
|
|
HAPI_Bool isChildOfMultiParm;
|
|
|
|
int instanceNum; ///< The index of the instance in the multiparm.
|
|
int instanceLength; ///< The number of parms in a multiparm instance.
|
|
int instanceCount; ///< The number of instances in a multiparm.
|
|
|
|
/// First instance's ::HAPI_ParmInfo::instanceNum. Either 0 or 1.
|
|
int instanceStartOffset;
|
|
|
|
HAPI_RampType rampType;
|
|
/// @}
|
|
|
|
/// Provides the raw condition string which is used to evaluate the
|
|
/// the visibility of a parm
|
|
HAPI_StringHandle visibilityConditionSH;
|
|
|
|
/// Provides the raw condition string which is used to evalute whether
|
|
/// a parm is enabled or disabled
|
|
HAPI_StringHandle disabledConditionSH;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_ParmInfo )
|
|
|
|
struct HAPI_API HAPI_ParmChoiceInfo
|
|
{
|
|
HAPI_ParmId parentParmId;
|
|
HAPI_StringHandle labelSH;
|
|
|
|
/// This evaluates to the value of the token associated with the label
|
|
/// applies to string menus only.
|
|
HAPI_StringHandle valueSH;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_ParmChoiceInfo )
|
|
|
|
// HANDLES ------------------------------------------------------------------
|
|
|
|
/// @struct HAPI_HandleInfo
|
|
///
|
|
/// Contains handle information such as the type of handle
|
|
/// (translate, rotate, scale, softxform ...etc) and the number of
|
|
/// parameters the current handle is bound to.
|
|
///
|
|
struct HAPI_API HAPI_HandleInfo
|
|
{
|
|
HAPI_StringHandle nameSH;
|
|
HAPI_StringHandle typeNameSH;
|
|
|
|
int bindingsCount;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_HandleInfo )
|
|
|
|
/// @struct HAPI_HandleBindingInfo
|
|
///
|
|
/// Contains binding information that maps the handle parameter to
|
|
/// the asset parameter. The index is only used for int and float vector
|
|
/// and colour parms.
|
|
///
|
|
struct HAPI_API HAPI_HandleBindingInfo
|
|
{
|
|
HAPI_StringHandle handleParmNameSH;
|
|
HAPI_StringHandle assetParmNameSH;
|
|
|
|
HAPI_ParmId assetParmId;
|
|
int assetParmIndex;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_HandleBindingInfo )
|
|
|
|
// OBJECTS ------------------------------------------------------------------
|
|
|
|
struct HAPI_API HAPI_ObjectInfo
|
|
{
|
|
HAPI_StringHandle nameSH;
|
|
|
|
/// (deprecated)
|
|
HAPI_StringHandle objectInstancePathSH;
|
|
|
|
/// For incremental updates. Indicates whether the object's transform
|
|
/// has changed. Refreshed only during an asset cook.
|
|
HAPI_Bool hasTransformChanged;
|
|
|
|
/// For incremental updates. Indicates whether any of the object's
|
|
/// geometry nodes have changed. Refreshed only during an asset cook.
|
|
HAPI_Bool haveGeosChanged;
|
|
|
|
/// Whether the object is hidden and should not be shown. Some objects
|
|
/// should be hidden but still brought into the host environment, for
|
|
/// example those used only for instancing.
|
|
/// See @ref HAPI_Instancing.
|
|
HAPI_Bool isVisible;
|
|
|
|
/// See @ref HAPI_Instancing.
|
|
HAPI_Bool isInstancer;
|
|
|
|
/// Determine if this object is being instanced. Normally, this implies
|
|
/// that while this object may not be visible, it should still be
|
|
/// brought into the host application because it is needed by an instancer.
|
|
/// See @ref HAPI_Instancing.
|
|
HAPI_Bool isInstanced;
|
|
|
|
/// (deprecated) The number of geometries under this object. For those familiar
|
|
/// with Houdini, this number will always include the one visible SOP and any
|
|
/// SOPs that were exposed as "editable" or "templated".
|
|
/// See @ref HAPI_Geos.
|
|
int geoCount;
|
|
|
|
/// Use the node id to get the node's parameters.
|
|
/// Using the HDK, you can also get the raw node C++ pointer for this
|
|
/// object's internal node.
|
|
/// See @ref HAPI_Nodes_Basics.
|
|
HAPI_NodeId nodeId;
|
|
|
|
/// If the object is an instancer, this variable gives the object id of
|
|
/// the object that should be instanced.
|
|
/// See @ref HAPI_Instancing.
|
|
HAPI_NodeId objectToInstanceId;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_ObjectInfo )
|
|
|
|
// GEOMETRY -----------------------------------------------------------------
|
|
|
|
struct HAPI_API HAPI_GeoInfo
|
|
{
|
|
HAPI_GeoType type;
|
|
HAPI_StringHandle nameSH;
|
|
|
|
/// Use the node id to get the node's parameters.
|
|
/// Using the HDK, you can also get the raw node C++ pointer for this
|
|
/// object's internal node.
|
|
HAPI_NodeId nodeId;
|
|
|
|
/// Whether the SOP node has been exposed by dragging it into the
|
|
/// editable nodes section of the asset definition.
|
|
HAPI_Bool isEditable;
|
|
|
|
/// Has the templated flag turned on which means "expose as read-only".
|
|
HAPI_Bool isTemplated;
|
|
|
|
/// Final Result (Display SOP).
|
|
HAPI_Bool isDisplayGeo;
|
|
|
|
/// For incremental updates.
|
|
HAPI_Bool hasGeoChanged;
|
|
|
|
/// (deprecated) This variable is deprecated and should no longer be used.
|
|
/// Materials are now separate from parts. They are maintained at the
|
|
/// asset level so you only need to check if the material itself has
|
|
/// changed via ::HAPI_MaterialInfo::hasChanged instead of the material
|
|
/// on the part.
|
|
HAPI_Bool hasMaterialChanged;
|
|
|
|
/// Groups.
|
|
/// @{
|
|
int pointGroupCount;
|
|
int primitiveGroupCount;
|
|
/// @}
|
|
|
|
/// Total number of parts this geometry contains.
|
|
/// See @ref HAPI_Parts.
|
|
int partCount;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_GeoInfo )
|
|
|
|
struct HAPI_API HAPI_PartInfo
|
|
{
|
|
HAPI_PartId id;
|
|
HAPI_StringHandle nameSH;
|
|
HAPI_PartType type;
|
|
|
|
int faceCount;
|
|
int vertexCount;
|
|
int pointCount; ///< Number of points. Note that this is NOT the number
|
|
///< of "positions" as "points" may imply. If your
|
|
///< geometry has 3 points then set this to 3 and not 3*3.
|
|
|
|
int attributeCounts[ HAPI_ATTROWNER_MAX ];
|
|
|
|
/// If this is true, don't display this part. Load its data but then
|
|
/// instance it where the corresponding instancer part tells you to
|
|
/// instance it.
|
|
HAPI_Bool isInstanced;
|
|
|
|
/// The number of parts that this instancer part is instancing.
|
|
/// For example, if we're instancing a curve and a box, they would come
|
|
/// across as two parts, hence this count would be two.
|
|
/// Call ::HAPI_GetInstancedPartIds() to get the list of ::HAPI_PartId's.
|
|
int instancedPartCount;
|
|
|
|
/// The number of instances that this instancer part is instancing.
|
|
/// Using the same example as with ::HAPI_PartInfo::instancedPartCount,
|
|
/// if I'm instancing the merge of a curve and a box 5 times, this count
|
|
/// would be 5. To be clear, all instanced parts are instanced the same
|
|
/// number of times and with the same transform for each instance.
|
|
/// Call ::HAPI_GetInstancerPartTransforms() to get the transform of
|
|
/// each instance.
|
|
int instanceCount;
|
|
|
|
/// If this is false, the underlying attribute data appear to match that of
|
|
/// the previous cook. In this case you may be able to re-used marshaled
|
|
/// data from the previous cook.
|
|
HAPI_Bool hasChanged;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_PartInfo )
|
|
|
|
/// See @ref HAPI_Attributes.
|
|
struct HAPI_API HAPI_AttributeInfo
|
|
{
|
|
HAPI_Bool exists;
|
|
|
|
HAPI_AttributeOwner owner;
|
|
HAPI_StorageType storage;
|
|
|
|
/// When converting from the Houdini native GA geometry format to the
|
|
/// GT geometry format HAPI uses, some attributes might change owners.
|
|
/// For example, in Houdini GA curves can have points shared by
|
|
/// vertices but the GT format only supports curve vertices
|
|
/// (no points). This means that if you had point attributes on a curve
|
|
/// in Houdini, when it comes out of HAPI those point attributes will now
|
|
/// be vertex attributes. In this case, the ::HAPI_AttributeInfo::owner
|
|
/// will be set to ::HAPI_ATTROWNER_VERTEX but the
|
|
/// ::HAPI_AttributeInfo::originalOwner will be ::HAPI_ATTROWNER_POINT.
|
|
HAPI_AttributeOwner originalOwner;
|
|
|
|
/// Number of attributes. This count will match the number of values
|
|
/// given the owner. For example, if the owner is ::HAPI_ATTROWNER_VERTEX
|
|
/// this count will be the same as the ::HAPI_PartInfo::vertexCount.
|
|
/// To be clear, this is not the number of values in the attribute, rather
|
|
/// it is the number of attributes. If your geometry has three 3D points
|
|
/// then this count will be 3 (not 3*3) while the
|
|
/// ::HAPI_AttributeInfo::tupleSize will be 3.
|
|
int count;
|
|
|
|
/// Number of values per attribute.
|
|
/// Note that this is NOT the memory size of the attribute. It is the
|
|
/// number of values per attributes. Multiplying this by the
|
|
/// size of the ::HAPI_AttributeInfo::storage will give you the memory
|
|
/// size per attribute.
|
|
int tupleSize;
|
|
|
|
/// Total number of elements for an array attribute.
|
|
/// An array attribute can be thought of as a 2 dimensional array where
|
|
/// the 2nd dimension can vary in size for each element in the 1st
|
|
/// dimension. Therefore this returns the total number of values in
|
|
/// the entire array.
|
|
/// This should be used to determine the total storage
|
|
/// size needed by multiplying with ::HAPI_AttributeInfo::storage.
|
|
/// Note that this will be 0 for a non-array attribute.
|
|
HAPI_Int64 totalArrayElements;
|
|
|
|
/// Attribute type info
|
|
/// This is used to help identify the type of data stored in an attribute.
|
|
/// Using the type is recommended over using just an attribute's name to identify
|
|
/// its purpose.
|
|
HAPI_AttributeTypeInfo typeInfo;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_AttributeInfo )
|
|
|
|
// MATERIALS ----------------------------------------------------------------
|
|
|
|
struct HAPI_API HAPI_MaterialInfo
|
|
{
|
|
/// This is the HAPI node id for the SHOP node this material is attached
|
|
/// to. Use it to get access to the parameters (which contain the
|
|
/// texture paths).
|
|
/// IMPORTANT: When the ::HAPI_MaterialInfo::hasChanged is true this
|
|
/// @p nodeId could have changed. Do not assume ::HAPI_MaterialInfo::nodeId
|
|
/// will never change for a specific material.
|
|
HAPI_NodeId nodeId;
|
|
|
|
HAPI_Bool exists;
|
|
|
|
HAPI_Bool hasChanged;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_MaterialInfo )
|
|
|
|
struct HAPI_API HAPI_ImageFileFormat
|
|
{
|
|
HAPI_StringHandle nameSH;
|
|
HAPI_StringHandle descriptionSH;
|
|
HAPI_StringHandle defaultExtensionSH;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_ImageFileFormat )
|
|
|
|
struct HAPI_API HAPI_ImageInfo
|
|
{
|
|
/// Unlike the other members of this struct changing imageFileFormatNameSH
|
|
/// and giving this struct back to HAPI_SetImageInfo() nothing will happen.
|
|
/// Use this member variable to derive which image file format will be used
|
|
/// by the HAPI_ExtractImageTo...() functions if called with
|
|
/// image_file_format_name set to NULL. This way, you can decide whether
|
|
/// to ask for a file format conversion (slower) or not (faster).
|
|
HAPI_StringHandle imageFileFormatNameSH; // Read-only
|
|
|
|
int xRes;
|
|
int yRes;
|
|
|
|
HAPI_ImageDataFormat dataFormat;
|
|
|
|
HAPI_Bool interleaved; ///< ex: true = RGBRGBRGB, false = RRRGGGBBB
|
|
HAPI_ImagePacking packing;
|
|
|
|
/// Adjust the gamma of the image. For anything less than
|
|
/// ::HAPI_IMAGE_DATA_INT16, you probably want to leave this as 2.2.
|
|
double gamma;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_ImageInfo )
|
|
|
|
// ANIMATION ----------------------------------------------------------------
|
|
|
|
struct HAPI_API HAPI_Keyframe
|
|
{
|
|
float time;
|
|
float value;
|
|
float inTangent;
|
|
float outTangent;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_Keyframe )
|
|
|
|
// VOLUMES ------------------------------------------------------------------
|
|
|
|
/// @struct HAPI_VolumeInfo
|
|
///
|
|
/// This represents a volume primitive but does not contain the actual voxel
|
|
/// values, which can be retrieved on a per-tile basis.
|
|
///
|
|
/// See @ref HAPI_Volumes.
|
|
///
|
|
struct HAPI_API HAPI_VolumeInfo
|
|
{
|
|
HAPI_StringHandle nameSH;
|
|
|
|
HAPI_VolumeType type;
|
|
|
|
/// Each voxel is identified with an index. The indices will range
|
|
/// between:
|
|
/// [ ( minX, minY, minZ ), ( minX+xLength, minY+yLength, minZ+zLength ) )
|
|
/// @{
|
|
int xLength;
|
|
int yLength;
|
|
int zLength;
|
|
int minX;
|
|
int minY;
|
|
int minZ;
|
|
/// @}
|
|
|
|
/// Number of values per voxel.
|
|
/// The tuple size field is 1 for scalars and 3 for vector data.
|
|
int tupleSize;
|
|
|
|
/// Can be either ::HAPI_STORAGETYPE_INT or ::HAPI_STORAGETYPE_FLOAT.
|
|
HAPI_StorageType storage;
|
|
|
|
/// The dimensions of each tile.
|
|
/// This can be 8 or 16, denoting an 8x8x8 or 16x16x16 tiles.
|
|
int tileSize;
|
|
|
|
/// The transform of the volume with respect to the lengths.
|
|
/// The volume may be positioned anywhere in space.
|
|
HAPI_Transform transform;
|
|
|
|
/// Denotes special situations where the volume tiles are not perfect
|
|
/// cubes, but are tapered instead.
|
|
HAPI_Bool hasTaper;
|
|
|
|
/// If there is taper involved, denotes the amount of taper involved.
|
|
/// @{
|
|
float xTaper;
|
|
float yTaper;
|
|
/// @}
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_VolumeInfo )
|
|
|
|
/// @struct HAPI_VolumeTileInfo
|
|
///
|
|
/// A HAPI_VolumeTileInfo represents an cube subarray of the volume.
|
|
/// The size of each dimension is HAPI_VoluemInfo::tileSize
|
|
/// bbox [(minX, minY, minZ), (minX+tileSize, minY+tileSize, minZ+tileSize))
|
|
///
|
|
struct HAPI_API HAPI_VolumeTileInfo
|
|
{
|
|
int minX;
|
|
int minY;
|
|
int minZ;
|
|
HAPI_Bool isValid;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_VolumeTileInfo )
|
|
|
|
/// @struct HAPI_VolumeVisualInfo
|
|
///
|
|
/// Describes the visual settings of a volume.
|
|
///
|
|
struct HAPI_API HAPI_VolumeVisualInfo
|
|
{
|
|
HAPI_VolumeVisualType type;
|
|
float iso;
|
|
float density;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_VolumeVisualInfo )
|
|
|
|
// CURVES -------------------------------------------------------------------
|
|
|
|
/// @struct HAPI_CurveInfo
|
|
///
|
|
/// This represents the meta-data associated with a curve mesh (a number
|
|
/// of curves of the same type).
|
|
struct HAPI_API HAPI_CurveInfo
|
|
{
|
|
HAPI_CurveType curveType;
|
|
int curveCount; ///< The number of curves contained in this curve mesh.
|
|
int vertexCount; ///< The number of control vertices (CVs) for all curves.
|
|
int knotCount; ///< The number of knots for all curves.
|
|
|
|
HAPI_Bool isPeriodic;
|
|
///< Whether the curves in this curve mesh are periodic.
|
|
HAPI_Bool isRational;
|
|
///< Whether the curves in this curve mesh are rational.
|
|
int order; ///< Order of 1 is invalid. 0 means there is a varying order.
|
|
|
|
HAPI_Bool hasKnots; ///< Whether the curve has knots.
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_CurveInfo )
|
|
|
|
// BASIC PRIMITIVES ---------------------------------------------------------
|
|
|
|
struct HAPI_API HAPI_BoxInfo
|
|
{
|
|
float center[ HAPI_POSITION_VECTOR_SIZE ];
|
|
float size[ HAPI_SCALE_VECTOR_SIZE ];
|
|
float rotation[ HAPI_EULER_VECTOR_SIZE ];
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_BoxInfo )
|
|
|
|
struct HAPI_API HAPI_SphereInfo
|
|
{
|
|
float center[ HAPI_POSITION_VECTOR_SIZE ];
|
|
float radius;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_SphereInfo )
|
|
|
|
// PDG Structs --------------------------------------------------------------
|
|
|
|
struct HAPI_API HAPI_PDG_EventInfo
|
|
{
|
|
HAPI_NodeId nodeId; /// id of related node
|
|
HAPI_PDG_WorkitemId workitemId; /// id of related workitem
|
|
HAPI_PDG_WorkitemId dependencyId; /// id of related workitem dependency
|
|
int currentState; /// (HAPI_PDG_WorkItemState) value of current state for state change
|
|
int lastState; /// (HAPI_PDG_WorkItemState) value of last state for state change
|
|
int eventType; /// (HAPI_PDG_EventType) event type
|
|
HAPI_StringHandle msgSH; /// String handle of the event message (> 0 if there is a message)
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_PDG_EventInfo )
|
|
|
|
struct HAPI_API HAPI_PDG_WorkitemInfo
|
|
{
|
|
int index; /// index of the workitem
|
|
int numResults; /// number of results reported
|
|
HAPI_StringHandle nameSH; /// name of the workitem
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_PDG_WorkitemInfo )
|
|
|
|
struct HAPI_API HAPI_PDG_WorkitemResultInfo
|
|
{
|
|
int resultSH; /// result string data
|
|
int resultTagSH; /// result tag
|
|
HAPI_Int64 resultHash; /// hash value of result
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_PDG_WorkitemResultInfo )
|
|
|
|
// SESSIONSYNC --------------------------------------------------------------
|
|
|
|
/// @struct HAPI_Viewport
|
|
///
|
|
/// Contains the information for synchronizing viewport between Houdini
|
|
/// and other applications. When SessionSync is enabled, Houdini will
|
|
/// update this struct with its viewport state. It will also update
|
|
/// its own viewport if this struct has changed.
|
|
/// The data stored is in Houdini's right-handed Y-up coordinate system.
|
|
///
|
|
struct HAPI_API HAPI_Viewport
|
|
{
|
|
/// The world position of the viewport camera's pivot.
|
|
float position[ HAPI_POSITION_VECTOR_SIZE ];
|
|
|
|
/// The direction of the viewport camera stored as a quaternion.
|
|
float rotationQuaternion[ HAPI_QUATERNION_VECTOR_SIZE ];
|
|
|
|
/// The offset from the pivot to the viewport camera's
|
|
/// actual world position.
|
|
float offset;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_Viewport )
|
|
|
|
/// @struct HAPI_SessionSyncInfo
|
|
///
|
|
/// Contains the information for synchronizing general SessionSync
|
|
/// state between Houdini and other applications. When SessionSync
|
|
/// is enabled, Houdini will update this struct with its state.
|
|
/// It will also update its internal state if this struct has
|
|
/// changed.
|
|
///
|
|
struct HAPI_API HAPI_SessionSyncInfo
|
|
{
|
|
/// Specifies whether Houdini's current time is used for Houdini Engine
|
|
/// cooks. This is automatically enabled in SessionSync where
|
|
/// Houdini's viewport forces cooks to use Houdini's current time.
|
|
/// This is disabled in non-SessionSync mode, but can be toggled to
|
|
/// override default behaviour.
|
|
HAPI_Bool cookUsingHoudiniTime;
|
|
|
|
/// Specifies whether viewport synchronization is enabled. If enabled,
|
|
/// in SessionSync, Houdini will update its own viewport using
|
|
/// ::HAPI_Viewport.
|
|
HAPI_Bool syncViewport;
|
|
};
|
|
HAPI_C_STRUCT_TYPEDEF( HAPI_SessionSyncInfo )
|
|
|
|
#endif // __HAPI_COMMON_h__
|