Files

495 lines
21 KiB
C++

/*
* Copyright (c) <2017> Side Effects Software Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
*/
#pragma once
/** Unreal Editor headers. **/
#if WITH_EDITOR
#include "CoreMinimal.h"
#include "ObjectTools.h"
#include "AssetTypeActions_Base.h"
#include "ComponentAssetBroker.h"
#include "PackageTools.h"
#include "ThumbnailHelpers.h"
#include "LevelEditor.h"
#include "Interfaces/IMainFrameModule.h"
#include "ClassIconFinder.h"
#include "ScopedTransaction.h"
#include "RawMesh.h"
#include "Kismet2/KismetEditorUtilities.h"
#include "Interfaces/IPluginManager.h"
#include "ISettingsModule.h"
#include "DesktopPlatformModule.h"
#include "Editor.h"
#endif
/** Other Unreal headers. **/
//#include "CoreUObject.h"
#include "Modules/ModuleManager.h"
#include "EngineModule.h"
#include "Engine/TextureDefines.h"
#include "Engine/EngineTypes.h"
#include "MaterialShared.h"
#include "CollisionQueryParams.h"
#include "Engine/CollisionProfile.h"
#include "PhysicsEngine/BodyInstance.h"
#include "PhysicsEngine/BodySetup.h"
#include "AssetData.h"
#include "AssetRegistryModule.h"
#include "HitProxies.h"
#include "Components.h"
#include "ComponentReregisterContext.h"
#include "Engine/StaticMesh.h"
#include "LandscapeProxy.h"
#include "LandscapeDataAccess.h"
#include "Engine/Level.h"
#include "Curves/CurveBase.h"
#include "Curves/CurveFloat.h"
#include "Curves/CurveLinearColor.h"
#include "ImageUtils.h"
#include "Internationalization/Internationalization.h"
/** Houdini Engine Runtime Module Localization. **/
#include "HoudiniEngineRuntimeLocalization.h"
/** Plugin version enum and CustomVersionRegistration */
#include "HoudiniPluginSerializationVersion.h"
/** Houdini Engine headers. **/
#include <vector>
#include <string>
#include <stdint.h>
#include "HAPI.h"
#include "HAPI_Version.h"
/** Whether to enable logging. **/
#define HOUDINI_ENGINE_LOGGING 1
/** Define module names. **/
#define HOUDINI_MODULE_EDITOR "HoudiniEngineEditor"
#define HOUDINI_MODULE_RUNTIME "HoudiniEngine"
/** See whether we are in Editor or Engine module. **/
#ifdef HOUDINI_ENGINE_EDITOR
#define HOUDINI_LOCTEXT_NAMESPACE HOUDINI_MODULE_EDITOR
DECLARE_LOG_CATEGORY_EXTERN( LogHoudiniEngineEditor, Log, All );
#else
#define HOUDINI_LOCTEXT_NAMESPACE HOUDINI_MODULE_RUNTIME
DECLARE_LOG_CATEGORY_EXTERN( LogHoudiniEngine, Log, All );
#endif
/** Definitions coming from UBT. **/
#ifndef HOUDINI_ENGINE_HFS_PATH_DEFINE
#define HOUDINI_ENGINE_HFS_PATH ""
#else
#define HOUDINI_ENGINE_STRINGIFY_HELPER(X) #X
#define HOUDINI_ENGINE_STRINGIFY(X) HOUDINI_ENGINE_STRINGIFY_HELPER(X)
#define HOUDINI_ENGINE_HFS_PATH HOUDINI_ENGINE_STRINGIFY(HOUDINI_ENGINE_HFS_PATH_DEFINE)
#endif
/** Some additional logging macros. **/
#ifdef HOUDINI_ENGINE_LOGGING
#ifdef HOUDINI_ENGINE_EDITOR
#define HOUDINI_LOG_HELPER(VERBOSITY, HOUDINI_LOG_TEXT, ...) \
do \
{ \
UE_LOG( LogHoudiniEngineEditor, VERBOSITY, HOUDINI_LOG_TEXT, ##__VA_ARGS__ ); \
} \
while ( 0 )
#else
#define HOUDINI_LOG_HELPER( VERBOSITY, HOUDINI_LOG_TEXT, ... ) \
do \
{ \
UE_LOG( LogHoudiniEngine, VERBOSITY, HOUDINI_LOG_TEXT, ##__VA_ARGS__ ); \
} \
while ( 0 )
#endif
#define HOUDINI_LOG_MESSAGE( HOUDINI_LOG_TEXT, ... ) \
HOUDINI_LOG_HELPER( Log, HOUDINI_LOG_TEXT, ##__VA_ARGS__ )
#define HOUDINI_LOG_FATAL( HOUDINI_LOG_TEXT, ... ) \
HOUDINI_LOG_HELPER( Fatal, HOUDINI_LOG_TEXT, ##__VA_ARGS__ )
#define HOUDINI_LOG_ERROR( HOUDINI_LOG_TEXT, ... ) \
HOUDINI_LOG_HELPER( Error, HOUDINI_LOG_TEXT, ##__VA_ARGS__ )
#define HOUDINI_LOG_WARNING( HOUDINI_LOG_TEXT, ... ) \
HOUDINI_LOG_HELPER( Warning, HOUDINI_LOG_TEXT, ##__VA_ARGS__ )
#define HOUDINI_LOG_DISPLAY( HOUDINI_LOG_TEXT, ... ) \
HOUDINI_LOG_HELPER( Display, HOUDINI_LOG_TEXT, ##__VA_ARGS__ )
#else
#define HOUDINI_LOG_MESSAGE( HOUDINI_LOG_TEXT, ... )
#define HOUDINI_LOG_FATAL( HOUDINI_LOG_TEXT, ... )
#define HOUDINI_LOG_ERROR( HOUDINI_LOG_TEXT, ... )
#define HOUDINI_LOG_WARNING( HOUDINI_LOG_TEXT, ... )
#define HOUDINI_LOG_DISPLAY( HOUDINI_LOG_TEXT, ... )
#endif // HOUDINI_ENGINE_LOGGING
/** Error checking - this macro will check the status and return specified parameter. **/
#define HOUDINI_CHECK_ERROR_RETURN_HELPER( HAPI_PARAM_CALL, HAPI_PARAM_RETURN, HAPI_LOG_ROUTINE ) \
do \
{ \
HAPI_Result ResultVariable = HAPI_PARAM_CALL; \
if ( ResultVariable != HAPI_RESULT_SUCCESS ) \
{ \
HAPI_LOG_ROUTINE( TEXT( "Hapi failed: %s" ), *FHoudiniEngineUtils::GetErrorDescription() ); \
return HAPI_PARAM_RETURN; \
} \
} \
while ( 0 )
#define HOUDINI_CHECK_ERROR_RETURN( HAPI_PARAM_CALL, HAPI_PARAM_RETURN ) \
HOUDINI_CHECK_ERROR_RETURN_HELPER( HAPI_PARAM_CALL, HAPI_PARAM_RETURN, HOUDINI_LOG_ERROR )
/* Error checking - this macro will check the status. **/
#define HOUDINI_CHECK_ERROR_HELPER( HAPI_PARAM_RESULT, HAPI_PARAM_CALL, HAPI_LOG_ROUTINE ) \
do \
{ \
*HAPI_PARAM_RESULT = HAPI_PARAM_CALL; \
if ( *HAPI_PARAM_RESULT != HAPI_RESULT_SUCCESS ) \
{ \
HAPI_LOG_ROUTINE( TEXT( "Hapi failed: %s" ), *FHoudiniEngineUtils::GetErrorDescription() ); \
} \
} \
while ( 0 )
#define HOUDINI_CHECK_ERROR( HAPI_PARAM_RESULT, HAPI_PARAM_CALL ) \
HOUDINI_CHECK_ERROR_HELPER( HAPI_PARAM_RESULT, HAPI_PARAM_CALL, HOUDINI_LOG_ERROR )
/** HAPI related attribute definitions. **/
#define HAPI_UNREAL_CLIENT_NAME "unreal"
/** Names of attributes used for data exchange between Unreal and Houdini Engine. **/
#define HAPI_UNREAL_ATTRIB_INSTANCE_OVERRIDE "unreal_instance"
#define HAPI_UNREAL_ATTRIB_SPLIT_INSTANCES "unreal_split_instances"
#define HAPI_UNREAL_ATTRIB_MATERIAL "unreal_material"
#define HAPI_UNREAL_ATTRIB_MATERIAL_HOLE "unreal_material_hole"
#define HAPI_UNREAL_ATTRIB_MATERIAL_FALLBACK "unreal_face_material"
#define HAPI_UNREAL_ATTRIB_MATERIAL_INSTANCE "unreal_material_instance"
#define HAPI_UNREAL_ATTRIB_MATERIAL_HOLE_INSTANCE "unreal_material_hole_instance"
#define HAPI_UNREAL_ATTRIB_FACE_SMOOTHING_MASK "unreal_face_smoothing_mask"
#define HAPI_UNREAL_ATTRIB_LIGHTMAP_RESOLUTION "unreal_lightmap_resolution"
#define HAPI_UNREAL_ATTRIB_GENERATED_MESH_NAME "unreal_generated_mesh_name"
#define HAPI_UNREAL_ATTRIB_LANDSCAPE_TILE_NAME HAPI_ATTRIB_NAME
#define HAPI_UNREAL_ATTRIB_LANDSCAPE_VERTEX_INDEX "unreal_vertex_index"
//#define HAPI_UNREAL_ATTRIB_LANDSCAPE_NAME "unreal_landscape"
#define HAPI_UNREAL_ATTRIB_INPUT_MESH_NAME "unreal_input_mesh_name"
#define HAPI_UNREAL_ATTRIB_INPUT_SOURCE_FILE "unreal_input_source_file"
#define HAPI_UNREAL_ATTRIB_MESH_SOCKET_PREFIX "mesh_socket"
#define HAPI_UNREAL_ATTRIB_MESH_SOCKET_NAME "mesh_socket_name"
#define HAPI_UNREAL_ATTRIB_MESH_SOCKET_NAME_OLD "unreal_mesh_socket_name"
#define HAPI_UNREAL_ATTRIB_MESH_SOCKET_ACTOR "mesh_socket_actor"
#define HAPI_UNREAL_ATTRIB_MESH_SOCKET_ACTOR_OLD "unreal_mesh_socket_actor"
#define HAPI_UNREAL_ATTRIB_MESH_SOCKET_TAG "mesh_socket_tag"
#define HAPI_UNREAL_ATTRIB_MESH_SOCKET_TAG_OLD "unreal_mesh_socket_tag"
#define HAPI_UNREAL_ATTRIB_GENERIC_UPROP_PREFIX "unreal_uproperty_"
#define HAPI_UNREAL_ATTRIB_GENERIC_MAT_PARAM_PREFIX "unreal_material_parameter_"
#define HAPI_UNREAL_ATTRIB_INSTANCE_COLOR "unreal_instance_color"
#define HAPI_UNREAL_ATTRIB_BAKE_FOLDER "unreal_bake_folder"
#define HAPI_UNREAL_ATTRIB_BAKE_NAME "unreal_bake_name"
/** Names of other Houdini Engine attributes and parameters. **/
#define HAPI_UNREAL_ATTRIB_INSTANCE "instance"
#define HAPI_UNREAL_ATTRIB_INSTANCE_ROTATION "rot"
#define HAPI_UNREAL_ATTRIB_INSTANCE_SCALE "scale"
#define HAPI_UNREAL_ATTRIB_INSTANCE_POSITION HAPI_ATTRIB_POSITION
#define HAPI_UNREAL_ATTRIB_POSITION HAPI_ATTRIB_POSITION
#define HAPI_UNREAL_ATTRIB_ROTATION "rot"
#define HAPI_UNREAL_ATTRIB_SCALE "scale"
#define HAPI_UNREAL_ATTRIB_UNIFORM_SCALE "pscale"
#define HAPI_UNREAL_ATTRIB_COLOR HAPI_ATTRIB_COLOR
#define HAPI_UNREAL_ATTRIB_ALPHA "Alpha"
#define HAPI_UNREAL_ATTRIB_LIGHTMAP_COLOR "unreal_lightmap_color"
#define HAPI_UNREAL_ATTRIB_NORMAL HAPI_ATTRIB_NORMAL
#define HAPI_UNREAL_ATTRIB_TANGENTU HAPI_ATTRIB_TANGENT
#define HAPI_UNREAL_ATTRIB_TANGENTV HAPI_ATTRIB_TANGENT2
#define HAPI_UNREAL_ATTRIB_UV HAPI_ATTRIB_UV
#define HAPI_UNREAL_ATTRIB_UV2 HAPI_ATTRIB_UV2
//#define HAPI_UNREAL_ATTRIB_UV_WEIGHTMAP "unreal_weightmap_uv"
#define HAPI_UNREAL_PARAM_CURVE_TYPE "type"
#define HAPI_UNREAL_PARAM_CURVE_METHOD "method"
#define HAPI_UNREAL_PARAM_CURVE_COORDS "coords"
#define HAPI_UNREAL_PARAM_CURVE_CLOSED "close"
#define HAPI_UNREAL_PARAM_TRANSLATE "t"
#define HAPI_UNREAL_PARAM_ROTATE "r"
#define HAPI_UNREAL_PARAM_SCALE "s"
#define HAPI_UNREAL_PARAM_PIVOT "p"
#define HAPI_UNREAL_PARAM_UNIFORMSCALE "scale"
#define HAPI_UNREAL_PARAM_FILE "file"
/** Handle types. **/
#define HAPI_UNREAL_HANDLE_TRANSFORM "xform"
#define HAPI_UNREAL_HANDLE_BOUNDER "bound"
/** Ramp related defines. **/
#define HAPI_UNREAL_RAMP_FLOAT_AXIS_X "position"
#define HAPI_UNREAL_RAMP_FLOAT_AXIS_Y "value"
#define HAPI_UNREAL_RAMP_COLOR_AXIS_X "position"
#define HAPI_UNREAL_RAMP_COLOR_AXIS_Y "color"
/** Ramp Key interpolation values. **/
#define HAPI_UNREAL_RAMP_KEY_INTERPOLATION_CONSTANT "Constant"
#define HAPI_UNREAL_RAMP_KEY_INTERPOLATION_LINEAR "Linear"
#define HAPI_UNREAL_RAMP_KEY_INTERPOLATION_CATMULL_ROM "Catmull-Rom"
#define HAPI_UNREAL_RAMP_KEY_INTERPOLATION_MONOTONE_CUBIC "Monotone Cubic"
#define HAPI_UNREAL_RAMP_KEY_INTERPOLATION_BEZIER "Bezier"
#define HAPI_UNREAL_RAMP_KEY_INTERPOLATION_B_SPLINE "B-Spline"
#define HAPI_UNREAL_RAMP_KEY_INTERPOLATION_HERMITE "Hermite"
/** Texture planes. **/
#define HAPI_UNREAL_MATERIAL_TEXTURE_COLOR_ALPHA "C A"
#define HAPI_UNREAL_MATERIAL_TEXTURE_COLOR "C"
#define HAPI_UNREAL_MATERIAL_TEXTURE_ALPHA "A"
#define HAPI_UNREAL_MATERIAL_TEXTURE_NORMAL "N"
/** Materials Diffuse. **/
#define HAPI_UNREAL_PARAM_TEXTURE_LAYERS_NUM "ogl_numtex"
#define HAPI_UNREAL_PARAM_MAP_DIFFUSE_0 "ogl_tex1"
#define HAPI_UNREAL_PARAM_MAP_DIFFUSE_1 "basecolor_texture"
#define HAPI_UNREAL_PARAM_COLOR_DIFFUSE_0 "ogl_diff"
#define HAPI_UNREAL_PARAM_COLOR_DIFFUSE_1 "basecolor"
#define HAPI_UNREAL_PARAM_MAP_DIFFUSE_COLOR_SPACE "basecolor_textureColorSpace"
/** Materials Normal. **/
#define HAPI_UNREAL_PARAM_MAP_NORMAL_0 "ogl_normalmap"
#define HAPI_UNREAL_PARAM_MAP_NORMAL_1 "normalTexture"
#define HAPI_UNREAL_PARAM_MAP_NORMAL_TYPE "ogl_normalmap_type"
#define HAPI_UNREAL_PARAM_MAP_NORMAL_TYPE_TANGENT "Tangent Space"
#define HAPI_UNREAL_PARAM_MAP_NORMAL_TYPE_WORLD "World Space"
#define HAPI_UNREAL_PARAM_MAP_NORMAL_COLOR_SPACE "normalTexColorSpace"
/** Materials Specular. **/
#define HAPI_UNREAL_PARAM_MAP_SPECULAR_0 "ogl_specmap"
#define HAPI_UNREAL_PARAM_MAP_SPECULAR_1 "reflect_texture"
#define HAPI_UNREAL_PARAM_COLOR_SPECULAR_0 "ogl_spec"
#define HAPI_UNREAL_PARAM_COLOR_SPECULAR_1 "reflect"
#define HAPI_UNREAL_PARAM_MAP_SPECULAR_COLOR_SPACE "reflect_textureColorSpace"
/** Materials Roughness. **/
#define HAPI_UNREAL_PARAM_MAP_ROUGHNESS_0 "ogl_roughmap"
#define HAPI_UNREAL_PARAM_MAP_ROUGHNESS_1 "rough_texture"
#define HAPI_UNREAL_PARAM_VALUE_ROUGHNESS_0 "ogl_rough"
#define HAPI_UNREAL_PARAM_VALUE_ROUGHNESS_1 "rough"
#define HAPI_UNREAL_PARAM_MAP_ROUGHNESS_COLOR_SPACE "rough_textureColorSpace"
/** Materials Metallic. **/
#define HAPI_UNREAL_PARAM_MAP_METALLIC "metallic_texture"
#define HAPI_UNREAL_PARAM_VALUE_METALLIC "metallic"
#define HAPI_UNREAL_PARAM_MAP_METALLIC_COLOR_SPACE "metallic_textureColorSpace"
/** Materials Emissive. **/
#define HAPI_UNREAL_PARAM_MAP_EMISSIVE "emitcolor_texture"
#define HAPI_UNREAL_PARAM_MAP_EMISSIVE_COLOR_SPACE "emitcolor_textureColorSpace"
#define HAPI_UNREAL_PARAM_VALUE_EMISSIVE_0 "ogl_emit"
#define HAPI_UNREAL_PARAM_VALUE_EMISSIVE_1 "emitcolor"
/** Materials Opacity. **/
#define HAPI_UNREAL_PARAM_ALPHA_0 "ogl_alpha"
#define HAPI_UNREAL_PARAM_ALPHA_1 "opac"
#define HAPI_UNREAL_PARAM_MAP_OPACITY_0 "ogl_opacitymap"
#define HAPI_UNREAL_PARAM_MAP_OPACITY_1 "opaccolor_texture"
/** Default values for new curves. **/
#define HAPI_UNREAL_PARAM_INPUT_CURVE_COORDS_DEFAULT "0.0, 0.0, 3.0 3.0, 0.0, 3.0"
#define HAPI_UNREAL_PARAM_SPLINE_RESOLUTION_DEFAULT 50.0f
/** Default values for certain UI min and max parameter values **/
#define HAPI_UNREAL_PARAM_INT_UI_MIN 0
#define HAPI_UNREAL_PARAM_INT_UI_MAX 10
#define HAPI_UNREAL_PARAM_FLOAT_UI_MIN 0.0f
#define HAPI_UNREAL_PARAM_FLOAT_UI_MAX 10.0f
/** Suffix for all Unreal materials which are generated from Houdini. **/
#define HAPI_UNREAL_GENERATED_MATERIAL_SUFFIX TEXT("_houdini_material")
/** Group name prefix used for collision geometry generation. **/
#define HAPI_UNREAL_GROUP_GEOMETRY_COLLISION "collision_geo"
/** Group name prefix used for rendered collision geometry generation. **/
#define HAPI_UNREAL_GROUP_GEOMETRY_RENDERED_COLLISION "rendered_collision_geo"
/** Group name prefix used for UCX collision geometry generation **/
#define HAPI_UNREAL_GROUP_GEOMETRY_COLLISION_UCX "collision_geo_ucx"
#define HAPI_UNREAL_GROUP_GEOMETRY_RENDERED_COLLISION_UCX "rendered_collision_geo_ucx"
#define HAPI_UNREAL_GROUP_GEOMETRY_SIMPLE_COLLISION "collision_geo_simple"
#define HAPI_UNREAL_GROUP_GEOMETRY_SIMPLE_RENDERED_COLLISION "rendered_collision_geo_simple"
/** Group name used to mark everything that is not a member of collision or rendered collision group. **/
#define HAPI_UNREAL_GROUP_GEOMETRY_NOT_COLLISION "main_geo"
/** Group name prefix used to mark mesh sockets **/
#define HAPI_UNREAL_GROUP_MESH_SOCKETS "mesh_socket"
#define HAPI_UNREAL_GROUP_MESH_SOCKETS_OLD "socket"
/** Details panel desired sizes. **/
#define HAPI_UNREAL_DESIRED_ROW_VALUE_WIDGET_WIDTH 270
#define HAPI_UNREAL_DESIRED_ROW_FULL_WIDGET_WIDTH 310
#define HAPI_UNREAL_DESIRED_SETTINGS_ROW_VALUE_WIDGET_WIDTH 350
#define HAPI_UNREAL_DESIRED_SETTINGS_ROW_FULL_WIDGET_WIDTH 400
/** Various variable names used to store meta information in generated packages. **/
#define HAPI_UNREAL_PACKAGE_META_GENERATED_OBJECT TEXT( "HoudiniGeneratedObject" )
#define HAPI_UNREAL_PACKAGE_META_GENERATED_NAME TEXT( "HoudiniGeneratedName" )
#define HAPI_UNREAL_PACKAGE_META_GENERATED_TEXTURE_TYPE TEXT( "HoudiniGeneratedTextureType" )
#define HAPI_UNREAL_PACKAGE_META_NODE_PATH TEXT( "HoudiniNodePath" )
#define HAPI_UNREAL_PACKAGE_META_GENERATED_TEXTURE_NORMAL TEXT( "N" )
#define HAPI_UNREAL_PACKAGE_META_GENERATED_TEXTURE_DIFFUSE TEXT( "C_A" )
#define HAPI_UNREAL_PACKAGE_META_GENERATED_TEXTURE_SPECULAR TEXT( "S" )
#define HAPI_UNREAL_PACKAGE_META_GENERATED_TEXTURE_ROUGHNESS TEXT( "R" )
#define HAPI_UNREAL_PACKAGE_META_GENERATED_TEXTURE_METALLIC TEXT( "M" )
#define HAPI_UNREAL_PACKAGE_META_GENERATED_TEXTURE_EMISSIVE TEXT( "E" )
#define HAPI_UNREAL_PACKAGE_META_GENERATED_TEXTURE_OPACITY_MASK TEXT( "O" )
/** Various session related settings. **/
#define HAPI_UNREAL_SESSION_SERVER_HOST TEXT( "localhost" )
#define HAPI_UNREAL_SESSION_SERVER_PORT 9090
#if PLATFORM_MAC
#define HAPI_UNREAL_SESSION_SERVER_PIPENAME TEXT( "/tmp/hapi" )
#else
#define HAPI_UNREAL_SESSION_SERVER_PIPENAME TEXT( "hapi" )
#endif
#define HAPI_UNREAL_SESSION_SERVER_AUTOSTART true
#define HAPI_UNREAL_SESSION_SERVER_TIMEOUT 3000.0f
/** Default position and transformation scaling options. **/
#define HAPI_UNREAL_SCALE_FACTOR_POSITION 100.0f
#define HAPI_UNREAL_SCALE_FACTOR_TRANSLATION 100.0f
/** Small value used for comparisons. **/
#define HAPI_UNREAL_SCALE_SMALL_VALUE KINDA_SMALL_NUMBER * 2.0f
/** Default material name. **/
#define HAPI_UNREAL_DEFAULT_MATERIAL_NAME TEXT( "default_material" )
/** Threshold alpha. **/
#define HAPI_UNREAL_ALPHA_THRESHOLD 0.95f
/** Defines used for Substance processing. **/
#define HAPI_UNREAL_PARAM_SUBSTANCE_PREFIX TEXT( "_substanceInput" )
#define HAPI_UNREAL_PARAM_SUBSTANCE_LABEL TEXT( "Substance" )
#define HAPI_UNREAL_PARAM_SUBSTANCE_FILENAME TEXT( "filename" )
/** Names for Substance classes which we are retrieving through RTTI. **/
#define HAPI_UNREAL_SUBSTANCE_CLASS_INSTANCE_FACTORY TEXT( "SubstanceInstanceFactory" )
#define HAPI_UNREAL_SUBSTANCE_CLASS_GRAPH_INSTANCE TEXT( "SubstanceGraphInstance" )
#define HAPI_UNREAL_SUBSTANCE_CLASS_UTILITY TEXT( "SubstanceUtility" )
/** Names of Substance class properties we are using. **/
#define HAPI_UNREAL_SUBSTANCE_PROPERTY_FACTORY_PARENT TEXT( "Parent" )
/** Names of HAPI libraries on different platforms. **/
#define HAPI_LIB_OBJECT_WINDOWS TEXT( "libHAPIL.dll" )
#define HAPI_LIB_OBJECT_MAC TEXT( "libHAPIL.dylib" )
#define HAPI_LIB_OBJECT_LINUX TEXT( "libHAPIL.so" )
/** HFS subfolder containing HAPI lib. **/
#define HAPI_HFS_SUBFOLDER_WINDOWS TEXT( "bin" )
#define HAPI_HFS_SUBFOLDER_MAC TEXT( "dsolib" )
#define HAPI_HFS_SUBFOLDER_LINUX TEXT( "dsolib" )
/** Unreal HAPI Resources. **/
#define HAPI_UNREAL_RESOURCE_HOUDINI_LOGO TEXT( "/HoudiniEngine/houdini_logo.houdini_logo" )
#define HAPI_UNREAL_RESOURCE_HOUDINI_MATERIAL TEXT( "/HoudiniEngine/houdini_default_material.houdini_default_material" )
#define HAPI_UNREAL_RESOURCE_BGEO_IMPORT TEXT( "/HoudiniEngine/houdini_bgeo_import.houdini_bgeo_import" )
/** Helper function to serialize enumerations. **/
template < typename TEnum >
FORCEINLINE FArchive &
SerializeEnumeration( FArchive & Ar, TEnum & E )
{
uint8 B = (uint8) E;
Ar << B;
if ( Ar.IsLoading() )
E = (TEnum) B;
return Ar;
}
/** Struct to enable global silent flag - this will force dialogs to not show up. **/
struct FHoudiniScopedGlobalSilence
{
FHoudiniScopedGlobalSilence()
{
bGlobalSilent = GIsSilent;
GIsSilent = true;
}
~FHoudiniScopedGlobalSilence()
{
GIsSilent = bGlobalSilent;
}
bool bGlobalSilent;
};
/** Struct to disable transactional buffer serialization. This is used to avoid including undo reference count. **/
struct FHoudiniScopedGlobalTransactionDisable
{
FHoudiniScopedGlobalTransactionDisable()
{
#if WITH_EDITOR
if ( GEditor && GEditor->Trans )
GEditor->Trans->DisableObjectSerialization();
#endif
}
~FHoudiniScopedGlobalTransactionDisable()
{
#if WITH_EDITOR
if (GEditor && GEditor->Trans)
GEditor->Trans->EnableObjectSerialization();
#endif
}
};