Subversion Repositories gelsvn

Rev

Rev 39 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 39 Rev 62
Line 102... Line 102...
102
					// To see the effectivenes of the scheme, we can create 
102
					// To see the effectivenes of the scheme, we can create 
103
					// Random errors for comparison. Uncomment to use:
103
					// Random errors for comparison. Uncomment to use:
104
					// 			float e0 = time_stamp + rand()/float(RAND_MAX);//q.error(v0);
104
					// 			float e0 = time_stamp + rand()/float(RAND_MAX);//q.error(v0);
105
					// 			float e1 = time_stamp + rand()/float(RAND_MAX);//q.error(v1);
105
					// 			float e1 = time_stamp + rand()/float(RAND_MAX);//q.error(v1);
106
 
106
 
107
					Vec3f v0 = he->vert->get_pos();
107
					Vec3f v0 = he->vert->pos;
108
					Vec3f v1 = he->opp->vert->get_pos();
108
					Vec3f v1 = he->opp->vert->pos;
109
					float e0 = q.error(v0);
109
					float e0 = q.error(v0);
110
					float e1 = q.error(v1);
110
					float e1 = q.error(v1);
111
		
111
		
112
					if(e0 < e1)
112
					if(e0 < e1)
113
						{
113
						{
Line 185... Line 185...
185
									halfedge_vec[he->opp->next->next->touched].halfedge_removed();
185
									halfedge_vec[he->opp->next->next->touched].halfedge_removed();
186
								}
186
								}
187
 
187
 
188
							// Do collapse
188
							// Do collapse
189
							m.collapse_halfedge(v,he,false);
189
							m.collapse_halfedge(v,he,false);
190
							n->set_pos(simplify_rec.opt_pos);
190
							n->pos = simplify_rec.opt_pos;
191
							qem_vec[n->touched] = q;
191
							qem_vec[n->touched] = q;
192
						
192
						
193
							put_onering_in_queue(n);
193
							put_onering_in_queue(n);
194
							return 1;
194
							return 1;
195
						}
195
						}
Line 207... Line 207...
207
				halfedge_vec[i].he = he;
207
				halfedge_vec[i].he = he;
208
		
208
		
209
			// For all vertices, compute quadric and store in qem_vec
209
			// For all vertices, compute quadric and store in qem_vec
210
			for(VertexIter vi=m.vertices_begin(); vi != m.vertices_end(); ++vi)
210
			for(VertexIter vi=m.vertices_begin(); vi != m.vertices_end(); ++vi)
211
				{
211
				{
212
					Vec3d p(vi->get_pos());
212
					Vec3d p(vi->pos);
213
					QEM q;
213
					QEM q;
214
					for(VertexCirculator vc(vi); !vc.end(); ++vc)
214
					for(VertexCirculator vc(vi); !vc.end(); ++vc)
215
						{
215
						{
216
							FaceIter f = vc.get_face();
216
							FaceIter f = vc.get_face();
217
							if(f != NULL_FACE_ITER)
217
							if(f != NULL_FACE_ITER)
218
								{
218
								{
219
									Vec3d n(get_normal(f));
219
									Vec3d n(normal(f));
220
									double a = get_area(f);
220
									double a = area(f);
221
									q += QEM(p, n, a / 3.0);
221
									q += QEM(p, n, a / 3.0);
222
								}
222
								}
223
						}
223
						}
224
					qem_vec[vi->touched] = q;
224
					qem_vec[vi->touched] = q;
225
				}
225
				}