Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

X3DComposedGeometryNode.cpp

Go to the documentation of this file.
00001 #include "X3DComposedGeometryNode.h"
00002 #include "RenderingNodes.h"
00003 
00004 #include <iostream>
00005 
00006 using namespace X3DTK;
00007 using namespace std;
00008 
00009 X3DComposedGeometryNode::X3DComposedGeometryNode()
00010 : X3DGeometry3DNode(), color_(0), coord_(0), normal_(0), texCoord_(0), ccw_(true), colorPerVertex_(true), normalPerVertex_(true), solid_(true)
00011 {
00012   defineTagName("X3DComposedGeometryNode");
00013 }
00014 
00015 X3DComposedGeometryNode::X3DComposedGeometryNode(const X3DColorNode *color, const X3DCoordinateNode *coord, const X3DNormalNode *normal, const X3DTextureCoordinateNode *texCoord, SFBool ccw, SFBool colorPerVertex, SFBool normalPerVertex, SFBool solid)
00016 : X3DGeometry3DNode(), color_((SFNode)color), coord_((SFNode)coord), normal_((SFNode)normal), texCoord_((SFNode)texCoord), ccw_(ccw), colorPerVertex_(colorPerVertex), normalPerVertex_(normalPerVertex), solid_(solid)
00017 {
00018   defineTagName("X3DComposedGeometryNode");
00019 }
00020 
00021            
00022 X3DComposedGeometryNode::X3DComposedGeometryNode(const X3DComposedGeometryNode &N)
00023 : X3DGeometry3DNode(N), color_(N.color_), coord_(N.coord_), normal_(N.normal_), texCoord_(N.texCoord_), ccw_(N.ccw_), colorPerVertex_(N.colorPerVertex_), normalPerVertex_(N.normalPerVertex_), solid_(N.solid_)
00024 {
00025   defineTagName("X3DComposedGeometryNode");
00026 }
00027 
00028 SFNode X3DComposedGeometryNode::clone() const
00029 {
00030   return 0;
00031 }
00032 
00033 X3DComposedGeometryNode::~X3DComposedGeometryNode()
00034 {
00035 }
00036 
00037 void X3DComposedGeometryNode::setColor(const X3DColorNode *color)
00038 {
00039   removeLink(this, color_);
00040   color_ = (SFNode)color;
00041   addLink(this, color_);
00042 }
00043 
00044 void X3DComposedGeometryNode::setCoord(const X3DCoordinateNode *coord)
00045 {
00046   removeLink(this, coord_);
00047   coord_ = (SFNode)coord;
00048   addLink(this, coord_);
00049 }
00050 
00051 void X3DComposedGeometryNode::setNormal(const X3DNormalNode *normal)
00052 {
00053   removeLink(this, normal_);
00054   normal_ = (SFNode)normal;
00055   addLink(this, normal_);
00056 }
00057 
00058 void X3DComposedGeometryNode::setTexCoord(const X3DTextureCoordinateNode *texCoord)
00059 {
00060   removeLink(this, texCoord_);
00061   texCoord_ = (SFNode)texCoord;
00062   addLink(this, texCoord_);
00063 }
00064 
00065 void X3DComposedGeometryNode::setCcw(SFBool ccw)
00066 {
00067   ccw_= ccw;
00068 }
00069 
00070 void X3DComposedGeometryNode::setColorPerVertex(SFBool colorPerVertex)
00071 {
00072   colorPerVertex_ = colorPerVertex;
00073 }
00074 
00075 void X3DComposedGeometryNode::setNormalPerVertex(SFBool normalPerVertex)
00076 {
00077   normalPerVertex_ = normalPerVertex;
00078 }
00079 
00080 void X3DComposedGeometryNode::setSolid(SFBool solid)
00081 {
00082   solid_ = solid;
00083 }
00084 
00085 bool X3DComposedGeometryNode::addChild(const SFNode &N)
00086 {
00087   if (dynamic_cast<X3DColorNode *>(N) != 0)
00088   {
00089     if (color_ != 0)
00090       return false;
00091     
00092     setColor(static_cast<X3DColorNode *>(N)); 
00093     return true;
00094   }
00095   
00096   if (dynamic_cast<X3DCoordinateNode *>(N) != 0)
00097   {
00098     if (coord_ != 0)
00099       return false;
00100       
00101     setCoord(static_cast<X3DCoordinateNode *>(N));
00102     return true;    
00103   }
00104   
00105   if (dynamic_cast<X3DNormalNode *>(N) != 0)
00106   {
00107     if (normal_ != 0)
00108       return false;
00109       
00110     setNormal(static_cast<X3DNormalNode *>(N));   
00111     return true;
00112   }
00113   
00114   if (dynamic_cast<X3DNode *>(N) != 0)
00115   {
00116     if (texCoord_ != 0)
00117       return false;
00118     
00119     setTexCoord(static_cast<X3DTextureCoordinateNode *>(N));   
00120     return true;    
00121   }
00122   return false;
00123 }
00124 
00125 bool X3DComposedGeometryNode::setChild(const SFNode &N)
00126 {
00127   if (dynamic_cast<X3DColorNode *>(N) != 0)
00128   {
00129     setColor(static_cast<X3DColorNode *>(N)); 
00130     return true;
00131   }
00132   
00133   if (dynamic_cast<X3DCoordinateNode *>(N) != 0)
00134   {
00135     setCoord(static_cast<X3DCoordinateNode *>(N));
00136     return true;    
00137   }
00138   
00139   if (dynamic_cast<X3DNormalNode *>(N) != 0)
00140   {
00141     setNormal(static_cast<X3DNormalNode *>(N));  
00142     return true;
00143   }
00144   
00145   if (dynamic_cast<X3DTextureCoordinateNode *>(N) != 0)
00146   {
00147     setTexCoord(static_cast<X3DTextureCoordinateNode *>(N));
00148     return true;    
00149   }
00150   
00151   cerr << "X3DComposedGeometryNode::addChild : a node of type " << N->getTypeName() << " cannot be a child!" << endl;
00152   return false;
00153 }
00154 
00155 bool X3DComposedGeometryNode::removeChild(const SFNode &N)
00156 {
00157   if (color_ == N)
00158   {
00159     setColor(0);
00160     return true;
00161   } 
00162    
00163   if (coord_ == N)
00164   {
00165     setCoord(0);
00166     return true;
00167   } 
00168 
00169   if (normal_ == N)
00170   {
00171     setNormal(0);
00172     return true;
00173   } 
00174    
00175   if (texCoord_ == N)
00176   {
00177     setTexCoord(0);
00178     return true;
00179   } 
00180   
00181   cerr << "X3DComposedGeometryNode::removeChild : a node of type " << N->getTypeName() << " cannot be a child!" << endl;
00182   return false;
00183 }
00184 
00185 void X3DComposedGeometryNode::loadAttributes(const X3DFileElement *element)
00186 {
00187   int index;
00188   index = element->getIndexAttribute("ccw");
00189   if (index != -1)
00190     ccw_ = (element->getAttribute(index).upper() == "TRUE");
00191   
00192   index = element->getIndexAttribute("colorPerVertex");  
00193   if (index != -1)
00194     colorPerVertex_ = (element->getAttribute(index).upper() == "TRUE");  
00195 
00196   index = element->getIndexAttribute("normalPerVertex");
00197   if (index != -1)
00198     normalPerVertex_ = (element->getAttribute(index).upper() == "TRUE");  
00199   
00200   index = element->getIndexAttribute("solid");  
00201   if (index != -1)
00202     solid_ = (element->getAttribute(index).upper() == "TRUE");
00203 }
00204 
00205 SFString X3DComposedGeometryNode::writeAttributes() const
00206 {
00207   SFString attr;
00208   if (!ccw_)
00209     attr += " ccw=\"FALSE\"";
00210   if (!colorPerVertex_)  
00211     attr += " colorPerVertex=\"FALSE\"";
00212   if (!normalPerVertex_)
00213     attr += " normalPerVertex=\"FALSE\"";
00214   if (!solid_)  
00215     attr += " solid=\"FALSE\"";  
00216   
00217   return attr;
00218 }
00219 
00220 void X3DComposedGeometryNode::removeScenesToChildren(const MFScene &sceneList)
00221 {
00222   removeScenes(color_, sceneList);
00223   removeScenes(coord_, sceneList);
00224   removeScenes(normal_, sceneList);
00225   removeScenes(texCoord_, sceneList);
00226 }
00227 
00228 void X3DComposedGeometryNode::addScenesToChildren(const MFScene &sceneList)
00229 {
00230   addScenes(color_, sceneList);
00231   addScenes(coord_, sceneList);
00232   addScenes(normal_, sceneList);
00233   addScenes(texCoord_, sceneList);
00234 }

Generated on Wed May 14 10:03:12 2003 for X3DToolKit by doxygen1.3