int DirScaner::run() { int retVal; bool reRun = false; do { retVal = startProcesses(); syslog(LOG_INFO, "[run] retval %d\n", retVal); if (retVal >= 0) // если мы потомок { bool isInit = true; int status = 0; while(true) { status = scanDir(m_buffer[retVal].dirName.c_str(), isInit); if(status) break; if(isInit) { syslog(LOG_INFO, "[run] initial map successfull\n"); isInit = false; } if(g_destroySelf) { exit(0); } sleep(m_buffer[retVal-1].mTime); } return status; } else if(retVal == -1){ // бесконечный цикл работы while(true) { pause(); if(g_destroySelf) { destroyAllChildren(); exit(0); } if(g_reloadCfg){ destroyAllChildren(); loadConfig(); g_reloadCfg = false; reRun = true; break; } } } } while(reRun); return retVal; }
//! //! Processes the node's input data to generate the node's output table. //! void Model2SceneNode::processScene() { // load the input vtk parameter VTKTableParameter * inputParameter = dynamic_cast<VTKTableParameter*>(getParameter(m_inputVTKTableParameterName)); if (!inputParameter || !inputParameter->isConnected()) return; // get the source parameter (output of source node) connected to the input parameter VTKTableParameter * sourceParameter = dynamic_cast<VTKTableParameter*>(inputParameter->getConnectedParameter()); inputParameter->setVTKTable(sourceParameter->getVTKTable()); vtkTable * xyzTable = inputParameter->getVTKTable(); if (!m_sceneNode) createSceneNode(); if (!m_entity || !xyzTable || !m_sceneNode) return; //Get columns named "NodeID", "X", "Y" and "Z" vtkIdTypeArray *colNodeId = dynamic_cast<vtkIdTypeArray*>(xyzTable->GetColumnByName("NodeId")); vtkDoubleArray *colX = dynamic_cast<vtkDoubleArray*>(xyzTable->GetColumnByName("X")); vtkDoubleArray *colY = dynamic_cast<vtkDoubleArray*>(xyzTable->GetColumnByName("Y")); vtkDoubleArray *colZ = dynamic_cast<vtkDoubleArray*>(xyzTable->GetColumnByName("Z")); destroyAllAttachedMovableObjects(m_sceneNode); destroyAllChildren(m_sceneNode); Ogre::String idPrefix(QString(m_name + ":").toStdString()); Ogre::SceneManager *sceneManager = OgreManager::getSceneManager(); for (int i=0; i<xyzTable->GetNumberOfRows(); i++) { int colIDValue = colNodeId->GetValue(i); Ogre::String nodeID(idPrefix + Ogre::StringConverter::toString(colIDValue)); // create new scene node for each item Ogre::SceneNode *sceneItem = sceneManager->createSceneNode(nodeID); // create new entity for each item Ogre::Entity *entityItem = m_entity->clone(nodeID); sceneItem->attachObject(entityItem); double x = colX->GetValue(i); double y = colY->GetValue(i); double z = colZ->GetValue(i); sceneItem->setPosition(Ogre::Real(x), Ogre::Real(y), Ogre::Real(z)); sceneItem->setScale(m_size); m_sceneNode->addChild(sceneItem); } }