/**************************************************************************\
*
* 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 SoTransformerManip SoTransformerManip.h Inventor/manips/SoTransformerManip.h
\brief The SoTransformerManip wraps an SoTransformerDragger for convenience.
\ingroup manips
The manipulator class takes care of wrapping up the
SoTransformerDragger in a simple and convenient API for the
application programmer, making it automatically surround the
geometry it influences and taking care of the book-keeping routines
for it's interaction with the relevant fields of an SoTransformation
node.
*/
#include
#include
#include
#include
#if COIN_DEBUG
#include
#endif // COIN_DEBUG
SO_NODE_SOURCE(SoTransformerManip);
// doc in super
void
SoTransformerManip::initClass(void)
{
SO_NODE_INTERNAL_INIT_CLASS(SoTransformerManip, SO_FROM_INVENTOR_1);
}
/*!
Default constructor. Allocates an SoTransformerDragger and an
SoSurroundScale node to surround the geometry within our part of the
scenegraph.
*/
SoTransformerManip::SoTransformerManip(void)
{
SO_NODE_INTERNAL_CONSTRUCTOR(SoTransformerManip);
SoTransformerDragger *dragger = new SoTransformerDragger;
this->setDragger(dragger);
SoSurroundScale *ss = (SoSurroundScale*) dragger->getPart("surroundScale", TRUE);
ss->numNodesUpToContainer = 4;
ss->numNodesUpToReset = 3;
}
/*!
Destructor.
*/
SoTransformerManip::~SoTransformerManip()
{
}
/*!
Convenience function to use the
SoTransformerDragger::isLocateHighlighting() method of the embedded
dragger. See documentation of that method.
*/
SbBool
SoTransformerManip::isLocateHighlighting(void)
{
SoDragger *dragger = this->getDragger();
if (dragger && dragger->isOfType(SoTransformerDragger::getClassTypeId())) {
return ((SoTransformerDragger*)dragger)->isLocateHighlighting();
}
#if COIN_DEBUG
SoDebugError::postWarning("SoTransformerManip::isLocateHighlighting",
"Not a valid dragger in manipulator");
#endif // debug
return FALSE;
}
/*!
Convenience function to use the
SoTransformerDragger::setLocateHighlighting() method of the embedded
dragger. See documentation of that method.
*/
void
SoTransformerManip::setLocateHighlighting(SbBool onoff)
{
SoDragger *dragger = this->getDragger();
if (dragger && dragger->isOfType(SoTransformerDragger::getClassTypeId())) {
((SoTransformerDragger*)dragger)->setLocateHighlighting(onoff);
}
else {
#if COIN_DEBUG
SoDebugError::postWarning("SoTransformerManip::setLocateHighlighting",
"Not a valid dragger in manipulator");
#endif // debug
}
}
/*!
Convenience function to use the SoTransformerDragger::unsquishKnobs()
method of the embedded dragger. See documentation of that method.
*/
void
SoTransformerManip::unsquishKnobs(void)
{
SoDragger *dragger = this->getDragger();
if (dragger && dragger->isOfType(SoTransformerDragger::getClassTypeId())) {
((SoTransformerDragger*)dragger)->unsquishKnobs();
}
else {
#if COIN_DEBUG
SoDebugError::postWarning("SoTransformerManip::setLocateHighlighting",
"Not a valid dragger in manipulator");
#endif // debug
}
}