core.C

Go to the documentation of this file.
00001 /*
00002  * This file is part of the "Archon" framework.
00003  * (http://files3d.sourceforge.net)
00004  *
00005  * Copyright © 2002 by Kristian Spangsege and Brian Kristiansen.
00006  *
00007  * Permission to use, copy, modify, and distribute this software and
00008  * its documentation under the terms of the GNU General Public License is
00009  * hereby granted. No representations are made about the suitability of
00010  * this software for any purpose. It is provided "as is" without express
00011  * or implied warranty. See the GNU General Public License
00012  * (http://www.gnu.org/copyleft/gpl.html) for more details.
00013  *
00014  * The characters in this file are ISO8859-1 encoded.
00015  *
00016  * The documentation in this file is in "Doxygen" style
00017  * (http://www.doxygen.org).
00018  */
00019 
00026 #include <archon/x3d/server/field_type.H>
00027 #include <archon/x3d/server/field.H>
00028 #include <archon/x3d/server/scene.H>
00029 
00030 namespace Archon
00031 {
00032   namespace X3D
00033   {
00034     const NodeType *MetadataObject::type  = 0;
00035     const NodeType *Node::type            = 0;
00036     const NodeType *ChildNode::type       = 0;
00037     const NodeType *SensorNode::type      = 0;
00038     const NodeType *MetadataDouble::type  = 0;
00039     const NodeType *MetadataFloat::type   = 0;
00040     const NodeType *MetadataInteger::type = 0;
00041     const NodeType *MetadataSet::type     = 0;
00042     const NodeType *MetadataString::type  = 0;
00043 
00044     void initializeCoreComponent()
00045     {
00046       vector<const FieldBase *> fields;
00047 
00048 
00049       // MetadataObject
00050 
00051       fields.push_back(newExposedField("name", SFString::type,
00052                                        &MetadataObject::name,
00053                                        &MetadataObject::nameChanged,
00054                                        &MetadataObject::nameStamp));
00055       fields.push_back(newExposedField("reference", SFString::type,
00056                                        &MetadataObject::reference,
00057                                        &MetadataObject::referenceChanged,
00058                                        &MetadataObject::referenceStamp));
00059       MetadataObject::type =
00060         NodeType::newAbstract("MetadataObject", false, &fields);
00061       fields.clear();
00062 
00063 
00064       // Node
00065 
00066       fields.push_back(newExposedField("metadata",
00067                                        &Node::metadata,
00068                                        &Node::metadataChanged,
00069                                        &Node::metadataStamp));
00070       Node::type =
00071         NodeType::newAbstract("Node", true, &fields);
00072       fields.clear();
00073 
00074 
00075       // ChildNode
00076 
00077       ChildNode::type =
00078         NodeType::newAbstract("ChildNode", true, 0, Node::type);
00079 
00080 
00081       // SensorNode
00082 
00083       fields.push_back(newExposedField("enabled", SFBool::type,
00084                                        &SensorNode::enabled,
00085                                        &SensorNode::enabledAssign,
00086                                        &SensorNode::enabledChanged,
00087                                        &SensorNode::enabledStamp));
00088       fields.push_back(newEventOut("isActive", SFBool::type,
00089                                    &SensorNode::isActive,
00090                                    &SensorNode::isActiveChanged));
00091       SensorNode::type =
00092         NodeType::newAbstract("SensorNode", false,
00093                               &fields, ChildNode::type);
00094       fields.clear();
00095 
00096 
00097       // MetadataDouble
00098 
00099       fields.push_back(newExposedField("value", MFDouble::type,
00100                                        &MetadataDouble::value,
00101                                        &MetadataDouble::valueChanged,
00102                                        &MetadataDouble::valueStamp));
00103       MetadataDouble::type =
00104         NodeType::newConcrete("MetadataDouble", "metadata",
00105                               MetadataDouble::instantiate, &fields,
00106                               Node::type, MetadataObject::type);
00107       fields.clear();
00108 
00109 
00110       // MetadataFloat
00111 
00112       fields.push_back(newExposedField("value", MFFloat::type,
00113                                        &MetadataFloat::value,
00114                                        &MetadataFloat::valueChanged,
00115                                        &MetadataFloat::valueStamp));
00116       MetadataFloat::type =
00117         NodeType::newConcrete("MetadataFloat", "metadata",
00118                               MetadataFloat::instantiate, &fields,
00119                               Node::type, MetadataObject::type);
00120       fields.clear();
00121 
00122 
00123       // MetadataInteger
00124 
00125       fields.push_back(newExposedField("value", MFInt32::type,
00126                                        &MetadataInteger::value,
00127                                        &MetadataInteger::valueChanged,
00128                                        &MetadataInteger::valueStamp));
00129       MetadataInteger::type =
00130         NodeType::newConcrete("MetadataInteger", "metadata",
00131                               MetadataInteger::instantiate, &fields,
00132                               Node::type, MetadataObject::type);
00133       fields.clear();
00134 
00135 
00136       // MetadataSet
00137 
00138       fields.push_back(newExposedField("value",
00139                                        &MetadataSet::value,
00140                                        &MetadataSet::valueChanged,
00141                                        &MetadataSet::valueStamp));
00142       MetadataSet::type =
00143         NodeType::newConcrete("MetadataSet", "metadata",
00144                               MetadataSet::instantiate, &fields,
00145                               Node::type, MetadataObject::type);
00146       fields.clear();
00147 
00148 
00149       // MetadataString
00150 
00151       fields.push_back(newExposedField("value", MFString::type,
00152                                        &MetadataString::value,
00153                                        &MetadataString::valueChanged,
00154                                        &MetadataString::valueStamp));
00155       MetadataString::type =
00156         NodeType::newConcrete("MetadataString", "metadata",
00157                               MetadataString::instantiate, &fields,
00158                               Node::type, MetadataObject::type);
00159       fields.clear();
00160     }
00161 
00162     bool SensorNode::enabledAssign(const bool &v, const Time &t)
00163     {
00164       enabled = v;
00165       enabledStamp = t;
00166       if(!v) onDisable();
00167       return true;
00168     }
00169 
00170     void SensorNode::onDisable()
00171     {
00172       if(!isActive) return;
00173       isActive = false;
00174       Event e(new SimpleValue<bool>(SFBool::type, isActive), enabledStamp);
00175       isActiveChanged.cascadeEvent(&e);
00176     }
00177   }
00178 }

Generated on Sun Jul 30 22:55:49 2006 for Archon by  doxygen 1.4.4