Subversion Repositories gelsvn

Rev

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

Rev 630 Rev 666
Line 166... Line 166...
166
            }
166
            }
167
        }
167
        }
168
        while(did_work);
168
        while(did_work);
169
    }
169
    }
170
    
170
    
171
    int stitch_mesh(Manifold& m)
171
    int stitch_mesh(Manifold& m, double rad)
172
    {
172
    {
173
        KDTree<Vec3d, VertexID> vtree;
173
        KDTree<Vec3d, VertexID> vtree;
174
        
174
        
175
        for(VertexIDIterator vid = m.vertices_begin(); vid != m.vertices_end(); ++vid)
175
        for(VertexIDIterator vid = m.vertices_begin(); vid != m.vertices_end(); ++vid)
176
            if(boundary(m, *vid))
176
            if(boundary(m, *vid))
Line 184... Line 184...
184
        for(VertexIDIterator vid = m.vertices_begin(); vid != m.vertices_end(); ++vid)
184
        for(VertexIDIterator vid = m.vertices_begin(); vid != m.vertices_end(); ++vid)
185
            if(boundary(m, *vid) && cluster_id[*vid] == -1)
185
            if(boundary(m, *vid) && cluster_id[*vid] == -1)
186
            {
186
            {
187
                vector<Vec3d> keys;
187
                vector<Vec3d> keys;
188
                vector<VertexID> vals;
188
                vector<VertexID> vals;
189
                int n = vtree.in_sphere(m.pos(*vid), 1e-5, keys, vals);
189
                int n = vtree.in_sphere(m.pos(*vid), rad, keys, vals);
190
                
190
                
191
                vector<HalfEdgeID> boundary_edges;
191
                vector<HalfEdgeID> boundary_edges;
192
                for(int i=0;i<n;++i)
192
                for(int i=0;i<n;++i)
193
                {
193
                {
194
                    cluster_id[vals[i]] = cluster_ctr;
194
                    cluster_id[vals[i]] = cluster_ctr;
Line 229... Line 229...
229
            }
229
            }
230
        }
230
        }
231
        return unstitched;    
231
        return unstitched;    
232
    }
232
    }
233
    
233
    
-
 
234
    void remove_valence_two_vertices(Manifold & m)
-
 
235
    {
-
 
236
        for(VertexID v: m.vertices())
-
 
237
            if(valency(m,v)==2)
-
 
238
            {
-
 
239
                Walker w = m.walker(v);
-
 
240
                if(precond_collapse_edge(m, w.halfedge()))
-
 
241
                    m.collapse_edge(w.halfedge());
-
 
242
            }
-
 
243
    }
-
 
244
    
234
    
245
    
235
    void stitch_more(Manifold& mani)
246
    void stitch_more(Manifold& mani, double rad)
236
    {
247
    {
237
        int unstitched, iter;
248
        int unstitched, iter;
238
        for(iter=0;iter<2;++iter)
249
        for(iter=0;iter<2;++iter)
239
        {
250
        {
240
            unstitched = stitch_mesh(mani);
251
            unstitched = stitch_mesh(mani, rad);
241
            if(unstitched == 0)
252
            if(unstitched == 0)
242
                break;
253
                break;
243
            
254
            
244
            vector<HalfEdgeID> hvec;
255
            vector<HalfEdgeID> hvec;
245
            for(HalfEdgeIDIterator h = mani.halfedges_begin(); h != mani.halfedges_end();++h)
256
            for(HalfEdgeIDIterator h = mani.halfedges_begin(); h != mani.halfedges_end();++h)
Line 257... Line 268...
257
        for(HalfEdgeIDIterator h =  m.halfedges_begin(); h != m.halfedges_end(); ++h){
268
        for(HalfEdgeIDIterator h =  m.halfedges_begin(); h != m.halfedges_end(); ++h){
258
            m.close_hole(*h);
269
            m.close_hole(*h);
259
        }
270
        }
260
    }
271
    }
261
    
272
    
-
 
273
    void flip_orientation(Manifold& m)
-
 
274
    {
-
 
275
        vector<Vec3d> vertices;
-
 
276
        VertexAttributeVector<int> idvec;
-
 
277
        int k=0;
-
 
278
        for(VertexID v: m.vertices()) {
-
 
279
            idvec[v] = k++;
-
 
280
            vertices.push_back(m.pos(v));
-
 
281
        }
-
 
282
        vector<int> indices;
-
 
283
        vector<int> faces;
-
 
284
        for(FaceID f: m.faces()) {
-
 
285
            faces.push_back(no_edges(m, f));
-
 
286
            circulate_face_cw(m, f, [&](VertexID v){
-
 
287
                indices.push_back(idvec[v]);
-
 
288
            });
-
 
289
        }
-
 
290
        m.clear();
-
 
291
        m.build(vertices.size(), vertices[0].get(), faces.size(), &faces[0], &indices[0]);
-
 
292
    }
-
 
293
    
262
}
294
}
263
 
295