From dfa406046571d05880e6096543b9531e5f59c916 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 9 Jan 2008 16:56:31 +0000 Subject: [PATCH] Adding missing files --- src/osgPlugins/ive/HeightFieldLayer.cpp | 83 +++++++++++++++++++++++++ src/osgPlugins/ive/HeightFieldLayer.h | 32 ++++++++++ 2 files changed, 115 insertions(+) create mode 100644 src/osgPlugins/ive/HeightFieldLayer.cpp create mode 100644 src/osgPlugins/ive/HeightFieldLayer.h diff --git a/src/osgPlugins/ive/HeightFieldLayer.cpp b/src/osgPlugins/ive/HeightFieldLayer.cpp new file mode 100644 index 000000000..56a373034 --- /dev/null +++ b/src/osgPlugins/ive/HeightFieldLayer.cpp @@ -0,0 +1,83 @@ +/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2008 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. +*/ + +#include "Exception.h" +#include "HeightFieldLayer.h" +#include "Layer.h" + +#include + +using namespace ive; + +void HeightFieldLayer::write(DataOutputStream* out) +{ + // Write Layer's identification. + out->writeInt(IVEHEIGHTFIELDLAYER); + + // If the osg class is inherited by any other class we should also write this to file. + osgTerrain::Layer* layer = dynamic_cast(this); + if (layer) + ((ive::Layer*)(layer))->write(out); + else + throw Exception("HeightFieldLayer::write(): Could not cast this osgLayer::HeightFieldLayer to an osgTerrain::Layer."); + + + if (getFileName().empty() && getHeightField()) + { + // using inline heightfield + out->writeBool(true); + out->writeShape(getHeightField()); + } + else + { + // using external heightfield file + out->writeBool(false); + out->writeString(getFileName()); + } + +} + +void HeightFieldLayer::read(DataInputStream* in) +{ + // Peek on Layer's identification. + int id = in->peekInt(); + if (id != IVEHEIGHTFIELDLAYER) + throw Exception("HeightFieldLayer::read(): Expected HeightFieldLayer identification."); + + // Read Layer's identification. + id = in->readInt(); + + // If the osg class is inherited by any other class we should also read this from file. + osgTerrain::Layer* layer = dynamic_cast(this); + if (layer) + ((ive::Layer*)(layer))->read(in); + else + throw Exception("HeightFieldLayer::read(): Could not cast this osgLayer::Layer to an osg::Group."); + + + bool useInlineHeightField = in->readBool(); + + if (useInlineHeightField) + { + osg::Shape* shape = in->readShape(); + setHeightField(dynamic_cast(shape)); + } + else + { + std::string filename = in->readString(); + setFileName(filename); + + setHeightField(osgDB::readHeightFieldFile(filename,in->getOptions())); + } + +} diff --git a/src/osgPlugins/ive/HeightFieldLayer.h b/src/osgPlugins/ive/HeightFieldLayer.h new file mode 100644 index 000000000..3c273f016 --- /dev/null +++ b/src/osgPlugins/ive/HeightFieldLayer.h @@ -0,0 +1,32 @@ +/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2008 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. +*/ + +#ifndef IVE_HEIGHTFIELDLAYER +#define IVE_HEIGHTFIELDLAYER 1 + +#include +#include "ReadWrite.h" + +namespace ive +{ + +class HeightFieldLayer : public osgTerrain::HeightFieldLayer, public ReadWrite +{ +public: + void write(DataOutputStream* out); + void read(DataInputStream* in); +}; + +} + +#endif