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