本文整理汇总了C++中XMLNode类的典型用法代码示例。如果您正苦于以下问题:C++ XMLNode类的具体用法?C++ XMLNode怎么用?C++ XMLNode使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了XMLNode类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: addChildNode
//-----------------------------------------------------------------------------
// Add child node - STRING
XMLNode XMLNode::addChildNode(string _sNodeName, string _sText)
{
XMLNode res = addChildNode(_sNodeName);
res.setContent(_sText);
return res;
}
开发者ID:mohamedadaly,项目名称:TRex,代码行数:8,代码来源:XMLNode.cpp
示例2: GetXML
bool CLyricGetter::ProcessFile(const std::string& tempFile)
{
std::string xml = "";
SallyAPI::Network::NETWORK_RETURN errorCode = GetXML(&xml);
if (errorCode != SallyAPI::Network::SUCCESS)
{
SallyAPI::System::CLogger* logger = SallyAPI::Core::CGame::GetLogger();
logger->Debug("CLyricGetter::ProcessFile::GetXML not successful");
logger->Debug(errorCode);
logger->Debug(GetRequestURL());
switch (errorCode)
{
case SallyAPI::Network::ERROR_PREPARE:
m_strErrorText = "Network preparation failed";
case SallyAPI::Network::ERROR_OPEN:
m_strErrorText = "Network open failed";
case SallyAPI::Network::ERROR_HTTP_TIMEOUT:
m_strErrorText = "HTTP Timeout";
case SallyAPI::Network::ERROR_NOTHING_READ:
m_strErrorText = "Nothing read";
default:
break;
}
return false;
}
if (xml.length() == 0)
{
m_strErrorText = "Invalide Server response";
return false;
}
SallyAPI::File::FileHelper::AddLineToFile(tempFile, xml);
if (!SallyAPI::File::FileHelper::FileExists(tempFile))
{
m_strErrorText = "Invalide Server response";
return false;
}
XMLNode xMainNode = XMLNode::parseFile(tempFile.c_str());
if (xMainNode.isEmpty())
{
m_strErrorText = "Invalide Server response";
return false;
}
XMLNode itemGetLyricResult = xMainNode.getChildNode("GetLyricResult");
if (itemGetLyricResult.isEmpty())
{
m_strErrorText = "No Lyric found";
return false;
}
XMLNode lyric = itemGetLyricResult.getChildNode("Lyric");
if (lyric.isEmpty())
{
m_strErrorText = "No Lyric found";
return false;
}
const char* lyricsText = lyric.getText();
if (lyricsText == NULL)
{
m_strErrorText = "No Lyric found";
return false;
}
SallyAPI::GUI::SendMessage::CParameterKeyValue parameter(this->GetId(), lyricsText);
m_pParent->SendMessageToParent(m_pParent, 0, GUI_APP_LYRICS_LOADED, ¶meter);
return true;
}
开发者ID:grimtraveller,项目名称:sally-project,代码行数:76,代码来源:LyricGetter.cpp
示例3: xmlParseDevice
void iLedlif::xmlParseDevice(XMLNode deviceNode) {
std::string name;
std::string deviceClass;
std::string deviceName;
std::string deviceType;
std::string devicePortName;
std::string deviceBaudRate;
std::string elementName;
std::string deviceFilePath;
std::string val;
std::string deviceFilename;
std::string helpedDevice;
std::string deviceCommType;
std::vector<lifLED*> leds;
std::vector<lifTSDIOPin*> pins;
//Variables for pin
std::string pinName;
std::string dirBase;
std::string dirOffset;
std::string valBase;
std::string valOffset;
std::string bitNum;
std::string enLow;
//Variables for LED
std::string ledName;
std::string ledWL;
std::string LEDPower;
//Start reading in device information
deviceClass = deviceNode.getChildNode("Class").getText();
deviceName = deviceNode.getChildNode("Name").getText();
deviceType = deviceNode.getChildNode("Type").getText();
deviceFilePath = deviceNode.getChildNode("Path_Name").getText();
helpedDevice = deviceNode.getChildNode("Helped_Device").getText();
//Check if there is a communication port entry for device
if (deviceNode.nChildNode("Com_Port") > 0) {
deviceCommType = deviceNode.getChildNode("Com_Port").getChildNode("Type").getText();
if (deviceCommType == "Serial") {
devicePortName = deviceNode.getChildNode("Com_Port").getChildNode("Port").getText();
std::cout << deviceName << " " << devicePortName << std::endl;
deviceBaudRate = deviceNode.getChildNode("Com_Port").getChildNode("Baud").getText();
}
}
//Load any defined pins
for (int i = 0; i < deviceNode.nChildNode("Pin"); i++) {
pinName = deviceNode.getChildNode("Pin", i).getChildNode("Name").getText();
dirBase = deviceNode.getChildNode("Pin", i).getChildNode("DirectionAddressBase").getText();
dirOffset = deviceNode.getChildNode("Pin", i).getChildNode("DirectionAddressOffset").getText();
valBase = deviceNode.getChildNode("Pin", i).getChildNode("ValueAddressBase").getText();
valOffset = deviceNode.getChildNode("Pin", i).getChildNode("ValueAddressOffset").getText();
bitNum = deviceNode.getChildNode("Pin", i).getChildNode("BitNumber").getText();
enLow = deviceNode.getChildNode("Pin", i).getChildNode("EnabledLow").getText();
pins.push_back(new lifTSDIOPin(pinName,
string2int(bitNum),
hexstring2int(dirBase),
hexstring2int(dirOffset),
hexstring2int(valBase),
hexstring2int(valOffset),
string2bool(enLow)));
}
//Load any LEDs
for (int i = 0; i < deviceNode.nChildNode("LED"); i++) {
ledName = deviceNode.getChildNode("LED", i).getChildNode("Name").getText();
ledWL = deviceNode.getChildNode("LED", i).getChildNode("Wavelength").getText();
LEDPower = deviceNode.getChildNode("LED", i).getChildNode("PowerSource").getText();
leds.push_back(new lifLED(ledName, string2int(ledWL), LEDPower));
}
//declare device
if (deviceClass == "Spectrometer") {
std::cout << "iLedlif: Starting to load Spectrometer " << deviceName << std::endl;
lifDevices.push_back((lifDevice*) (new lifSpectrometer(deviceName,
deviceType,
&mainMsgQueue,
&mainMsgMutex,
&mainMsgQueuePushed,
deviceFilePath,
devicePortName,
string2int(deviceBaudRate),
*pins.front())));
std::cout << "iLedlif: Loaded Spectrometer " << deviceName << std::endl;
} else if (deviceClass == "Main Com") {
lifDevices.push_back((lifDevice*) (new lifMainComm(deviceName,
deviceType,
&mainMsgQueue,
&mainMsgMutex,
&mainMsgQueuePushed,
devicePortName,
string2int(deviceBaudRate))));
std::cout << "iLedlif: Loaded Main Comm " << deviceName << std::endl;
//.........这里部分代码省略.........
开发者ID:schuylersg,项目名称:iledlif,代码行数:101,代码来源:iLedlif.cpp
示例4: fill_defaults
void XMLDocMerger::fill_defaults(
YangNode* ynode,
XMLNode* new_node,
XMLNode* update_node,
bool* update_required
)
{
YangNode* yn = nullptr;
XMLNode* xchild = nullptr;
for (YangNodeIter it = ynode->child_begin();
it != ynode->child_end(); ++it) {
yn = &(*it);
const char* default_val = yn->get_default_value();
if (!default_val && !yn->has_default()) {
// Only default values or containers with default leaf descendents
continue;
}
// Default values may be within a choice/case. Check if the choice has
// another case. If the same case is present
YangNode* ychoice = yn->get_choice();
YangNode* ycase = yn->get_case();
YangNode* other_choice = nullptr;
YangNode* other_case = nullptr;
bool add_default = true;
bool subtree_update = false;
if (ychoice && ycase && (ychoice->get_default_case() != ycase)) {
add_default = false;
}
for (XMLNodeIter xit = new_node->child_begin();
xit != new_node->child_end(); ++xit) {
xchild = &(*xit);
if (xchild->get_local_name() == yn->get_name() &&
xchild->get_name_space() == yn->get_ns()) {
if (yn->get_stmt_type() == RW_YANG_STMT_TYPE_CONTAINER) {
// The container has a default descendant node
XMLNode* update_child = nullptr;
bool created = false;
if ((update_child = update_node->find(
yn->get_name(), yn->get_ns())) == nullptr) {
update_child = update_node->add_child(yn);
created = true;
}
fill_defaults(yn, xchild, update_child, &subtree_update);
if (!subtree_update && created) {
update_node->remove_child(update_child);
}
*update_required = (*update_required || subtree_update);
}
// Default node already present in the new-dom
add_default = false;
break;
}
if (!ychoice) {
// Not part of a choice
continue;
}
other_choice = xchild->get_yang_node()->get_choice();
if (!other_choice || (other_choice != ychoice)) {
// Other node is not a choice, or not the same choice, not conflicting
continue;
}
other_case = xchild->get_yang_node()->get_case();
if (other_case && (ycase != other_case)) {
// There is a node with conflicting case. Hence no default
add_default = false;
break;
}
// Same case, in-case the case is not default, some-other node in the same
// case is set. Then add this default, unless the same node is found in
// the new-dom.
add_default = true;
}
if (add_default) {
XMLNode* xn = new_node->add_child(yn, default_val);
RW_ASSERT(xn);
XMLNode* un = update_node->add_child(yn, default_val);
if (yn->get_stmt_type() == RW_YANG_STMT_TYPE_CONTAINER) {
// The container has a default descendant node
fill_defaults(yn, xn, un, &subtree_update);
if (!subtree_update) {
new_node->remove_child(xn);
update_node->remove_child(un);
}
*update_required = (*update_required || subtree_update);
} else {
*update_required = true;
}
}
}
}
开发者ID:RIFTIO,项目名称:RIFT.ware,代码行数:97,代码来源:rw_xml_dom_merger.cpp
示例5: GraphicalObject
/*
* Creates a new ReactionGlyph from the given XMLNode
*/
ReactionGlyph::ReactionGlyph(const XMLNode& node, unsigned int l2version)
: GraphicalObject(node,l2version)
,mReaction ("")
,mSpeciesReferenceGlyphs(2,l2version)
,mCurve(2,l2version)
,mCurveExplicitlySet (false)
{
const XMLAttributes& attributes=node.getAttributes();
const XMLNode* child;
ExpectedAttributes ea;
addExpectedAttributes(ea);
this->readAttributes(attributes,ea);
unsigned int n=0,nMax = node.getNumChildren();
while(n<nMax)
{
child=&node.getChild(n);
const std::string& childName=child->getName();
if(childName=="curve")
{
// since the copy constructor of ListOf does not make deep copies
// of the objects, we have to add the individual curveSegments to the
// curve instead of just copying the whole curve.
Curve* pTmpCurve=new Curve(*child);
unsigned int i,iMax=pTmpCurve->getNumCurveSegments();
for(i=0;i<iMax;++i)
{
this->mCurve.addCurveSegment(pTmpCurve->getCurveSegment(i));
}
// we also have to copy mAnnotations, mNotes, mCVTerms and mHistory
if(pTmpCurve->isSetNotes()) this->mCurve.setNotes(new XMLNode(*pTmpCurve->getNotes()));
if(pTmpCurve->isSetAnnotation()) this->mCurve.setAnnotation(new XMLNode(*pTmpCurve->getAnnotation()));
if(pTmpCurve->getCVTerms()!=NULL)
{
iMax=pTmpCurve->getCVTerms()->getSize();
for(i=0;i<iMax;++i)
{
this->mCurve.getCVTerms()->add(static_cast<CVTerm*>(pTmpCurve->getCVTerms()->get(i))->clone());
}
}
delete pTmpCurve;
mCurveExplicitlySet = true;
}
else if(childName=="listOfSpeciesReferenceGlyphs")
{
const XMLNode* innerChild;
unsigned int i=0,iMax=child->getNumChildren();
while(i<iMax)
{
innerChild=&child->getChild(i);
const std::string innerChildName=innerChild->getName();
if(innerChildName=="speciesReferenceGlyph")
{
this->mSpeciesReferenceGlyphs.appendAndOwn(new SpeciesReferenceGlyph(*innerChild));
}
else if(innerChildName=="annotation")
{
this->mSpeciesReferenceGlyphs.setAnnotation(new XMLNode(*innerChild));
}
else if(innerChildName=="notes")
{
this->mSpeciesReferenceGlyphs.setNotes(new XMLNode(*innerChild));
}
else
{
// throw
}
++i;
}
}
else
{
//throw;
}
++n;
}
connectToChild();
}
开发者ID:TotteKarlsson,项目名称:roadrunner,代码行数:81,代码来源:ReactionGlyph.cpp
示例6: TEST
TEST (RwXML, Attributes)
{
XMLManager::uptr_t mgr(xml_manager_create_xerces());
TEST_DESCRIPTION ("Test Attribute support in RW XML");
XMLDocument::uptr_t doc(mgr->create_document());
ASSERT_TRUE(doc.get());
XMLNode *root = doc->get_root_node();
ASSERT_TRUE (root);
XMLNode *child_1 = root->add_child("level1_1");
ASSERT_TRUE (child_1);
XMLNode *child_2 = root->add_child("level1_2");
ASSERT_TRUE (child_2);
XMLNodeList::uptr_t list_1(doc->get_elements ("level1_1"));
ASSERT_TRUE (list_1.get());
ASSERT_EQ (1, list_1->length());
XMLNode *dup = list_1->at(0);
ASSERT_EQ (dup, child_1);
list_1 = root->get_children();
ASSERT_EQ (2, list_1->length());
XMLNode *ns_child_1 = root->add_child("level1_1", nullptr, "rwtest/NS-1", "NS1");
ASSERT_TRUE (ns_child_1);
XMLNode *ns_child_2 = root->add_child("level1_2", nullptr, "rwtest/NS-1", "NS1");
ASSERT_TRUE (ns_child_2);
list_1 = std::move(doc->get_elements ("level1_1"));
ASSERT_TRUE (list_1.get());
ASSERT_EQ (1, list_1->length());
XMLAttributeList::uptr_t list_a1(child_1->get_attributes());
ASSERT_TRUE (list_a1.get());
ASSERT_EQ (0, list_a1->length());
child_1->set_attribute("attr1", "value1");
const char *ns = "http://www.riftio.com/namespace";
child_1->set_attribute("attr2", "value2", ns, "ns");
ASSERT_TRUE (child_1->has_attributes());
ASSERT_TRUE (child_1->has_attribute("attr1"));
//XMLAttribute::uptr_t attr = std::move(child_1->get_attribute("attr1"));
//ASSERT_NE (nullptr, attr.get());
list_a1 = std::move(child_1->get_attributes());
ASSERT_TRUE (list_a1.get());
ASSERT_EQ (2, list_a1->length());
#if 0
for (uint32_t i = 0; i < list_a1->length(); i++) {
XMLAttribute *attr = list_a1->at(i);
std::cout << attr->get_node_name().c_str() << " : " << attr->get_value().c_str() << std::endl;
}
#endif
EXPECT_STREQ(list_a1->at(0)->get_local_name().c_str(), "attr1");
EXPECT_STREQ(list_a1->at(0)->get_value().c_str(), "value1");
EXPECT_STREQ(list_a1->at(1)->get_local_name().c_str(), "attr2");
EXPECT_STREQ(list_a1->at(1)->get_prefix().c_str(), "ns");
EXPECT_STREQ(list_a1->at(1)->get_text_value().c_str(), "value2");
EXPECT_STREQ(list_a1->at(1)->get_name_space().c_str(), "http://www.riftio.com/namespace");
EXPECT_STREQ(list_a1->at(1)->get_value().c_str(), "value2");
child_2->set_attribute("attr3", "value3");
child_2->set_attribute("attr4", "value4");
child_2->set_attribute("attr5", "value5");
XMLAttributeList::uptr_t list_a2(child_2->get_attributes());
ASSERT_TRUE (list_a2.get());
ASSERT_EQ (3, list_a2->length());
std::string tmp_str;
std::string exp_str = "<data xmlns=\"http://riftio.com/ns/riftware-1.0/rw-base\"><level1_1 attr1=\"value1\" xmlns:ns=\"http://www.riftio.com/namespace\" ns:attr2=\"value2\"/><level1_2 attr3=\"value3\" attr4=\"value4\" attr5=\"value5\"/><NS1:level1_1 xmlns:NS1=\"rwtest/NS-1\"/><NS1:level1_2 xmlns:NS1=\"rwtest/NS-1\"/></data>";
tmp_str = doc->to_string();
ASSERT_EQ (tmp_str, exp_str);
}
开发者ID:RIFTIO,项目名称:RIFT.ware,代码行数:80,代码来源:rwxml_test.cpp
示例7: child
// ATTN: This function seriously needs re-organization, will be done
// shortly.
rw_yang_netconf_op_status_t XMLDocMerger::do_edit(XMLNode* new_node,
XMLNode* delta_node,
XMLNode* update_node,
bool* update_required)
{
rw_yang_netconf_op_status_t status = RW_YANG_NETCONF_OP_STATUS_OK;
YangNode* ynode = new_node->get_descend_yang_node();
XMLEditDefaultOperation parent_op = current_operation_;
for(XMLNodeIter it = delta_node->child_begin();
it != delta_node->child_end(); ++it)
{
XMLNode* delta_child = &(*it);
std::string child_name = delta_child->get_local_name();
std::string child_ns = delta_child->get_name_space();
YangNode* child_ynode = ynode->search_child(child_name.c_str(),
child_ns.c_str());
if (child_ynode == nullptr) {
// Incoming node is not in our model and thus is an error
std::string const err_msg = "Cannot find child ("+child_name+") of node ("+delta_node->get_local_name()+")";
report_error(delta_node, RW_YANG_NETCONF_OP_STATUS_INVALID_VALUE, err_msg.c_str());
return RW_YANG_NETCONF_OP_STATUS_INVALID_VALUE;
}
// Set the current node operation (default=merge)
status = set_current_operation(delta_child);
if (status != RW_YANG_NETCONF_OP_STATUS_OK) {
return status;
}
bool subtree_update = false;
XMLNode* new_child = new_node->find(child_name.c_str(), child_ns.c_str());
if (new_child == nullptr) {
// Node not found in existing config, edit-config on new node
status = do_edit_new(child_ynode, new_node, delta_child,
update_node, &subtree_update);
} else {
status = do_edit_existing(child_ynode, new_node, new_child, delta_child,
update_node, &subtree_update);
}
*update_required = (*update_required || subtree_update);
if (status != RW_YANG_NETCONF_OP_STATUS_OK) {
return status;
}
current_operation_ = parent_op;
}
if (current_operation_ == XML_EDIT_OP_REPLACE) {
// Iterate thru the config dom node and find the elements not in delta
// Those are marked for deletion.
do_delete_missing(new_node, delta_node);
}
// Add defaults
fill_defaults(ynode, new_node, update_node, update_required);
if (!(*update_required)) {
// No updates on this subtree. Either it is delete/remove operation or
// the config is not changed. So remove the update subtree.
XMLNode* parent = update_node->get_parent();
if (parent) {
parent->remove_child(update_node);
}
}
if (new_node->get_first_child() == nullptr &&
ynode->get_stmt_type() == RW_YANG_STMT_TYPE_CONTAINER &&
!ynode->is_presence()) {
// No children for a non-presence container, they are only present to
// maintain hierarchy. Remove it
XMLNode* parent = new_node->get_parent();
if (parent) {
parent->remove_child(new_node);
}
}
return status;
}
开发者ID:RIFTIO,项目名称:RIFT.ware,代码行数:84,代码来源:rw_xml_dom_merger.cpp
示例8: main
int main(int argc, char **argv)
{
// run for selected COCO functions
for(uint function = 1; function < 25; function++) {
// read XML config
std::ifstream fin(argv[1]);
if (!fin) {
throw std::string("Error opening file! ");
}
std::string xmlFile, temp;
while (!fin.eof()) {
getline(fin, temp);
xmlFile += "\n" + temp;
}
fin.close();
// set log and stats parameters
std::string funcName = uint2str(function);
std::string logName = "log", statsName = "stats";
if(function < 10) {
logName += "0";
statsName += "0";
}
logName += uint2str(function) + ".txt";
statsName += uint2str(function) + ".txt";
// update in XML
XMLResults results;
XMLNode xConfig = XMLNode::parseString(xmlFile.c_str(), "ECF", &results);
XMLNode registry = xConfig.getChildNode("Registry");
XMLNode func = registry.getChildNodeWithAttribute("Entry", "key", "coco.function");
func.updateText(funcName.c_str());
XMLNode log = registry.getChildNodeWithAttribute("Entry", "key", "log.filename");
log.updateText(logName.c_str());
XMLNode stats = registry.getChildNodeWithAttribute("Entry", "key", "batch.statsfile");
stats.updateText(statsName.c_str());
// write back
std::ofstream fout(argv[1]);
fout << xConfig.createXMLString(true);
fout.close();
// finally, run ECF on single function
StateP state (new State);
//set newAlg
MyAlgP alg = (MyAlgP) new MyAlg;
state->addAlgorithm(alg);
// set the evaluation operator
state->setEvalOp(new FunctionMinEvalOp);
state->initialize(argc, argv);
state->run();
}
return 0;
}
开发者ID:alojzije,项目名称:old_ECF_algVisualization,代码行数:61,代码来源:mainSelFitOp.cpp
示例9: TrackObjectPresentationSceneNode
// ----------------------------------------------------------------------------
TrackObjectPresentationLibraryNode::TrackObjectPresentationLibraryNode(
TrackObject* parent,
const XMLNode& xml_node,
ModelDefinitionLoader& model_def_loader)
: TrackObjectPresentationSceneNode(xml_node)
{
std::string name;
xml_node.get("name", &name);
m_node = irr_driver->getSceneManager()->addEmptySceneNode();
#ifdef DEBUG
m_node->setName(("libnode_" + name).c_str());
#endif
XMLNode* libroot;
std::string lib_path =
file_manager->getAsset(FileManager::LIBRARY, name) + "/";
bool create_lod_definitions = true;
if (!model_def_loader.containsLibraryNode(name))
{
World* world = World::getWorld();
Track* track = NULL;
if (world != NULL)
track = world->getTrack();
std::string local_lib_node_path;
std::string local_script_file_path;
if (track != NULL)
{
local_lib_node_path = track->getTrackFile("library/" + name + "/node.xml");
local_script_file_path = track->getTrackFile("library/" + name + "/scripting.as");
}
std::string lib_node_path = lib_path + "node.xml";
std::string lib_script_file_path = lib_path + "scripting.as";
if (local_lib_node_path.size() > 0 && file_manager->fileExists(local_lib_node_path))
{
lib_path = track->getTrackFile("library/" + name);
libroot = file_manager->createXMLTree(local_lib_node_path);
if (track != NULL)
World::getWorld()->getScriptEngine()->loadScript(local_script_file_path, false);
}
else if (file_manager->fileExists(lib_node_path))
{
libroot = file_manager->createXMLTree(lib_node_path);
if (track != NULL)
World::getWorld()->getScriptEngine()->loadScript(lib_script_file_path, false);
}
else
{
Log::error("TrackObjectPresentationLibraryNode",
"Cannot find library '%s'", lib_node_path.c_str());
return;
}
if (libroot == NULL)
{
Log::error("TrackObjectPresentationLibraryNode",
"Cannot find library '%s'", lib_node_path.c_str());
return;
}
file_manager->pushTextureSearchPath(lib_path + "/");
file_manager->pushModelSearchPath(lib_path);
material_manager->pushTempMaterial(lib_path + "/materials.xml");
model_def_loader.addToLibrary(name, libroot);
// Load LOD groups
const XMLNode *lod_xml_node = libroot->getNode("lod");
if (lod_xml_node != NULL)
{
for (unsigned int i = 0; i < lod_xml_node->getNumNodes(); i++)
{
const XMLNode* lod_group_xml = lod_xml_node->getNode(i);
for (unsigned int j = 0; j < lod_group_xml->getNumNodes(); j++)
{
model_def_loader.addModelDefinition(lod_group_xml->getNode(j));
}
}
}
}
else
{
libroot = model_def_loader.getLibraryNodes()[name];
assert(libroot != NULL);
// LOD definitions are already created, don't create them again
create_lod_definitions = false;
}
m_node->setPosition(m_init_xyz);
m_node->setRotation(m_init_hpr);
m_node->setScale(m_init_scale);
m_node->updateAbsolutePosition();
assert(libroot != NULL);
World::getWorld()->getTrack()->loadObjects(libroot, lib_path, model_def_loader,
create_lod_definitions, m_node, parent);
m_parent = parent;
//.........这里部分代码省略.........
开发者ID:GreenLunar,项目名称:stk-code-fix_1797,代码行数:101,代码来源:track_object_presentation.cpp
示例10: CheckStructure
/** Constructor for a checkline.
* \param node XML node containing the parameters for this checkline.
* \param index Index of this check structure in the check manager.
*/
CheckLine::CheckLine(const XMLNode &node, unsigned int index)
: CheckStructure(node, index)
{
// Note that when this is called the karts have not been allocated
// in world, so we can't call world->getNumKarts()
m_previous_sign.resize(race_manager->getNumberOfKarts());
std::string p1_string("p1");
std::string p2_string("p2");
// In case of a cannon in a reverse track, we have to use the target line
// as check line
if(getType()==CT_CANNON && race_manager->getReverseTrack())
{
p1_string = "target-p1";
p2_string = "target-p2";
}
core::vector2df p1, p2;
if(node.get(p1_string, &p1) &&
node.get(p2_string, &p2) &&
node.get("min-height", &m_min_height))
{
m_left_point = Vec3(p1.X, m_min_height, p1.Y);
m_right_point = Vec3(p2.X, m_min_height, p2.Y);
}
else
{
node.get(p1_string, &m_left_point);
p1 = core::vector2df(m_left_point.getX(), m_left_point.getZ());
node.get(p2_string, &m_right_point);
p2 = core::vector2df(m_right_point.getX(), m_right_point.getZ());
m_min_height = std::min(m_left_point.getY(), m_right_point.getY());
}
m_line.setLine(p1, p2);
if(UserConfigParams::m_check_debug)
{
video::SMaterial material;
material.setFlag(video::EMF_BACK_FACE_CULLING, false);
material.setFlag(video::EMF_LIGHTING, false);
material.MaterialType = video::EMT_TRANSPARENT_ADD_COLOR;
scene::IMesh *mesh = irr_driver->createQuadMesh(&material,
/*create mesh*/true);
scene::IMeshBuffer *buffer = mesh->getMeshBuffer(0);
assert(buffer->getVertexType()==video::EVT_STANDARD);
irr::video::S3DVertex* vertices
= (video::S3DVertex*)buffer->getVertices();
vertices[0].Pos = core::vector3df(p1.X,
m_min_height-m_under_min_height,
p1.Y);
vertices[1].Pos = core::vector3df(p2.X,
m_min_height-m_under_min_height,
p2.Y);
vertices[2].Pos = core::vector3df(p2.X,
m_min_height+m_over_min_height,
p2.Y);
vertices[3].Pos = core::vector3df(p1.X,
m_min_height+m_over_min_height,
p1.Y);
for(unsigned int i=0; i<4; i++)
{
vertices[i].Color = m_active_at_reset
? video::SColor(0, 255, 0, 0)
: video::SColor(0, 128, 128, 128);
}
buffer->recalculateBoundingBox();
mesh->setBoundingBox(buffer->getBoundingBox());
m_debug_node = irr_driver->addMesh(mesh);
mesh->drop();
}
else
{
m_debug_node = NULL;
}
} // CheckLine
开发者ID:clasik,项目名称:stk-code,代码行数:77,代码来源:check_line.cpp
示例11: while
char* XMLNode::ParseDeep( char* p, StrPair* parentEnd )
{
// This is a recursive method, but thinking about it "at the current level"
// it is a pretty simple flat list:
// <foo/>
// <!-- comment -->
//
// With a special case:
// <foo>
// </foo>
// <!-- comment -->
//
// Where the closing element (/foo) *must* be the next thing after the opening
// element, and the names must match. BUT the tricky bit is that the closing
// element will be read by the child.
//
// 'endTag' is the end tag for this node, it is returned by a call to a child.
// 'parentEnd' is the end tag for the parent, which is filled in and returned.
while( p && *p ) {
XMLNode* node = 0;
p = document->Identify( p, &node );
if ( p == 0 || node == 0 ) {
break;
}
StrPair endTag;
p = node->ParseDeep( p, &endTag );
if ( !p ) {
DELETE_NODE( node );
node = 0;
if ( !document->Error() ) {
document->SetError( XML_ERROR_PARSING, 0, 0 );
}
break;
}
// We read the end tag. Return it to the parent.
if ( node->ToElement() && node->ToElement()->ClosingType() == XMLElement::CLOSING ) {
if ( parentEnd ) {
*parentEnd = static_cast<XMLElement*>(node)->value;
}
DELETE_NODE( node );
return p;
}
// Handle an end tag returned to this level.
// And handle a bunch of annoying errors.
XMLElement* ele = node->ToElement();
if ( ele ) {
if ( endTag.Empty() && ele->ClosingType() == XMLElement::OPEN ) {
document->SetError( XML_ERROR_MISMATCHED_ELEMENT, node->Value(), 0 );
p = 0;
}
else if ( !endTag.Empty() && ele->ClosingType() != XMLElement::OPEN ) {
document->SetError( XML_ERROR_MISMATCHED_ELEMENT, node->Value(), 0 );
p = 0;
}
else if ( !endTag.Empty() ) {
if ( !XMLUtil::StringEqual( endTag.GetStr(), node->Value() )) {
document->SetError( XML_ERROR_MISMATCHED_ELEMENT, node->Value(), 0 );
p = 0;
}
}
}
if ( p == 0 ) {
DELETE_NODE( node );
node = 0;
}
if ( node ) {
this->InsertEndChild( node );
}
}
return 0;
}
开发者ID:FrankEos,项目名称:Android,代码行数:76,代码来源:tinyxml2.cpp
示例12: ASTRA_ASSERT
//---------------------------------------------------------------------------------------
// Initialize - Config
bool CReconstructionAlgorithm2D::initialize(const Config& _cfg)
{
ASTRA_ASSERT(_cfg.self);
ConfigStackCheck<CAlgorithm> CC("ReconstructionAlgorithm2D", this, _cfg);
// projector
XMLNode node = _cfg.self.getSingleNode("ProjectorId");
ASTRA_CONFIG_CHECK(node, "Reconstruction2D", "No ProjectorId tag specified.");
int id = boost::lexical_cast<int>(node.getContent());
m_pProjector = CProjector2DManager::getSingleton().get(id);
CC.markNodeParsed("ProjectorId");
// sinogram data
node = _cfg.self.getSingleNode("ProjectionDataId");
ASTRA_CONFIG_CHECK(node, "Reconstruction2D", "No ProjectionDataId tag specified.");
id = boost::lexical_cast<int>(node.getContent());
m_pSinogram = dynamic_cast<CFloat32ProjectionData2D*>(CData2DManager::getSingleton().get(id));
CC.markNodeParsed("ProjectionDataId");
// reconstruction data
node = _cfg.self.getSingleNode("ReconstructionDataId");
ASTRA_CONFIG_CHECK(node, "Reconstruction2D", "No ReconstructionDataId tag specified.");
id = boost::lexical_cast<int>(node.getContent());
m_pReconstruction = dynamic_cast<CFloat32VolumeData2D*>(CData2DManager::getSingleton().get(id));
CC.markNodeParsed("ReconstructionDataId");
// fixed mask
if (_cfg.self.hasOption("ReconstructionMaskId")) {
m_bUseReconstructionMask = true;
id = boost::lexical_cast<int>(_cfg.self.getOption("ReconstructionMaskId"));
m_pReconstructionMask = dynamic_cast<CFloat32VolumeData2D*>(CData2DManager::getSingleton().get(id));
ASTRA_CONFIG_CHECK(m_pReconstructionMask, "Reconstruction2D", "Invalid ReconstructionMaskId.");
}
CC.markOptionParsed("ReconstructionMaskId");
// fixed mask
if (_cfg.self.hasOption("SinogramMaskId")) {
m_bUseSinogramMask = true;
id = boost::lexical_cast<int>(_cfg.self.getOption("SinogramMaskId"));
m_pSinogramMask = dynamic_cast<CFloat32ProjectionData2D*>(CData2DManager::getSingleton().get(id));
ASTRA_CONFIG_CHECK(m_pSinogramMask, "Reconstruction2D", "Invalid SinogramMaskId.");
}
CC.markOptionParsed("SinogramMaskId");
// Constraints - NEW
if (_cfg.self.hasOption("MinConstraint")) {
m_bUseMinConstraint = true;
m_fMinValue = _cfg.self.getOptionNumerical("MinConstraint", 0.0f);
CC.markOptionParsed("MinConstraint");
} else {
// Constraint - OLD
m_bUseMinConstraint = _cfg.self.getOptionBool("UseMinConstraint", false);
CC.markOptionParsed("UseMinConstraint");
if (m_bUseMinConstraint) {
m_fMinValue = _cfg.self.getOptionNumerical("MinConstraintValue", 0.0f);
CC.markOptionParsed("MinConstraintValue");
}
}
if (_cfg.self.hasOption("MaxConstraint")) {
m_bUseMaxConstraint = true;
m_fMaxValue = _cfg.self.getOptionNumerical("MaxConstraint", 255.0f);
CC.markOptionParsed("MaxConstraint");
} else {
// Constraint - OLD
m_bUseMaxConstraint = _cfg.self.getOptionBool("UseMaxConstraint", false);
CC.markOptionParsed("UseMaxConstraint");
if (m_bUseMaxConstraint) {
m_fMaxValue = _cfg.self.getOptionNumerical("MaxConstraintValue", 0.0f);
CC.markOptionParsed("MaxConstraintValue");
}
}
// return success
return _check();
}
开发者ID:eureka3,项目名称:astra-toolbox,代码行数:77,代码来源:ReconstructionAlgorithm2D.cpp
示例13: TrackObjectPresentation
TrackObjectPresentationSound::TrackObjectPresentationSound(const XMLNode& xml_node, scene::ISceneNode* parent) :
TrackObjectPresentation(xml_node)
{
// TODO: respect 'parent' if any
m_sound = NULL;
m_xyz = m_init_xyz;
std::string sound;
xml_node.get("sound", &sound);
float rolloff = 0.5;
xml_node.get("rolloff", &rolloff );
float volume = 1.0;
xml_node.get("volume", &volume );
bool trigger_when_near = false;
xml_node.get("play-when-near", &trigger_when_near);
float trigger_distance = 1.0f;
xml_node.get("distance", &trigger_distance);
xml_node.get("conditions", &m_trigger_condition);
float max_dist = 390.0f;
xml_node.get("max_dist", &max_dist );
// first try track dir, then global dir
std::string soundfile = file_manager->getAsset(FileManager::MODEL,sound);
if (!file_manager->fileExists(soundfile))
{
soundfile = file_manager->getAsset(FileManager::SFX, sound);
}
SFXBuffer* buffer = new SFXBuffer(soundfile,
true /* positional */,
rolloff,
max_dist,
volume);
buffer->load();
m_sound = sfx_manager->createSoundSource(buffer, true, true);
if (m_sound != NULL)
{
m_sound->position(m_init_xyz);
if (!trigger_when_near && m_trigger_condition.empty())
{
m_sound->setLoop(true);
m_sound->play();
}
}
else
{
fprintf(stderr,
"[TrackObject] Sound emitter object could not be created\n");
}
if (trigger_when_near)
{
ItemManager::get()->newItem(m_init_xyz, trigger_distance, this);
}
}
开发者ID:minghuadev,项目名称:stk-code,代码行数:62,代码来源:track_object_presentation.cpp
示例14: throw
GrandPrixData::GrandPrixData(const std::string filename) throw(std::logic_error)
{
m_filename = filename;
m_id = StringUtils::getBasename(StringUtils::removeExtension(filename));
XMLNode* root = file_manager->createXMLTree(file_manager->getAsset(FileManager::GRANDPRIX,filename));
if (!root)
{
Log::error("GrandPrixData","Error while trying to read grandprix file '%s'",
filename.c_str());
throw std::logic_error("File not found");
}
bool foundName = false;
if (root->getName() == "supertuxkart_grand_prix")
{
std::string temp_name;
if (root->get("name", &temp_name) == 0)
{
Log::error("GrandPrixData", "Error while trying to read grandprix file '%s' : "
"missing 'name' attribute\n", filename.c_str());
delete root;
throw std::logic_error("File contents are incomplete or corrupt");
}
m_name = temp_name.c_str();
foundName = true;
}
else
{
Log::error("GrandPrixData", "Error while trying to read grandprix file '%s' : "
"Root node has an unexpected name\n", filename.c_str());
delete root;
throw std::logic_error("File contents are incomplete or corrupt");
}
const int amount = root->getNumNodes();
for (int i=0; i<amount; i++)
{
const XMLNode* node = root->getNode(i);
// read a track entry
if (node->getName() == "track")
{
std::string trackID;
int numLaps;
bool reversed = false;
const int idFound = node->get("id", &trackID );
const int lapFound = node->get("laps", &numLaps );
// Will stay false if not found
node->get("reverse", &reversed );
if (!idFound || !lapFound)
{
Log::error("GrandPrixData", "Error while trying to read grandprix file '%s' : "
"<track> tag does not have idi and laps reverse attributes. \n",
filename.c_str());
delete root;
throw std::logic_error("File contents are incomplete or corrupt");
}
// Make sure the track really is reversible
Track* t = track_manager->getTrack(trackID);
if (t != NULL && reversed)
{
reversed = t->reverseAvailable();
}
m_tracks.push_back(trackID);
m_laps.push_back(numLaps);
m_reversed.push_back(reversed);
assert(m_tracks.size() == m_laps.size() );
assert(m_laps.size() == m_reversed.size());
}
else
{
std::cerr << "Unknown node in Grand Prix XML file : " << node->getName().c_str() << std::endl;
delete root;
throw std::runtime_error("Unknown node in sfx XML file");
}
}// nend for
delete root;
// sanity checks
if (!foundName)
{
Log::error("GrandPrixData", "Error while trying to read grandprix file '%s' : "
"missing 'name' attribute\n", filename.c_str());
throw std::logic_error("File contents are incomplete or corrupt");
}
}
开发者ID:Shreesha-S,项目名称:stk-code,代码行数:96,代码来源:grand_prix_data.cpp
示例15: ERRORLOG
Drumkit* Legacy::load_drumkit( const QString& dk_path ) {
if ( version_older_than( 0, 9, 8 ) ) {
ERRORLOG( QString( "this code should not be used anymore, it belongs to 0.9.6" ) );
} else {
ERRORLOG( QString( "loading drumkit with legacy code" ) );
}
XMLDoc doc;
if( !doc.read( dk_path ) ) {
return 0;
}
XMLNode root = doc.firstChildElement( "drumkit_info" );
if ( root.isNull() ) {
ERRORLOG( "drumkit_info node not found" );
return 0;
}
QString drumkit_name = root.read_string( "name", "", false, false );
if ( drumkit_name.isEmpty() ) {
ERRORLOG( "Drumkit has no name, abort" );
return 0;
}
Drumkit* drumkit = new Drumkit();
drumkit->set_path( dk_path.left( dk_path.lastIndexOf( "/" ) ) );
drumkit->set_name( drumkit_name );
drumkit->set_author( root.read_string( "author", "undefined author" ) );
drumkit->set_info( root.read_string( "info", "defaultInfo" ) );
drumkit->set_license( root.read_string( "license", "undefined license" ) );
XMLNode instruments_node = root.firstChildElement( "instrumentList" );
if ( instruments_node.isNull() ) {
WARNINGLOG( "instrumentList node not found" );
drumkit->set_instruments( new InstrumentList() );
} else {
InstrumentList* instruments = new InstrumentList();
XMLNode instrument_node = instruments_node.firstChildElement( "instrument" );
int count = 0;
while ( !instrument_node.isNull() ) {
c
|
请发表评论