00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __OBJ_Bone__
00021 #define __OBJ_Bone__
00022
00023 #include "OBJ_API.h"
00024 class UT_String;
00025 class UT_DMatrix4;
00026 class SOP_CaptureRegion;
00027
00028 #include <UT/UT_XformOrder.h>
00029 #include <UT/UT_PtrArray.h>
00030 #include "OBJ_Geometry.h"
00031
00032 #define BONESTATE_CHOPNET "KIN_Chops"
00033
00034
00035
00036 enum OBJ_BoneIndex
00037 {
00038
00039 I_LINK = I_N_GEO_INDICES,
00040 I_REST_ANGLE,
00041 I_LENGTH,
00042 I_SOLVER,
00043 I_DAMPEN,
00044 I_XRANGE,
00045 I_XDAMP,
00046 I_XROLLOFF,
00047 I_YRANGE,
00048 I_YDAMP,
00049 I_YROLLOFF,
00050 I_ZRANGE,
00051 I_ZDAMP,
00052 I_ZROLLOFF,
00053
00054
00055 I_CAPTURE,
00056
00057
00058 I_CRSWITCHER,
00059 I_CCRCENTER,
00060 I_CCRROTATE,
00061 I_CCRSCALE,
00062 I_CCRTOPHEIGHT,
00063 I_CCRTOPCAP,
00064 I_CCRBOTHEIGHT,
00065 I_CCRBOTCAP,
00066 I_CRCENTER,
00067 I_CRROTATE,
00068 I_CRSCALE,
00069 I_CRTOPHEIGHT,
00070 I_CRTOPCAP,
00071 I_CRBOTHEIGHT,
00072 I_CRBOTCAP,
00073
00074 I_LABEL_1,
00075 I_CAPTPOSE_LENGTH,
00076 I_CAPTPOSE_T,
00077 I_CAPTPOSE_R,
00078 I_CAPTPOSE_S,
00079
00080 I_N_BONE_INDICES
00081 };
00082
00083 #define EVAL_FLOAT(name, idx, vi, t) \
00084 return evalFloat(name, &getIndirect()[idx], vi, t);
00085 #define EVAL_FLOATS(name, idx, v, t) \
00086 evalFloats(name, &getIndirect()[idx], v, t);
00087 #define EVAL_INT(name, idx, vi, t) \
00088 return evalInt(name, &getIndirect()[idx], vi, t);
00089 #define EVAL_STR(name, idx, vi, t) \
00090 evalString(str, name, &getIndirect()[idx], vi, (float)t);
00091
00092 #define SET_FLOAT(name, parm_index, vector_index, t, val) \
00093 setFloat(name, getIndirect()[parm_index], vector_index, t, val)
00094 #define SET_FLOATREF(name, vector_index, t, val) \
00095 setChRefFloat(getParmList()->getParmIndex(name), vector_index, t, val)
00096 #define SET_INT(name, parm_index, vector_index, t, val) \
00097 setInt(name, getIndirect()[parm_index], vector_index, t, val)
00098 #define SET_STRING(val, meaning, name, parm_index, vector_index, t) \
00099 setString(val, meaning, name, getIndirect()[parm_index], \
00100 vector_index, t)
00101
00102 class SOP_Node;
00103 class CHOP_Node;
00104
00105 class OBJ_API OBJ_Bone : public OBJ_Geometry
00106 {
00107 public:
00108 static UT_XformOrder XFORM_ORDER;
00109 enum KinOverride {
00110 KIN_OVERRIDE_NONE,
00111 KIN_OVERRIDE_REST,
00112 KIN_OVERRIDE_CAPTURE,
00113 NUM_KIN_OVERRIDES
00114 };
00115
00116 OBJ_Bone(OP_Network *, const char *,
00117 OP_Operator *);
00118 virtual ~OBJ_Bone();
00119
00120 virtual unsigned disableParms();
00121
00122 virtual int isObjectRenderable() const;
00123 void setIsObjectRenderable(bool val);
00124
00125 #if 0
00126 virtual void stashCaptureAngles(float t);
00127 #endif
00128
00129 virtual void getNodeSpecificInfoText(
00130 OP_Context &context,
00131 int verbose,
00132 UT_WorkBuffer &text);
00133
00134 CHOP_Node * getKinChop();
00135 void cleanBoneTransform( OP_Context &context );
00136
00137 SOP_Node * getBoneSOP() const;
00138
00139 virtual void getParmTransform(OP_Context &context,
00140 UT_DMatrix4 &xform);
00141 virtual void getParmTransformRotates(OP_Context &context,
00142 UT_DMatrix4 &xform );
00143 virtual void getParmTransformTranslates(OP_Context &context,
00144 UT_DMatrix4 &xform );
00145 virtual void getParmTransformScales(OP_Context &context,
00146 UT_DMatrix4 &xform );
00147
00148
00149 virtual int getRelativeCaptureTransform( OP_Node &to,
00150 UT_Matrix4 &xform,
00151 OP_Context &context );
00152 virtual int getRelativeCaptureTransform( OP_Node &to,
00153 UT_DMatrix4 &xform,
00154 OP_Context &context );
00155
00156
00157
00158 virtual void getCaptureParmTransform( OP_Context &context,
00159 UT_DMatrix4 &mat );
00160
00161
00162 virtual void setCaptureParmTransform( OP_Context &context,
00163 const UT_DMatrix4& xform );
00164
00165
00166
00167 void getAnimLocalToWorldTransform( OP_Context &context,
00168 UT_DMatrix4 &mat );
00169 void getAnimInverseLocalToWorldTransform(OP_Context &context,
00170 UT_DMatrix4 &mat );
00171
00172
00173
00174 virtual int keepWorldTransform(
00175 OP_Context &context,
00176 const UT_DMatrix4 &world_xform );
00177
00178
00179
00180 int getChildToWorldRestTransform(const char *frame,
00181 UT_DMatrix4 &xform, float t)
00182 {
00183 return getCustomChildToWorldTransform( frame, t,
00184 xform);
00185 }
00186 bool getObjectToChainParentTransform(
00187 OBJ_Bone *start_bone,
00188 UT_DMatrix4 &xform, float t );
00189
00190
00191
00192 void setUseSolver( int onoff )
00193 { myUseSolverFlag = onoff ? 1 : 0; }
00194 int getUseSolver() const
00195 { return myUseSolverFlag; }
00196 int isUsingSolver() const
00197 { return myIsUsingSolverFlag; }
00198
00199
00200
00201
00202
00203
00204
00205 void setCaptureParameters(OP_Context &context,
00206 UT_String &errors);
00207
00208
00209
00210
00211
00212
00213
00214 void alignRegionCaptureWithDeform(OP_Context &context,
00215 UT_String &errors);
00216
00217
00218
00219
00220
00221
00222
00223 void alignRegionDeformWithCapture(OP_Context &context,
00224 UT_String &errors);
00225
00226
00227 void setLinkDisplay(int onOff)
00228 { SET_INT("displaylink", I_LINK, 0, 0, onOff); }
00229 void setLength(float t, float v)
00230 { SET_FLOAT("length", I_LENGTH, 0, t, v); }
00231 void setRestX(float t, float v)
00232 { SET_FLOAT("R", I_REST_ANGLE, 0, t, v); }
00233 void setRestY(float t, float v)
00234 { SET_FLOAT("R", I_REST_ANGLE, 1, t, v); }
00235 void setRestZ(float t, float v)
00236 { SET_FLOAT("R", I_REST_ANGLE, 2, t, v); }
00237
00238 void setSOLVER( const char *solver,
00239 CH_StringMeaning meaning )
00240 {SET_STRING(solver, meaning, "solver",
00241 I_SOLVER, 0, 0.0f);}
00242
00243 void setXMIN(float t, float v)
00244 { SET_FLOAT("xrange", I_XRANGE, 0, t, v); }
00245 void setXMAX(float t, float v)
00246 { SET_FLOAT("xrange", I_XRANGE, 1, t, v); }
00247 void setYMIN(float t, float v)
00248 { SET_FLOAT("yrange", I_YRANGE, 0, t, v); }
00249 void setYMAX(float t, float v)
00250 { SET_FLOAT("yrange", I_YRANGE, 1, t, v); }
00251 void setZMIN(float t, float v)
00252 { SET_FLOAT("zrange", I_ZRANGE, 0, t, v); }
00253 void setZMAX(float t, float v)
00254 { SET_FLOAT("zrange", I_ZRANGE, 1, t, v); }
00255
00256
00257 void setCaptureDisplay(int onOff)
00258 { SET_INT("displaycapture", I_CAPTURE, 0, 0, onOff); }
00259
00260 #if 0 // no longer used
00261 void setPos1(float t, float v)
00262 { SET_FLOAT("ellipse1tz", I_ELLIPSE1P, 0, t, v); }
00263 void setRad1X(float t, float v)
00264 { SET_FLOAT("ellipse1rad", I_ELLIPSE1R, 0, t, v); }
00265 void setRad1Y(float t, float v)
00266 { SET_FLOAT("ellipse1rad", I_ELLIPSE1R, 1, t, v); }
00267 void setPos2(float t, float v)
00268 { SET_FLOAT("ellipse2tz", I_ELLIPSE2P, 0, t, v); }
00269 void setRad2X(float t, float v)
00270 { SET_FLOAT("ellipse2rad", I_ELLIPSE2R, 0, t, v); }
00271 void setRad2Y(float t, float v)
00272 { SET_FLOAT("ellipse2rad", I_ELLIPSE2R, 1, t, v); }
00273 void setJointDivs(float t, int v)
00274 { SET_INT("jointdivs", I_JOINT_DIVS,0, t, v);}
00275 #endif
00276 void setCRcenter(float t, float x, float y, float z)
00277 { SET_FLOAT("crcenter", I_CRCENTER, 0, t, x);
00278 SET_FLOAT("crcenter", I_CRCENTER, 1, t, y);
00279 SET_FLOAT("crcenter", I_CRCENTER, 2, t, z);
00280 }
00281 void setCRotate(float t, float x, float y, float z)
00282 { SET_FLOAT("crrotate", I_CRROTATE, 0, t, x);
00283 SET_FLOAT("crrotate", I_CRROTATE, 1, t, y);
00284 SET_FLOAT("crrotate", I_CRROTATE, 2, t, z);
00285 }
00286 void setCRscale(float t, float x, float y, float z)
00287 { SET_FLOAT("crscale", I_CRSCALE, 0, t, x);
00288 SET_FLOAT("crscale", I_CRSCALE, 1, t, y);
00289 SET_FLOAT("crscale", I_CRSCALE, 2, t, z);
00290 }
00291 void setCRtopHeight(float t, float v)
00292 { SET_FLOAT("crtopheight", I_CRTOPHEIGHT,0,t, v); }
00293 void setCRtopCap(float t, float x, float y, float z)
00294 { SET_FLOAT("crtopcap", I_CRTOPCAP, 0, t, x);
00295 SET_FLOAT("crtopcap", I_CRTOPCAP, 1, t, y);
00296 SET_FLOAT("crtopcap", I_CRTOPCAP, 2, t, z);
00297 }
00298 void setCRbotHeight(float t, float v)
00299 { SET_FLOAT("crbotheight", I_CRBOTHEIGHT,0,t, v); }
00300 void setCRbotCap(float t, float x, float y, float z)
00301 { SET_FLOAT("crbotcap", I_CRBOTCAP, 0, t, x);
00302 SET_FLOAT("crbotcap", I_CRBOTCAP, 1, t, y);
00303 SET_FLOAT("crbotcap", I_CRBOTCAP, 2, t, z);
00304 }
00305
00306
00307
00308
00309 void setCaptLengthAndTranslateDescendents( float t,
00310 float length );
00311 void setCaptTransformAndDescendents( float t,
00312 const UT_DMatrix4 &xform );
00313 virtual void applyToCaptTransformAndDescendents(
00314 OP_Context &context,
00315 const UT_DMatrix4 &xform);
00316
00317
00318 void setCaptPoseBoneLength( float t, float l )
00319 { SET_FLOATREF("captposelen", 0, t, l);
00320 }
00321 void setCaptPoseT(float t, float x, float y, float z)
00322 { SET_FLOATREF("captposet", 0, t, x);
00323 SET_FLOATREF("captposet", 1, t, y);
00324 SET_FLOATREF("captposet", 2, t, z);
00325 }
00326 void setCaptPoseR(float t, float x, float y, float z)
00327 { SET_FLOATREF("captposer", 0, t, x);
00328 SET_FLOATREF("captposer", 1, t, y);
00329 SET_FLOATREF("captposer", 2, t, z);
00330 }
00331 void setCaptPoseS(float t, float x, float y, float z)
00332 { SET_FLOATREF("captposes", 0, t, x);
00333 SET_FLOATREF("captposes", 1, t, y);
00334 SET_FLOATREF("captposes", 2, t, z);
00335 }
00336
00337
00338
00339 float getOverrideDependentBoneLength( float t );
00340 void setOverrideDependentBoneLength( float t, float l );
00341
00342 #if 0
00343 void setCaptAngleX(float t, float v)
00344 { SET_FLOAT("CA", I_CAPTURE_ANGLE, 0, t, v); }
00345 void setCaptAngleY(float t, float v)
00346 { SET_FLOAT("CA", I_CAPTURE_ANGLE, 1, t, v); }
00347 void setCaptAngleZ(float t, float v)
00348 { SET_FLOAT("CA", I_CAPTURE_ANGLE, 2, t, v); }
00349 #endif
00350
00351
00352
00353 int DISPLAYLINK() { EVAL_INT("displaylink", I_LINK, 0, 0) }
00354 float BONELENGTH(float t) { EVAL_FLOAT("length", I_LENGTH, 0, t) }
00355 void SOLVER(UT_String &str){ EVAL_STR("solver", I_SOLVER, 0, 0) }
00356 CH_StringMeaning SOLVERmeaning()
00357 { return getStringMeaning("solver", 0, 0.0f); }
00358 void REST(float *v, float t) { EVAL_FLOATS("R", I_REST_ANGLE, v, t) }
00359 float IKDAMPENING(float t) { EVAL_FLOAT("ikdamp", I_DAMPEN, 0, t) }
00360 float XMIN(float t) { EVAL_FLOAT("xrange", I_XRANGE, 0, t) }
00361 float XMAX(float t) { EVAL_FLOAT("xrange", I_XRANGE, 1, t) }
00362 float XDAMP(float t) { EVAL_FLOAT("xdamp", I_XDAMP, 0, t) }
00363 float XROLLOFF(float t) { EVAL_FLOAT("xrolloff",I_XROLLOFF, 0, t) }
00364 float YMIN(float t) { EVAL_FLOAT("yrange", I_YRANGE, 0, t) }
00365 float YMAX(float t) { EVAL_FLOAT("yrange", I_YRANGE, 1, t) }
00366 float YDAMP(float t) { EVAL_FLOAT("ydamp", I_YDAMP, 0, t) }
00367 float YROLLOFF(float t) { EVAL_FLOAT("yrolloff",I_YROLLOFF, 0, t) }
00368 float ZMIN(float t) { EVAL_FLOAT("zrange", I_ZRANGE, 0, t) }
00369 float ZMAX(float t) { EVAL_FLOAT("zrange", I_ZRANGE, 1, t) }
00370 float ZDAMP(float t) { EVAL_FLOAT("zdamp", I_ZDAMP, 0, t) }
00371 float ZROLLOFF(float t) { EVAL_FLOAT("zrolloff",I_ZROLLOFF, 0, t) }
00372 int CAPTURE() { EVAL_INT ("displaycapture",I_CAPTURE, 0, 0) }
00373 #if 0
00374 float POS1(float t) { EVAL_FLOAT("ellipse1tz", I_ELLIPSE1P, 0, t) }
00375 float RAD1X(float t) { EVAL_FLOAT("ellipse1rad", I_ELLIPSE1R, 0, t) }
00376 float RAD1Y(float t) { EVAL_FLOAT("ellipse1rad", I_ELLIPSE1R, 1, t) }
00377 float POS2(float t) { EVAL_FLOAT("ellipse2tz", I_ELLIPSE2P, 0, t) }
00378 float RAD2X(float t) { EVAL_FLOAT("ellipse2rad", I_ELLIPSE2R, 0, t) }
00379 float RAD2Y(float t) { EVAL_FLOAT("ellipse2rad", I_ELLIPSE2R, 1, t) }
00380 int JOINTDIVS(float t) { EVAL_INT ("jointdivs", I_JOINT_DIVS, 0, t) }
00381 float JOINTSCALE(float t) { EVAL_FLOAT("joints", I_JOINT_SCALE, 0, t) }
00382 float CAPT_ANGLEX(float t) { EVAL_FLOAT("CA", I_CAPTURE_ANGLE, 0, t) }
00383 float CAPT_ANGLEY(float t) { EVAL_FLOAT("CA", I_CAPTURE_ANGLE, 1, t) }
00384 float CAPT_ANGLEZ(float t) { EVAL_FLOAT("CA", I_CAPTURE_ANGLE, 2, t) }
00385 #endif
00386
00387 float CRCEN(float t, int i) { EVAL_FLOAT("crcenter",I_CRCENTER, i,t); }
00388 float CRROTATE(float t, int i){ EVAL_FLOAT("crrotate",I_CRROTATE, i,t);}
00389 float CRSCALE(float t, int i){ EVAL_FLOAT("crscale",I_CRSCALE, i,t);}
00390 float CRTOPH(float t) { EVAL_FLOAT("crtopheight", I_CRTOPHEIGHT,0,t);}
00391 float CRTOPC(float t, int i){ EVAL_FLOAT("crtopcap",I_CRTOPCAP, i,t);}
00392 float CRBOTH(float t) { EVAL_FLOAT("crbotheight", I_CRBOTHEIGHT,0,t);}
00393 float CRBOTC(float t, int i){ EVAL_FLOAT("crbotcap",I_CRBOTCAP, i,t);}
00394
00395
00396 float getCaptPoseBoneLength(float t)
00397 { EVAL_FLOAT("captposelen",I_CAPTPOSE_LENGTH,0,t); }
00398 float getCaptPoseTx(float t){ EVAL_FLOAT("captposet",I_CAPTPOSE_T, 0, t);}
00399 float getCaptPoseTy(float t){ EVAL_FLOAT("captposet",I_CAPTPOSE_T, 1, t);}
00400 float getCaptPoseTz(float t){ EVAL_FLOAT("captposet",I_CAPTPOSE_T, 2, t);}
00401 float getCaptPoseRx(float t){ EVAL_FLOAT("captposer",I_CAPTPOSE_R, 0, t);}
00402 float getCaptPoseRy(float t){ EVAL_FLOAT("captposer",I_CAPTPOSE_R, 1, t);}
00403 float getCaptPoseRz(float t){ EVAL_FLOAT("captposer",I_CAPTPOSE_R, 2, t);}
00404 float getCaptPoseSx(float t){ EVAL_FLOAT("captposes",I_CAPTPOSE_S, 0, t);}
00405 float getCaptPoseSy(float t){ EVAL_FLOAT("captposes",I_CAPTPOSE_S, 1, t);}
00406 float getCaptPoseSz(float t){ EVAL_FLOAT("captposes",I_CAPTPOSE_S, 2, t);}
00407
00408 static OP_Node *myConstructor(OP_Network *net,
00409 const char *name, OP_Operator *entry);
00410
00411
00412
00413
00414
00415 static void setGlobalKinOverride( KinOverride val,
00416 bool recook_bones = true );
00417 static KinOverride getGlobalKinOverride() { return theGlobalKinOverride; }
00418
00419
00420
00421
00422 typedef int (*OBJ_BoneCallbackFunction)( const OBJ_Bone *, void *);
00423
00424 static void traverseAllBones( OBJ_BoneCallbackFunction fnct,
00425 void *data );
00426
00427 static const char **getReferenceFrames()
00428 { return theReferenceFrames; }
00429 static const char **getReferenceFrameNames()
00430 { return theReferenceFrameNames; }
00431 int getRestPosition(const char *frame,
00432 UT_Vector3 &pos,
00433 float t);
00434 int setRestPosition(const char *frame,
00435 UT_Vector3 &pos,
00436 float t);
00437
00438 enum FrameType { FRAME_INVALID = -1, FRAME_WORLD = 0, FRAME_PARENT };
00439 int getPosition( FrameType frame_type,
00440 UT_Vector3 &pos,
00441 float t);
00442 int getPosition(const char *frame,
00443 UT_Vector3 &pos,
00444 float t);
00445 int setPosition(const char *frame,
00446 UT_Vector3 &pos,
00447 float t);
00448
00449 virtual OBJ_OBJECT_TYPE getObjectType() const;
00450
00451
00452
00453 void getCookedLocalRotates( OP_Context &context,
00454 UT_Vector3 &rot );
00455
00456
00457
00458
00459 void getBoneToParentCaptureTranslate(
00460 OP_Context &context,
00461 UT_Vector3 &transl );
00462 void getBoneToParentCaptureRotate(
00463 OP_Context &context,
00464 UT_DMatrix4 &xform );
00465
00466
00467 void getBoneToParentCaptureRotate(
00468 OP_Context &context,
00469 UT_Vector3 &rot );
00470
00471
00472
00473 void setCaptureRotateInParentSpace(
00474 OP_Context &context,
00475 const UT_Vector3 &rot );
00476
00477
00478
00479
00480
00481
00482 void getBoneParentCaptureTransform(
00483 OP_Context &context,
00484 UT_DMatrix4 &xform );
00485
00486
00487
00488 virtual void setScaleFromHandle(float t,
00489 const UT_Vector3 &s,
00490 bool create_keys = false,
00491 int key_idx = -1,
00492 bool check_modified = true);
00493
00494
00495 virtual void setRotateFromHandle(float t,
00496 const UT_Vector3 &r,
00497 bool create_keys = false,
00498 int key_idx = -1,
00499 bool check_modified = true);
00500
00501 virtual const char * getSetRotateParmName() const;
00502
00503 virtual void transferLocalToPreTransform(float gtime);
00504 virtual void transferPreToLocalTransform(float gtime);
00505 virtual void transferLocalToPreTransformRotates( float t );
00506
00507 void getCaptureRegions(
00508 UT_PtrArray<SOP_CaptureRegion *> &list );
00509
00510
00511 static PRM_Template *getTemplateList();
00512 static PRM_Template *getObsolete();
00513
00514
00515 virtual OBJ_Bone *castToOBJBone() { return this; }
00516
00517 protected:
00518
00519 virtual int *getIndirect() const
00520 { return boneIndirect; }
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534 virtual int buildLookAt(OP_Context &context,
00535 const UT_DMatrix4 &world,
00536 UT_DMatrix4 &lookat,
00537 OP_Node *interest = 0);
00538
00539
00540
00541 virtual int applyInputIndependentTransform(
00542 OP_Context &context, UT_DMatrix4 &mat);
00543 virtual int applyPreTransform(OP_Context &context, UT_DMatrix4 &mat);
00544 virtual int applyInputDependentTransform(
00545 OP_Context &context, UT_DMatrix4 &mat);
00546
00547 private:
00548 static int getReferenceFrame(const char *frame);
00549
00550 static int *boneIndirect;
00551 static KinOverride theGlobalKinOverride;
00552 static const char *theReferenceFrames[];
00553 static const char *theReferenceFrameNames[];
00554
00555
00556 void getParmTransformHelper( OP_Context &context,
00557 UT_DMatrix4 &mat,
00558 OBJ_TransformComponent type );
00559
00560 void transferLocalToPreTransformHelper( float gtime,
00561 OBJ_TransformComponent type );
00562
00563 void getParmTransformFromBaseClass(
00564 OP_Context &context, UT_DMatrix4 &mat,
00565 OBJ_TransformComponent type );
00566
00567 void getParmTransformFromKin( OP_Context &context,
00568 UT_DMatrix4 &mat, OBJ_TransformComponent type );
00569
00570 private:
00571
00572
00573
00574
00575 static int applyCustomParmTransform(
00576 void *data, OBJ_Node *node, OP_Context &context, UT_DMatrix4 &mat);
00577
00578 int getCustomChildToWorldTransform(
00579 const char *frame, float t, UT_DMatrix4 &mat);
00580 int getCustomObjectToWorldTransform(
00581 const char *frame, float t, UT_DMatrix4 &mat);
00582
00583 void adjustCaptureAndRestAngles(
00584 float gtime, UT_DMatrix4 &rest_xform );
00585
00586 int myCurrentReferenceFrame;
00587 int myLastKinSolverOpId;
00588 unsigned myUseSolverFlag:1,
00589 myIsUsingSolverFlag:1;
00590 };
00591
00592
00593 #undef EVAL_FLOAT
00594 #undef EVAL_FLOATS
00595 #undef EVAL_INT
00596 #undef EVAL_STR
00597
00598 #undef SET_FLOAT
00599 #undef SET_FLOATREF
00600 #undef SET_INT
00601 #undef SET_STRING
00602
00603 #endif