⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qvsetfield.cpp

📁 Windows上的MUD客户端程序
💻 CPP
字号:
#include <QvFields.h>
#include <QvSFNode.h>
#include <QvMFNode.h>
#include <QvNode.h>
#include <memory.h>


// This needs to grow num

#define DEFAULT_SET1VALUE(fieldType, type, size)	\
QvBool fieldType::set1Value(const void *in, int index)	\
{	\
	if(index >= num) 	\
		makeRoom(index + 1);	\
    type *valuePtr = ((type *)values) + index * size;	\
	\
	type *pIn = (type *)in;	  \
    for(int i = 0; i < size; i++)	\
    {	\
		valuePtr[i] = pIn[i];	\
    }	\
    return (TRUE);	\
}	\

#define DEFAULT_SETVALUES(fieldType, type, size)	\
QvBool fieldType::setValues(const void *in, int startIndex, int count)	\
{	\
	if(getHandler())   ((getContainer()->*(getHandler()))(in));	\
	else {	\
		if(startIndex + count - 1 >= num) 	\
			makeRoom(startIndex + count);	\
	    type *valuePtr = (type *)values + startIndex * size;	\
		\
		type *pIn = (type *)in;	  \
	    for(int i = 0; i < size * count; i++)	\
	    {	\
			valuePtr[i] = pIn[i];	\
	    }	\
	}	\
	pumpData();		\
	if(getContainer()->GetRenderData())	getContainer()->GetRenderData()->SetDirty(true);	\
    return (TRUE);	\
}	\

#define DEFAULT_SETVALUE(fieldType, type)	\
QvBool fieldType::setValue(const void *in)	\
{	\
	if(getHandler())   ((getContainer()->*(getHandler()))(in));	\
	else value = *((type *)in);	\
	pumpData();		\
	if(getContainer()->GetRenderData())	getContainer()->GetRenderData()->SetDirty(true);	\
    return (TRUE);	\
}	\


#define DEFAULT_SETVALUEARRAY(fieldType, type, size)	\
QvBool fieldType::setValue(const void *in)	\
{	\
	if(getHandler())   ((getContainer()->*(getHandler()))(in));	\
	else {	\
		type *pIn = (type *)in;	  \
	    for(int i = 0; i < size; i++)	\
	    {	\
			value[i] = pIn[i];	\
	    }	\
	}	\
	pumpData();		\
	if(getContainer()->GetRenderData())	getContainer()->GetRenderData()->SetDirty(true);	\
    return (TRUE);	\
}

// TODO SFNode and MFNode must use/release ref counts!!!!

DEFAULT_SET1VALUE(QvMFColor, float, 3);

DEFAULT_SETVALUES(QvMFColor, float, 3);

DEFAULT_SETVALUEARRAY(QvSFColor, float, 3);

DEFAULT_SET1VALUE(QvMFFloat, float, 1);
DEFAULT_SET1VALUE(QvMFLong, long, 1);
DEFAULT_SET1VALUE(QvMFVec2f, float, 2);
DEFAULT_SET1VALUE(QvMFVec3f, float, 3);

DEFAULT_SETVALUES(QvMFFloat, float, 1);
DEFAULT_SETVALUES(QvMFLong, long, 1);
DEFAULT_SETVALUES(QvMFVec2f, float, 2);
DEFAULT_SETVALUES(QvMFVec3f, float, 3);

DEFAULT_SETVALUE(QvSFBitMask, int);
DEFAULT_SETVALUE(QvSFBool, QvBool);
DEFAULT_SETVALUE(QvSFEnum, int);
//DEFAULT_SETVALUE(QvSFFloat, float);
DEFAULT_SETVALUE(QvSFLong, long);
DEFAULT_SETVALUE(QvSFNode, QvNode*);
DEFAULT_SETVALUE(QvSFTime, double);

DEFAULT_SETVALUEARRAY(QvSFVec2f, float, 2);
DEFAULT_SETVALUEARRAY(QvSFVec3f, float, 3);


DEFAULT_SETVALUE(QvSFString, char*);
DEFAULT_SET1VALUE(QvMFString, char*, 1);
DEFAULT_SETVALUES(QvMFString, char*, 1);

DEFAULT_SET1VALUE(QvMFNode, QvNode*, 1);
DEFAULT_SETVALUES(QvMFNode, QvNode*, 1);
                  
QvBool QvSFRotation::setValue(const void *in)
{	
	float *pIn = (float *)in;
	for(int j = 0; j < 3; j++)
	{
		axis[j] = *pIn++;
	}
	angle = *pIn;
	pumpData();	
	if(getContainer()->GetRenderData())	getContainer()->GetRenderData()->SetDirty(true);
    return (TRUE);	
}	


QvBool QvSFMatrix::setValue(const void *in)
{	
	memmove(value, in, 16 * sizeof(float));
    return (TRUE);	
}	

//QvSFImage, float, 1);
QvBool QvSFImage::setValue(const void *in)
{	
	// You'd better set size and numComponents first!!
	//memmove(bytes, in, size[0] * size[1] * numComponents);
    //return (TRUE);	
	// Since this is almost useless, we'll just do nothing
	return FALSE;
}	

DEFAULT_SET1VALUE(QvMFRotation, QvOrientation, 1);
DEFAULT_SETVALUES(QvMFRotation, QvOrientation, 1);
                  
DEFAULT_SET1VALUE(QvMFTime, double, 1);
DEFAULT_SETVALUES(QvMFTime, double, 1);
                  
// for debugging
QvBool QvSFFloat::setValue(const void *datain)
{
	if(getHandler())   ((getContainer()->*(getHandler()))(datain));
	else value = *((float *)datain);
	pumpData();
	if(getContainer()->GetRenderData())	getContainer()->GetRenderData()->SetDirty(true);
    return (TRUE);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -