00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #ifndef __vtkTclInclude_h
00042 #define __vtkTclInclude_h
00043
00044 #include "vtkObject.h"
00045 #include "vtkCommand.h"
00046 #include <tcl.h>
00047 #include <tk.h>
00048
00049 #ifdef WIN32
00050 #define VTKTCL_EXPORT __declspec( dllexport )
00051 #else
00052 #define VTKTCL_EXPORT
00053 #endif
00054
00055 extern VTKTCL_EXPORT void vtkTclDeleteObjectFromHash(vtkObject *,
00056 unsigned long eventId,
00057 void *, void *);
00058 extern VTKTCL_EXPORT void vtkTclGenericDeleteObject(ClientData cd);
00059
00060 extern VTKTCL_EXPORT void
00061 vtkTclGetObjectFromPointer(Tcl_Interp *interp, void *temp,
00062 int (*command)(ClientData,
00063 Tcl_Interp *,int, char *[]));
00064
00065 extern VTKTCL_EXPORT void *
00066 vtkTclGetPointerFromObject(const char *name, const char *result_type,
00067 Tcl_Interp *interp, int &error);
00068
00069 extern VTKTCL_EXPORT void vtkTclVoidFunc(void *);
00070 extern VTKTCL_EXPORT void vtkTclVoidFuncArgDelete(void *);
00071 extern VTKTCL_EXPORT void vtkTclListInstances(Tcl_Interp *interp,
00072 ClientData arg);
00073 extern VTKTCL_EXPORT int vtkTclInDelete(Tcl_Interp *interp);
00074
00075 extern VTKTCL_EXPORT int vtkTclNewInstanceCommand(ClientData cd,
00076 Tcl_Interp *interp,
00077 int argc, char *argv[]);
00078 extern VTKTCL_EXPORT void vtkTclDeleteCommandStruct(ClientData cd);
00079 extern VTKTCL_EXPORT
00080 void vtkTclCreateNew(Tcl_Interp *interp, const char *cname,
00081 ClientData (*NewCommand)(),
00082 int (*CommandFunction)(ClientData cd,
00083 Tcl_Interp *interp,
00084 int argc, char *argv[]));
00085
00086 class vtkTclCommand : public vtkCommand
00087 {
00088 public:
00089 vtkTclCommand();
00090 ~vtkTclCommand();
00091 static vtkTclCommand *New() { return new vtkTclCommand; };
00092
00093 void SetStringCommand(char *arg) { this->StringCommand = arg; };
00094 void SetInterp(Tcl_Interp *interp) { this->Interp = interp; };
00095
00096 void Execute(vtkObject *, unsigned long, void *);
00097
00098 char *StringCommand;
00099 Tcl_Interp *Interp;
00100 };
00101
00102 typedef struct _vtkTclVoidFuncArg
00103 {
00104 Tcl_Interp *interp;
00105 char *command;
00106 } vtkTclVoidFuncArg;
00107
00108 struct vtkTclCommandArgStruct
00109 {
00110 void *Pointer;
00111 Tcl_Interp *Interp;
00112 unsigned long Tag;
00113 };
00114
00115 struct vtkTclCommandStruct
00116 {
00117 ClientData (*NewCommand)();
00118 int (*CommandFunction)(ClientData cd, Tcl_Interp *interp,
00119 int argc, char *argv[]);
00120 };
00121
00122 struct vtkTclInterpStruct
00123 {
00124 Tcl_HashTable InstanceLookup;
00125 Tcl_HashTable PointerLookup;
00126 Tcl_HashTable CommandLookup;
00127
00128 int Number;
00129 int DebugOn;
00130 int InDelete;
00131 };
00132
00133 #endif
00134