trpage_light.cpp

来自「最新osg包」· C++ 代码 · 共 1,066 行 · 第 1/2 页

CPP
1,066
字号
/* ************************   Copyright Terrain Experts Inc.   Terrain Experts Inc (TERREX) reserves all rights to this source code   unless otherwise specified in writing by the President of TERREX.   This copyright may be updated in the future, in which case that version   supercedes this one.   -------------------   Terrex Experts Inc.   4400 East Broadway #314   Tucson, AZ  85711   info@terrex.com   Tel: (520) 323-7990   ************************   *//* trpage_light.cpp	Methods for the trpgLightAttr, trpgLight and trpgLightTable classes.	This includes read and write methods.	You should only need to change something in here if you want to modify	 what any of the classes contains.	*/#include <stdlib.h>#include <stdio.h>#include <string.h>#include <trpage_geom.h>#include <trpage_read.h>#if defined(_WIN32)#define ALIGNMENT_WORKAROUND    false#else#define ALIGNMENT_WORKAROUND    true#endif/******	Lights Attribute******/trpgLightAttr::trpgLightAttr(void){	data.commentStr = NULL;	Reset();}trpgLightAttr::trpgLightAttr(const trpgLightAttr& in):    trpgReadWriteable(in){	data.commentStr = NULL;	operator=(in);}trpgLightAttr::~trpgLightAttr(void){	if (data.commentStr)		delete [] data.commentStr;	data.commentStr = NULL;}// Settersvoid trpgLightAttr::SetType( trpgLightAttr::LightType in_type ){	data.type = in_type;}void trpgLightAttr::SetDirectionality( trpgLightAttr::LightDirectionality in_directionality ){	data.directionality = in_directionality;}void trpgLightAttr::SetFrontColor( trpgColor in_frontColor ){	data.frontColor = in_frontColor;}void trpgLightAttr::SetFrontIntensity( float64 in_frontIntensity ){	data.frontIntensity = in_frontIntensity;}void trpgLightAttr::SetBackColor( trpgColor in_backColor ){	data.backColor = in_backColor;}void trpgLightAttr::SetBackIntensity( float64 in_backIntensity ){	data.backIntensity = in_backIntensity;}void trpgLightAttr::SetNormal( trpg3dPoint in_normal ){	data.normal = in_normal;}void trpgLightAttr::SetSMC( int32 in_smc ){	data.smc = in_smc;}void trpgLightAttr::SetFID( int32 in_fid ){	data.fid = in_fid;}void trpgLightAttr::SetFlags( int32 in_flags ){	data.flags = in_flags;}void trpgLightAttr::SetHLobeAngle( float64 in_hLobeAngle ){	data.horizontalLobeAngle = in_hLobeAngle;}void trpgLightAttr::SetVLobeAngle( float64 in_vLobeAngle ){	data.verticalLobeAngle = in_vLobeAngle;}void trpgLightAttr::SetLobeRollAngle( float64 in_lobeRollAngle ){	data.lobeRollAngle = in_lobeRollAngle;}void trpgLightAttr::SetLobeFalloff( float64 in_lobeFalloff ){	data.lobeFalloff = in_lobeFalloff;}void trpgLightAttr::SetAmbient( float64 in_ambientIntensity ){	data.ambientIntensity = in_ambientIntensity;}void trpgLightAttr::SetQuality( trpgLightAttr::LightQuality in_quality ){	data.quality = in_quality;}void trpgLightAttr::SetRascalSignificance( float64 in_rascalSignificance ){	data.rascalSignificance = in_rascalSignificance;}void trpgLightAttr::SetRandomIntensity( trpgLightAttr::LightQuality in_randomIntensity ){	data.randomIntensity = in_randomIntensity;}void trpgLightAttr::SetCalligraphicAttr( trpgLightAttr::CalligraphicAttr& in_calligraphicAttr ){	data.calligraphicAttr = in_calligraphicAttr;}void trpgLightAttr::SetCalligraphicDrawOrder( int32 in_drawOrder ){	data.calligraphicAttr.drawOrder = in_drawOrder;}void trpgLightAttr::SetCalligraphicMinDefocus( float64 in_minDefocus ){	data.calligraphicAttr.minDefocus = in_minDefocus;}void trpgLightAttr::SetCalligraphicMaxDefocus( float64 in_maxDefocus ){	data.calligraphicAttr.maxDefocus = in_maxDefocus;}void trpgLightAttr::SetPerformerAttr( trpgLightAttr::PerformerAttr& in_performerAttr ){	data.performerAttr = in_performerAttr;}void trpgLightAttr::SetPerformerFlags( int32 in_flags ){	data.performerAttr.flags = in_flags & trpgLightAttr::trpg_PerformerMask;	data.flags |= data.performerAttr.flags;}void trpgLightAttr::SetPerformerMinPixelSize( float64 in_minPxSize ){	data.performerAttr.minPixelSize = in_minPxSize;}void trpgLightAttr::SetPerformerMaxPixelSize( float64 in_maxPxSize ){	data.performerAttr.maxPixelSize = in_maxPxSize;}void trpgLightAttr::SetPerformerActualSize( float64 in_actualSize ){	data.performerAttr.actualSize = in_actualSize;}void trpgLightAttr::SetPerformerTpPixelSize( float64 in_tpPixelSize ){	data.performerAttr.transparentPixelSize = in_tpPixelSize;}void trpgLightAttr::SetPerformerTpFalloffExp( float64 in_tpFalloffExp ){	data.performerAttr.transparentFallofExp = in_tpFalloffExp;}void trpgLightAttr::SetPerformerTpScale( float64 in_tpScale ){	data.performerAttr.transparentScale = in_tpScale;}void trpgLightAttr::SetPerformerTpClamp( float64 in_tpClamp ){	data.performerAttr.transparentClamp = in_tpClamp;}void trpgLightAttr::SetPerformerFogScale( float64 in_fogScale ){	data.performerAttr.fogScale = in_fogScale;}void trpgLightAttr::SetAnimationAttr( trpgLightAttr::AnimationAttr& in_animationAttr ){	data.animationAttr = in_animationAttr;}void trpgLightAttr::SetAnimationPeriod( float64 in_period ){	data.animationAttr.period = in_period;}void trpgLightAttr::SetAnimationPhaseDelay( float64 in_phaseDelay ){	data.animationAttr.phaseDelay = in_phaseDelay;}void trpgLightAttr::SetAnimationTimeOn( float64 in_timeOn ){	data.animationAttr.timeOn = in_timeOn;}void trpgLightAttr::SetAnimationVector( trpg3dPoint in_vector ){	data.animationAttr.vector = in_vector;}void trpgLightAttr::SetAnimationFlags( int32 flags ){	data.animationAttr.flags = flags & trpgLightAttr::trpg_AnimationMask;	data.flags |= data.animationAttr.flags;}void trpgLightAttr::SetComment(const char *inStr){	if (!inStr)		return;	if (data.commentStr)		delete [] data.commentStr;	data.commentStr = new char[strlen(inStr)+1];	strcpy(data.commentStr,inStr);}// Gettersvoid trpgLightAttr::GetType( trpgLightAttr::LightType& out_type ){	out_type = data.type;}void trpgLightAttr::GetDirectionality( trpgLightAttr::LightDirectionality& out_directionality ){	out_directionality = data.directionality;}void trpgLightAttr::GetFrontColor( trpgColor& out_frontColor ){	out_frontColor = data.frontColor;}void trpgLightAttr::GetFrontIntensity( float64& out_frontIntensity ){	out_frontIntensity = data.frontIntensity;}void trpgLightAttr::GetBackColor( trpgColor& out_backColor ){	out_backColor = data.backColor;}void trpgLightAttr::GetBackIntensity( float64& out_backIntensity ){	out_backIntensity = data.backIntensity;}void trpgLightAttr::GetNormal( trpg3dPoint& out_normal ){	out_normal = data.normal;}void trpgLightAttr::GetSMC( int32& out_smc ){	out_smc = data.smc;}void trpgLightAttr::GetFID( int32& out_fid ){	out_fid = data.fid;}void trpgLightAttr::GetFlags( int32& out_flags ){	out_flags = data.flags;}void trpgLightAttr::GetHLobeAngle( float64& out_hLobeAngle ){	out_hLobeAngle = data.horizontalLobeAngle;}void trpgLightAttr::GetVLobeAngle( float64& out_vLobeAngle ){	out_vLobeAngle = data.verticalLobeAngle;}void trpgLightAttr::GetLobeRollAngle( float64& out_lobeRollAngle ){	out_lobeRollAngle = data.lobeRollAngle;}void trpgLightAttr::GetLobeFalloff( float64& out_lobeFalloff ){	out_lobeFalloff = data.lobeFalloff;}void trpgLightAttr::GetAmbient( float64& out_ambientIntensity ){	out_ambientIntensity = data.ambientIntensity;}void trpgLightAttr::GetQuality( trpgLightAttr::LightQuality& out_quality ){	out_quality = data.quality;}void trpgLightAttr::GetRascalSignificance( float64& out_rascalSignificance ){	out_rascalSignificance = data.rascalSignificance;}void trpgLightAttr::GetRandomIntensity( trpgLightAttr::LightQuality& out_randomIntensity ){	out_randomIntensity = data.randomIntensity;}void trpgLightAttr::GetCalligraphicAttr( trpgLightAttr::CalligraphicAttr& out_calligraphicAttr ){	out_calligraphicAttr = data.calligraphicAttr;}void trpgLightAttr::GetCalligraphicDrawOrder( int32& out_drawOrder ){	out_drawOrder = data.calligraphicAttr.drawOrder;}void trpgLightAttr::GetCalligraphicMinDefocus( float64& out_minDefocus ){	out_minDefocus = data.calligraphicAttr.minDefocus;}void trpgLightAttr::GetCalligraphicMaxDefocus( float64& out_maxDefocus ){	out_maxDefocus = data.calligraphicAttr.maxDefocus;}void trpgLightAttr::GetPerformerAttr( trpgLightAttr::PerformerAttr& out_performerAttr ){	out_performerAttr = data.performerAttr;}void trpgLightAttr::GetPerformerFlags( int32& out_flags ){	out_flags = data.performerAttr.flags;}void trpgLightAttr::GetPerformerMinPixelSize( float64& out_minPxSize ){	out_minPxSize = data.performerAttr.minPixelSize;}void trpgLightAttr::GetPerformerMaxPixelSize( float64& out_maxPxSize ){	out_maxPxSize = data.performerAttr.maxPixelSize;}void trpgLightAttr::GetPerformerActualSize( float64& out_actualSize ){	out_actualSize = data.performerAttr.actualSize;}void trpgLightAttr::GetPerformerTpPixelSize( float64& out_tpPixelSize ){	out_tpPixelSize = data.performerAttr.transparentPixelSize;}void trpgLightAttr::GetPerformerTpFalloffExp( float64& out_tpFalloffExp ){	out_tpFalloffExp = data.performerAttr.transparentFallofExp;}void trpgLightAttr::GetPerformerTpScale( float64& out_tpScale ){	out_tpScale = data.performerAttr.transparentScale;}void trpgLightAttr::GetPerformerTpClamp( float64& out_tpClamp ){	out_tpClamp = data.performerAttr.transparentClamp;}void trpgLightAttr::GetPerformerFogScale( float64& out_fogScale ){	out_fogScale = data.performerAttr.fogScale;}void trpgLightAttr::GetAnimationAttr( trpgLightAttr::AnimationAttr& out_animationAttr ){	out_animationAttr = data.animationAttr;}void trpgLightAttr::GetAnimationPeriod( float64& out_period ){	out_period = data.animationAttr.period;}void trpgLightAttr::GetAnimationPhaseDelay( float64& out_phaseDelay ){	out_phaseDelay = data.animationAttr.phaseDelay;}void trpgLightAttr::GetAnimationTimeOn( float64& out_timeOn ){	out_timeOn = data.animationAttr.timeOn;}void trpgLightAttr::GetAnimationVector( trpg3dPoint& out_vector ){	out_vector = data.animationAttr.vector;}void trpgLightAttr::GetAnimationFlags( int32& flags ){	flags = data.animationAttr.flags;}const char *trpgLightAttr::GetComment(){	return data.commentStr;}// Writes this class to a write bufferbool trpgLightAttr::Write(trpgWriteBuffer &buf){	buf.Begin(TRPGLIGHTATTR);	buf.Begin(TRPGLIGHTATTR_BASIC);	buf.Add((int)data.type);	buf.Add((int)data.directionality);	buf.Add(data.frontColor);	buf.Add(data.frontIntensity);	buf.Add(data.backColor);	buf.Add(data.backIntensity);	buf.Add(data.normal);	buf.Add(data.smc);	buf.Add(data.fid);	buf.Add(data.flags);	buf.Add(data.horizontalLobeAngle);	buf.Add(data.verticalLobeAngle);	buf.Add(data.lobeRollAngle);	buf.Add(data.lobeFalloff);	buf.Add(data.ambientIntensity);	buf.Add((int)data.quality);	buf.Add((int)data.randomIntensity);	buf.End();	buf.Begin(TRPGLIGHTATTR_RASCAL);	buf.Add(data.rascalSignificance);	buf.End();	buf.Begin(TRPGLIGHTATTR_CALLIGRAPHIC);	buf.Add(data.calligraphicAttr.drawOrder);	buf.Add(data.calligraphicAttr.minDefocus);	buf.Add(data.calligraphicAttr.maxDefocus);	buf.End();	buf.Begin(TRPGLIGHTATTR_PERFORMER);	buf.Add(data.performerAttr.actualSize);	buf.Add(data.performerAttr.fogScale);	buf.Add(data.performerAttr.minPixelSize);	buf.Add(data.performerAttr.maxPixelSize);	buf.Add(data.performerAttr.transparentClamp);	buf.Add(data.performerAttr.transparentFallofExp);	buf.Add(data.performerAttr.transparentPixelSize);	buf.Add(data.performerAttr.transparentScale);	buf.End();	buf.Begin(TRPGLIGHTATTR_ANIMATION);	buf.Add(data.animationAttr.period);	buf.Add(data.animationAttr.phaseDelay);	buf.Add(data.animationAttr.timeOn);	buf.Add(data.animationAttr.vector);	buf.End();	if (data.commentStr) {		buf.Begin(TRPGLIGHTATTR_COMMENT);		buf.Add(data.commentStr);		buf.End();	}	if(writeHandle) {		buf.Begin(TRPGLIGHTATTR_HANDLE);		buf.Add((int)handle);		buf.End();	}	buf.End();	return true;}/* LightAttr CB	Used to parse tokens for a light attribute.	*/class lightAttrCB : public trpgr_Callback {public:	void * Parse(trpgToken,trpgReadBuffer &);	trpgLightAttr *lightAttr;};void * lightAttrCB::Parse(trpgToken tok,trpgReadBuffer &buf){	int			type_data;	int			directionality_data;	trpgColor	color_data;;	float64		float64_data;	trpg3dPoint	point_data;;	int32		int32_data;	int			quality_data;	char		commentStr[1024];	try {		switch (tok) {		case TRPGLIGHTATTR_BASIC:			buf.Get(type_data);			lightAttr->SetType((trpgLightAttr::LightType)type_data);			buf.Get(directionality_data);			lightAttr->SetDirectionality((trpgLightAttr::LightDirectionality)directionality_data);			buf.Get(color_data);			lightAttr->SetFrontColor(color_data);			buf.Get(float64_data);			lightAttr->SetFrontIntensity(float64_data);			buf.Get(color_data);			lightAttr->SetBackColor(color_data);			buf.Get(float64_data);			lightAttr->SetBackIntensity(float64_data);			buf.Get(point_data);			lightAttr->SetNormal(point_data);			buf.Get(int32_data);			lightAttr->SetSMC(int32_data);			buf.Get(int32_data);			lightAttr->SetFID(int32_data);			buf.Get(int32_data);			lightAttr->SetFlags(int32_data);			lightAttr->SetPerformerFlags(int32_data);			lightAttr->SetAnimationFlags(int32_data);			buf.Get(float64_data);			lightAttr->SetHLobeAngle(float64_data);			buf.Get(float64_data);			lightAttr->SetVLobeAngle(float64_data);			buf.Get(float64_data);			lightAttr->SetLobeRollAngle(float64_data);			buf.Get(float64_data);			lightAttr->SetLobeFalloff(float64_data);			buf.Get(float64_data);			lightAttr->SetAmbient(float64_data);			buf.Get(quality_data);			lightAttr->SetQuality((trpgLightAttr::LightQuality)quality_data);			buf.Get(quality_data);			lightAttr->SetRandomIntensity((trpgLightAttr::LightQuality)quality_data);			break;		case TRPGLIGHTATTR_RASCAL:			buf.Get(float64_data);			lightAttr->SetRascalSignificance(float64_data);			break;		case TRPGLIGHTATTR_PERFORMER:			buf.Get(float64_data);			lightAttr->SetPerformerActualSize(float64_data);			buf.Get(float64_data);			lightAttr->SetPerformerFogScale(float64_data);			buf.Get(float64_data);			lightAttr->SetPerformerMinPixelSize(float64_data);			buf.Get(float64_data);			lightAttr->SetPerformerMaxPixelSize(float64_data);			buf.Get(float64_data);			lightAttr->SetPerformerTpClamp(float64_data);			buf.Get(float64_data);			lightAttr->SetPerformerTpFalloffExp(float64_data);			buf.Get(float64_data);			lightAttr->SetPerformerTpPixelSize(float64_data);			buf.Get(float64_data);			lightAttr->SetPerformerTpScale(float64_data);			break;		case TRPGLIGHTATTR_CALLIGRAPHIC:

⌨️ 快捷键说明

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