/* * osgART/ARTTransformCallback * 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 * */ #include "osgART/ARTTransformCallback" namespace osgART { ARTTransformCallback::ARTTransformCallback(Marker* marker) : osg::NodeCallback(), m_marker(marker) { } /*virtual*/ void ARTTransformCallback::operator()(osg::Node* node, osg::NodeVisitor* nv) { // Make sure the visitor will return to invisible nodes // If we make this node invisible (because the marker is hidden) then // we need to be able to return and update it later, or it will remain // hidden forever. nv->setNodeMaskOverride(0xFFFFFFFF); osg::MatrixTransform* mt = dynamic_cast(node); if (mt) { if (m_marker->isValid()) { // copy matrix mt->setMatrix(m_marker->getTransform()); // Visible mt->setNodeMask(0xFFFFFFFF); } else { // Hidden mt->setNodeMask(0x0); } } // must traverse the Node's subgraph traverse(node,nv); } };