// // Vrml 97 library // Copyright (C) 1998 Chris Morley // // %W% %G% // VrmlNodeIndexedSet.cpp #include "VrmlNodeIndexedSet.h" #include "VrmlNodeType.h" // Define the built in VrmlNodeType:: "Indexed*Set" fields VrmlNodeType *VrmlNodeIndexedSet::defineType(VrmlNodeType *t) { VrmlNodeGeometry::defineType(t); // Parent class t->addEventIn("set_colorIndex", VrmlField::MFINT32); t->addEventIn("set_coordIndex", VrmlField::MFINT32); t->addExposedField("color", VrmlField::SFNODE); t->addExposedField("coord", VrmlField::SFNODE); t->addField("colorIndex", VrmlField::MFINT32); t->addField("colorPerVertex", VrmlField::SFBOOL); t->addField("coordIndex", VrmlField::MFINT32); return t; } VrmlNodeIndexedSet::VrmlNodeIndexedSet(VrmlScene *scene) : VrmlNodeGeometry(scene), d_colorPerVertex(true) { } VrmlNodeIndexedSet::~VrmlNodeIndexedSet() { } bool VrmlNodeIndexedSet::isModified() const { return ( d_modified || (d_color.get() && d_color.get()->isModified()) || (d_coord.get() && d_coord.get()->isModified()) ); } void VrmlNodeIndexedSet::clearFlags() { VrmlNode::clearFlags(); if (d_color.get()) d_color.get()->clearFlags(); if (d_coord.get()) d_coord.get()->clearFlags(); } void VrmlNodeIndexedSet::addToScene( VrmlScene *s, const char *rel ) { d_scene = s; if (d_color.get()) d_color.get()->addToScene(s, rel); if (d_coord.get()) d_coord.get()->addToScene(s, rel); } void VrmlNodeIndexedSet::copyRoutes( VrmlNamespace *ns ) const { VrmlNode::copyRoutes(ns); if (d_color.get()) d_color.get()->copyRoutes(ns); if (d_coord.get()) d_coord.get()->copyRoutes(ns); } ostream& VrmlNodeIndexedSet::printFields(ostream& os, int indent) { if (d_color.get()) PRINT_FIELD(color); if (d_colorIndex.size() > 0) PRINT_FIELD(colorIndex); if (! d_colorPerVertex.get()) PRINT_FIELD(colorPerVertex); if (d_coord.get()) PRINT_FIELD(coord); if (d_coordIndex.size() > 0) PRINT_FIELD(coordIndex); return os; } VrmlNodeColor *VrmlNodeIndexedSet::color() { return d_color.get() ? d_color.get()->toColor() : 0; } VrmlNode* VrmlNodeIndexedSet::getCoordinate() { return d_coord.get(); } const VrmlMFInt& VrmlNodeIndexedSet::getCoordIndex() const { return d_coordIndex; } const VrmlMFInt& VrmlNodeIndexedSet::getColorIndex() const // LarryD Feb 18/99 { return d_colorIndex; } // Set the value of one of the node fields. void VrmlNodeIndexedSet::setField(const char *fieldName, const VrmlField &fieldValue) { if TRY_SFNODE_FIELD(color, Color) else if TRY_FIELD(colorIndex, MFInt) else if TRY_FIELD(colorPerVertex, SFBool) else if TRY_SFNODE_FIELD(coord, Coordinate) else if TRY_FIELD(coordIndex, MFInt) else VrmlNodeGeometry::setField(fieldName, fieldValue); }