/* * osgART/Marker * osgART: AR ToolKit for OpenSceneGraph * * Copyright (c) 2005-2007 ARToolworks, Inc. All rights reserved. * * Rev Date Who Changes * 1.0 2006-12-08 --- Version 1.0 release. * */ /* * This file is part of osgART - AR Toolkit for OpenSceneGraph * * Copyright (c) 2005-2007 ARToolworks, Inc. All rights reserved. * * (See the AUTHORS file in the root of this distribution.) * * * OSGART is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * OSGART 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 * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OSGART; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * */ #ifndef OSGART_MARKER #define OSGART_MARKER 1 // STL headers #include #include // local headers #include "osgART/Export" #include "osgART/Field" // OSG headers #include #include #include #include namespace osgART { /** * \class Marker * \brief A base class from which specific types of markers are derived. */ class OSGART_EXPORT Marker : public osg::Referenced, public FieldContainer { public: virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast(obj) != 0L; } virtual const char* className() const { return "Marker"; } enum MarkerType { ART_UNKOWN = 0, // m_updatecallback; friend class MarkerContainer; /** * Internal update of matrix */ void updateTransform(const osg::Matrix& transform); bool m_valid; bool m_active; osg::Matrix m_transform; osg::Vec3 m_storedPosition; osg::Quat m_storedRotation; float m_positionSmoothFactor; float m_rotationSmoothFactor; bool m_seen; std::string m_name; }; class MarkerContainerCallback; class OSGART_EXPORT MarkerContainer : public Marker { public: MarkerContainer(Marker* marker); /** * \brief set the respective marker active * \param active set to TRUE if the marker should be tracked */ virtual void setActive(bool active); virtual bool isValid() const; virtual MarkerType getType() const; protected: friend class MarkerContainerCallback; osg::ref_ptr m_marker; }; }; #endif