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;
300 int64 session_id) = 0;
307 virtual std::vector<HOM_ElemPtr<HOM_Node> > selectedNodes(
308 bool include_hidden =
false) = 0;
309 virtual std::vector<HOM_ElemPtr<HOM_NetworkMovableItem> > selectedItems(
310 bool include_hidden =
false) = 0;
311 virtual std::vector<HOM_ElemPtr<HOM_NodeConnection> > selectedConnections() = 0;
312 virtual void clearAllSelected() = 0;
315 virtual void copyNodesToClipboard(
const std::vector<HOM_Node *> &nodes) = 0;
316 virtual void pasteNodesFromClipboard(
HOM_Node &destination_node) = 0;
322 virtual HOM_Parm* newParm(
OP_Node &node,
int parm_index,
int vector_index) = 0;
324 virtual HOM_Parm *evaluatingParm() = 0;
359 virtual std::vector< std::map<std::string, std::string> >
360 parmClipboardContents() = 0;
389 virtual std::map<std::string, HOM_NodeTypeCategory *>
390 nodeTypeCategories() = 0;
393 virtual std::vector<HOM_ElemPtr<HOM_Node> > copyNodesTo(
394 const std::vector<HOM_Node *> &nodes,
396 virtual std::vector<HOM_ElemPtr<HOM_Node> > moveNodesTo(
397 const std::vector<HOM_Node *> &nodes,
401 virtual std::vector<HOM_ElemPtr<HOM_NodeBundle> > nodeBundles() = 0;
402 virtual std::vector<HOM_ElemPtr<HOM_NodeBundle> > selectedNodeBundles() = 0;
407 const char *file_path) = 0;
410 virtual fpreal getTimeWithoutAddingDependency() = 0;
411 virtual double time() = 0;
412 virtual void setTime(
double time) = 0;
413 virtual double frame(
bool full_precision=
false) = 0;
414 virtual int intFrame() = 0;
415 virtual void setFrame(
double frame) = 0;
416 virtual double fps() = 0;
419 bool modify_frame_count =
true,
420 bool preserve_keyframes =
false,
421 bool preserve_frame_start =
false)
423 virtual double timeToFrame(
double time,
bool full_precision=
false) = 0;
424 virtual double frameToTime(
double frame) = 0;
429 virtual void _syncFromMainContext() = 0;
430 virtual void _syncToMainContext() = 0;
433 virtual fpreal scaleFromMKS(
const char *
units) = 0;
436 virtual double bezier() = 0;
437 virtual double constant() = 0;
438 virtual double cubic() = 0;
439 virtual double cycle(
double start_frame,
double end_frame) = 0;
440 virtual double cyclet(
double start_time,
double end_time) = 0;
441 virtual double cycleoffset(
double start_frame,
double end_frame) = 0;
442 virtual double cycleoffsett(
double start_time,
double end_time) = 0;
443 virtual double ease() = 0;
444 virtual double easein() = 0;
445 virtual double easeinp(
double ease_speed) = 0;
446 virtual double easeout() = 0;
447 virtual double easeoutp(
double ease_speed) = 0;
448 virtual double easep(
double ease_bias) = 0;
449 virtual double linear() = 0;
450 virtual double match() = 0;
451 virtual double matchin() = 0;
452 virtual double matchout() = 0;
453 virtual double qlinear() = 0;
454 virtual double quintic() = 0;
455 virtual double repeat(
double start_frame,
double end_frame) = 0;
456 virtual double repeatt(
double start_time,
double end_time) = 0;
457 virtual double spline() = 0;
458 virtual double vmatch() = 0;
459 virtual double vmatchin() = 0;
460 virtual double vmatchout() = 0;
462 virtual std::string chopExportConflictResolutionPattern() = 0;
463 virtual void setChopExportConflictResolutionPattern(
const char *
pattern) = 0;
465 virtual std::vector<HOM_ElemPtr<HOM_VexContext> >
475 virtual std::string hscriptCommandHelp(
const char *command_name) = 0;
479 virtual std::vector<std::string> hscript(
const char *command) = 0;
482 virtual bool almostEqual(
double x,
double y) = 0;
484 virtual std::vector<std::pair<HOM_ElemPtr<HOM_Parm>,
std::string> >
486 const char *project_dir_variable=
"HIP",
bool include_all_refs=
true) = 0;
489 virtual std::string findFile(
const char *file_name) = 0;
490 virtual std::vector<std::string> findFiles(
491 const char *file_name) = 0;
492 virtual std::vector<std::string> findFilesWithExtension(
493 const char *file_extension,
const char *subdirectory = NULL) = 0;
496 virtual std::string findDirectory(
const char *directory_name) = 0;
497 virtual std::vector<std::string> findDirectories(
498 const char *directory_name) = 0;
500 virtual std::vector<std::string> houdiniPath(
const char *pathvar =
nullptr) = 0;
507 virtual std::map<std::string, HOM_BinaryString> loadIndexDataFromString(
510 virtual std::map<std::string, HOM_BinaryString> loadIndexDataFromFile(
511 const char *file_path) = 0;
514 const std::map<std::string, HOM_BinaryString> &index_data) = 0;
516 virtual void saveIndexDataToFile(
517 const char *file_path,
518 const std::map<std::string, HOM_BinaryString> &index_data) = 0;
522 virtual std::vector<std::pair<std::string, HOM_BinaryString> >
523 loadCPIODataFromString(
const char *
data,
int length) = 0;
526 const std::vector<std::pair<std::string, HOM_BinaryString> >
535 virtual void forceUpdateFromSessionModuleSource() = 0;
536 virtual void forceSetSessionModuleSource(
const char *
source) = 0;
538 virtual void setSessionModuleSource(
const char *
source) = 0;
539 virtual void appendSessionModuleSource(
const char *
source) = 0;
542 virtual int sessionModuleSourceChangeCount() = 0;
548 {
return theImplementation != NULL; }
557 virtual std::vector<std::string>
558 sortedNodePaths(
const std::vector<std::string> &paths) = 0;
561 virtual std::vector<HOM_ElemPtr<HOM_Node> >
562 sortedNodes(
const std::vector<HOM_Node*> &nodes) = 0;
565 virtual int patternMatch(
566 const char *
pattern,
const char *str,
568 bool path_match =
false) = 0;
572 virtual hboost::any hscriptExpression(
const char *expression) = 0;
573 virtual double hscriptFloatExpression(
const char *expression) = 0;
574 virtual std::string hscriptStringExpression(
const char *expression) = 0;
575 virtual std::vector<double>hscriptVectorExpression(
576 const char *expression) = 0;
577 virtual std::vector<std::vector<double> > hscriptMatrixExpression(
578 const char *expression) = 0;
582 virtual char *getEnvConfigValue(
583 const char *
name,
const char *default_value=NULL) = 0;
585 virtual char *
getenv(
const char *
name,
const char *default_value=NULL) = 0;
587 virtual void putenv(
const char *
name,
const char *
value) = 0;
589 virtual void unsetenv(
const char *
name) = 0;
591 virtual void allowEnvironmentToOverwriteVariable(
592 const char *
name,
bool onoff) = 0;
594 virtual void *expressionGlobals() = 0;
599 virtual bool updateProgressAndCheckForInterrupt(
int percentage=-1) = 0;
601 virtual std::map<std::string, hboost::any> runVex(
602 const char *vex_file,
603 const std::map<std::string, hboost::any> &inputs,
608 virtual void saveImageDataToFile(
609 const std::vector<float> &color_and_alpha_data,
611 const char *file_name) = 0;
613 virtual void saveImageDataToFile(
616 const char *file_name) = 0;
619 const char *image_file_name,
622 virtual std::vector<int> imageResolution(
const char *image_file_name) = 0;
635 virtual void *opaqueRunCallbackAndCatchCrashes(
void *opaque_callback) = 0;
641 virtual void pushAccessPrivilege(
const char *key) = 0;
642 virtual void popAccessPrivilege(
const char *key) = 0;
646 virtual void registerAccessPrivilegePyClient(
void *opaque_python_object) = 0;
656 const std::vector<double> &default_value,
658 bool min_is_strict,
bool max_is_strict,
661 const char *disable_when,
663 bool is_label_hidden,
666 const char *script_callback,
668 const std::map<std::string, std::string> &tags,
669 const std::map<HOM_EnumValue *, std::string> &conditionals,
670 const std::vector<std::string> &default_expression,
671 const std::vector<HOM_EnumValue *> &default_expression_language) = 0;
677 const std::vector<int64> &default_value,
679 bool min_is_strict,
bool max_is_strict,
682 const std::vector<std::string> &menu_items,
683 const std::vector<std::string> &menu_labels,
684 const std::vector<std::string> &icon_names,
689 const char *disable_when,
691 bool is_label_hidden,
694 const char *script_callback,
696 const std::map<std::string, std::string> &tags,
697 const std::map<HOM_EnumValue *, std::string> &conditionals,
698 const std::vector<std::string> &default_expression,
699 const std::vector<HOM_EnumValue *> &default_expression_language) = 0;
705 const std::vector<std::string> &default_value,
709 const std::vector<std::string> &menu_items,
710 const std::vector<std::string> &menu_labels,
711 const std::vector<std::string> &icon_names,
715 const char *disable_when,
717 bool is_label_hidden,
720 const char *script_callback,
722 const std::map<std::string, std::string> &tags,
723 const std::map<HOM_EnumValue *, std::string> &conditionals,
724 const std::vector<std::string> &default_expression,
725 const std::vector<HOM_EnumValue *> &default_expression_language) = 0;
734 const char *disable_when,
736 bool is_label_hidden,
739 const char *script_callback,
741 const std::map<std::string, std::string> &tags,
742 const std::map<HOM_EnumValue *, std::string> &conditionals,
743 const std::vector<std::string> &default_expression,
744 const std::vector<HOM_EnumValue *> &default_expression_language) = 0;
750 const char *disable_when,
752 bool is_label_hidden,
755 const char *script_callback,
757 const std::map<std::string, std::string> &tags,
758 const std::map<HOM_EnumValue *, std::string> &conditionals,
765 const std::vector<std::string> &menu_items,
766 const std::vector<std::string> &menu_labels,
768 const std::vector<std::string> &icon_names,
773 const char *disable_when,
775 bool is_label_hidden,
778 const char *script_callback,
780 const std::map<std::string, std::string> &tags,
781 const std::map<HOM_EnumValue *, std::string> &conditionals,
784 bool store_default_value_as_string,
785 bool is_button_strip,
786 bool strip_uses_icons
792 const char *disable_when,
794 bool is_label_hidden,
797 const char *script_callback,
799 const std::map<std::string, std::string> &tags,
800 const std::map<HOM_EnumValue *, std::string> &conditionals ) = 0;
805 const std::vector<std::string> &column_labels,
808 bool is_label_hidden,
811 const std::map<std::string, std::string> &tags,
812 const std::map<HOM_EnumValue *, std::string> &conditionals) = 0;
817 const std::map<std::string, std::string> &tags,
818 const std::map<HOM_EnumValue *, std::string> &conditionals) = 0;
822 const std::vector<std::string> &folder_names,
824 const std::map<std::string, std::string> &tags) = 0;
829 const std::vector<HOM_ParmTemplate *> &parm_templates,
834 const char *script_callback,
836 const std::map<std::string, std::string> &tags,
837 const std::map<HOM_EnumValue *, std::string> &conditionals,
838 const std::map<HOM_EnumValue *, std::string> &tab_conditionals) = 0;
848 const char *disable_when,
851 const char *script_callback,
853 const std::map<std::string, std::string> &tags,
854 const std::map<HOM_EnumValue *, std::string> &conditionals,
859 const std::vector<HOM_ParmTemplate *> &parm_templates) = 0;
862 bool cook_stats,
bool pdg_cook_stats,
bool solve_stats,
863 bool draw_stats,
bool gpu_draw_stats,
bool viewport_stats,
864 bool script_stats,
bool render_stats,
bool thread_stats,
865 bool frame_stats,
bool memory_stats,
bool errors,
866 bool pane_stats) = 0;
885 const char *
pattern =
nullptr) = 0;
888 const char *operation_name,
const char *long_operation_name,
889 bool open_interrupt_dialog) = 0;
902 const std::vector<HOM_EnumValue *> &selection_types,
905 const std::vector<HOM_Prim *> &prims) = 0;
907 const std::vector<HOM_Point *> &
points) = 0;
909 const std::vector<HOM_Vertex *> &vertices) = 0;
911 const std::vector<HOM_Edge *> &edges) = 0;
915 bool clone_data_ids =
false) = 0;
928 bool keep_external_ref,
bool delay_load) = 0;
939 const char *
name) = 0;
944 const char *prim_path,
947 virtual HOM_AgentRig *newAgentRig(
const char *
path,
bool keep_external_ref) = 0;
950 const char *
name,
const std::vector<std::string> &transform_names,
951 const std::vector<std::vector<int>> &hierarchy) = 0;
955 bool keep_external_ref =
true) = 0;
958 const char *
name,
const std::vector<int> &transforms,
959 const HOM_AgentRig &rig,
const std::vector<double> &weights,
960 const std::vector<int> &
channels) = 0;
966 const char *
path,
bool keep_external_ref) = 0;
970 bool deforming,
double bounds_scale) = 0;
978 newAgentShapeDeformer(
const char *
name) = 0;
981 newAgentShapeDeformer(
const HOM_EnumValue &deformer_type) = 0;
986 const std::vector<HOM_AgentShapeBinding *> &shape_bindings,
992 bool keep_external_ref =
true) = 0;
996 bool keep_external_ref =
true) = 0;
998 const std::map<std::string, hboost::any> &
data) = 0;
1000 virtual bool compareNode(
const char *
path,
const char *dest = NULL) = 0;
1001 virtual bool compareNodeBackup(
const char *
path,
int index,
1002 const char *dest = NULL) = 0;
1003 virtual bool compareHDA(
const char *path_left,
const char *path_right,
1004 const char *dest = NULL) = 0;
1005 virtual bool compareHDABackup(
const char *
path,
int index,
1006 const char *dest = NULL) = 0;
1007 virtual bool compareHip(
const char *dest = NULL) = 0;
1008 virtual bool compareHipBackup(
int index,
const char *dest = NULL) = 0;
1010 virtual bool hasContextOption(
const char *opt) = 0;
1012 virtual std::vector<std::string> contextOptionNames() = 0;
1013 virtual void setContextOption(
const char *opt,
const char *
value) =0;
1014 virtual void setContextOption(
const char *opt,
double value) = 0;
1015 virtual void removeContextOption(
const char *opt) = 0;
1016 virtual std::string contextOptionConfig(
const char *opt) = 0;
1017 virtual void setContextOptionConfig(
const char *opt,
1018 const char *config) = 0;
1019 virtual bool isAutoContextOption(
const char *opt) = 0;
1020 virtual bool isAutoContextOptionOverridden(
const char *opt) = 0;
1023 virtual void addOpaqueContextOptionChangeCallback(
void *callback) = 0;
1025 virtual void removeOpaqueContextOptionChangeCallback(
void *callback) = 0;
1026 virtual void removeAllContextOptionChangeCallbacks() = 0;
1028 virtual std::vector<void *> opaqueContextOptionChangeCallbacks() = 0;
1033 virtual void setOrboltURLHandler(
1034 STORUI_OrboltURLHandler &orbolt_url_handler) = 0;
1040 virtual void constructObject(
void *
pointer,
const std::type_info &
type) = 0;
1041 virtual void destructObject(
void *
pointer,
const std::type_info &
type) = 0;
1042 virtual std::map<std::string, int> objectCounts() = 0;
1045 virtual std::vector<std::string> getPreferenceNames() = 0;
1047 virtual bool setPreference(
const char *
name,
const char*
value) = 0;
1048 virtual bool addPreference(
const char *
name,
const char*
value) = 0;
1049 virtual bool removePreference(
const char *
name) = 0;
1050 virtual void refreshPreferences() = 0;
1056 std::vector<HOM_NodeTypeCategory*>
const & contexts) = 0;
1061 std::vector<HOM_NodeTypeCategory*>
const & categories) = 0;
1085 std::map<std::string, hboost::any>
const &
params,
1093 std::map<std::string, hboost::any>
const &
params,
1100 virtual void startHoudiniEngineDebugger(
unsigned short port) = 0;
1101 virtual void startHoudiniEngineDebugger(
const char *pipe_name) = 0;
1111 bool from_blosc_compression,
1113 bool to_blosc_compression) = 0;
1116 const std::map<
std::string, std::vector<HOM_Keyframe *>> &keyframe_map,
1117 bool binary =
true,
bool use_blosc_compression =
true) = 0;
1120 bool blosc_compressed =
true) = 0;
1122 virtual std::vector<HOM_ElemPtr<HOM_Node> > _nodesFromOPNodeList(
int64 val) = 0;
1123 virtual std::vector<HOM_ElemPtr<HOM_DopData> >
1140 virtual bool removeAnimationLayer(
HOM_Node &layermixer,
const std::string &layername,
bool merge=
false) = 0;
1143 virtual void* _sceneViewerWindow(
int64 val) = 0;
1145 virtual void registerOpdefPath(
1151 virtual std::vector<std::string> videoEncoders(
1152 HOM_EnumValue const &driver,
const bool available=
false) = 0;
1156 static void (*theHOMCreator)();
1162 friend class HOMF_Module;
1163 static void setImplementation(
HOM_Module* implementation);
1176 template <
typename T>
1199 if (!HOM_theHOMLock)
1297 #define HOM_CONSTRUCT_OBJECT(pointer) \
1298 HOM().constructObject(pointer, typeid(*pointer));
1299 #define HOM_DESTRUCT_OBJECT(pointer) \
1300 HOM().destructObject(pointer, typeid(*pointer));
1302 #define HOM_CONSTRUCT_OBJECT(pointer)
1303 #define HOM_DESTRUCT_OBJECT(pointer)
1321 #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)