#ifndef _HAIR_VRAY_INSTANCE_base_H_ #define _HAIR_VRAY_INSTANCE_base_H_ // Shave and a Haircut // (c) 2019 Epic Games // US Patent 6720962 /********************************************************************** *< FILE: shaveVrayInstanceBase.h DESCRIPTION: VRay base class for regular and insted hair VRay instance classes CREATED BY: Vladimir Dubovoy HISTORY: created 11-05-2010 *> **********************************************************************/ //std #include // V-Ray headers #include "vraybase.h" #include "vraymayageom.h" #include "vrayplugins.h" #include "geometryclasses.h" //own headers #include "hairAPIvrayutil.h" #include "shaveVrayPlugin.h" #include "shaveVrayVoxelPrimBase.h" //hair stack //we need 2 stacks for instanced and regular hair, //so it goes to shaveVrayInstance members extern IHairStack* stack; class shaveVrayInstanceBase /*: public VR::BaseMeshInstance*/ { public: shaveVrayPlugin *plugin; //static IHairStack* stack; //shaveVrayPlugin *plugin; //shaveVrayInstanceBase( // shaveVrayPlugin *vplugin , // VR::MaterialInterface *mtl, VR::BSDFInterface *bsdf, int renderID, // VR::VolumetricInterface *volume, VR::LightList *lightList, const VR::TraceTransform &baseTM, int objectID, // const tchar *userAttributes, int primaryVisibility) // : // plugin(vplugin), // VR::BaseMeshInstance(vplugin, vplugin, mtl, bsdf, // renderID, volume, lightList, // baseTM, objectID, userAttributes, // primaryVisibility) //{ // _hair() = NULL; // _stackid() = plugin->GetStackIndex(); //} shaveVrayInstanceBase(shaveVrayPlugin *plug){plugin = plug;} virtual ~shaveVrayInstanceBase() {} void loadHair(); void freeMem(); int GetNumFacesPerInst() const {return numFacesPerInst();} int GetNumUVSets() const {return numUVSets();} const VR::Vector& GetUV(int i) const {return uv(i);} virtual bool GetSquirrel() const = 0; protected: //const member access inline const std::vector& voxprims() const {return m_voxprims;} inline shaveVrayVoxelPrimBase* voxprim(unsigned int i) const {return m_voxprims[i];} inline int stackid() const {return m_stackid;} inline int numFacesPerInst() const {return m_numFacesPerInst;} inline int numUVSets() const {return m_numUVSets;} inline const VR::VectorList& uvs()const {return m_uvs;} inline const VR::Vector& uv(int i)const {return m_uvs[i];} inline IHairNode* hair() const {return m_hair;} //member access inline std::vector& _voxprims() {return m_voxprims;} inline shaveVrayVoxelPrimBase*& _voxprim(unsigned int i){return m_voxprims[i];} inline int& _stackid() {return m_stackid;} inline int& _numFacesPerInst() {return m_numFacesPerInst;} inline int& _numUVSets() {return m_numUVSets;} inline VR::VectorList& _uvs() {return m_uvs;} inline IHairNode*& _hair() {return m_hair;} private: //moving or static primiteves std::vector m_voxprims; int m_stackid; int m_numFacesPerInst; int m_numUVSets; VR::VectorList m_uvs; IHairNode* m_hair; }; #endif //end of_HAIR_VRAY_INSTANCE_base_H_