Subversion Repositories gelsvn

Rev

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

Rev 631 Rev 666
Line 145... Line 145...
145
        for (VertexIDIterator vid = m.vertices_begin(); vid != m.vertices_end(); ++vid)
145
        for (VertexIDIterator vid = m.vertices_begin(); vid != m.vertices_end(); ++vid)
146
            if(vtouched[*vid] == 0)
146
            if(vtouched[*vid] == 0)
147
                m.pos(*vid) = new_pos[*vid];
147
                m.pos(*vid) = new_pos[*vid];
148
    }
148
    }
149
    
149
 
-
 
150
    void rootCC_subdivide(Manifold& m_in, Manifold& m)
-
 
151
    {
-
 
152
        if(&m != &m_in)
-
 
153
            m = m_in;
-
 
154
        
-
 
155
        VertexAttributeVector<int> vtouched(m.allocated_vertices(), 0);
-
 
156
        VertexAttributeVector<Vec3d> new_pos(m.allocated_vertices(), Vec3d(0));
-
 
157
        
-
 
158
        for (VertexIDIterator vid = m.vertices_begin(); vid != m.vertices_end(); ++vid) {
-
 
159
            int v = valency(m, *vid);
-
 
160
            double beta = (4.0 - 2.0 * cos(2.0 * M_PI / v))/(9.0*v);
-
 
161
            new_pos[*vid] = (1.0 - v * beta) * m.pos(*vid);
-
 
162
            for(Walker w = m.walker(*vid); !w.full_circle(); w = w.circulate_vertex_ccw())
-
 
163
            {
-
 
164
                new_pos[*vid] += beta * m.pos(w.vertex());
-
 
165
            }
-
 
166
        }
-
 
167
        
-
 
168
        vector<FaceID> faces;
-
 
169
        for(FaceIDIterator f = m.faces_begin(); f != m.faces_end(); ++f)
-
 
170
            faces.push_back(*f);
-
 
171
        for(int i=0;i<faces.size(); ++i)
-
 
172
            vtouched[m.split_face_by_vertex(faces[i])] = 1;
-
 
173
        
-
 
174
        for(HalfEdgeIDIterator h = m.halfedges_begin(); h != m.halfedges_end(); ++h)
-
 
175
        {
-
 
176
            Walker w = m.walker(*h);
-
 
177
            
-
 
178
            if(vtouched[w.vertex()] == 0 && vtouched[w.opp().vertex()] == 0)
-
 
179
                m.merge_faces(w.face(), *h);
-
 
180
        }
-
 
181
        
-
 
182
        for (VertexIDIterator vid = m.vertices_begin(); vid != m.vertices_end(); ++vid)
-
 
183
            if(vtouched[*vid] == 0)
-
 
184
                m.pos(*vid) = new_pos[*vid];
-
 
185
    }
-
 
186
 
150
    
187
    
151
    void butterfly_subdivide(Manifold& m_in, Manifold& m)
188
    void butterfly_subdivide(Manifold& m_in, Manifold& m)
152
    {
189
    {
153
        const float S[4][6] = {{5.0/12.0, -1.0/12.0, -1.0/12.0, 0, 0, 0},
190
        const float S[4][6] = {{5.0/12.0, -1.0/12.0, -1.0/12.0, 0, 0, 0},
154
            {3.0/8.0, 0, -1.0/8.0, 0, 0, 0},
191
            {3.0/8.0, 0, -1.0/8.0, 0, 0, 0},