00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __OBJ_Geometry_h__
00021 #define __OBJ_Geometry_h__
00022
00023 #include "OBJ_API.h"
00024 #include "OBJ_Node.h"
00025 #include "OBJ_Shared.h"
00026
00027 class CHOP_Node;
00028 class IFD_GeometryParms;
00029 class IFD_ObjectParms;
00030 class RE_Displace;
00031 class OP_Bundle;
00032
00033 typedef enum {
00034 OBJ_PHOTON_OFF = 0,
00035 OBJ_PHOTON_CAST = 1,
00036 OBJ_PHOTON_RECEIVE = 2,
00037 OBJ_PHOTON_BOTH = 3
00038 } OBJ_PHOTON_MODE;
00039
00040 enum OBJ_GeoIndex
00041 {
00042 I_SHOP_MATERIAL = I_N_BASE_INDICES,
00043 I_SHOP_MATERIALOPT,
00044
00045 I_VPORT_SHADEOPEN,
00046 I_VPORT_DISPLAYASSUBDIV,
00047
00048 I_N_GEO_INDICES
00049 };
00050
00051 #define INT_PARM(name, idx, vi, t) \
00052 return evalInt(name, &getIndirect()[idx], vi, t);
00053
00054 class OBJ_API OBJ_Geometry : public OBJ_Node
00055 {
00056 public:
00057 OBJ_Geometry(OP_Network *, const char *, OP_Operator *);
00058 virtual ~OBJ_Geometry();
00059
00060 static PRM_Template *getObsolete();
00061 static OP_Node *myConstructor(OP_Network *net,
00062 const char *name, OP_Operator *entry);
00063
00064 virtual unsigned disableParms();
00065 virtual void resolveObsoleteParms(PRM_ParmList *obsolete_parms);
00066
00067 virtual void getIFDParms(IFD_ObjectParms &parms, float t,
00068 const char *rtype);
00069 void getIFDParms(IFD_GeometryParms &parms, float t,
00070 const char *rtype);
00071 void getShaderSpace(OP_Context &context,
00072 UT_DMatrix4 &xform);
00073 void getDisplacementSpace(UT_DMatrix4 &xform, float t);
00074 void getShaderSpace(OP_Context &context, UT_Matrix4 &xform);
00075 void getDisplacementSpace(UT_Matrix4 &xform, float t);
00076
00077 OP_Bundle *getReflectBundle(float t);
00078
00079
00080
00081 OP_Bundle *getLightMaskBundle(float t);
00082
00083
00084
00085
00086 void getLightMaskObjects(OP_NodeList &lights, float t);
00087
00088 virtual int isObjectLitBy(OBJ_Node *light, float t);
00089 virtual int isObjectLitBySubnet(OBJ_Node *subnet, float t);
00090
00091 virtual void getActingLightSubset(
00092 const UT_PtrArray<OBJ_Ambient *> &lights,
00093 UT_PtrArray<OBJ_Ambient *> &active,
00094 float t);
00095
00096 virtual int doDrawLit() const { return 1; }
00097
00098 virtual OBJ_OBJECT_TYPE getObjectType() const;
00099
00100 virtual CHOP_Node *getSoundMaterial(fpreal t);
00101 static PRM_Template *getTemplateList(OBJ_ParmsStyle style);
00102
00103 virtual OBJ_Geometry*castToOBJGeometry() { return this; }
00104
00105 virtual int collectPropertiesFromChannels(PI_EditScriptedParms &,
00106 UT_BitArray &selection,
00107 const CH_ChannelList &channels);
00108 virtual int collectPropertiesFromParms(PI_EditScriptedParms &,
00109 UT_StringArray &names,
00110 PRM_ParmNameMap &nmap);
00111
00112 protected:
00113
00114 virtual int *getIndirect() const
00115 { return geoIndirect; }
00116
00117 GU_DetailHandle getBoundingBoxGeometryHandle(OP_Context &context);
00118 GU_DetailHandle getBoundingSphereGeometryHandle(OP_Context &context);
00119
00120 virtual void buildParmDependency( int parm_index );
00121
00122
00123 public:
00124 int SMOOTH(fpreal now);
00125 int NOBACK(fpreal now);
00126 void DETAIL(UT_String &str, fpreal t);
00127 void DETAIL_FILE(UT_String &str, fpreal t);
00128 void DETAIL_AUTOARCHIVE(UT_String &str, fpreal t);
00129 void DETAIL_RIBPROC(UT_String &str, fpreal t);
00130 void DETAIL_MANTRAPROC(UT_String &str, fpreal t);
00131 int DETAIL_BLUR(fpreal t);
00132 void DETAIL_MIN(float *v, fpreal t);
00133 void DETAIL_MAX(float *v, fpreal t);
00134 int AUTOREFLECT(fpreal t);
00135 void REFLMAP(UT_String &str, fpreal t);
00136 int REFLRES(fpreal t);
00137 void LIGHTMASK(UT_String &str,fpreal t);
00138 void REFLMASK(UT_String &str, fpreal t);
00139 void RISHADER(UT_String &str, fpreal t);
00140 void RIDISPLACE(UT_String &str, fpreal t);
00141 void RIINTERIOR(UT_String &str, fpreal t);
00142 bool INSTANCEGROUP(UT_String &str, fpreal now);
00143 OBJ_PHOTON_MODE CAUSTICSMODE(fpreal t);
00144 OBJ_PHOTON_MODE GLOBILLUMMODE(fpreal t);
00145 int RI_COLOR(fpreal now);
00146 void RI_CS(float v[3], fpreal t);
00147 void RI_OS(float v[3], fpreal t);
00148 void RI_PHOTON(UT_String &str, fpreal t);
00149 bool SHADESPACE(UT_String &str, fpreal t);
00150 bool DISPSPACE(UT_String &str, fpreal t);
00151
00152
00153 virtual int VPORT_SHADEOPEN()
00154 { INT_PARM("vport_shadeopen",
00155 I_VPORT_SHADEOPEN, 0, 0) }
00156 virtual int VPORT_DISPLAYASSUBDIV()
00157 { INT_PARM("vport_displayassubdiv",
00158 I_VPORT_DISPLAYASSUBDIV, 0, 0) }
00159
00160 RE_Displace *getReDisplace() { return myReDisplace; }
00161
00162
00163 virtual void buildPrimitiveGroupMenu(PRM_Name *menu,
00164 int size,
00165 const PRM_SpareData *spare,
00166 PRM_Parm *parm);
00167
00168 private:
00169 RE_Displace *myReDisplace;
00170 GU_DetailHandle myPopStandInGdpHandle;
00171 int myShaderHint;
00172
00173 static int *geoIndirect;
00174 };
00175
00176 #undef INT_PARM
00177
00178 #endif