Beispiel #1
0
VEF::VEF(QString *name)
{
    /* all the computation takes place here
     */

    m_nbThreads = 4;
    m_manifold = true;
    FileParser parser(this);
    parser.parseFile(name);    

    /* holes not computed */
    m_nbHoles = -1;
    m_connectedComponents = 0;


    /* fill the edge vector and compute neighborhood */
    edgeReconstruct(0);

    if (!computeFacesNormals(0))
        std::cerr<<"No normals have been computed."<<std::endl;

    if (!computeVerticesNormals(0))
        std::cerr<<"No normals have been computed."<<std::endl;

    /* create the bounding box */
    createBoundingBox();

    /* create the voxel grid */
    m_voxGrid = new VoxGrid(&m_boundingBox, this);
    computeConnectedComponents();
}
stNaiveConnectedComponentIterator *stNaiveConnectivity_getConnectedComponentIterator(stNaiveConnectivity 
		*connectivity) {
    computeConnectedComponents(connectivity);

    stNaiveConnectedComponentIterator *ret = malloc(sizeof(stNaiveConnectedComponentIterator));
    ret->cur = connectivity->connectedComponentCache;
    return ret;
}
stNaiveConnectedComponent *stNaiveConnectivity_getConnectedComponent(stNaiveConnectivity 
		*connectivity, void *node) {
    computeConnectedComponents(connectivity);

    stNaiveConnectedComponent *curComponent = connectivity->connectedComponentCache;
    while (curComponent != NULL) {
        if (stSet_search(curComponent->nodes, node)) {
            break;
        }
        curComponent = curComponent->next;
    }
    assert(curComponent != NULL);
    return curComponent;
}