INodeMentalRayProperties.h

Go to the documentation of this file.
00001  /**********************************************************************
00002  
00003     FILE:           INodeMentalRayProperties.h
00004 
00005     DESCRIPTION:    Public interface for setting and getting a node's
00006                     mental ray properties.
00007 
00008     CREATED BY:     Daniel Levesque, Discreet
00009 
00010     HISTORY:        created 13 December 2004
00011 
00012  *> Copyright (c) 2004, All Rights Reserved.
00013  **********************************************************************/
00014 #pragma once
00015 
00016 #include "ifnpub.h"
00017 #include "inode.h"
00018 
00019 // forward declarations
00020 class INode;
00021 
00023 #define NODEMENTALRAYPROPERTIES_INTERFACE Interface_ID(0x1c763921, 0x4d542752)
00024 
00025 //==============================================================================
00026 // Class INodeMentalRayProperties
00027 //
00038 class INodeMentalRayProperties : public FPMixinInterface {
00039 
00040 public:
00041 
00042     enum DisplacementMethod {
00043         kDisplacementMethod_Fine = 0,
00044         kDisplacementMethod_Fine_NoSmoothing = 1
00045     };
00046 
00047     enum CastModeFG {
00048         kCastModeFG_ObjColor = 0,
00049         kCastModeFG_Black = 1,
00050         kCastModeFG_Invisible =2
00051     };
00052 
00056     static INodeMentalRayProperties* Get_INodeMentalRayProperties(INode& node);
00057 
00060     virtual void CopyMentalRayPropertiesFrom(const INodeMentalRayProperties& source) = 0;
00061 
00064     virtual bool MRGetDisplacementUseGlobalSettings() const = 0;
00065 
00068     virtual void MRSetDisplacementUseGlobalSettings(bool useGlobal) = 0;
00069 
00072     virtual DisplacementMethod MRGetDisplacementMethod() const = 0;  
00073 
00076     virtual void MRSetDisplacementMethod(DisplacementMethod method) = 0;
00077 
00080     virtual bool MRGetIsViewDependentDisplacement() const = 0;
00081 
00084     virtual void MRSetIsViewDependentDisplacement(bool viewDependent) = 0;
00085 
00090     virtual float MRGetDisplacementEdgeLength() const = 0;
00091 
00096     virtual void MRSetDisplacementEdgeLength(float length) = 0;
00097 
00100     virtual float MRGetMaxDisplace() const = 0;
00101 
00104     virtual void MRSetMaxDisplace(float maxDisplace) = 0;
00105 
00108     virtual unsigned short MRGetDisplacementMaxLevel() const = 0;
00109 
00112     virtual void MRSetDisplacementMaxLevel(unsigned short maxLevel) = 0;
00113 
00116     virtual bool MRGetReceiveFGIllum() const = 0;
00117 
00120     virtual void MRSetReceiveFGIllum(bool onOff) = 0;
00121 
00124     virtual CastModeFG MRGetCastModeFGIllum() const = 0;  
00125 
00128     virtual void MRSetCastModeFGIllum(CastModeFG method) = 0;
00129 
00132     virtual bool MRGetExcludeGlobalIllum() const = 0;
00133 
00136     virtual void MRSetExcludeGlobalIllum(bool onOff) = 0;
00137 
00140     virtual bool MRGetExcludeCaustics() const = 0;
00141 
00144     virtual void MRSetExcludeCaustics(bool onOff) = 0;
00145 
00146 private:
00147 
00148     // This version of the method is needed by the function publishing macros.
00149     void MRSetDisplacementMethod(int method);
00150     void MRSetCastModeFGIllum(int mode);
00151 
00152 public:
00153 
00154     // Function publishing interface    
00155     enum PROPERTY_ACCESSOR_ID {
00156         GET_DISPLACEMENTUSEGLOBALSETTINGS,
00157         SET_DISPLACEMENTUSEGLOBALSETTINGS,
00158         GET_DISPLACEMENTMETHOD,
00159         SET_DISPLACEMENTMETHOD,
00160         GET_VIEWDEPENDENTDISPLACEMENT,
00161         SET_VIEWDEPENDENTDISPLACEMENT,
00162         GET_DISPLACEMENTEDGELENGTH,
00163         SET_DISPLACEMENTEDGELENGTH,
00164         GET_MAXDISPLACE,
00165         SET_MAXDISPLACE,
00166         GET_DISPLACEMENTMAXLEVEL,
00167         SET_DISPLACEMENTMAXLEVEL,
00168         GET_RECEIVEFGILLUM,
00169         SET_RECEIVEFGILLUM,
00170         GET_CASTMODEFGILLUM,
00171         SET_CASTMODEFGILLUM,
00172         GET_EXCLUDEGLOBALILLUM,
00173         SET_EXCLUDEGLOBALILLUM,
00174         GET_EXCLUDECAUSTICS,
00175         SET_EXCLUDECAUSTICS
00176     };
00177 
00178     #pragma warning(push)
00179     #pragma warning(disable:4244)
00180     BEGIN_FUNCTION_MAP
00181         // Property accessors
00182         PROP_FNS(GET_DISPLACEMENTUSEGLOBALSETTINGS, MRGetDisplacementUseGlobalSettings, SET_DISPLACEMENTUSEGLOBALSETTINGS, MRSetDisplacementUseGlobalSettings, TYPE_bool);
00183         PROP_FNS(GET_DISPLACEMENTMETHOD, MRGetDisplacementMethod, SET_DISPLACEMENTMETHOD, MRSetDisplacementMethod, TYPE_ENUM);
00184         PROP_FNS(GET_VIEWDEPENDENTDISPLACEMENT, MRGetIsViewDependentDisplacement, SET_VIEWDEPENDENTDISPLACEMENT, MRSetIsViewDependentDisplacement, TYPE_bool);
00185         PROP_FNS(GET_DISPLACEMENTEDGELENGTH, MRGetDisplacementEdgeLength, SET_DISPLACEMENTEDGELENGTH, MRSetDisplacementEdgeLength, TYPE_FLOAT);
00186         PROP_FNS(GET_MAXDISPLACE, MRGetMaxDisplace, SET_MAXDISPLACE, MRSetMaxDisplace, TYPE_WORLD);
00187         // The warning here is harmless. In the future MRSetDisplacementMaxLevel could take an int instead of an unsigned short.
00188         PROP_FNS(GET_DISPLACEMENTMAXLEVEL, MRGetDisplacementMaxLevel, SET_DISPLACEMENTMAXLEVEL, MRSetDisplacementMaxLevel, TYPE_INT);
00189         PROP_FNS(GET_RECEIVEFGILLUM, MRGetReceiveFGIllum, SET_RECEIVEFGILLUM, MRSetReceiveFGIllum, TYPE_bool);
00190         PROP_FNS(GET_CASTMODEFGILLUM, MRGetCastModeFGIllum, SET_CASTMODEFGILLUM, MRSetCastModeFGIllum, TYPE_ENUM);
00191         PROP_FNS(GET_EXCLUDEGLOBALILLUM, MRGetExcludeGlobalIllum, SET_EXCLUDEGLOBALILLUM, MRSetExcludeGlobalIllum, TYPE_bool);
00192         PROP_FNS(GET_EXCLUDECAUSTICS, MRGetExcludeCaustics, SET_EXCLUDECAUSTICS, MRSetExcludeCaustics, TYPE_bool);
00193     END_FUNCTION_MAP
00194     #pragma warning(pop)
00195 };
00196 
00197 inline void INodeMentalRayProperties::MRSetDisplacementMethod(int method) {
00198 
00199     return MRSetDisplacementMethod(static_cast<DisplacementMethod>(method));
00200 }
00201 
00202 inline void INodeMentalRayProperties::MRSetCastModeFGIllum(int mode) {
00203     MRSetCastModeFGIllum(static_cast<CastModeFG>(mode));
00204 }
00205 
00206 inline INodeMentalRayProperties* INodeMentalRayProperties::Get_INodeMentalRayProperties(INode& node) {
00207 
00208     return static_cast<INodeMentalRayProperties*>(node.GetInterface(NODEMENTALRAYPROPERTIES_INTERFACE));
00209 }
00210