2017-04-17 06:17:10 -06:00

208 lines
5.9 KiB
C++
Executable File

/*
* MAXMaterials.h - MAX material & map wrapper classes
*
* Copyright © John Wainwright 1996
*
*/
#ifndef _H_MAXMATERIALS
#define _H_MAXMATERIALS
#include "Max.h"
#include "MaxObj.h"
#if 0 // HEY!! add material library access
virtual int LoadMaterialLib(const TCHAR *name)=0;
virtual int SaveMaterialLib(const TCHAR *name)=0;
virtual MtlBaseLib& GetMaterialLibrary()=0;
static Class_ID mtlBaseLibClassID(MTLBASE_LIB_CLASS_ID,0);
#endif
/* -------------------------- MAXMaterial -------------------------- */
visible_class (MAXMaterial)
class MAXMaterial : public MAXWrapper
{
public:
Mtl* mat; /* the MAX-side material */
MAXMaterial() {};
MAXMaterial(Mtl* imat);
static ScripterExport Value* intern(Mtl* imat);
static Value* make(MAXClass* cls, Value** arg_list, int count);
BOOL is_kind_of(ValueMetaClass* c) { return (c == class_tag(MAXMaterial)) ? 1 : MAXWrapper::is_kind_of(c); }
void collect() { delete this; }
ScripterExport void sprin1(CharStream* s);
TCHAR* class_name();
#include "defimpfn.h"
Value* copy_vf(Value** arg_list, int count) { return MAXWrapper::copy_no_undo(arg_list, count); }
def_property ( name );
def_property ( effectsChannel );
def_property ( showInViewport );
Value* get_property(Value** arg_list, int count);
Value* set_property(Value** arg_list, int count);
Mtl* to_mtl() { check_for_deletion(); return mat; }
MtlBase* to_mtlbase() { check_for_deletion(); return mat; }
void to_fpvalue(FPValue& v) { v.mtl = mat; v.type = TYPE_MTL; }
};
/* ---------------------- MAXMultiMaterial ----------------------- */
visible_class (MAXMultiMaterial)
class MAXMultiMaterial : public MAXMaterial
{
public:
MAXMultiMaterial() {};
MAXMultiMaterial(MultiMtl* imat);
static ScripterExport Value* intern(MultiMtl* imat);
static Value* make(MAXClass* cls, Value** arg_list, int count);
BOOL is_kind_of(ValueMetaClass* c) { return (c == class_tag(MAXMultiMaterial)) ? 1 : MAXMaterial::is_kind_of(c); }
void collect() { delete this; }
ScripterExport void sprin1(CharStream* s);
TCHAR* class_name();
def_generic (get, "get");
def_generic (put, "put");
Value* copy_vf(Value** arg_list, int count) { return MAXWrapper::copy_no_undo(arg_list, count); }
ScripterExport Value* map(node_map& m);
def_property( numsubs );
def_property( count );
Mtl* to_mtl() { return mat; }
MtlBase* to_mtlbase() { check_for_deletion(); return mat; }
void to_fpvalue(FPValue& v) { v.mtl = mat; v.type = TYPE_MTL; }
};
/* ---------------------- Material Library ----------------------- */
applyable_class (MAXMaterialLibrary)
class MAXMaterialLibrary : public MAXWrapper
{
public:
MtlBaseLib new_lib;
MtlBaseLib& lib;
MAXMaterialLibrary(MtlBaseLib& ilib);
MAXMaterialLibrary(MtlBaseLib* ilib);
MAXMaterialLibrary();
static ScripterExport Value* intern(MtlBaseLib& ilib);
static ScripterExport Value* intern(MtlBaseLib* ilib);
classof_methods (MAXMaterialLibrary, MAXWrapper);
void collect() { delete this; }
ScripterExport void sprin1(CharStream* s);
MtlBase* get_mtlbase(int index);
MtlBase* find_mtlbase(TCHAR* name);
TCHAR* class_name();
/* operations */
ScripterExport Value* map(node_map& m);
#include "defimpfn.h"
# include "arraypro.h"
Value* copy_vf(Value** arg_list, int count) { return MAXWrapper::copy_no_undo(arg_list, count); }
/* built-in property accessors */
def_property ( count );
};
/* ------------------------- MAXTexture ------------------------ */
visible_class (MAXTexture)
class MAXTexture : public MAXWrapper
{
public:
Texmap* map; /* the MAX-side map */
MAXTexture(Texmap* imap);
static ScripterExport Value* intern(Texmap* imap);
static Value* make(MAXClass* cls, Value** arg_list, int count);
BOOL is_kind_of(ValueMetaClass* c) { return (c == class_tag(MAXTexture)) ? 1 : MAXWrapper::is_kind_of(c); }
void collect() { delete this; }
ScripterExport void sprin1(CharStream* s);
TCHAR* class_name();
#include "defimpfn.h"
# include "texmapro.h"
Value* copy_vf(Value** arg_list, int count) { return MAXWrapper::copy_no_undo(arg_list, count); }
def_property( name );
Texmap* to_texmap() { check_for_deletion(); return map; }
MtlBase* to_mtlbase() { check_for_deletion(); return map; }
void to_fpvalue(FPValue& v) { v.tex = map; v.type = TYPE_TEXMAP; }
};
/* -------------------------- MAXMtlBase -------------------------- */
// a generic wrapper for MtlBase classes such as UVGen, XYZGen, TexOut, etc.
visible_class (MAXMtlBase)
class MAXMtlBase : public MAXWrapper
{
public:
MtlBase* mtl; /* the MAX-side mtlbase */
MAXMtlBase(MtlBase* imtl);
static ScripterExport Value* intern(MtlBase* imtl);
static Value* make(MAXClass* cls, Value** arg_list, int count);
BOOL is_kind_of(ValueMetaClass* c) { return (c == class_tag(MAXMtlBase)) ? 1 : MAXWrapper::is_kind_of(c); }
void collect() { delete this; }
ScripterExport void sprin1(CharStream* s);
TCHAR* class_name() { return _T("MapSupportClass"); }
Value* copy_vf(Value** arg_list, int count) { return MAXWrapper::copy_no_undo(arg_list, count); }
MtlBase* to_mtlbase() { check_for_deletion(); return mtl; }
};
/* ------------------ MEdit materials virtual array -------------------- */
visible_class (MAXMeditMaterials)
class MAXMeditMaterials : public Value
{
public:
MAXMeditMaterials() { tag = &MAXMeditMaterials_class; }
classof_methods (MAXMeditMaterials, Value);
void collect() { delete this; }
ScripterExport void sprin1(CharStream* s);
MtlBase* get_mtl(int index);
MtlBase* find_mtl(TCHAR* name);
static void setup();
// operations
ScripterExport Value* map(node_map& m);
#include "defimpfn.h"
# include "arraypro.h"
// built-in property accessors
def_property ( count );
};
extern ScripterExport MAXMeditMaterials medit_materials;
#endif