244 lines
4.4 KiB
C++
244 lines
4.4 KiB
C++
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
|
|
*
|
|
* This library is open source and may be redistributed and/or modified under
|
|
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
|
|
* (at your option) any later version. The full license is in LICENSE file
|
|
* included with this distribution, and on the openscenegraph.org website.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* OpenSceneGraph Public License for more details.
|
|
*/
|
|
|
|
//
|
|
// OpenFlight® loader for OpenSceneGraph
|
|
//
|
|
// Copyright (C) 2005-2007 Brede Johansen
|
|
//
|
|
|
|
#include <assert.h>
|
|
#include <osg/Geode>
|
|
#include <osg/Geometry>
|
|
#include "Registry.h"
|
|
#include "Document.h"
|
|
#include "RecordInputStream.h"
|
|
|
|
namespace flt {
|
|
|
|
|
|
|
|
/** PushLevel
|
|
*/
|
|
class PushLevel : public Record
|
|
{
|
|
public:
|
|
|
|
PushLevel() {}
|
|
|
|
META_Record(PushLevel)
|
|
|
|
virtual void readRecord(RecordInputStream& /*in*/, Document& document)
|
|
{
|
|
document.pushLevel();
|
|
}
|
|
|
|
protected:
|
|
|
|
virtual ~PushLevel() {}
|
|
};
|
|
|
|
REGISTER_FLTRECORD(PushLevel, PUSH_LEVEL_OP)
|
|
|
|
|
|
|
|
/** PophLevel
|
|
*/
|
|
class PopLevel : public Record
|
|
{
|
|
public:
|
|
|
|
PopLevel() {}
|
|
|
|
META_Record(PopLevel)
|
|
|
|
virtual void read(RecordInputStream& /*in*/, Document& document)
|
|
{
|
|
PrimaryRecord* parentPrimary = document.getTopOfLevelStack();
|
|
PrimaryRecord* currentPrimary = document.getCurrentPrimaryRecord();
|
|
|
|
// Call dispose() for primary without push, pop level pair.
|
|
if (currentPrimary && currentPrimary!=parentPrimary)
|
|
{
|
|
currentPrimary->dispose(document);
|
|
}
|
|
|
|
// Call dispose() for primary with push, pop level pair.
|
|
if (parentPrimary)
|
|
{
|
|
parentPrimary->dispose(document);
|
|
}
|
|
|
|
document.popLevel();
|
|
}
|
|
|
|
protected:
|
|
|
|
virtual ~PopLevel() {}
|
|
};
|
|
|
|
REGISTER_FLTRECORD(PopLevel, POP_LEVEL_OP)
|
|
|
|
|
|
|
|
/** PushSubface
|
|
*/
|
|
class PushSubface : public Record
|
|
{
|
|
public:
|
|
|
|
PushSubface() {}
|
|
|
|
META_Record(PushSubface)
|
|
|
|
virtual void read(RecordInputStream& /*in*/, Document& document)
|
|
{
|
|
document.pushSubface();
|
|
}
|
|
|
|
protected:
|
|
|
|
virtual ~PushSubface() {}
|
|
};
|
|
|
|
REGISTER_FLTRECORD(PushSubface, PUSH_SUBFACE_OP)
|
|
|
|
|
|
|
|
/** PopSubface
|
|
*/
|
|
class PopSubface : public Record
|
|
{
|
|
public:
|
|
|
|
PopSubface() {}
|
|
|
|
META_Record(PopSubface)
|
|
|
|
virtual void read(RecordInputStream& /*in*/, Document& document)
|
|
{
|
|
document.popSubface();
|
|
}
|
|
|
|
protected:
|
|
|
|
virtual ~PopSubface() {}
|
|
};
|
|
|
|
REGISTER_FLTRECORD(PopSubface, POP_SUBFACE_OP)
|
|
|
|
|
|
|
|
/** PushExtension
|
|
*/
|
|
class PushExtension : public Record
|
|
{
|
|
public:
|
|
|
|
PushExtension() {}
|
|
|
|
META_Record(PushExtension)
|
|
|
|
virtual void read(RecordInputStream& in, Document& document)
|
|
{
|
|
readRecord(in,document);
|
|
document.pushExtension();
|
|
}
|
|
|
|
protected:
|
|
|
|
virtual ~PushExtension() {}
|
|
};
|
|
|
|
REGISTER_FLTRECORD(PushExtension, PUSH_EXTENSION_OP)
|
|
|
|
|
|
|
|
/** PopExtension
|
|
*/
|
|
class PopExtension : public Record
|
|
{
|
|
public:
|
|
|
|
PopExtension() {}
|
|
|
|
META_Record(PopExtension)
|
|
|
|
virtual void read(RecordInputStream& in, Document& document)
|
|
{
|
|
readRecord(in,document);
|
|
document.popExtension();
|
|
}
|
|
|
|
protected:
|
|
|
|
virtual ~PopExtension() {}
|
|
};
|
|
|
|
REGISTER_FLTRECORD(PopExtension, POP_EXTENSION_OP)
|
|
|
|
|
|
|
|
/** PushAttribute - Reserved subtree
|
|
*/
|
|
class PushAttribute : public Record
|
|
{
|
|
public:
|
|
|
|
PushAttribute() {}
|
|
|
|
META_Record(PushAttribute)
|
|
|
|
virtual void read(RecordInputStream& in, Document& document)
|
|
{
|
|
readRecord(in,document);
|
|
}
|
|
|
|
protected:
|
|
|
|
virtual ~PushAttribute() {}
|
|
};
|
|
|
|
REGISTER_FLTRECORD(PushAttribute, PUSH_ATTRIBUTE_OP)
|
|
|
|
|
|
|
|
/** PopAttribute
|
|
*/
|
|
class PopAttribute : public Record
|
|
{
|
|
public:
|
|
|
|
PopAttribute() {}
|
|
|
|
META_Record(PopAttribute)
|
|
|
|
virtual void read(RecordInputStream& in, Document& document)
|
|
{
|
|
readRecord(in,document);
|
|
}
|
|
|
|
protected:
|
|
|
|
virtual ~PopAttribute() {}
|
|
};
|
|
|
|
REGISTER_FLTRECORD(PopAttribute, POP_ATTRIBUTE_OP)
|
|
|
|
|
|
|
|
} // end namespace
|
|
|
|
|
|
|