00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
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
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
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
00076
00077 ChildNode::type =
00078 NodeType::newAbstract("ChildNode", true, 0, Node::type);
00079
00080
00081
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
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
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
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
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
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 }