15 #ifndef __HOM_Module_h__
16 #define __HOM_Module_h__
37 #include <hboost/any.hpp>
40 class STORUI_OrboltURLHandler;
170 #define HOM_SESSION_MODULE_NAME "hou.session"
171 #define HOM_SESSION_MODULE_CPIO_NAME "." HOM_SESSION_MODULE_NAME
182 static void setHOMCreator(
void (*homCreator)());
186 virtual std::vector<std::string> _getArgumentAutoComplete(
187 const char *method_name,
const char *arguments,
188 bool meta_info_only =
false) = 0;
193 virtual void setRelativeNodeForAutoComplete(
OP_Node *node) = 0;
199 virtual bool isUIAvailable() = 0;
200 virtual bool _isExperimentalActive() = 0;
201 virtual bool _isCurrentThreadHoldingHOMLock() = 0;
226 virtual bool _assertWrapper(
227 const char *file,
int linenum,
const char *
function,
228 const char *condition,
const char *reason) = 0;
230 virtual void exit(
int exit_code=0,
bool suppress_save_prompt=
false) = 0;
235 virtual bool isExiting() = 0;
237 virtual void addPreloadIcon(
const char *
name,
int w,
int h) = 0;
238 virtual void rasterizePreloadIcons() = 0;
241 virtual std::vector<int> applicationVersion(
bool include_patch=
false) = 0;
242 virtual std::string applicationVersionString() = 0;
243 virtual std::string applicationCompilationDate() = 0;
245 virtual std::map<std::string, std::string> vdbVersionInfo() = 0;
246 virtual int hdkAPIVersion() = 0;
248 virtual bool isApprentice() = 0;
249 virtual void releaseLicense() = 0;
252 virtual int maxThreads() = 0;
253 virtual void setMaxThreads(
int max_threads) = 0;
260 virtual void setPwd(
HOM_Node &newpwd) = 0;
261 virtual void cd(
const char *
path) = 0;
267 virtual HOM_Node* currentDopNet() = 0;
268 virtual void setCurrentDopNet(
HOM_Node &dopnet) = 0;
271 virtual bool simulationEnabled() = 0;
272 virtual void setSimulationEnabled(
bool enabled) = 0;
279 virtual std::vector<HOM_ElemPtr<HOM_Node> > nodes(
const std::vector<std::string> &paths) = 0;
280 virtual std::vector<HOM_ElemPtr<HOM_NetworkMovableItem> > items(
const std::vector<std::string> &paths) = 0;
282 virtual HOM_Node *nodeBySessionId(
int session_id) = 0;
283 virtual HOM_NetworkBox *networkBoxBySessionId(
int session_id) = 0;
284 virtual HOM_StickyNote *stickyNoteBySessionId(
int session_id) = 0;
286 int64 session_id) = 0;
287 virtual HOM_NetworkDot *networkDotBySessionId(
int session_id) = 0;
291 int node_session_id,
int input_index) = 0;
296 int64 session_id) = 0;
298 int64 session_id) = 0;
305 virtual std::vector<HOM_ElemPtr<HOM_Node> > selectedNodes(
306 bool include_hidden =
false) = 0;
307 virtual std::vector<HOM_ElemPtr<HOM_NetworkMovableItem> > selectedItems(
308 bool include_hidden =
false) = 0;
309 virtual std::vector<HOM_ElemPtr<HOM_NodeConnection> > selectedConnections() = 0;
310 virtual void clearAllSelected() = 0;
313 virtual void copyNodesToClipboard(
const std::vector<HOM_Node *> &nodes) = 0;
314 virtual void pasteNodesFromClipboard(
HOM_Node &destination_node) = 0;
320 virtual HOM_Parm* newParm(
OP_Node &node,
int parm_index,
int vector_index) = 0;
322 virtual HOM_Parm *evaluatingParm() = 0;
357 virtual std::vector< std::map<std::string, std::string> >
358 parmClipboardContents() = 0;
386 virtual std::map<std::string, HOM_NodeTypeCategory *>
387 nodeTypeCategories() = 0;
390 virtual std::vector<HOM_ElemPtr<HOM_Node> > copyNodesTo(
391 const std::vector<HOM_Node *> &nodes,
393 virtual std::vector<HOM_ElemPtr<HOM_Node> > moveNodesTo(
394 const std::vector<HOM_Node *> &nodes,
398 virtual std::vector<HOM_ElemPtr<HOM_NodeBundle> > nodeBundles() = 0;
399 virtual std::vector<HOM_ElemPtr<HOM_NodeBundle> > selectedNodeBundles() = 0;
404 const char *file_path) = 0;
407 virtual fpreal getTimeWithoutAddingDependency() = 0;
408 virtual double time() = 0;
409 virtual void setTime(
double time) = 0;
410 virtual double frame(
bool full_precision=
false) = 0;
411 virtual int intFrame() = 0;
412 virtual void setFrame(
double frame) = 0;
413 virtual double fps() = 0;
416 bool modify_frame_count =
true,
417 bool preserve_keyframes =
false,
418 bool preserve_frame_start =
false)
420 virtual double timeToFrame(
double time,
bool full_precision=
false) = 0;
421 virtual double frameToTime(
double frame) = 0;
426 virtual void _syncFromMainContext() = 0;
427 virtual void _syncToMainContext() = 0;
430 virtual fpreal scaleFromMKS(
const char *
units) = 0;
433 virtual double bezier() = 0;
434 virtual double constant() = 0;
435 virtual double cubic() = 0;
436 virtual double cycle(
double start_frame,
double end_frame) = 0;
437 virtual double cyclet(
double start_time,
double end_time) = 0;
438 virtual double cycleoffset(
double start_frame,
double end_frame) = 0;
439 virtual double cycleoffsett(
double start_time,
double end_time) = 0;
440 virtual double ease() = 0;
441 virtual double easein() = 0;
442 virtual double easeinp(
double ease_speed) = 0;
443 virtual double easeout() = 0;
444 virtual double easeoutp(
double ease_speed) = 0;
445 virtual double easep(
double ease_bias) = 0;
446 virtual double linear() = 0;
447 virtual double match() = 0;
448 virtual double matchin() = 0;
449 virtual double matchout() = 0;
450 virtual double qlinear() = 0;
451 virtual double quintic() = 0;
452 virtual double repeat(
double start_frame,
double end_frame) = 0;
453 virtual double repeatt(
double start_time,
double end_time) = 0;
454 virtual double spline() = 0;
455 virtual double vmatch() = 0;
456 virtual double vmatchin() = 0;
457 virtual double vmatchout() = 0;
459 virtual std::string chopExportConflictResolutionPattern() = 0;
460 virtual void setChopExportConflictResolutionPattern(
const char *
pattern) = 0;
462 virtual std::vector<HOM_ElemPtr<HOM_VexContext> >
472 virtual std::string hscriptCommandHelp(
const char *command_name) = 0;
476 virtual std::vector<std::string> hscript(
const char *command) = 0;
479 virtual bool almostEqual(
double x,
double y) = 0;
481 virtual std::vector<std::pair<HOM_ElemPtr<HOM_Parm>,
std::string> >
483 const char *project_dir_variable=
"HIP",
bool include_all_refs=
true) = 0;
486 virtual std::string findFile(
const char *file_name) = 0;
487 virtual std::vector<std::string> findFiles(
488 const char *file_name) = 0;
489 virtual std::vector<std::string> findFilesWithExtension(
490 const char *file_extension,
const char *subdirectory = NULL) = 0;
493 virtual std::string findDirectory(
const char *directory_name) = 0;
494 virtual std::vector<std::string> findDirectories(
495 const char *directory_name) = 0;
497 virtual std::vector<std::string> houdiniPath(
const char *pathvar =
nullptr) = 0;
504 virtual std::map<std::string, HOM_BinaryString> loadIndexDataFromString(
507 virtual std::map<std::string, HOM_BinaryString> loadIndexDataFromFile(
508 const char *file_path) = 0;
511 const std::map<std::string, HOM_BinaryString> &index_data) = 0;
513 virtual void saveIndexDataToFile(
514 const char *file_path,
515 const std::map<std::string, HOM_BinaryString> &index_data) = 0;
519 virtual std::vector<std::pair<std::string, HOM_BinaryString> >
520 loadCPIODataFromString(
const char *
data,
int length) = 0;
523 const std::vector<std::pair<std::string, HOM_BinaryString> >
532 virtual void forceUpdateFromSessionModuleSource() = 0;
533 virtual void forceSetSessionModuleSource(
const char *
source) = 0;
535 virtual void setSessionModuleSource(
const char *
source) = 0;
536 virtual void appendSessionModuleSource(
const char *
source) = 0;
539 virtual int sessionModuleSourceChangeCount() = 0;
545 {
return theImplementation != NULL; }
554 virtual std::vector<std::string>
555 sortedNodePaths(
const std::vector<std::string> &paths) = 0;
558 virtual std::vector<HOM_ElemPtr<HOM_Node> >
559 sortedNodes(
const std::vector<HOM_Node*> &nodes) = 0;
562 virtual int patternMatch(
563 const char *
pattern,
const char *str,
565 bool path_match =
false) = 0;
569 virtual hboost::any hscriptExpression(
const char *expression) = 0;
570 virtual double hscriptFloatExpression(
const char *expression) = 0;
571 virtual std::string hscriptStringExpression(
const char *expression) = 0;
572 virtual std::vector<double>hscriptVectorExpression(
573 const char *expression) = 0;
574 virtual std::vector<std::vector<double> > hscriptMatrixExpression(
575 const char *expression) = 0;
579 virtual char *
getenv(
const char *
name,
const char *default_value=NULL) = 0;
581 virtual void putenv(
const char *
name,
const char *
value) = 0;
583 virtual void unsetenv(
const char *
name) = 0;
585 virtual void allowEnvironmentToOverwriteVariable(
586 const char *
name,
bool onoff) = 0;
588 virtual void *expressionGlobals() = 0;
593 virtual bool updateProgressAndCheckForInterrupt(
int percentage=-1) = 0;
595 virtual std::map<std::string, hboost::any> runVex(
596 const char *vex_file,
597 const std::map<std::string, hboost::any> &inputs,
602 virtual void saveImageDataToFile(
603 const std::vector<float> &color_and_alpha_data,
605 const char *file_name) = 0;
607 virtual void saveImageDataToFile(
610 const char *file_name) = 0;
613 const char *image_file_name,
616 virtual std::vector<int> imageResolution(
const char *image_file_name) = 0;
629 virtual void *opaqueRunCallbackAndCatchCrashes(
void *opaque_callback) = 0;
635 virtual void pushAccessPrivilege(
const char *key) = 0;
636 virtual void popAccessPrivilege(
const char *key) = 0;
640 virtual void registerAccessPrivilegePyClient(
void *opaque_python_object) = 0;
650 const std::vector<double> &default_value,
652 bool min_is_strict,
bool max_is_strict,
655 const char *disable_when,
657 bool is_label_hidden,
660 const char *script_callback,
662 const std::map<std::string, std::string> &tags,
663 const std::map<HOM_EnumValue *, std::string> &conditionals,
664 const std::vector<std::string> &default_expression,
665 const std::vector<HOM_EnumValue *> &default_expression_language) = 0;
671 const std::vector<int> &default_value,
673 bool min_is_strict,
bool max_is_strict,
676 const std::vector<std::string> &menu_items,
677 const std::vector<std::string> &menu_labels,
678 const std::vector<std::string> &icon_names,
683 const char *disable_when,
685 bool is_label_hidden,
688 const char *script_callback,
690 const std::map<std::string, std::string> &tags,
691 const std::map<HOM_EnumValue *, std::string> &conditionals,
692 const std::vector<std::string> &default_expression,
693 const std::vector<HOM_EnumValue *> &default_expression_language) = 0;
699 const std::vector<std::string> &default_value,
703 const std::vector<std::string> &menu_items,
704 const std::vector<std::string> &menu_labels,
705 const std::vector<std::string> &icon_names,
709 const char *disable_when,
711 bool is_label_hidden,
714 const char *script_callback,
716 const std::map<std::string, std::string> &tags,
717 const std::map<HOM_EnumValue *, std::string> &conditionals,
718 const std::vector<std::string> &default_expression,
719 const std::vector<HOM_EnumValue *> &default_expression_language) = 0;
728 const char *disable_when,
730 bool is_label_hidden,
733 const char *script_callback,
735 const std::map<std::string, std::string> &tags,
736 const std::map<HOM_EnumValue *, std::string> &conditionals,
737 const std::vector<std::string> &default_expression,
738 const std::vector<HOM_EnumValue *> &default_expression_language) = 0;
744 const char *disable_when,
746 bool is_label_hidden,
749 const char *script_callback,
751 const std::map<std::string, std::string> &tags,
752 const std::map<HOM_EnumValue *, std::string> &conditionals,
759 const std::vector<std::string> &menu_items,
760 const std::vector<std::string> &menu_labels,
762 const std::vector<std::string> &icon_names,
767 const char *disable_when,
769 bool is_label_hidden,
772 const char *script_callback,
774 const std::map<std::string, std::string> &tags,
775 const std::map<HOM_EnumValue *, std::string> &conditionals,
778 bool store_default_value_as_string,
779 bool is_button_strip,
780 bool strip_uses_icons
786 const char *disable_when,
788 bool is_label_hidden,
791 const char *script_callback,
793 const std::map<std::string, std::string> &tags,
794 const std::map<HOM_EnumValue *, std::string> &conditionals ) = 0;
799 const std::vector<std::string> &column_labels,
802 bool is_label_hidden,
805 const std::map<std::string, std::string> &tags,
806 const std::map<HOM_EnumValue *, std::string> &conditionals) = 0;
811 const std::map<std::string, std::string> &tags,
812 const std::map<HOM_EnumValue *, std::string> &conditionals) = 0;
816 const std::vector<std::string> &folder_names,
818 const std::map<std::string, std::string> &tags) = 0;
823 const std::vector<HOM_ParmTemplate *> &parm_templates,
828 const char *script_callback,
830 const std::map<std::string, std::string> &tags,
831 const std::map<HOM_EnumValue *, std::string> &conditionals,
832 const std::map<HOM_EnumValue *, std::string> &tab_conditionals) = 0;
842 const char *disable_when,
845 const char *script_callback,
847 const std::map<std::string, std::string> &tags,
848 const std::map<HOM_EnumValue *, std::string> &conditionals,
853 const std::vector<HOM_ParmTemplate *> &parm_templates) = 0;
856 bool cook_stats,
bool pdg_cook_stats,
bool solve_stats,
857 bool draw_stats,
bool gpu_draw_stats,
bool viewport_stats,
858 bool script_stats,
bool render_stats,
bool thread_stats,
859 bool frame_stats,
bool memory_stats,
bool errors,
860 bool pane_stats) = 0;
879 const char *
pattern =
nullptr) = 0;
882 const char *operation_name,
const char *long_operation_name,
883 bool open_interrupt_dialog) = 0;
896 const std::vector<HOM_EnumValue *> &selection_types,
899 const std::vector<HOM_Prim *> &prims) = 0;
901 const std::vector<HOM_Point *> &
points) = 0;
903 const std::vector<HOM_Vertex *> &vertices) = 0;
905 const std::vector<HOM_Edge *> &edges) = 0;
909 bool clone_data_ids =
false) = 0;
922 bool keep_external_ref,
bool delay_load) = 0;
933 const char *
name) = 0;
935 virtual HOM_AgentRig *newAgentRig(
const char *
path,
bool keep_external_ref) = 0;
938 const char *
name,
const std::vector<std::string> &transform_names,
939 const std::vector<std::vector<int>> &hierarchy) = 0;
943 bool keep_external_ref =
true) = 0;
946 const char *
name,
const std::vector<int> &transforms,
947 const HOM_AgentRig &rig,
const std::vector<double> &weights,
948 const std::vector<int> &
channels) = 0;
954 const char *
path,
bool keep_external_ref) = 0;
958 bool deforming,
double bounds_scale) = 0;
966 newAgentShapeDeformer(
const char *
name) = 0;
969 newAgentShapeDeformer(
const HOM_EnumValue &deformer_type) = 0;
974 const std::vector<HOM_AgentShapeBinding *> &shape_bindings,
980 bool keep_external_ref =
true) = 0;
984 bool keep_external_ref =
true) = 0;
986 const std::map<std::string, hboost::any> &
data) = 0;
988 virtual bool compareNode(
const char *
path,
const char *dest = NULL) = 0;
989 virtual bool compareNodeBackup(
const char *
path,
int index,
990 const char *dest = NULL) = 0;
991 virtual bool compareHDA(
const char *path_left,
const char *path_right,
992 const char *dest = NULL) = 0;
993 virtual bool compareHDABackup(
const char *
path,
int index,
994 const char *dest = NULL) = 0;
995 virtual bool compareHip(
const char *dest = NULL) = 0;
996 virtual bool compareHipBackup(
int index,
const char *dest = NULL) = 0;
998 virtual bool hasContextOption(
const char *opt) = 0;
1000 virtual std::vector<std::string> contextOptionNames() = 0;
1001 virtual void setContextOption(
const char *opt,
const char *
value) =0;
1002 virtual void setContextOption(
const char *opt,
double value) = 0;
1003 virtual void removeContextOption(
const char *opt) = 0;
1004 virtual std::string contextOptionConfig(
const char *opt) = 0;
1005 virtual void setContextOptionConfig(
const char *opt,
1006 const char *config) = 0;
1007 virtual bool isAutoContextOption(
const char *opt) = 0;
1008 virtual bool isAutoContextOptionOverridden(
const char *opt) = 0;
1011 virtual void addOpaqueContextOptionChangeCallback(
void *callback) = 0;
1013 virtual void removeOpaqueContextOptionChangeCallback(
void *callback) = 0;
1014 virtual void removeAllContextOptionChangeCallbacks() = 0;
1016 virtual std::vector<void *> opaqueContextOptionChangeCallbacks() = 0;
1021 virtual void setOrboltURLHandler(
1022 STORUI_OrboltURLHandler &orbolt_url_handler) = 0;
1028 virtual void constructObject(
void *
pointer,
const std::type_info &
type) = 0;
1029 virtual void destructObject(
void *
pointer,
const std::type_info &
type) = 0;
1030 virtual std::map<std::string, int> objectCounts() = 0;
1033 virtual std::vector<std::string> getPreferenceNames() = 0;
1035 virtual bool setPreference(
const char *
name,
const char*
value) = 0;
1036 virtual bool addPreference(
const char *
name,
const char*
value) = 0;
1037 virtual bool removePreference(
const char *
name) = 0;
1038 virtual void refreshPreferences() = 0;
1044 std::vector<HOM_NodeTypeCategory*>
const & contexts) = 0;
1049 std::vector<HOM_NodeTypeCategory*>
const & categories) = 0;
1073 std::map<std::string, hboost::any>
const &
params,
1081 std::map<std::string, hboost::any>
const &
params,
1088 virtual void startHoudiniEngineDebugger(
unsigned short port) = 0;
1089 virtual void startHoudiniEngineDebugger(
const char *pipe_name) = 0;
1099 bool from_blosc_compression,
1101 bool to_blosc_compression) = 0;
1104 const std::map<
std::string, std::vector<HOM_Keyframe *>> &keyframe_map,
1105 bool binary =
true,
bool use_blosc_compression =
true) = 0;
1108 bool blosc_compressed =
true) = 0;
1110 virtual std::vector<HOM_ElemPtr<HOM_Node> > _nodesFromOPNodeList(
int64 val) = 0;
1111 virtual std::vector<HOM_ElemPtr<HOM_DopData> >
1128 virtual bool removeAnimationLayer(
HOM_Node &layermixer,
const std::string &layername,
bool merge=
false) = 0;
1131 virtual void* _sceneViewerWindow(
int64 val) = 0;
1133 virtual void registerOpdefPath(
1139 virtual std::vector<std::string> videoEncoders(
1140 HOM_EnumValue const &driver,
const bool available=
false) = 0;
1144 static void (*theHOMCreator)();
1150 friend class HOMF_Module;
1151 static void setImplementation(
HOM_Module* implementation);
1164 template <
typename T>
1187 if (!HOM_theHOMLock)
1285 #define HOM_CONSTRUCT_OBJECT(pointer) \
1286 HOM().constructObject(pointer, typeid(*pointer));
1287 #define HOM_DESTRUCT_OBJECT(pointer) \
1288 HOM().destructObject(pointer, typeid(*pointer));
1290 #define HOM_CONSTRUCT_OBJECT(pointer)
1291 #define HOM_DESTRUCT_OBJECT(pointer)
1309 #endif //__HOM_Module_h__
std::string ignore_case(std::string item)
Helper function to allow ignore_case to be passed to IsMember or Transform.
GLuint GLsizei const GLchar * label
GLdouble GLdouble GLint GLint const GLdouble * points
#define SYS_VISIBILITY_EXPORT
UT_TaskRootLock & HOMgetLock()
GT_API const UT_StringHolder time
GLsizei const GLchar *const * string
const GLuint GLenum const void * binary
GLsizei const GLchar *const * path
UT_UniquePtr< T > HOMdel(T *hom_object)
GLuint GLsizei GLsizei * length
ImageBuf OIIO_API min(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Quat< T > spline(const Quat< T > &q0, const Quat< T > &q1, const Quat< T > &q2, const Quat< T > &q3, T t) IMATH_NOEXCEPT
GLenum GLenum GLsizei const GLuint GLboolean enabled
std::string help(const App *app, const Error &e)
Printout the full help string on error (if this fn is set, the old default for CLI11) ...
GLenum const GLfloat * params
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
GLint GLsizei GLsizei height
UT_TaskLockT< false > UT_TaskRootLock
HOM_API UT_TaskRootLock * HOM_theHOMLock
bool any(const vbool4 &v)
void ignore(T const &) VULKAN_HPP_NOEXCEPT
constexpr std::enable_if< I< type_count_base< T >::value, int >::type tuple_type_size(){return subtype_count< typename std::tuple_element< I, T >::type >::value+tuple_type_size< T, I+1 >);}template< typename T > struct type_count< T, typename std::enable_if< is_tuple_like< T >::value >::type >{static constexpr int value{tuple_type_size< T, 0 >)};};template< typename T > struct subtype_count{static constexpr int value{is_mutable_container< T >::value?expected_max_vector_size:type_count< T >::value};};template< typename T, typename Enable=void > struct type_count_min{static const int value{0};};template< typename T >struct type_count_min< T, typename std::enable_if<!is_mutable_container< T >::value &&!is_tuple_like< T >::value &&!is_wrapper< T >::value &&!is_complex< T >::value &&!std::is_void< T >::value >::type >{static constexpr int value{type_count< T >::value};};template< typename T > struct type_count_min< T, typename std::enable_if< is_complex< T >::value >::type >{static constexpr int value{1};};template< typename T >struct type_count_min< T, typename std::enable_if< is_wrapper< T >::value &&!is_complex< T >::value &&!is_tuple_like< T >::value >::type >{static constexpr int value{subtype_count_min< typename T::value_type >::value};};template< typename T, std::size_t I >constexpr typename std::enable_if< I==type_count_base< T >::value, int >::type tuple_type_size_min(){return 0;}template< typename T, std::size_t I > constexpr typename std::enable_if< I< type_count_base< T >::value, int >::type tuple_type_size_min(){return subtype_count_min< typename std::tuple_element< I, T >::type >::value+tuple_type_size_min< T, I+1 >);}template< typename T > struct type_count_min< T, typename std::enable_if< is_tuple_like< T >::value >::type >{static constexpr int value{tuple_type_size_min< T, 0 >)};};template< typename T > struct subtype_count_min{static constexpr int value{is_mutable_container< T >::value?((type_count< T >::value< expected_max_vector_size)?type_count< T >::value:0):type_count_min< T >::value};};template< typename T, typename Enable=void > struct expected_count{static const int value{0};};template< typename T >struct expected_count< T, typename std::enable_if<!is_mutable_container< T >::value &&!is_wrapper< T >::value &&!std::is_void< T >::value >::type >{static constexpr int value{1};};template< typename T > struct expected_count< T, typename std::enable_if< is_mutable_container< T >::value >::type >{static constexpr int value{expected_max_vector_size};};template< typename T >struct expected_count< T, typename std::enable_if<!is_mutable_container< T >::value &&is_wrapper< T >::value >::type >{static constexpr int value{expected_count< typename T::value_type >::value};};enum class object_category:int{char_value=1, integral_value=2, unsigned_integral=4, enumeration=6, boolean_value=8, floating_point=10, number_constructible=12, double_constructible=14, integer_constructible=16, string_assignable=23, string_constructible=24, other=45, wrapper_value=50, complex_number=60, tuple_value=70, container_value=80,};template< typename T, typename Enable=void > struct classify_object{static constexpr object_category value{object_category::other};};template< typename T >struct classify_object< T, typename std::enable_if< std::is_integral< T >::value &&!std::is_same< T, char >::value &&std::is_signed< T >::value &&!is_bool< T >::value &&!std::is_enum< T >::value >::type >{static constexpr object_category value{object_category::integral_value};};template< typename T >struct classify_object< T, typename std::enable_if< std::is_integral< T >::value &&std::is_unsigned< T >::value &&!std::is_same< T, char >::value &&!is_bool< T >::value >::type >{static constexpr object_category value{object_category::unsigned_integral};};template< typename T >struct classify_object< T, typename std::enable_if< std::is_same< T, char >::value &&!std::is_enum< T >::value >::type >{static constexpr object_category value{object_category::char_value};};template< typename T > struct classify_object< T, typename std::enable_if< is_bool< T >::value >::type >{static constexpr object_category value{object_category::boolean_value};};template< typename T > struct classify_object< T, typename std::enable_if< std::is_floating_point< T >::value >::type >{static constexpr object_category value{object_category::floating_point};};template< typename T >struct classify_object< T, typename std::enable_if<!std::is_floating_point< T >::value &&!std::is_integral< T >::value &&std::is_assignable< T &, std::string >::value >::type >{static constexpr object_category value{object_category::string_assignable};};template< typename T >struct classify_object< T, typename std::enable_if<!std::is_floating_point< T >::value &&!std::is_integral< T >::value &&!std::is_assignable< T &, std::string >::value &&(type_count< T >::value==1)&&std::is_constructible< T, std::string >::value >::type >{static constexpr object_category value{object_category::string_constructible};};template< typename T > struct classify_object< T, typename std::enable_if< std::is_enum< T >::value >::type >{static constexpr object_category value{object_category::enumeration};};template< typename T > struct classify_object< T, typename std::enable_if< is_complex< T >::value >::type >{static constexpr object_category value{object_category::complex_number};};template< typename T > struct uncommon_type{using type=typename std::conditional<!std::is_floating_point< T >::value &&!std::is_integral< T >::value &&!std::is_assignable< T &, std::string >::value &&!std::is_constructible< T, std::string >::value &&!is_complex< T >::value &&!is_mutable_container< T >::value &&!std::is_enum< T >::value, std::true_type, std::false_type >::type;static constexpr bool value=type::value;};template< typename T >struct classify_object< T, typename std::enable_if<(!is_mutable_container< T >::value &&is_wrapper< T >::value &&!is_tuple_like< T >::value &&uncommon_type< T >::value)>::type >{static constexpr object_category value{object_category::wrapper_value};};template< typename T >struct classify_object< T, typename std::enable_if< uncommon_type< T >::value &&type_count< T >::value==1 &&!is_wrapper< T >::value &&is_direct_constructible< T, double >::value &&is_direct_constructible< T, int >::value >::type >{static constexpr object_category value{object_category::number_constructible};};template< typename T >struct classify_object< T, typename std::enable_if< uncommon_type< T >::value &&type_count< T >::value==1 &&!is_wrapper< T >::value &&!is_direct_constructible< T, double >::value &&is_direct_constructible< T, int >::value >::type >{static constexpr object_category value{object_category::integer_constructible};};template< typename T >struct classify_object< T, typename std::enable_if< uncommon_type< T >::value &&type_count< T >::value==1 &&!is_wrapper< T >::value &&is_direct_constructible< T, double >::value &&!is_direct_constructible< T, int >::value >::type >{static constexpr object_category value{object_category::double_constructible};};template< typename T >struct classify_object< T, typename std::enable_if< is_tuple_like< T >::value &&((type_count< T >::value >=2 &&!is_wrapper< T >::value)||(uncommon_type< T >::value &&!is_direct_constructible< T, double >::value &&!is_direct_constructible< T, int >::value)||(uncommon_type< T >::value &&type_count< T >::value >=2))>::type >{static constexpr object_category value{object_category::tuple_value};};template< typename T > struct classify_object< T, typename std::enable_if< is_mutable_container< T >::value >::type >{static constexpr object_category value{object_category::container_value};};template< typename T, enable_if_t< classify_object< T >::value==object_category::char_value, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"CHAR";}template< typename T, enable_if_t< classify_object< T >::value==object_category::integral_value||classify_object< T >::value==object_category::integer_constructible, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"INT";}template< typename T, enable_if_t< classify_object< T >::value==object_category::unsigned_integral, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"UINT";}template< typename T, enable_if_t< classify_object< T >::value==object_category::floating_point||classify_object< T >::value==object_category::number_constructible||classify_object< T >::value==object_category::double_constructible, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"FLOAT";}template< typename T, enable_if_t< classify_object< T >::value==object_category::enumeration, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"ENUM";}template< typename T, enable_if_t< classify_object< T >::value==object_category::boolean_value, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"BOOLEAN";}template< typename T, enable_if_t< classify_object< T >::value==object_category::complex_number, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"COMPLEX";}template< typename T, enable_if_t< classify_object< T >::value >=object_category::string_assignable &&classify_object< T >::value<=object_category::other, detail::enabler >=detail::dummy >constexpr const char *type_name(){return"TEXT";}template< typename T, enable_if_t< classify_object< T >::value==object_category::tuple_value &&type_count_base< T >::value >=2, detail::enabler >=detail::dummy >std::string type_name();template< typename T, enable_if_t< classify_object< T >::value==object_category::container_value||classify_object< T >::value==object_category::wrapper_value, detail::enabler >=detail::dummy >std::string type_name();template< typename T, enable_if_t< classify_object< T >::value==object_category::tuple_value &&type_count_base< T >::value==1, detail::enabler >=detail::dummy >inline std::string type_name(){return type_name< typename std::decay< typename std::tuple_element< 0, T >::type >::type >);}template< typename T, std::size_t I >inline typename std::enable_if< I==type_count_base< T >::value, std::string >::type tuple_name(){return std::string{};}template< typename T, std::size_t I >inline typename std::enable_if<(I< type_count_base< T >::value), std::string >::type tuple_name(){auto str=std::string{type_name< typename std::decay< typename std::tuple_element< I, T >::type >::type >)}+ ','+tuple_name< T, I+1 >);if(str.back()== ',') str.pop_back();return str;}template< typename T, enable_if_t< classify_object< T >::value==object_category::tuple_value &&type_count_base< T >::value >=2, detail::enabler > > std::string type_name()
Recursively generate the tuple type name.
GLsizei GLsizei GLchar * source
GLfloat GLfloat GLfloat alpha
GLuint const GLchar * name
GA_API const UT_StringHolder transform
Attempt to access an object that no longer exists in Houdini Invalid output Invalid type The attempted operation failed Node initialization script failed Failed to modify node or parameter because of a permission error Possible causes include locked takes
GLenum GLint GLint * precision
std::map< HOM_EnumValue *, std::string > HOM_StdMapEnumString
std::string OIIO_UTIL_API repeat(string_view str, int n)
Repeat a string formed by concatenating str n times.
OIIO_API string_view getenv(string_view name, string_view defaultval)
GLfloat GLfloat GLfloat GLfloat h
SYS_VISIBILITY_EXPORT void HOMextendLibrary()
ImageBuf OIIO_API max(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
virtual bool readFile(GA_Detail &g, const char *filename, const GA_LoadOptions *opts, UT_StringArray *errors) const
Class which defines an I/O interface to save/load geometry.
GLubyte GLubyte GLubyte GLubyte w
SYS_VISIBILITY_EXPORT void newHandle(BM_ResourceManager *m)
HOM_API HOM_Module & HOM()
IMATH_INTERNAL_NAMESPACE_HEADER_ENTER IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T clip(const T &p, const Box< T > &box) IMATH_NOEXCEPT
static bool isImplementationSet()
std::map< std::string, std::string > HOM_StdMapStringString
UT_UniquePtr< UT_OptionEntry > UT_OptionEntryPtr
ImageBuf OIIO_API channels(const ImageBuf &src, int nchannels, cspan< int > channelorder, cspan< float > channelvalues={}, cspan< std::string > newchannelnames={}, bool shuffle_channel_names=false, int nthreads=0)