예제 #1
0
void CDebugDrawer::draw()
{
	unsigned int i;
	CNode *node;

	m_debugShader->bind();
	m_debugShapes->bind();

	for(i = 0; i < m_partitioner->m_visiblePropNodes.size(); i++)
	{
		node = m_partitioner->m_visiblePropNodes[i];
		node->drawDebug(m_debugShapes);
	}

	for(i = 0; i < m_partitioner->m_visibleLightNodes.size(); i++)
	{
		node = m_partitioner->m_visibleLightNodes[i];
		node->drawDebug(m_debugShapes);
	}

	for(i = 0; i < m_partitioner->m_visibleLogicNodes.size(); i++)
	{
		node = m_partitioner->m_visibleLogicNodes[i];
		node->drawDebug(m_debugShapes);
	}

	m_pickShader->bind();

	glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_fboId);

	glDrawBuffers(1, m_fboDrawBuffers);
	glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	for(i = 0; i < m_partitioner->m_visiblePropNodes.size(); i++)
	{
		node = m_partitioner->m_visiblePropNodes[i];
		CShaderResource::glslSendInt("id", node->getId());
		node->drawDebug(m_debugShapes);
	}

	for(i = 0; i < m_partitioner->m_visibleLightNodes.size(); i++)
	{
		node = m_partitioner->m_visibleLightNodes[i];
		CShaderResource::glslSendInt("id", node->getId());
		node->drawDebug(m_debugShapes);
	}

	for(i = 0; i < m_partitioner->m_visibleLogicNodes.size(); i++)
	{
		node = m_partitioner->m_visibleLogicNodes[i];
		CShaderResource::glslSendInt("id", node->getId());
		node->drawDebug(m_debugShapes);
	}

	glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
}
예제 #2
0
CNode *CNetwork::findNode(int id)
{
    // find the node id in the node list
    bool found = false;
    CNode *node = NULL;
    POSITION pos = m_node_list.GetHeadPosition();
    while ((pos != NULL) && (!found))
    {
        node = m_node_list.GetNext(pos);
        found = node->getId() == id;
    }
    if (found)
        return node;
    else
        return NULL;
}
예제 #3
0
bool CEditorEngine::toolsIsSelected(int id)
{
	CNode *node;
	std::vector<CNode *>::iterator it = m_selectedNodes.begin();

	while(it != m_selectedNodes.end())
	{
		node = *it;

		if(node && node->getId() == id)
		{
			return true;
		}

		it++;
	}

	return false;
}
예제 #4
0
void CEditorEngine::toolsUnselect(int id)
{
	CNode *node;
	std::vector<CNode *>::iterator it = m_selectedNodes.begin();

	while(it != m_selectedNodes.end())
	{
		node = *it;

		if(node && node->getId() == id)
		{
			node->setSelected(false);
			m_selectedNodes.erase(it);
			break;
		}

		it++;
	}
}
예제 #5
0
std::list<CNodeChangeInfo> CEditorEngine::deleteSelectedNodes()
{
	int id;
	CNode *node;
	std::list<CNodeChangeInfo> changes;

	while(m_selectedNodes.size() > 0)
	{
		node = m_selectedNodes.front();

		if(node)
		{
			changes.push_back(CNodeChangeInfo(node, CNodeChangeInfo::ENCIT_REMOVED));
			id = node->getId();
			toolsUnselect(id);
            m_activeScene->deleteNode(id);
		}
	}

	return changes;
}
예제 #6
0
void CNetwork::getNodes(FILE *file)
{
    if (is_log_active && log_level == 2)
    {
        sprintf(out_buf, "Parsing %s ...", "nodes");
        OutputString(out_buf, strlen(out_buf), SIM_COLOR_RGB, RTE_MESSAGE_RGB);
    }
    // get the node information from the TRAF file and create the node list
    char line[81] = { '\0' };
    int card_type = 0;
    CNode *node = NULL;
    POSITION pos = NULL;
    int  node_id = 0;
    char node_ids[5] = { '\0' };
    char control_type[2] = { '\0' };
    char x_pos[7] = { '\0' };
    char y_pos[7] = { '\0' };
    // read data records from the TRAF file
    while (!feof(file))
    {
        // read a line of the file
        card_type = readTRFLine(file, line);
        // parse the line based on its card type
        if (card_type == 36 || card_type == 43)
        {
            // first, extract the node id
            strncpy_s(node_ids, line, 4);
            node_ids[4] = '\0';
            node_id = atoi(node_ids);
            // second, determine if this node is under external control
            strncpy_s(control_type, line + 76, 1);
            control_type[1] = '\0';
            if (node_id < 9000)
            {
                // create a node object
                if (node_id > 8000)
                {
                    node = new CNode(node_id, "source"); // source node
                }
                else
                {
                    if ((control_type[0] == '2') || (control_type[0] == '3'))
                    {
                        // node is controlled by algorithm external to corsim
                        node = new CNode(node_id, "external");
                    }
                    else
                    {
                        // node is controlled by corsim
                        node = new CNode(node_id, "corsim");
                    }
                }
                m_node_list.AddTail(node);
            }
        }
        else if (card_type == 195)
        {
            // first, get the node id
            strncpy_s(node_ids, line, 4);
            node_ids[4] = '\0';
            node_id = atoi(node_ids);
            // second, extract the node coordinates
            strncpy_s(x_pos, line + 6, 6);
            x_pos[6] = '\0';
            strncpy_s(y_pos, line + 14, 6);
            y_pos[6] = '\0';
            // search the node list for the corresponding node object and set its node coordinates
            pos = m_node_list.GetHeadPosition();
            while (pos != NULL)
            {
                node = m_node_list.GetNext(pos);
                if (node->getId() == node_id)
                {
                    node->setLocation(atoi(x_pos), atoi(y_pos));
                }
            }
        }
    }
    // assign the corsim internal id to each node
    int inode_id = 0;
    bool found;
    pos = m_node_list.GetHeadPosition();
    while (pos != NULL)
    {
        inode_id = 0;
        found = false;
        node = m_node_list.GetNext(pos);
        while ((inode_id < IMXNOD) && (!found))
        {
            if (node->getId() == net_node_num[inode_id])
            {
                found = true;
                node->setCorsimId(inode_id);
            }
            inode_id++;
        }
    }
}
CNode *CDefaultPartitioner::removeNode(const int id)
{
	ENodeType type;
	CNode *current;
	CNode *node = CPartitioner::removeNode(id);

	if(node)
	{
		type = node->getType();

		if(type & PROP_BIT)
		{
			for(std::vector<CPropNode *>::iterator it = m_visiblePropNodes.begin(); it != m_visiblePropNodes.end(); it++)
			{
				current = *it;
				if(current && current->getId() == id)
				{
					m_visiblePropNodes.erase(it);
					break;
				}
			}
		}
		else if(type & LOGIC_BIT)
		{
			for(std::vector<CLogicNode *>::iterator it = m_visibleLogicNodes.begin(); it != m_visibleLogicNodes.end(); it++)
			{
				current = *it;
				if(current && current->getId() == id)
				{
					m_visibleLogicNodes.erase(it);
					break;
				}
			}
		}
		else if(type == ENT_LIGHT)
		{
			for(std::vector<CLightNode *>::iterator it = m_visibleLightNodes.begin(); it != m_visibleLightNodes.end(); it++)
			{
				current = *it;
				if(current && current->getId() == id)
				{
					m_visibleLightNodes.erase(it);
					break;
				}
			}
		}

		else if(type == ENT_MAP)
		{
			for(std::vector<CMapNode *>::iterator it = m_visibleMapNodes.begin(); it != m_visibleMapNodes.end(); it++)
			{
				current = *it;
				if(current && current->getId() == id)
				{
					m_visibleMapNodes.erase(it);
					break;
				}
			}
		}
	}

	return node;
}