Files
OpenSceneGraph/src/osgPlugins/ive/LightPoint.cpp
Robert Osfield 86d323752d From Corbin Holtz, "I have completed my mods to the OpenFlight loader (modified files are
attached):
   * Light point strings using the REPLICATE opcode should now be supported
(>=15.6?)

   * Directional lights should now work as in Performer using a viewing
frustrum defined by a direction vector, horizontal angular width, vertical
angular width, and roll angle about the direction vector.  The current
directional light implementation had some bad assumptions which caused
problems with direction vectors not on the XY plane.

   * IVE and OSG reader/writers were updated as appropriate"
2004-05-08 22:18:38 +00:00

129 lines
3.6 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"
#include "DirectionalSector.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 if(dynamic_cast<osgSim::DirectionalSector*>(_sector.get())){
((ive::DirectionalSector*)(_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 if(attributeID == IVEDIRECTIONALSECTOR){
sector = new osgSim::DirectionalSector();
((ive::DirectionalSector*)(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.");
}
}