00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __SOP_UVEdit_h__
00024 #define __SOP_UVEdit_h__
00025
00026 #include "SOP_API.h"
00027 #include "SOP_GDT.h"
00028 #include <GEO/GEO_SoftTransformCache.h>
00029
00030 class PRM_MenuEntry;
00031
00032 enum {
00033
00034 SOP_UVEDIT_GRP_IDX = SOP_GDT_GRP_IDX,
00035 SOP_UVEDIT_GRPTYPE_IDX,
00036
00037
00038 SOP_UVEDIT_TRS_IDX,
00039 SOP_UVEDIT_XYZ_IDX,
00040 SOP_UVEDIT_T_IDX,
00041 SOP_UVEDIT_R_IDX,
00042 SOP_UVEDIT_S_IDX,
00043 SOP_UVEDIT_SHEAR_IDX,
00044 SOP_UVEDIT_P_IDX,
00045
00046
00047 SOP_UVEDIT_RADIUS_IDX,
00048 SOP_UVEDIT_SOFTTYPE_IDX,
00049 SOP_UVEDIT_TANGENT_IDX,
00050 SOP_UVEDIT_KERNEL_IDX,
00051 SOP_UVEDIT_METRIC_IDX,
00052 SOP_UVEDIT_GLOBAL_IDX,
00053 SOP_UVEDIT_UVGLOBAL_IDX,
00054
00055
00056 SOP_UVEDIT_UVSEW_IDX
00057
00058 };
00059
00060 class SOP_API SOP_UVEdit : public SOP_GDT
00061 {
00062 public:
00063 SOP_UVEdit(OP_Network *net, const char *name, OP_Operator *entry);
00064 virtual ~SOP_UVEdit();
00065
00066
00067 enum
00068 {
00069 I_GROUP = SOP_GDT_GRP_IDX,
00070 I_GROUPTYPE,
00071 I_TRS,
00072 I_XYZ,
00073 I_T,
00074 I_R,
00075 I_S,
00076 I_SHEAR,
00077 I_P
00078 };
00079
00080 virtual unsigned disableParms();
00081
00082 static OP_Node *myConstructor(OP_Network *net,
00083 const char *name,
00084 OP_Operator *entry);
00085
00086 static PRM_Template myTemplateList[];
00087 static PRM_Template myObsoleteList[];
00088
00089 virtual OP_ERROR cookInputGroups(OP_Context &context,
00090 int alone = 0);
00091
00092 virtual void getXformOrder(UT_XformOrder &xord,
00093 CH_Channel *chp);
00094
00095 void TOGGLE_UVSEW();
00096
00097 protected:
00098 virtual OP_ERROR cookMySop(OP_Context &context);
00099 virtual const char *inputLabel(unsigned idx) const;
00100
00101 virtual void applyAndClearCurrentDelta();
00102
00103 virtual bool getGroupCentroid(OP_Context &context,
00104 UT_Vector3 ¢roid);
00105
00106 private:
00107 #ifdef INTEL_COMPILER
00108 SOP_UVEdit(const SOP_UVEdit& ) : SOP_GDT(NULL, NULL, NULL) { }
00109 #endif
00110
00111 private:
00112
00113 int GRPTYPE() { return evalInt(I_GROUPTYPE, 0, 0); }
00114
00115
00116 int TRS() { return evalInt(I_TRS, 0, 0); }
00117 int XYZ() { return evalInt(I_XYZ, 0, 0); }
00118 float TX() { return evalFloat(I_T, 0, 0); }
00119 float TY() { return evalFloat(I_T, 1, 0); }
00120 float TZ() { return evalFloat(I_T, 2, 0); }
00121 float RX() { return evalFloat(I_R, 0, 0); }
00122 float RY() { return evalFloat(I_R, 1, 0); }
00123 float RZ() { return evalFloat(I_R, 2, 0); }
00124 float SX() { return evalFloat(I_S, 0, 0); }
00125 float SY() { return evalFloat(I_S, 1, 0); }
00126 float SZ() { return evalFloat(I_S, 2, 0); }
00127 float SHEAR_XY() { return evalFloat(I_SHEAR, 0, 0); }
00128 float SHEAR_XZ() { return evalFloat(I_SHEAR, 1, 0); }
00129 float SHEAR_YZ() { return evalFloat(I_SHEAR, 2, 0); }
00130 float PX() { return evalFloat(I_P, 0, 0); }
00131 void SET_PX(float f){ setFloat(I_P, 0, 0, f); }
00132 float PY() { return evalFloat(I_P, 1, 0); }
00133 void SET_PY(float f){ setFloat(I_P, 1, 0, f); }
00134 float PZ() { return evalFloat(I_P, 2, 0); }
00135 void SET_PZ(float f){ setFloat(I_P, 2, 0, f); }
00136
00137
00138 float RADIUS() { return evalFloat(
00139 SOP_UVEDIT_RADIUS_IDX, 0, 0); }
00140 int SOFTTYPE() { return evalInt(
00141 SOP_UVEDIT_SOFTTYPE_IDX, 0, 0); }
00142 float TANDEG0() { return evalFloat(
00143 SOP_UVEDIT_TANGENT_IDX,0, 0); }
00144 float TANDEG1() { return evalFloat(
00145 SOP_UVEDIT_TANGENT_IDX,1, 0); }
00146 void KERNEL(UT_String &str) { evalString(str,
00147 SOP_UVEDIT_KERNEL_IDX, 0, 0); }
00148 int METRIC() { return evalInt(
00149 SOP_UVEDIT_METRIC_IDX, 0, 0); }
00150 int GLOBAL() { return evalInt(SOP_UVEDIT_GLOBAL_IDX, 0, 0); }
00151 int UVGLOBAL() { return evalInt(SOP_UVEDIT_UVGLOBAL_IDX,0,0); }
00152
00153
00154 int UVSEW() { return evalInt(SOP_UVEDIT_UVSEW_IDX, 0, 0); }
00155
00156
00157
00158 void computeTransformGroups(bool changed_input);
00159 void computeSelectionCentroid(UT_Vector3 ¢roid);
00160
00161
00162 void doTransform();
00163
00164 bool isSoft() { return RADIUS() != 0.0; }
00165
00166
00167 bool isVtxUV();
00168
00169 UT_Vector3 myInitialCentroid;
00170
00171 GB_VertexGroup *myVtxGroup;
00172 GB_PointGroup *myPtGroup;
00173
00174 GEO_SoftTransformPointCache mySoftPointCache;
00175 GEO_SoftTransformVertexCache mySoftVertexCache;
00176 bool mySoftCacheDirty;
00177 };
00178
00179 #endif