00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __SOP_BlendShapes_h__
00021 #define __SOP_BlendShapes_h__
00022
00023 #include "SOP_API.h"
00024 #include "SOP_Node.h"
00025
00026 class sopBlendCache;
00027
00028 enum
00029 {
00030 SOP_BLENDSHAPES_GROUP_INDEX = 0,
00031 SOP_BLENDSHAPES_SELECTIONIDX_INDEX,
00032 SOP_BLENDSHAPES_DIFF_INDEX,
00033 SOP_BLENDSHAPES_DOPOS_INDEX,
00034 SOP_BLENDSHAPES_DOCLR_INDEX,
00035 SOP_BLENDSHAPES_DONML_INDEX,
00036 SOP_BLENDSHAPES_DOTXT_INDEX,
00037 SOP_BLENDSHAPES_FASTRECACHE_INDEX,
00038 SOP_BLENDSHAPES_MORPH_INDEX,
00039 SOP_BLENDSHAPES_UPDATE_INDEX,
00040 SOP_BLENDSHAPES_WEIGHTS_INDEX,
00041 };
00042
00043 class SOP_API SOP_BlendShapes : public SOP_Node
00044 {
00045 public:
00046 SOP_BlendShapes(OP_Network *net, const char *name, OP_Operator *entry);
00047 virtual ~SOP_BlendShapes();
00048
00049 virtual OP_ERROR cookInputGroups(OP_Context &context, int alone = 0);
00050
00051 static OP_Node *myConstructor(OP_Network *net, const char *name, OP_Operator *entry);
00052 static PRM_Template myTemplateList[];
00053 static PRM_Template myObsoleteList[];
00054
00055
00056 virtual void resolveObsoleteParms(
00057 PRM_ParmList *obsolete_parms);
00058
00059 void setSelectionOverride(bool selection_override);
00060 void setBlendValue(int i, float value, float t);
00061 void setBlendAlias(int i, const char *alias);
00062 void removeBlend(int i);
00063
00064 protected:
00065 virtual bool load(UT_IStream &is, const char *extension,
00066 const char *path=0);
00067 virtual OP_ERROR cookMySop(OP_Context &context);
00068 virtual const char *inputLabel(unsigned) const;
00069
00070 OP_ERROR lockMyInputs(OP_Context &context);
00071 void unlockMyInputs();
00072
00073 private:
00074
00075 void getGroup(UT_String &str)
00076 { evalString(str, SOP_BLENDSHAPES_GROUP_INDEX, 0, 0); }
00077
00078 int SELECTIONIDX(void)
00079 { return evalInt(SOP_BLENDSHAPES_SELECTIONIDX_INDEX, 0, 0); }
00080 bool DIFF(void)
00081 { return evalInt(SOP_BLENDSHAPES_DIFF_INDEX, 0, 0) != 0; }
00082 bool DOPOS(void)
00083 { return evalInt(SOP_BLENDSHAPES_DOPOS_INDEX, 0, 0) != 0; }
00084 bool DOCLR(void)
00085 { return evalInt(SOP_BLENDSHAPES_DOCLR_INDEX, 0, 0) != 0; }
00086 bool DONML(void)
00087 { return evalInt(SOP_BLENDSHAPES_DONML_INDEX, 0, 0) != 0; }
00088 bool DOTXT(void)
00089 { return evalInt(SOP_BLENDSHAPES_DOTXT_INDEX, 0, 0) != 0; }
00090 bool FASTRECACHE(void)
00091 { return evalInt(SOP_BLENDSHAPES_FASTRECACHE_INDEX, 0, 0) != 0; }
00092 bool MORPH(void)
00093 { return evalInt(SOP_BLENDSHAPES_MORPH_INDEX, 0, 0) != 0; }
00094 int NBLENDS(void)
00095 { return evalInt(SOP_BLENDSHAPES_WEIGHTS_INDEX, 0, 0); }
00096 void setNBLENDS(int n)
00097 { setInt(SOP_BLENDSHAPES_WEIGHTS_INDEX, 0, 0, n); }
00098 float BLEND(int i, float t)
00099 { return evalFloatInst("blend#", &i, 0, t); }
00100
00101
00102
00103 bool USESPARM(int i, float t)
00104 { return (i == 0) || BLEND(i, t); }
00105
00106 void doBlend(OP_Context &ctx, int clr, int nml, int txt);
00107
00108 void doDifference(OP_Context &ctx, int clr, int nml, int txt);
00109
00110 void doFastDifference(OP_Context &ctx);
00111
00112 static int updateChannelNames(void *data, int index, float t,
00113 const PRM_Template * );
00114
00115 int myPastedFlag;
00116 int myLastClr;
00117 int myLastNml;
00118 int myLastTxt;
00119
00120 GU_DetailGroupPair myDetailGroupPair;
00121
00122 sopBlendCache *myBlendCache;
00123
00124 bool mySelectionOverride;
00125 const GB_PointGroup *myGroup;
00126 UT_IntArray myLocks;
00127 };
00128
00129 #endif
00130