OpenSceneGraph/src/osgPlugins/ive/LightPoint.cpp

120 lines
3.3 KiB
C++

/**********************************************************************
*
* FILE: LightPoint.cpp
*
* DESCRIPTION: Read/Write osgSim::LightPoint in binary format to disk.
*
* CREATED BY: Auto generated by iveGenerator
* and later modified by Rune Schmidt Jensen.
*
* HISTORY: Created 5.9.2003
*
**********************************************************************/
#include "Exception.h"
#include "LightPoint.h"
#include "BlinkSequence.h"
#include "AzimElevationSector.h"
#include "ElevationSector.h"
#include "AzimSector.h"
#include "ConeSector.h"
using namespace ive;
void LightPoint::write(DataOutputStream* out){
// Write LightPoint's identification.
out->writeInt(IVELIGHTPOINT);
// Write LightPoint's properties.
out->writeBool(_on);
out->writeVec3(_position);
out->writeVec4(_color);
out->writeFloat(_intensity);
out->writeFloat(_radius);
// Write out osgSim::sector.
out->writeBool(_sector.valid());
if(_sector.valid()){
if(dynamic_cast<osgSim::AzimElevationSector*>(_sector.get())){
((ive::AzimElevationSector*)(_sector.get()))->write(out);
}
else if(dynamic_cast<osgSim::ElevationSector*>(_sector.get())){
((ive::ElevationSector*)(_sector.get()))->write(out);
}
else if(dynamic_cast<osgSim::AzimSector*>(_sector.get())){
((ive::AzimSector*)(_sector.get()))->write(out);
}
else if(dynamic_cast<osgSim::ConeSector*>(_sector.get())){
((ive::ConeSector*)(_sector.get()))->write(out);
}
else
throw Exception("Unknown sector in LightPoint::write()");
}
// Write out osgSim::BlinkSequence.
out->writeBool(_blinkSequence.valid());
if(_blinkSequence.valid()){
((ive::BlinkSequence*)(_blinkSequence.get()))->write(out);
}
// Write out blendingMode.
out->writeInt(_blendingMode);
}
void LightPoint::read(DataInputStream* in){
// Peek on LightPoint's identification.
int id = in->peekInt();
if(id == IVELIGHTPOINT){
// Read LightPoint's identification.
id = in->readInt();
// Read LightPoint's properties
_on = in->readBool();
_position = in->readVec3();
_color = in->readVec4();
_intensity = in->readFloat();
_radius = in->readFloat();
// read in osgSim::sector.
if(in->readBool()){
osgSim::Sector* sector;
int attributeID = in->peekInt();
if(attributeID == IVEAZIMELEVATIONSECTOR){
sector = new osgSim::AzimElevationSector();
((ive::AzimElevationSector*)(sector))->read(in);
_sector = sector;
}
else if(attributeID == IVEELEVATIONSECTOR){
sector = new osgSim::ElevationSector();
((ive::ElevationSector*)(sector))->read(in);
_sector = sector;
}
else if(attributeID == IVEAZIMSECTOR){
sector = new osgSim::AzimSector();
((ive::AzimSector*)(sector))->read(in);
_sector = sector;
}
else if(attributeID == IVECONESECTOR){
sector = new osgSim::ConeSector();
((ive::ConeSector*)(sector))->read(in);
_sector = sector;
}
else
throw Exception("Unknown sector in LightPoint::read()");
}
// Read in osgSim::BlinkSequence.
if(in->readBool()){
osgSim::BlinkSequence* blinkSequence = new osgSim::BlinkSequence();
((ive::BlinkSequence*)(blinkSequence))->read(in);
_blinkSequence = blinkSequence;
}
// Read in blendingMode.
_blendingMode = (osgSim::LightPoint::BlendingMode)in->readInt();
}
else{
throw Exception("LightPoint::read(): Expected LightPoint identification.");
}
}