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 #ifndef __SOP_UVTransform_h__
00031 #define __SOP_UVTransform_h__
00032
00033 #include "SOP_API.h"
00034 #include "SOP_GDT.h"
00035 #include <GEO/GEO_SoftTransformCache.h>
00036
00037 class PRM_MenuEntry;
00038
00039 enum {
00040
00041 SOP_UVTRANSFORM_GRP_IDX = SOP_GDT_GRP_IDX,
00042 SOP_UVTRANSFORM_GRPTYPE_IDX,
00043
00044
00045 SOP_UVTRANSFORM_TRS_IDX,
00046 SOP_UVTRANSFORM_XYZ_IDX,
00047 SOP_UVTRANSFORM_T_IDX,
00048 SOP_UVTRANSFORM_R_IDX,
00049 SOP_UVTRANSFORM_S_IDX,
00050 SOP_UVTRANSFORM_SHEAR_IDX,
00051 SOP_UVTRANSFORM_P_IDX,
00052
00053
00054 SOP_UVTRANSFORM_RADIUS_IDX,
00055 SOP_UVTRANSFORM_SOFTTYPE_IDX,
00056 SOP_UVTRANSFORM_TANGENT_IDX,
00057 SOP_UVTRANSFORM_KERNEL_IDX,
00058 SOP_UVTRANSFORM_METRIC_IDX,
00059 SOP_UVTRANSFORM_GLOBAL_IDX,
00060 SOP_UVTRANSFORM_UVGLOBAL_IDX
00061 };
00062
00063 class SOP_API SOP_UVTransform : public SOP_GDT
00064 {
00065 public:
00066 SOP_UVTransform(OP_Network *net, const char *name,
00067 OP_Operator *entry);
00068 virtual ~SOP_UVTransform();
00069
00070 virtual unsigned disableParms();
00071
00072 static OP_Node *myConstructor(OP_Network *net,
00073 const char *name,
00074 OP_Operator *entry);
00075
00076 static PRM_Template myTemplateList[];
00077 static PRM_Template myObsoleteList[];
00078 static CH_LocalVariable myVariables[];
00079
00080 virtual float getVariableValue(int index, int thread);
00081 virtual OP_ERROR cookInputGroups(OP_Context &context,
00082 int alone = 0);
00083
00084 virtual void resolveObsoleteParms(
00085 PRM_ParmList *obsolete_parms);
00086
00087 protected:
00088 virtual OP_ERROR cookMySop(OP_Context &context);
00089 virtual const char *inputLabel(unsigned idx) const;
00090
00091 virtual bool getGroupCentroid(OP_Context &context,
00092 UT_Vector3 ¢roid);
00093
00094 virtual void getXformOrder(UT_XformOrder &xord,
00095 CH_Channel *chp);
00096
00097
00098 #ifdef INTEL_COMPILER
00099 private:
00100 SOP_UVTransform(const SOP_UVTransform& ) : SOP_GDT(NULL, NULL, NULL) { }
00101 #endif
00102 private:
00103
00104 int GRPTYPE() { return evalInt(SOP_UVTRANSFORM_GRPTYPE_IDX,
00105 0, 0); }
00106
00107
00108 int TRS() { return evalInt(SOP_UVTRANSFORM_TRS_IDX,
00109 0, 0); }
00110 int XYZ() { return evalInt(SOP_UVTRANSFORM_XYZ_IDX,
00111 0, 0); }
00112 float TX(float t) { return evalFloat(SOP_UVTRANSFORM_T_IDX,
00113 0, t); }
00114 float TY(float t) { return evalFloat(SOP_UVTRANSFORM_T_IDX,
00115 1, t); }
00116 float TZ(float t) { return evalFloat(SOP_UVTRANSFORM_T_IDX,
00117 2, t); }
00118 float RX(float t) { return evalFloat(SOP_UVTRANSFORM_R_IDX,
00119 0, t); }
00120 float RY(float t) { return evalFloat(SOP_UVTRANSFORM_R_IDX,
00121 1, t); }
00122 float RZ(float t) { return evalFloat(SOP_UVTRANSFORM_R_IDX,
00123 2, t); }
00124 float SX(float t) { return evalFloat(SOP_UVTRANSFORM_S_IDX,
00125 0, t); }
00126 float SY(float t) { return evalFloat(SOP_UVTRANSFORM_S_IDX,
00127 1, t); }
00128 float SZ(float t) { return evalFloat(SOP_UVTRANSFORM_S_IDX,
00129 2, t); }
00130 float SHEAR_XY(float t) { return evalFloat(SOP_UVTRANSFORM_SHEAR_IDX,
00131 0, t); }
00132 float SHEAR_XZ(float t) { return evalFloat(SOP_UVTRANSFORM_SHEAR_IDX,
00133 1, t); }
00134 float SHEAR_YZ(float t) { return evalFloat(SOP_UVTRANSFORM_SHEAR_IDX,
00135 2, t); }
00136 float PX(float t) { return evalFloat(SOP_UVTRANSFORM_P_IDX,
00137 0, t); }
00138 float PY(float t) { return evalFloat(SOP_UVTRANSFORM_P_IDX,
00139 1, t); }
00140 float PZ(float t) { return evalFloat(SOP_UVTRANSFORM_P_IDX,
00141 2, t); }
00142
00143
00144 float RADIUS(float t){ return evalFloat(
00145 SOP_UVTRANSFORM_RADIUS_IDX, 0, t); }
00146 int SOFTTYPE() { return evalInt(
00147 SOP_UVTRANSFORM_SOFTTYPE_IDX, 0, 0); }
00148 float TANDEG0(float t){ return evalFloat(
00149 SOP_UVTRANSFORM_TANGENT_IDX,0, t); }
00150 float TANDEG1(float t){ return evalFloat(
00151 SOP_UVTRANSFORM_TANGENT_IDX,1, t); }
00152 void KERNEL(UT_String &str, float t) { evalString(str,
00153 SOP_UVTRANSFORM_KERNEL_IDX, 0, t); }
00154 int METRIC() { return evalInt(
00155 SOP_UVTRANSFORM_METRIC_IDX, 0, 0); }
00156 int GLOBAL() { return evalInt(
00157 SOP_UVTRANSFORM_GLOBAL_IDX, 0, 0); }
00158 int UVGLOBAL() { return evalInt(
00159 SOP_UVTRANSFORM_UVGLOBAL_IDX,0,0); }
00160
00161
00162 void computeTransformGroups(bool changed_input);
00163 void computeSelectionCentroid();
00164
00165
00166 void doTransform(float t);
00167
00168
00169 bool isVtxUV();
00170
00171 bool myCentroidComputed;
00172 UT_Vector3 myInitialCentroid;
00173
00174 GB_VertexGroup *myVtxGroup;
00175 GB_PointGroup *myPtGroup;
00176
00177 GEO_SoftTransformPointCache mySoftPointCache;
00178 GEO_SoftTransformVertexCache mySoftVertexCache;
00179 bool mySoftCacheDirty;
00180 };
00181
00182 #endif