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