/**************************************************************************\ * * This file is part of the Coin 3D visualization library. * Copyright (C) 1998-2007 by Systems in Motion. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * ("GPL") version 2 as published by the Free Software Foundation. * See the file LICENSE.GPL at the root directory of this source * distribution for additional information about the GNU GPL. * * For using Coin with software that can not be combined with the GNU * GPL, and for taking advantage of the additional benefits of our * support services, please contact Systems in Motion about acquiring * a Coin Professional Edition License. * * See http://www.coin3d.org/ for more information. * * Systems in Motion, Postboks 1283, Pirsenteret, 7462 Trondheim, NORWAY. * http://www.sim.no/ sales@sim.no coin-support@coin3d.org * \**************************************************************************/ /*! \class SoTextureCoordinateBinding SoTextureCoordinateBinding.h Inventor/nodes/SoTextureCoordinateBinding.h \brief The SoTextureCoordinateBinding class says how texture coordinates should be bound to shapes. \ingroup nodes SoTextureCoordinateBinding binds current coordinates to subsequent shapes by using either per vertex or per indexed vertex binding. FILE FORMAT/DEFAULTS: \code TextureCoordinateBinding { value PER_VERTEX_INDEXED } \endcode */ // ************************************************************************* #include #include #include #include // ************************************************************************* /*! \enum SoTextureCoordinateBinding::Binding The binding types available for the SoTextureCoordinateBinding::value field. */ /*! \var SoTextureCoordinateBinding::Binding SoTextureCoordinateBinding::PER_VERTEX Get a new texture coordinate from the pool of texture coordinates for each vertex of the shape. Texture Coordinates are fetched from index 0 and onwards, incrementing the index into the texture coordinates pool by 1 for each new vertex of the shape node. */ /*! \var SoTextureCoordinateBinding::Binding SoTextureCoordinateBinding::PER_VERTEX_INDEXED Get a new texture coordinate from the pool of texture coordinates for each vertex of the shape. Texture coordinates are fetched by the index value settings of the shape. */ /*! \var SoTextureCoordinateBinding::Binding SoTextureCoordinateBinding::DEFAULT Obsolete value, please don't use. */ /*! \var SoSFEnum SoTextureCoordinateBinding::value Type of texturemap binding for subsequent shape nodes in the scenegraph. Default field value is SoTextureCoordinateBinding::PER_VERTEX_INDEXED. */ // ************************************************************************* SO_NODE_SOURCE(SoTextureCoordinateBinding); /*! Constructor. */ SoTextureCoordinateBinding::SoTextureCoordinateBinding(void) { SO_NODE_INTERNAL_CONSTRUCTOR(SoTextureCoordinateBinding); SO_NODE_ADD_FIELD(value, (SoTextureCoordinateBinding::PER_VERTEX_INDEXED)); SO_NODE_DEFINE_ENUM_VALUE(Binding, PER_VERTEX); SO_NODE_DEFINE_ENUM_VALUE(Binding, PER_VERTEX_INDEXED); SO_NODE_DEFINE_ENUM_VALUE(Binding, DEFAULT); SO_NODE_SET_SF_ENUM_TYPE(value, Binding); } /*! Destructor. */ SoTextureCoordinateBinding::~SoTextureCoordinateBinding() { } // Documented in superclass. void SoTextureCoordinateBinding::initClass(void) { SO_NODE_INTERNAL_INIT_CLASS(SoTextureCoordinateBinding, SO_FROM_INVENTOR_1); SO_ENABLE(SoGLRenderAction, SoTextureCoordinateBindingElement); SO_ENABLE(SoPickAction, SoTextureCoordinateBindingElement); SO_ENABLE(SoCallbackAction, SoTextureCoordinateBindingElement); } // Documented in superclass. void SoTextureCoordinateBinding::GLRender(SoGLRenderAction * action) { SoTextureCoordinateBinding::doAction(action); } // Documented in superclass. void SoTextureCoordinateBinding::doAction(SoAction *action) { if (!value.isIgnored()) SoTextureCoordinateBindingElement::set(action->getState(), this, (SoTextureCoordinateBindingElement::Binding)value.getValue()); } // Documented in superclass. void SoTextureCoordinateBinding::callback(SoCallbackAction *action) { SoTextureCoordinateBinding::doAction(action); } // Documented in superclass. void SoTextureCoordinateBinding::pick(SoPickAction *action) { SoTextureCoordinateBinding::doAction(action); } // Documented in superclass. SbBool SoTextureCoordinateBinding::readInstance(SoInput * in, unsigned short flags) { SbBool ret = inherited::readInstance(in, flags); if (ret) { // test for obsolete values if (this->value.getValue() < 2) { this->value = PER_VERTEX_INDEXED; } } return ret; }