Пример #1
0
void Graph::linkTo(Graph::node_ptr a, Graph::node_ptr b)
{
	Edge edge = {a, b, 0};

	edges.push_back(edge);

	a->edges.push_back(&edges.back());
}
Пример #2
0
bool EdgeCollector::extractBoundaryEdgeloop(EdgeList & el, Edgeloop & edgeloop)
{
    if (el.empty()) return false;


    osg::ref_ptr<Edge> current = el.back();
    el.pop_back();

    // ** init the Edgeloop
    edgeloop._edgeList.push_back(current.get());



    bool done = false;
    while (!done)
    {
        bool found = false;
        EdgeList::iterator it = el.begin(), end = el.end();
        while (it != end && !found)
        {
            if (current->endConnected(*(it->get())))
            {
                found = true;
            }
            else
            {
                ++it;
            }
        }

        if (!found)
        {
            OSG_WARN << "extractBoundaryEdgeloop : unable to close edge loop" << std::endl;
            return false;
        }
        else
        {
            edgeloop._edgeList.push_back(it->get());
            current = it->get();
            el.erase(it);

            if (edgeloop.isClosed()) done = true;
        }
    }
    return true;
}