// // Vrml 97 library // Copyright (C) 1998 Chris Morley // // %W% %G% // VrmlNodeLight.cpp #include "VrmlNodeLight.h" #include "MathUtils.h" #include "VrmlNodeType.h" // Define the built in VrmlNodeType:: "Light" fields VrmlNodeType *VrmlNodeLight::defineType(VrmlNodeType *t) { VrmlNodeChild::defineType(t); // Parent class t->addExposedField("ambientIntensity", VrmlField::SFFLOAT); t->addExposedField("color", VrmlField::SFCOLOR); t->addExposedField("intensity", VrmlField::SFFLOAT); t->addExposedField("on", VrmlField::SFBOOL); return t; } VrmlNodeType *VrmlNodeLight::nodeType() const { return defineType(0); } VrmlNodeLight::VrmlNodeLight(VrmlScene *scene) : VrmlNodeChild(scene), d_ambientIntensity(0.0), d_color(1.0, 1.0, 1.0), d_intensity(1.0), d_on(true) { } VrmlNodeLight::~VrmlNodeLight() { } VrmlNodeLight* VrmlNodeLight::toLight() const { return (VrmlNodeLight*) this; } void VrmlNodeLight::renderScoped(Viewer *) { } ostream& VrmlNodeLight::printFields(ostream& os, int indent) { if (! FPZERO(d_ambientIntensity.get())) PRINT_FIELD(ambientIntensity); if (! FPEQUAL(d_color.r(), 1.0) || ! FPEQUAL(d_color.g(), 1.0) || ! FPEQUAL(d_color.b(), 1.0) ) PRINT_FIELD(color); if (! FPEQUAL(d_intensity.get(), 1.0)) PRINT_FIELD(intensity); if (! d_on.get() ) PRINT_FIELD(on); return os; } // Set the value of one of the node fields. void VrmlNodeLight::setField(const char *fieldName, const VrmlField &fieldValue) { if TRY_FIELD(ambientIntensity, SFFloat) else if TRY_FIELD(color, SFColor) else if TRY_FIELD(intensity, SFFloat) else if TRY_FIELD(on, SFBool) else VrmlNode::setField(fieldName, fieldValue); }