tge/lib/maxsdk70/include/marketDefaults.h
2017-04-17 06:17:10 -06:00

389 lines
10 KiB
C++
Executable File

/**********************************************************************
*<
FILE: marketDefaults.h
DESCRIPTION: Market Specific Defaults API
CREATED BY: Cleve Ard
HISTORY: created 5/19/2003
*> Copyright (c) 2003, All Rights Reserved.
**********************************************************************/
#ifndef __MARKETDEFAULTS_H__
#define __MARKETDEFAULTS_H__
class MarketDefaults;
// Get the market default settings. We can handle multiple
// files, so third parties can add there own market defaults.
// Name should be the name, without and extension, for the
// default to be retrieved. NULL will retrieve the defaults
// for Autodesk/Discreet settings.
CoreExport MarketDefaults* GetMarketDefaults(const TCHAR* name = NULL);
// Get a filename that is in the current MarketDefaults set.
// If the file doesn't exist in the MarketDefaults set and
// does exits in the factoryDefaults for the MarketDefaults
// set it is copied to the MarketDefault set.
CoreExport TSTR GetMarketDefaultsFileName(const TCHAR* name = NULL);
// This class is exported from the marketDefaults.dll
class MarketDefaults {
public:
typedef bool (*FloatValidator)(float&);
typedef bool (*IntValidator)(int&);
typedef bool (*Point3Validator)(Point3&);
typedef bool (*Point4Validator)(Point4&);
typedef bool (*StringValidator)(TSTR&);
typedef bool (*AnimatableValidator)(Animatable*&);
typedef bool (*ClassIDValidator)(Class_ID&);
// This class generates range checkers for values.
template<class T, int low, int high>
class Range;
// This function rejects NULL animatable objects
CoreExport static bool CheckNULL(Animatable*& obj);
// This function rejects Null strings
CoreExport static bool CheckNULL(TSTR& str);
// This function rejects Class_ID(0, 0) and
// Class_ID(STANDIN_CLASS_ID, 0)
CoreExport static bool CheckNULL(Class_ID& id);
// High level access to defaults. These return the default
// value, based on the class ID of the object and the name
// of the setting. A default value is supplied, to be used
// when the setting name is not present for the class ID.
// The validator and dimension are only used for setting
// names that are found. The dimension is used to convert
// the UI values in the settings file to internal values
// before the validator is called. The validator may change
// the value. It returns true if the retrieved value is to
// be used, or false if the default value is to be used.
virtual int GetInt(
SClass_ID objectSuperClass,
const Class_ID& objectClass,
const TCHAR* name,
int defaultValue,
IntValidator validator = NULL,
int dimension = DIM_NONE
) = 0;
int GetTime(
SClass_ID objectSuperClass,
const Class_ID& objectClass,
const TCHAR* name,
int defaultValue,
IntValidator validator = NULL
)
{
return GetInt(objectSuperClass, objectClass, name, defaultValue, validator, DIM_TIME);
}
virtual float GetFloat(
SClass_ID objectSuperClass,
const Class_ID& objectClass,
const TCHAR* name,
float defaultValue,
FloatValidator validator = NULL,
int dimension = DIM_NONE
) = 0;
float GetAngle(
SClass_ID objectSuperClass,
const Class_ID& objectClass,
const TCHAR* name,
float defaultValue,
FloatValidator validator = NULL
)
{
return GetFloat(objectSuperClass, objectClass, name, defaultValue, validator, DIM_ANGLE);
}
float GetPercentage(
SClass_ID objectSuperClass,
const Class_ID& objectClass,
const TCHAR* name,
float defaultValue,
FloatValidator validator = NULL
)
{
return GetFloat(objectSuperClass, objectClass, name, defaultValue, validator, DIM_PERCENT);
}
float GetWorld(
SClass_ID objectSuperClass,
const Class_ID& objectClass,
const TCHAR* name,
float defaultValue,
FloatValidator validator = NULL
)
{
return GetFloat(objectSuperClass, objectClass, name, defaultValue, validator, DIM_WORLD);
}
float GetColorChannel(
SClass_ID objectSuperClass,
const Class_ID& objectClass,
const TCHAR* name,
float defaultValue,
FloatValidator validator = NULL
)
{
return GetFloat(objectSuperClass, objectClass, name, defaultValue, validator, DIM_COLOR255);
}
virtual Point3 GetPoint3(
SClass_ID objectSuperClass,
const Class_ID& objectClass,
const TCHAR* name,
const Point3& defaultValue,
Point3Validator validator = NULL,
int dimension = DIM_NONE
) = 0;
Point3 GetRGBA(
SClass_ID objectSuperClass,
const Class_ID& objectClass,
const TCHAR* name,
const Point3& defaultValue,
Point3Validator validator = NULL
)
{
return GetPoint3(objectSuperClass, objectClass, name, defaultValue, validator, DIM_COLOR255);
}
virtual Point4 GetPoint4(
SClass_ID objectSuperClass,
const Class_ID& objectClass,
const TCHAR* name,
const Point4& defaultValue,
Point4Validator validator = NULL,
int dimension = DIM_NONE
) = 0;
Point4 GetFRGBA(
SClass_ID objectSuperClass,
const Class_ID& objectClass,
const TCHAR* name,
const Point4& defaultValue,
Point4Validator validator = NULL
)
{
return GetPoint4(objectSuperClass, objectClass, name, defaultValue, validator, DIM_COLOR);
}
virtual TSTR GetString(
SClass_ID objectSuperClass,
const Class_ID& objectClass,
const TCHAR* name,
const TCHAR* defaultValue,
StringValidator validator = NULL
) = 0;
virtual Class_ID GetClassID(
SClass_ID objectSuperClass,
const Class_ID& objectClass,
const TCHAR* name,
const Class_ID& defaultID,
ClassIDValidator validator = NULL
) = 0;
virtual Animatable* CreateInstance(
SClass_ID objectSuperClass,
const Class_ID& objectClass,
const TCHAR* name,
SClass_ID superClass,
const Class_ID& defaultInstance,
AnimatableValidator validator = NULL
) = 0;
ReferenceTarget* CreateRefTarget(
SClass_ID objectSuperClass,
const Class_ID& objectClass,
const TCHAR* name,
SClass_ID superClass,
const Class_ID& defaultInstance,
AnimatableValidator validator = NULL
)
{
return static_cast<ReferenceTarget*>(CreateInstance(objectSuperClass,
objectClass, name, superClass, defaultInstance, validator));
}
Mtl* CreateMtl(
SClass_ID objectSuperClass,
const Class_ID& objectClass,
const TCHAR* name,
const Class_ID& defaultInstance,
AnimatableValidator validator = NULL
)
{
return static_cast<Mtl*>(CreateInstance(objectSuperClass, objectClass,
name, MATERIAL_CLASS_ID, defaultInstance, validator));
}
Texmap* CreateTexmap(
SClass_ID objectSuperClass,
const Class_ID& objectClass,
const TCHAR* name,
const Class_ID& defaultInstance,
AnimatableValidator validator = NULL
)
{
return static_cast<Texmap*>(CreateInstance(objectSuperClass, objectClass,
name, TEXMAP_CLASS_ID, defaultInstance, validator));
}
// This is the low level interface into the defaults.
// This interface lets you retrive raw values directly from the
// defaults.
virtual bool SectionExists(const TCHAR* section) = 0;
virtual bool SectionExists(SClass_ID sid, const Class_ID& id) = 0;
virtual void SetSectionName(const TCHAR* section) = 0;
virtual void SetSectionName(SClass_ID sid, const Class_ID& id) = 0;
virtual const TCHAR* GetSectionName() = 0;
virtual void DeleteSection(const TCHAR* section) = 0;
virtual void DeleteSection(SClass_ID sid, const Class_ID& id) = 0;
virtual bool KeyExists(const TCHAR* key) = 0;
virtual bool DeleteKey(const TCHAR* key) = 0;
virtual bool PutInt(
const TCHAR* key,
int val
) = 0;
virtual bool PutIntArray(
const TCHAR* key,
int ct,
const int* array
) = 0;
virtual bool PutFloat(
const TCHAR* key,
float val
) = 0;
virtual bool PutFloatArray(
const TCHAR* key,
int ct,
const float* array
) = 0;
virtual bool PutString(
const TCHAR* key,
const TCHAR* str
) = 0;
virtual bool GetInt(
const TCHAR* key,
int& val
) = 0;
virtual bool GetIntArray(
const TCHAR* key,
int& ct,
int* array,
int arrayCt
) = 0;
virtual bool GetFloat(
const TCHAR* key,
float& val
) = 0;
virtual bool GetFloatArray(
const TCHAR* key,
int& ct,
float* array,
int arrayCt
) = 0;
virtual bool GetString(
const TCHAR* key,
TCHAR* buf,
int bufSize
) = 0;
};
// This class generates range checkers for values.
template<class T, int low, int high>
class MarketDefaults::Range {
public:
// Return whether val is in the range including the endpoints
static bool CheckII(T& val);
// Return whether val is in the range excluding the low endpoint
static bool CheckEI(T& val);
// Return whether val is in the range excluding the high endpoint
static bool CheckIE(T& val);
// Return whether val is in the range excluding the endpoints
static bool CheckEE(T& val);
// Correct val to fall within the givin range including the endpoints
static bool Correct(T& val);
// Correct val if it is above the given range. Fail if it is below.
static bool CorrectHigh(T& val);
// Correct val if it is below the given range. Fail if it is above.
static bool CorrectLow(T& val);
};
template<class T, int low, int high>
bool MarketDefaults::Range<T, low, high>::CheckII(T& val)
{
return val >= T(low) && val <= T(high);
}
template<class T, int low, int high>
bool MarketDefaults::Range<T, low, high>::CheckEI(T& val)
{
return val > T(low) && val <= T(high);
}
template<class T, int low, int high>
bool MarketDefaults::Range<T, low, high>::CheckIE(T& val)
{
return val >= T(low) && val < T(high);
}
template<class T, int low, int high>
bool MarketDefaults::Range<T, low, high>::CheckEE(T& val)
{
return val > T(low) && val < T(high);
}
template<class T, int low, int high>
bool MarketDefaults::Range<T, low, high>::Correct(T& val)
{
if (val < T(low))
val = T(low);
else if (val > T(high))
val = T(high);
return true;
}
template<class T, int low, int high>
bool MarketDefaults::Range<T, low, high>::CorrectHigh(T& val)
{
if (val < T(low))
return false;
if (val > T(high))
val = T(high);
return true;
}
template<class T, int low, int high>
bool MarketDefaults::Range<T, low, high>::CorrectLow(T& val)
{
if (val > T(high))
return false;
if (val < T(low))
val = T(low);
return true;
}
#endif