00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "std3d.h"
00027
00028 #include "3d/instance_user.h"
00029 #include "nel/misc/debug.h"
00030
00031
00032 using namespace NLMISC;
00033
00034 namespace NL3D
00035 {
00036
00037
00038
00039
00040 CInstanceUser::CInstanceUser(CScene *scene, IModel *trans) :
00041 CTransformUser(scene, trans)
00042 {
00043 _Instance= safe_cast<CTransformShape*>(_Transform);
00044 CMeshBaseInstance *mi= dynamic_cast<CMeshBaseInstance*>(_Instance);
00045
00046
00047 if(mi)
00048 {
00049
00050 uint numMat= mi->Materials.size();
00051 _Materials.reserve(numMat);
00052 for(uint i=0;i<numMat;i++)
00053 {
00054 _Materials.push_back(&mi->Materials[i]);
00055 }
00056 }
00057 }
00058
00059
00060
00061 void CInstanceUser::getShapeAABBox(NLMISC::CAABBox &bbox) const
00062 {
00063 _Instance->getAABBox(bbox);
00064 }
00065
00066
00067 void CInstanceUser::setBlendShapeFactor (const std::string &blendShapeName, float factor, bool dynamic)
00068 {
00069 CMeshBaseInstance *mi= dynamic_cast<CMeshBaseInstance*>(_Instance);
00070
00071 if (mi)
00072 {
00073 mi->setBlendShapeFactor (blendShapeName, factor);
00074
00075 }
00076 }
00077
00078
00079 void CInstanceUser::changeMRMDistanceSetup(float distanceFinest, float distanceMiddle, float distanceCoarsest)
00080 {
00081 CMeshBaseInstance *mi= dynamic_cast<CMeshBaseInstance*>(_Instance);
00082
00083
00084 if (mi)
00085 {
00086 mi->changeMRMDistanceSetup(distanceFinest, distanceMiddle, distanceCoarsest);
00087 }
00088 }
00089
00090
00091
00092 void CInstanceUser::setShapeDistMax(float distMax)
00093 {
00094 if(_Instance && _Instance->Shape)
00095 {
00096 _Instance->Shape->setDistMax(distMax);
00097 }
00098 }
00099
00100
00101 float CInstanceUser::getShapeDistMax() const
00102 {
00103 if(_Instance && _Instance->Shape)
00104 {
00105 return _Instance->Shape->getDistMax();
00106 }
00107 else
00108 return -1;
00109 }
00110
00111
00112 }