Go to the documentation of this file.00001
00063 using namespace OpenMesh;
00064 using namespace Decimator;
00065
00066 template<typename MeshT>
00067 void ModNormalQuadricT<MeshT>::initialize()
00068 {
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086 using OpenMesh::Geometry::Quadricd;
00087 if (!quadrics_.is_valid())
00088 Base::mesh().add_property( quadrics_ );
00089
00090 typename Mesh::VertexIter v_it = Base::mesh().vertices_begin();
00091 typename Mesh::VertexIter v_end = Base::mesh().vertices_end();
00092
00093 for (; v_it!=v_end; ++v_it)
00094 Base::mesh().property(quadrics_, v_it).clear();
00095
00096 typename Mesh::FaceIter f_it = Base::mesh().faces_begin();
00097 typename Mesh::FaceIter f_end = Base::mesh().faces_end();
00098 typename Mesh::FaceVertexIter fv_it;
00099 typename Mesh::VertexHandle vh0, vh1, vh2;
00100 Vec4f n;
00101
00102 for (; f_it!=f_end; ++f_it)
00103 {
00104 fv_it = Base::mesh().fv_iter(f_it.handle());
00105 for (int i=0; i<3; ++i, ++fv_it)
00106 {
00107 vh0 = fv_it.handle();
00108 n = Base::mesh().property(normals_, vh0);
00109 Base::mesh().property(quadrics_, vh0) += Quadricd(n);
00110 }
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129 }
00130 }
00131
00132 template<typename MeshT>
00133 void ModNormalQuadricT<MeshT>::set_error_tolerance_factor(double _factor)
00134 {
00135 if (this->is_binary()) {
00136 if (_factor >= 0.0 && _factor <= 1.0) {
00137
00138
00139
00140 double max_err = max_err_ * _factor / this->error_tolerance_factor_;
00141 set_max_err(max_err);
00142 this->error_tolerance_factor_ = _factor;
00143
00144 initialize();
00145 }
00146 }
00147 }
00148
00149 }
00150 }
00151