Subversion Repositories gelsvn

Rev

Rev 630 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 630 Rev 631
Line 17... Line 17...
17
    using namespace std;
17
    using namespace std;
18
 
18
 
19
    float average_edge_length(const Manifold& m)
19
    float average_edge_length(const Manifold& m)
20
    {
20
    {
21
        float lsum = 0;
21
        float lsum = 0;
22
        for(HalfEdgeIDIterator h = m.halfedges_begin(); h != m.halfedges_end(); ++h)
22
        for(auto h : m.halfedges())
23
            lsum += length(m, *h);
23
            lsum += length(m, h);
24
        return lsum / m.no_halfedges();
24
        return lsum / m.no_halfedges();
25
    }
25
    }
26
 
26
 
27
    int refine_edges(Manifold& m, float t)
27
    int refine_edges(Manifold& m, float t)
28
    {
28
    {
29
        int work = 0;
-
 
30
       
-
 
31
        vector<HalfEdgeID> hedges;
29
        vector<HalfEdgeID> hedges;
32
        hedges.reserve(m.no_halfedges());
30
        hedges.reserve(m.no_halfedges());
33
        copy(m.halfedges_begin(), m.halfedges_end(), back_inserter(hedges));
31
        copy(m.halfedges_begin(), m.halfedges_end(), back_inserter(hedges));
34
 
32
 
35
        HalfEdgeAttributeVector<int> touched(m.allocated_halfedges(), 0);
33
        HalfEdgeAttributeVector<int> touched(m.allocated_halfedges(), 0);
36
 
34
 
37
        cout << "Refining edges";
35
        int work = 0;
38
        for(vector<HalfEdgeID>::iterator h = hedges.begin(); h != hedges.end(); ++h){
36
        for(HalfEdgeID h : hedges){
39
            Walker w = m.walker(*h);
37
            Walker w = m.walker(h);
40
 
38
 
41
            if(!m.in_use(*h) || w.face() == InvalidFaceID || length(m, *h) < t || touched[*h])
39
            if(!m.in_use(h) || w.face() == InvalidFaceID || length(m, h) < t || touched[h])
42
                continue;
40
                continue;
43
 
-
 
44
            ++work;
-
 
45
            if( work % 10000 == 0)
-
 
46
                cout << ".";
-
 
47
 
-
 
48
            touched[w.opp().halfedge()] = 1;
41
            touched[w.opp().halfedge()] = 1;
49
//            VertexID v = m.split_edge(*h);
42
            m.split_edge(h);
50
 
-
 
51
//            Walker wv = m.walker(v);
43
            ++work;
52
 
-
 
53
//            FaceID f1 = wv.opp().face();
-
 
54
           // if(f1 != InvalidFaceID)
-
 
55
             //   m.split_face_by_vertex(f1);
-
 
56
 
-
 
57
//            FaceID f2 =  wv.prev().face();
-
 
58
           // if(f2 != InvalidFaceID)
-
 
59
            //    m.split_face_by_vertex(f2);
-
 
60
 
-
 
61
        }
44
        }
62
        cout << endl;
-
 
63
        return work;
45
        return work;
64
    }
46
    }
65
 
47
 
66
}
48
}