00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __HOM_Module_h__
00021 #define __HOM_Module_h__
00022
00023 #include "HOM_API.h"
00024 #include "HOM_Defines.h"
00025 #include "HOM_Errors.h"
00026 #include "HOM_ElemPtr.h"
00027 #include <PY/PY_InterpreterAutoLock.h>
00028 #include <UT/UT_Lock.h>
00029 #include <UT/UT_NonCopyable.h>
00030 #include <UT/UT_TaskLock.h>
00031 #include <UT/UT_Thread.h>
00032 #include <SYS/SYS_Types.h>
00033 #include <typeinfo>
00034 #include <string>
00035 #include <vector>
00036 #include <map>
00037 #include <boost/shared_ptr.hpp>
00038 #include <boost/any.hpp>
00039
00040 class OP_Node;
00041 class UI_Value;
00042 class HOM_EnumValue;
00043 class HOM_FloatParmTemplate;
00044 class HOM_Geometry;
00045 class HOM_HDAModule;
00046 class HOM_HDAOptions;
00047 class HOM_IntParmTemplate;
00048 class HOM_InterruptableOperation;
00049 class HOM_Keyframe;
00050 class HOM_StringKeyframe;
00051 class HOM_NodeType;
00052 class HOM_NodeTypeCategory;
00053 class HOM_Node;
00054 class HOM_NodeBundle;
00055 class HOM_Parm;
00056 class HOM_ParmTuple;
00057 class HOM_EvaluationCache;
00058 class HOM_ParmTemplate;
00059 class HOM_StringParmTemplate;
00060 class HOM_ToggleParmTemplate;
00061 class HOM_MenuParmTemplate;
00062 class HOM_ButtonParmTemplate;
00063 class HOM_LabelParmTemplate;
00064 class HOM_SeparatorParmTemplate;
00065 class HOM_FolderSetParmTemplate;
00066 class HOM_FolderParmTemplate;
00067 class HOM_RampParmTemplate;
00068 class HOM_ParmTemplateGroup;
00069 class HOM_PerfMonRecordOptions;
00070 class HOM_VexContext;
00071 class HOM_galleries;
00072 class HOM_perfMon;
00073 class HOM_playbar;
00074 class HOM_hda;
00075 class HOM_hipFile;
00076 class HOM_hmath;
00077 class HOM_dop;
00078 class HOM_shelves;
00079 class HOM_ui;
00080 class HOM_audio;
00081
00082 #define HOM_SESSION_MODULE_NAME "hou.session"
00083 #define HOM_SESSION_MODULE_CPIO_NAME "." HOM_SESSION_MODULE_NAME
00084
00085
00086
00087
00088 class HOM_Module;
00089 HOM_API HOM_Module& HOM() throw(HOM_Error);
00090
00091
00092 class HOM_API HOM_Module
00093 {
00094 public:
00095 virtual ~HOM_Module() {}
00096
00097 virtual std::vector<std::string> _getArgumentAutoComplete(
00098 const char *method_name, const char *arguments)
00099 throw(HOM_Error) = 0;
00100
00101
00102
00103
00104 virtual void setRelativeNodeForAutoComplete(OP_Node *node) = 0;
00105
00106
00107 virtual HOM_ui& ui() throw(HOM_NotAvailable, HOM_Error) = 0;
00108 virtual HOM_audio& audio() throw(HOM_NotAvailable, HOM_Error) = 0;
00109 virtual bool isUIAvailable() throw(HOM_Error) = 0;
00110
00111 virtual HOM_galleries& galleries() throw(HOM_Error) = 0;
00112 virtual HOM_hda& hda() throw(HOM_NotAvailable, HOM_Error) = 0;
00113 virtual HOM_hipFile& hipFile() throw(HOM_NotAvailable, HOM_Error) = 0;
00114 virtual HOM_perfMon& perfMon() throw(HOM_Error) = 0;
00115 virtual HOM_playbar& playbar() throw(HOM_Error) = 0;
00116 virtual HOM_hmath& hmath() throw(HOM_Error) = 0;
00117 virtual HOM_dop& dop() throw(HOM_Error) = 0;
00118 virtual HOM_shelves& shelves() throw(HOM_Error) = 0;
00119
00120
00121 virtual void exit(int exit_code=0, bool suppress_save_prompt=false)
00122 throw(HOM_SystemExit, HOM_Error) = 0;
00123
00124
00125
00126
00127 virtual bool isExiting() throw(HOM_Error) = 0;
00128
00129
00130 virtual std::string applicationName() throw(HOM_Error) = 0;
00131 virtual std::vector<int> applicationVersion() throw(HOM_Error) = 0;
00132 virtual std::string applicationVersionString() throw(HOM_Error) = 0;
00133 virtual std::string applicationCompilationDate() throw(HOM_Error) = 0;
00134 virtual std::string applicationPlatformInfo() throw(HOM_Error) = 0;
00135 virtual HOM_EnumValue &licenseCategory() throw(HOM_Error) = 0;
00136 virtual bool isApprentice() throw(HOM_Error) = 0;
00137 virtual void releaseLicense() throw(HOM_OperationFailed, HOM_Error) = 0;
00138
00139
00140 virtual int maxThreads() throw(HOM_Error) = 0;
00141 virtual void setMaxThreads(int max_threads) throw(HOM_Error) = 0;
00142
00143
00144 virtual HOM_Node* root() throw(HOM_NotAvailable, HOM_Error) = 0;
00145 virtual HOM_Node* pwd() throw(HOM_NotAvailable, HOM_Error) = 0;
00146 virtual HOM_Node* parent() throw(HOM_NotAvailable, HOM_Error) = 0;
00147
00148 virtual void setPwd(HOM_Node &newpwd)
00149 throw(HOM_ObjectWasDeleted, HOM_NotAvailable, HOM_Error) = 0;
00150 virtual void cd(const char *path)
00151 throw(HOM_OperationFailed, HOM_NotAvailable, HOM_Error) = 0;
00152
00153
00154 virtual HOM_HDAModule* phm() throw(HOM_NotAvailable, HOM_Error) = 0;
00155
00156
00157 virtual HOM_Node* currentDopNet()
00158 throw(HOM_NotAvailable, HOM_Error) = 0;
00159 virtual void setCurrentDopNet(HOM_Node &dopnet)
00160 throw(HOM_NotAvailable, HOM_ObjectWasDeleted, HOM_Error) = 0;
00161
00162
00163 virtual bool simulationEnabled()
00164 throw(HOM_NotAvailable, HOM_Error) = 0;
00165 virtual void setSimulationEnabled(bool enabled)
00166 throw(HOM_NotAvailable, HOM_Error) = 0;
00167
00168
00169
00170 virtual HOM_Node *node(const char *path)
00171 throw(HOM_NotAvailable, HOM_PermissionError, HOM_Error) = 0;
00172 virtual HOM_Node *nodeBySessionId(int session_id)
00173 throw(HOM_NotAvailable, HOM_PermissionError, HOM_Error) = 0;
00174
00175
00176 virtual std::vector<HOM_ElemPtr<HOM_Node> > selectedNodes(
00177 bool include_hidden = false)
00178 throw(HOM_NotAvailable, HOM_Error) = 0;
00179
00180
00181 virtual void copyNodesToClipboard(const std::vector<HOM_Node *> &nodes)
00182 throw(HOM_ObjectWasDeleted, HOM_OperationFailed, HOM_TypeError,
00183 HOM_Error) = 0;
00184 virtual void pasteNodesFromClipboard(HOM_Node &destination_node)
00185 throw(HOM_ObjectWasDeleted, HOM_OperationFailed, HOM_TypeError,
00186 HOM_Error) = 0;
00187
00188
00189
00190 virtual HOM_Parm* parm(const char *path)
00191 throw(HOM_NotAvailable, HOM_Error) = 0;
00192 virtual HOM_ParmTuple* parmTuple(const char *path)
00193 throw(HOM_NotAvailable, HOM_Error) = 0;
00194 virtual HOM_Parm *evaluatingParm()
00195 throw(HOM_NotAvailable, HOM_Error) = 0;
00196
00197
00198 virtual std::vector< std::map<std::string, std::string> >
00199 parmClipboardContents() = 0;
00200
00201
00202
00203 virtual HOM_NodeType *nodeType(
00204 HOM_NodeTypeCategory &category, const char *name)
00205 throw(HOM_NotAvailable, HOM_Error) = 0;
00206 virtual HOM_NodeType *nodeType(const char *name)
00207 throw(HOM_NotAvailable, HOM_Error) = 0;
00208
00209 virtual HOM_NodeTypeCategory &objNodeTypeCategory() = 0;
00210 virtual HOM_NodeTypeCategory &sopNodeTypeCategory() = 0;
00211 virtual HOM_NodeTypeCategory &popNodeTypeCategory() = 0;
00212 virtual HOM_NodeTypeCategory &dopNodeTypeCategory() = 0;
00213 virtual HOM_NodeTypeCategory &cop2NodeTypeCategory() = 0;
00214 virtual HOM_NodeTypeCategory &shopNodeTypeCategory() = 0;
00215 virtual HOM_NodeTypeCategory &vopNodeTypeCategory() = 0;
00216 virtual HOM_NodeTypeCategory &ropNodeTypeCategory() = 0;
00217 virtual HOM_NodeTypeCategory &chopNodeTypeCategory() = 0;
00218 virtual HOM_NodeTypeCategory &popNetNodeTypeCategory() = 0;
00219 virtual HOM_NodeTypeCategory &cop2NetNodeTypeCategory() = 0;
00220 virtual HOM_NodeTypeCategory &vopNetNodeTypeCategory() = 0;
00221 virtual HOM_NodeTypeCategory &chopNetNodeTypeCategory() = 0;
00222 virtual HOM_NodeTypeCategory &managerNodeTypeCategory() = 0;
00223 virtual HOM_NodeTypeCategory &rootNodeTypeCategory() = 0;
00224 virtual std::map<std::string, HOM_NodeTypeCategory *>
00225 nodeTypeCategories() = 0;
00226
00227 virtual std::vector<HOM_ElemPtr<HOM_Node> > copyNodesTo(
00228 const std::vector<HOM_Node *> &nodes,
00229 HOM_Node &destination_node)
00230 throw(HOM_ObjectWasDeleted, HOM_OperationFailed, HOM_TypeError,
00231 HOM_Error) = 0;
00232 virtual std::vector<HOM_ElemPtr<HOM_Node> > moveNodesTo(
00233 const std::vector<HOM_Node *> &nodes,
00234 HOM_Node &destination_node)
00235 throw(HOM_ObjectWasDeleted, HOM_OperationFailed, HOM_TypeError,
00236 HOM_Error) = 0;
00237
00238 virtual HOM_NodeBundle *addNodeBundle(const char *name)
00239 throw(HOM_OperationFailed, HOM_NotAvailable, HOM_TypeError,
00240 HOM_Error) = 0;
00241 virtual std::vector<HOM_ElemPtr<HOM_NodeBundle> > nodeBundles()
00242 throw(HOM_NotAvailable, HOM_Error) = 0;
00243 virtual std::vector<HOM_ElemPtr<HOM_NodeBundle> > selectedNodeBundles()
00244 throw(HOM_NotAvailable, HOM_Error) = 0;
00245 virtual HOM_NodeBundle *nodeBundle(const char *name)
00246 throw(HOM_NotAvailable, HOM_TypeError, HOM_Error) = 0;
00247
00248
00249 virtual fpreal getTimeWithoutAddingDependency() = 0;
00250 virtual double time() throw(HOM_Error) = 0;
00251 virtual void setTime(double time) throw(HOM_Error) = 0;
00252 virtual double frame() throw(HOM_Error) = 0;
00253 virtual int intFrame() throw(HOM_Error) = 0;
00254 virtual void setFrame(double frame) throw(HOM_Error) = 0;
00255 virtual double fps() throw(HOM_Error) = 0;
00256 virtual void setFps(double fps) throw(HOM_Error) = 0;
00257 virtual double timeToFrame(double time) throw(HOM_Error) = 0;
00258 virtual double frameToTime(double frame) throw(HOM_Error) = 0;
00259
00260
00261 virtual fpreal scaleFromMKS(const char *units) throw(HOM_Error) = 0;
00262 virtual fpreal scaleToMKS(const char *units) throw(HOM_Error) = 0;
00263
00264 virtual double bezier() throw(HOM_NotAvailable, HOM_Error) = 0;
00265 virtual double constant() throw(HOM_NotAvailable, HOM_Error) = 0;
00266 virtual double cubic() throw(HOM_NotAvailable, HOM_Error) = 0;
00267 virtual double cycle(double start_frame, double end_frame)
00268 throw(HOM_NotAvailable, HOM_Error) = 0;
00269 virtual double cyclet(double start_time, double end_time)
00270 throw(HOM_NotAvailable, HOM_Error) = 0;
00271 virtual double cycleoffset(double start_frame, double end_frame)
00272 throw(HOM_NotAvailable, HOM_Error) = 0;
00273 virtual double cycleoffsett(double start_time, double end_time)
00274 throw(HOM_NotAvailable, HOM_Error) = 0;
00275 virtual double ease() throw(HOM_NotAvailable, HOM_Error) = 0;
00276 virtual double easein() throw(HOM_NotAvailable, HOM_Error) = 0;
00277 virtual double easeinp(double ease_speed)
00278 throw(HOM_NotAvailable, HOM_Error) = 0;
00279 virtual double easeout() throw(HOM_NotAvailable, HOM_Error) = 0;
00280 virtual double easeoutp(double ease_speed)
00281 throw(HOM_NotAvailable, HOM_Error) = 0;
00282 virtual double easep(double ease_bias)
00283 throw(HOM_NotAvailable, HOM_Error) = 0;
00284 virtual double linear() throw(HOM_NotAvailable, HOM_Error) = 0;
00285 virtual double match() throw(HOM_NotAvailable, HOM_Error) = 0;
00286 virtual double matchin() throw(HOM_NotAvailable, HOM_Error) = 0;
00287 virtual double matchout() throw(HOM_NotAvailable, HOM_Error) = 0;
00288 virtual double qlinear() throw(HOM_NotAvailable, HOM_Error) = 0;
00289 virtual double quintic() throw(HOM_NotAvailable, HOM_Error) = 0;
00290 virtual double repeat(double start_frame, double end_frame)
00291 throw(HOM_NotAvailable, HOM_Error) = 0;
00292 virtual double repeatt(double start_time, double end_time)
00293 throw(HOM_NotAvailable, HOM_Error) = 0;
00294 virtual double spline() throw(HOM_NotAvailable, HOM_Error) = 0;
00295 virtual double vmatch() throw(HOM_NotAvailable, HOM_Error) = 0;
00296 virtual double vmatchin() throw(HOM_NotAvailable, HOM_Error) = 0;
00297 virtual double vmatchout() throw(HOM_NotAvailable, HOM_Error) = 0;
00298
00299
00300 virtual std::vector<HOM_ElemPtr<HOM_VexContext> >
00301 vexContexts() throw(HOM_Error) = 0;
00302
00303 virtual HOM_VexContext* vexContextForShaderType(HOM_EnumValue &shader_type)
00304 throw(HOM_TypeError, HOM_Error) = 0;
00305
00306 virtual HOM_VexContext* vexContextForNodeTypeCategory(
00307 HOM_NodeTypeCategory &node_type_category)
00308 throw(HOM_TypeError, HOM_Error) = 0;
00309
00310
00311 virtual std::string hscriptCommandHelp(const char *command_name)
00312 throw(HOM_Error) = 0;
00313
00314
00315
00316 virtual std::vector<std::string> hscript(const char *command)
00317 throw(HOM_Error) = 0;
00318
00319
00320 virtual bool almostEqual(double x, double y) throw(HOM_Error) = 0;
00321
00322 virtual std::vector<std::pair<HOM_ElemPtr<HOM_Parm>, std::string> >
00323 fileReferences(const char *project_dir_variable="HIP")
00324 throw(HOM_TypeError, HOM_Error) = 0;
00325
00326
00327 virtual std::string findFile(const char *file_name)
00328 throw(HOM_OperationFailed, HOM_Error) = 0;
00329 virtual std::vector<std::string> findFiles(
00330 const char *file_name) throw(HOM_OperationFailed, HOM_Error) = 0;
00331
00332
00333 virtual std::string findDirectory(const char *directory_name)
00334 throw(HOM_OperationFailed, HOM_Error) = 0;
00335 virtual std::vector<std::string> findDirectories(
00336 const char *directory_name) throw(HOM_OperationFailed, HOM_Error) = 0;
00337
00338 virtual std::vector<std::string> houdiniPath()
00339 throw(HOM_Error) = 0;
00340
00341 virtual std::string homeHoudiniDirectory()
00342 throw(HOM_Error) = 0;
00343
00344
00345 virtual std::string readFile(const char *file_path)
00346 throw(HOM_OperationFailed, HOM_Error) = 0;
00347
00348
00349
00350
00351
00352
00353 virtual UI_Value *getSessionModuleSourceForceUpdateValue() = 0;
00354 virtual void forceUpdateFromSessionModuleSource() = 0;
00355 virtual void forceSetSessionModuleSource(const char *source) throw() = 0;
00356
00357 virtual void setSessionModuleSource(const char *source)
00358 throw(HOM_OperationFailed, HOM_Error) = 0;
00359 virtual void appendSessionModuleSource(const char *source)
00360 throw(HOM_OperationFailed, HOM_Error) = 0;
00361 virtual std::string sessionModuleSource() throw(HOM_Error) = 0;
00362
00363 virtual int sessionModuleSourceChangeCount() = 0;
00364
00365
00366
00367
00368
00369 static bool isImplementationSet()
00370 { return theImplementation != NULL; }
00371
00372
00373 virtual std::string chsop(const char *path)
00374 throw(HOM_ObjectWasDeleted, HOM_OperationFailed, HOM_Error) = 0;
00375
00376 virtual int patternMatch(const char *pattern, const char *str)
00377 throw(HOM_ObjectWasDeleted, HOM_OperationFailed, HOM_Error) = 0;
00378
00379
00380
00381 virtual boost::any hscriptExpression(const char *expression)
00382 throw(HOM_OperationFailed, HOM_Error) = 0;
00383 virtual double hscriptFloatExpression(const char *expression)
00384 throw(HOM_OperationFailed, HOM_Error) = 0;
00385 virtual std::string hscriptStringExpression(const char *expression)
00386 throw(HOM_OperationFailed, HOM_Error) = 0;
00387 virtual std::vector<double> hscriptVectorExpression(const char *expression)
00388 throw(HOM_OperationFailed, HOM_Error) = 0;
00389 virtual std::vector<std::vector<double> > hscriptMatrixExpression(
00390 const char *expression)
00391 throw(HOM_OperationFailed, HOM_Error) = 0;
00392
00393 virtual std::string expandString(const char *str)
00394 throw(HOM_OperationFailed, HOM_NotAvailable, HOM_Error) = 0;
00395 virtual std::string expandStringAtFrame(const char *str, double frame)
00396 throw(HOM_OperationFailed, HOM_NotAvailable, HOM_Error) = 0;
00397
00398 virtual double lvar(const char *name)
00399 throw(HOM_NotAvailable, HOM_OperationFailed, HOM_Error) = 0;
00400
00401 virtual char *getenv(const char *name, const char *default_value=NULL)
00402 throw(HOM_TypeError, HOM_Error) = 0;
00403
00404 virtual void putenv(const char *name, const char *value)
00405 throw(HOM_TypeError, HOM_Error) = 0;
00406
00407 virtual void unsetenv(const char *name)
00408 throw(HOM_TypeError, HOM_Error) = 0;
00409
00410 virtual void allowEnvironmentToOverwriteVariable(
00411 const char *name, bool onoff)
00412 throw(HOM_TypeError, HOM_Error) = 0;
00413
00414 virtual void *expressionGlobals() throw(HOM_Error) = 0;
00415
00416
00417
00418
00419 virtual bool updateProgressAndCheckForInterrupt(int percentage=-1)
00420 throw(HOM_Error) = 0;
00421
00422 virtual std::map<std::string, boost::any> runVex(
00423 const char *vex_file,
00424 const std::map<std::string, boost::any> &inputs)
00425 throw(HOM_OperationFailed, HOM_TypeError, HOM_Error) = 0;
00426
00427
00428
00429 virtual void saveImageDataToFile(
00430 const std::vector<float> &color_and_alpha_data,
00431 int width, int height,
00432 const char *file_name)
00433 throw(HOM_OperationFailed, HOM_TypeError, HOM_Error) = 0;
00434
00435 virtual void saveImageDataToFile(
00436 const std::string &color_and_alpha_data,
00437 int width, int height,
00438 const char *file_name)
00439 throw(HOM_OperationFailed, HOM_TypeError, HOM_Error) = 0;
00440
00441 virtual std::vector<int> imageResolution(const char *image_file_name)
00442 throw(HOM_OperationFailed, HOM_TypeError, HOM_Error) = 0;
00443
00444
00445
00446 virtual HOM_EnumValue &updateModeSetting()
00447 throw(HOM_NotAvailable, HOM_Error) = 0;
00448 virtual void setUpdateMode(HOM_EnumValue &mode)
00449 throw(HOM_NotAvailable, HOM_TypeError, HOM_Error) = 0;
00450
00451
00452
00453 virtual void *opaqueRunCallbackAndCatchCrashes(void *opaque_callback)
00454 throw(HOM_TypeError, HOM_Error) = 0;
00455
00456
00457
00458
00459
00460 virtual void pushAccessPrivilege(const char *key) throw(HOM_Error) = 0;
00461 virtual void popAccessPrivilege(const char *key) throw(HOM_Error) = 0;
00462
00463 virtual std::string currentPythonModuleKey() throw(HOM_Error) = 0;
00464
00465 virtual void registerAccessPrivilegePyClient(void *opaque_python_object)
00466 throw(HOM_Error) = 0;
00467
00468
00469
00470
00471
00472 virtual HOM_FloatParmTemplate *newFloatParmTemplate(
00473 const char *name,
00474 const char *label,
00475 int num_components,
00476 const std::vector<double> &default_value,
00477 double min, double max,
00478 bool min_is_strict, bool max_is_strict,
00479 HOM_EnumValue &look,
00480 HOM_EnumValue &naming_scheme,
00481 const char *disable_when,
00482 bool is_hidden,
00483 bool is_label_hidden,
00484 bool join_with_next,
00485 const char *help,
00486 const char *script_callback,
00487 HOM_EnumValue &script_callback_language,
00488 const std::map<std::string, std::string> &tags,
00489 const std::map<HOM_EnumValue, std::string> &conditionals,
00490 const std::vector<std::string> &default_expression,
00491 const std::vector<HOM_EnumValue *> &default_expression_language)
00492 throw(HOM_OperationFailed, HOM_TypeError, HOM_Error) = 0;
00493
00494 virtual HOM_IntParmTemplate *newIntParmTemplate(
00495 const char *name,
00496 const char *label,
00497 int num_components,
00498 const std::vector<int> &default_value,
00499 int min, int max,
00500 bool min_is_strict, bool max_is_strict,
00501 HOM_EnumValue &naming_scheme,
00502 const char *disable_when,
00503 bool is_hidden,
00504 bool is_label_hidden,
00505 bool join_with_next,
00506 const char *help,
00507 const char *script_callback,
00508 HOM_EnumValue &script_callback_language,
00509 const std::map<std::string, std::string> &tags,
00510 const std::map<HOM_EnumValue, std::string> &conditionals,
00511 const std::vector<std::string> &default_expression,
00512 const std::vector<HOM_EnumValue *> &default_expression_language)
00513 throw(HOM_OperationFailed, HOM_TypeError, HOM_Error) = 0;
00514
00515 virtual HOM_StringParmTemplate *newStringParmTemplate(
00516 const char *name,
00517 const char *label,
00518 int num_components,
00519 const std::vector<std::string> &default_value,
00520 HOM_EnumValue &naming_scheme,
00521 HOM_EnumValue &string_type,
00522 const std::vector<std::string> &menu_items,
00523 const std::vector<std::string> &menu_labels,
00524 const std::vector<std::string> &icon_names,
00525 const std::string &item_generator_script,
00526 HOM_EnumValue *item_generator_script_language,
00527 HOM_EnumValue &menu_type,
00528 const char *disable_when,
00529 bool is_hidden,
00530 bool is_label_hidden,
00531 bool join_with_next,
00532 const char *help,
00533 const char *script_callback,
00534 HOM_EnumValue &script_callback_language,
00535 const std::map<std::string, std::string> &tags,
00536 const std::map<HOM_EnumValue, std::string> &conditionals,
00537 const std::vector<std::string> &default_expression,
00538 const std::vector<HOM_EnumValue *> &default_expression_language)
00539 throw(HOM_OperationFailed, HOM_TypeError, HOM_Error) = 0;
00540
00541 virtual HOM_ToggleParmTemplate *newToggleParmTemplate(
00542 const char *name,
00543 const char *label,
00544 bool default_value,
00545 const char *disable_when,
00546 bool is_hidden,
00547 bool is_label_hidden,
00548 bool join_with_next,
00549 const char *help,
00550 const char *script_callback,
00551 HOM_EnumValue &script_callback_language,
00552 const std::map<std::string, std::string> &tags,
00553 const std::map<HOM_EnumValue, std::string> &conditionals,
00554 const std::string &default_expression,
00555 const HOM_EnumValue &default_expression_language)
00556 throw(HOM_OperationFailed, HOM_TypeError, HOM_Error) = 0;
00557
00558 virtual HOM_MenuParmTemplate *newMenuParmTemplate(
00559 const char *name,
00560 const char *label,
00561 const std::vector<std::string> &menu_items,
00562 const std::vector<std::string> &menu_labels,
00563 int default_value,
00564 const std::vector<std::string> &icon_names,
00565 const std::string &item_generator_script,
00566 HOM_EnumValue *item_generator_script_language,
00567 HOM_EnumValue &menu_type,
00568 const char *disable_when,
00569 bool is_hidden,
00570 bool is_label_hidden,
00571 bool join_with_next,
00572 const char *help,
00573 const char *script_callback,
00574 HOM_EnumValue &script_callback_language,
00575 const std::map<std::string, std::string> &tags,
00576 const std::map<HOM_EnumValue, std::string> &conditionals,
00577 const std::string &default_expression,
00578 const HOM_EnumValue &default_expression_language)
00579 throw(HOM_OperationFailed, HOM_TypeError, HOM_Error) = 0;
00580
00581 virtual HOM_ButtonParmTemplate *newButtonParmTemplate(
00582 const char *name,
00583 const char *label,
00584 const char *disable_when,
00585 bool is_hidden,
00586 bool is_label_hidden,
00587 bool join_with_next,
00588 const char *help,
00589 const char *script_callback,
00590 HOM_EnumValue &script_callback_language,
00591 const std::map<std::string, std::string> &tags,
00592 const std::map<HOM_EnumValue, std::string> &conditionals )
00593 throw(HOM_OperationFailed, HOM_TypeError, HOM_Error) = 0;
00594
00595 virtual HOM_LabelParmTemplate *newLabelParmTemplate(
00596 const char *name,
00597 const char *label,
00598 const std::vector<std::string> &column_labels,
00599 bool is_hidden,
00600 bool is_label_hidden,
00601 bool join_with_next,
00602 const char *help,
00603 const std::map<std::string, std::string> &tags,
00604 const std::map<HOM_EnumValue, std::string> &conditionals)
00605 throw(HOM_OperationFailed, HOM_TypeError, HOM_Error) = 0;
00606
00607 virtual HOM_SeparatorParmTemplate *newSeparatorParmTemplate(
00608 const char *name,
00609 bool is_hidden,
00610 const std::map<std::string, std::string> &tags,
00611 const std::map<HOM_EnumValue, std::string> &conditionals)
00612 throw(HOM_OperationFailed, HOM_TypeError, HOM_Error) = 0;
00613
00614 virtual HOM_FolderSetParmTemplate *newFolderSetParmTemplate(
00615 const char *name,
00616 const std::vector<std::string> &folder_names,
00617 HOM_EnumValue &folder_type,
00618 const std::map<std::string, std::string> &tags)
00619 throw(HOM_OperationFailed, HOM_TypeError, HOM_Error) = 0;
00620
00621 virtual HOM_FolderParmTemplate *newFolderParmTemplate(
00622 const char *name,
00623 const char *label,
00624 const std::vector<HOM_ParmTemplate *> &parm_templates,
00625 HOM_EnumValue &folder_type,
00626 int default_value,
00627 bool is_hidden,
00628 bool ends_tab_group,
00629 const std::map<std::string, std::string> &tags,
00630 const std::map<HOM_EnumValue, std::string> &conditionals)
00631 throw(HOM_OperationFailed, HOM_TypeError, HOM_Error) = 0;
00632
00633 virtual HOM_RampParmTemplate *newRampParmTemplate(
00634 const char *name,
00635 const char *label,
00636 HOM_EnumValue &ramp_parm_type,
00637 int default_value,
00638 HOM_EnumValue *default_basis,
00639 bool show_controls,
00640 HOM_EnumValue *color_type,
00641 const char *disable_when,
00642 bool is_hidden,
00643 const char *help,
00644 const char *script_callback,
00645 HOM_EnumValue &script_callback_language,
00646 const std::map<std::string, std::string> &tags,
00647 const std::map<HOM_EnumValue, std::string> &conditionals,
00648 const std::string &default_expression,
00649 const HOM_EnumValue &default_expression_language)
00650 throw(HOM_OperationFailed, HOM_TypeError, HOM_Error) = 0;
00651
00652 virtual HOM_ParmTemplateGroup *newParmTemplateGroup(
00653 const std::vector<HOM_ParmTemplate *> &parm_templates)
00654 throw(HOM_OperationFailed, HOM_TypeError, HOM_Error) = 0;
00655
00656 virtual HOM_PerfMonRecordOptions *newPerfMonRecordOptions(
00657 bool cook_stats, bool solve_stats, bool draw_stats,
00658 bool gpu_draw_stats, bool viewport_stats, bool script_stats,
00659 bool render_stats, bool thread_stats, bool frame_stats,
00660 bool memory_stats, bool errors)
00661 throw(HOM_OperationFailed, HOM_TypeError, HOM_Error) = 0;
00662
00663
00664 virtual HOM_Keyframe *newKeyframe() = 0;
00665 virtual HOM_Keyframe *newKeyframe(double value) = 0;
00666 virtual HOM_Keyframe *newKeyframe(double value, double time) = 0;
00667 virtual HOM_Keyframe *newKeyframe(const HOM_Keyframe &keyframe) = 0;
00668
00669 virtual HOM_StringKeyframe *newStringKeyframe() = 0;
00670 virtual HOM_StringKeyframe *newStringKeyframe(
00671 const std::string &value, HOM_EnumValue &language) = 0;
00672 virtual HOM_StringKeyframe *newStringKeyframe(
00673 const std::string &value, double time, HOM_EnumValue &language) = 0;
00674 virtual HOM_StringKeyframe *newStringKeyframe(
00675 const HOM_StringKeyframe &string_keyframe) = 0;
00676
00677 virtual HOM_HDAOptions *newHDAOptions() = 0;
00678
00679 virtual HOM_InterruptableOperation *newInterruptableOperation(
00680 const char *operation_name, const char *long_operation_name,
00681 bool open_interrupt_dialog) = 0;
00682
00683
00684 virtual HOM_Geometry *newGeometry() = 0;
00685
00686
00687
00688
00689
00690 virtual void constructObject(void *pointer, const std::type_info &type) = 0;
00691 virtual void destructObject(void *pointer, const std::type_info &type) = 0;
00692 virtual std::map<std::string, int> objectCounts() = 0;
00693
00694 private:
00695
00696
00697
00698
00699 friend class HOMF_Module;
00700 static void setImplementation(HOM_Module* implementation);
00701
00702
00703
00704
00705 friend HOM_API HOM_Module& HOM() throw(HOM_Error);
00706 static HOM_Module *theImplementation;
00707 };
00708
00709
00710
00711
00712
00713 template <typename T>
00714 boost::shared_ptr<T> HOMdel(T *hom_object)
00715 { return boost::shared_ptr<T>(hom_object); }
00716
00717
00718
00719
00720
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730
00731 HOM_API extern UT_TaskLock HOM_theHOMLock;
00732 inline UT_TaskLock &HOMgetLock()
00733 {
00734 return HOM_theHOMLock;
00735 }
00736
00737
00738
00739
00740
00741
00742 class HOM_API HOM_AutoLock : UT_NonCopyable
00743 {
00744 public:
00745 HOM_AutoLock()
00746 {
00747 HOMgetLock().lock();
00748 }
00749
00750 ~HOM_AutoLock()
00751 {
00752 HOMgetLock().unlock();
00753 }
00754
00755 private:
00756
00757
00758
00759
00760
00761
00762
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772
00773 PY_InterpreterAutoUnlock myPyInterpAutoUnlock;
00774 };
00775
00776
00777
00778
00779
00780
00781
00782
00783
00784
00785
00786
00787
00788
00789 class HOM_API HOM_AutoUnlock : UT_NonCopyable
00790 {
00791 public:
00792 HOM_AutoUnlock()
00793 { HOMgetLock().unlock(); }
00794
00795 ~HOM_AutoUnlock()
00796 { HOMgetLock().lock(); }
00797 };
00798
00799
00800
00801 #ifdef HOM_DEBUG
00802 #define HOM_CONSTRUCT_OBJECT(pointer) \
00803 HOM().constructObject(pointer, typeid(*pointer));
00804 #define HOM_DESTRUCT_OBJECT(pointer) \
00805 HOM().destructObject(pointer, typeid(*pointer));
00806 #else
00807 #define HOM_CONSTRUCT_OBJECT(pointer)
00808 #define HOM_DESTRUCT_OBJECT(pointer)
00809 #endif
00810
00811
00812
00813 typedef std::map<std::string, std::string> HOM_StdMapStringString;
00814 typedef std::map<HOM_EnumValue, std::string> HOM_StdMapEnumString;
00815
00816
00817
00818
00819 extern "C" {
00820 SYS_VISIBILITY_EXPORT extern void HOMextendLibrary();
00821 }
00822
00823 #endif