DWORD CQHState::OnChangeObjectParent( DWORD size, void *params ) { CHANGEOBJECTPARENT *cop = static_cast<CHANGEOBJECTPARENT *>( params ); VERIFY_MESSAGE_SIZE( sizeof( *cop ), size ); static const DWORD hashType = CHashString( _T("CQHState") ).GetUniqueID(); if( cop->objectCompType != NULL && cop->objectCompType->GetUniqueID() != hashType ) { assert( !"Unmatched type" ); return MSG_ERROR; } if( *GetName() != *cop->objectName ) { assert( !"Unmatched name" ); return MSG_ERROR; } SetParentName( cop->newParentName ); return MSG_HANDLED_PROCEED; }
// Read(): bool LWObject_Surface::Read( LWbifstream &in, unsigned long chunk_size ) { if( chunk_size == 0 ) return true; // Surface Name char buffer[256]; in.GetString( buffer, 256 ); SetName( buffer ); // Parent Name in.GetString( buffer, 256 ); SetParentName( buffer ); // Sub-Chunk Loop streampos chunk_start = in.tellg(); unsigned long subchunk_id, subchunk_size; while( !in.eof() ) { // Test for errors if( in.bad() || in.fail() ) throw LWOERROR_ERROR_READING_FILE; // Get the basic chunk data chunk_start = in.tellg(); in >> subchunk_id >> subchunk_size; // Figure out what kind of chunk this is switch( subchunk_id ) { case LWObject_SURFChunk_COLR: // COLR color.Read( in, false ); color_envelope_index = in.ReadVX() - 1; break; case LWObject_SURFChunk_DIFF: // DIFF in >> diffusion; diffusion_envelope_index = in.ReadVX() - 1; break; case LWObject_SURFChunk_SHRP: // SHRP in >> diffuse_sharpness; diffuse_sharpness_envelope_index = in.ReadVX() - 1; break; case LWObject_SURFChunk_LUMI: // LUMI in >> luminosity; luminosity_envelope_index = in.ReadVX() - 1; break; case LWObject_SURFChunk_SPEC: // SPEC in >> specular; specular_envelope_index = in.ReadVX() - 1; break; case LWObject_SURFChunk_GLOS: // GLOS in >> glossiness; glossiness_envelope_index = in.ReadVX() - 1; break; case LWObject_SURFChunk_REFL: // REFL in >> reflectivity; reflectivity_envelope_index = in.ReadVX() - 1; break; case LWObject_SURFChunk_TRAN: // TRAN in >> transparency; transparency_envelope_index = in.ReadVX() - 1; break; case LWObject_SURFChunk_TRNL: // TRNL in >> translucency; translucency_envelope_index = in.ReadVX() - 1; break; case LWObject_SURFChunk_BUMP: // BUMP in >> bump; bump_envelope_index = in.ReadVX() - 1; break; case LWObject_SURFChunk_SIDE : { // SIDE unsigned short temps; in >> temps; is_double_sided = (temps == 3) ? true : false; } break; case LWObject_SURFChunk_SMAN: // SMAN in >> max_smoothing_angle; break; case LWObject_SURFChunk_RFOP: // RFOP in >> reflection_options; break; case LWObject_SURFChunk_TROP: // TROP in >> transparency_options; break; case LWObject_SURFChunk_CLRH: // CLRH in >> color_highlights; color_highlights_envelope_index = in.ReadVX() - 1; break; case LWObject_SURFChunk_CLRF: // CLRF in >> color_filter; color_filter_envelope_index = in.ReadVX() - 1; break; default: // Unknown Chunk in.seekg( subchunk_size, ios::cur ); } // Skip another byte if the chunk size is odd (chunks must be even sized) if( (chunk_size % 2) > 0 ) in.seekg( 1, ios::cur ); } return true; }
// Destructor LWObject_Surface::~LWObject_Surface() { SetName( NULL ); SetParentName( NULL ); }