Skip to content
Snippets Groups Projects

updated the circulators and iterators and included smarthandles in all of Plugin-InfoMeshObject

Closed Edwin Özdemir requested to merge updated-infoMeshObject into master
3 files
+ 44
48
Compare changes
  • Side-by-side
  • Inline
Files
3
+ 23
21
@@ -184,8 +184,8 @@ void InfoMeshObjectPlugin::printMeshInfo( MeshT* _mesh , int _id, unsigned int _
// Closest Edge Length
info_->edgeLengthLabel->setText( tr("Closest Edge Length:") );
info_->edgeLengthLabel->show();
const typename MeshT::Point from = _mesh->point(_mesh->from_vertex_handle( _mesh->halfedge_handle( _mesh->edge_handle(closestEdgeIndex),0 ) ));
const typename MeshT::Point to = _mesh->point(_mesh->to_vertex_handle( _mesh->halfedge_handle( _mesh->edge_handle(closestEdgeIndex),0 ) ));
const typename MeshT::Point from = _mesh->point(OpenMesh::SmartEdgeHandle(closestEdgeIndex, _mesh).h0().from());
const typename MeshT::Point to = _mesh->point(OpenMesh::SmartEdgeHandle(closestEdgeIndex, _mesh).h0().to());
info_->edgeLength->setText( locale.toString( (to - from).norm() ) );
info_->edgeLength->show();
@@ -193,6 +193,7 @@ void InfoMeshObjectPlugin::printMeshInfo( MeshT* _mesh , int _id, unsigned int _
typename MeshT::FaceHandle fh = _mesh->face_handle(_index);
typename MeshT::FaceVertexIter fv_it = _mesh->fv_iter(fh);
QString adjacentVertices;
if ( fv_it.is_valid() ){
@@ -229,8 +230,9 @@ void InfoMeshObjectPlugin::printMeshInfo( MeshT* _mesh , int _id, unsigned int _
// Adjacent Faces
info_->closestFaceLabel->setText( tr("Adjacent Faces:") );
info_->closestFaceLabel->show();
typename MeshT::HalfedgeHandle he1 = _mesh->halfedge_handle(_mesh->edge_handle(_index),0);
typename MeshT::HalfedgeHandle he2 = _mesh->halfedge_handle(_mesh->edge_handle(_index),1);
typename MeshT::HalfedgeHandle he1 = OpenMesh::SmartEdgeHandle(_index, _mesh).h0();
typename MeshT::HalfedgeHandle he2 = OpenMesh::SmartEdgeHandle(_index, _mesh).h1();
int fh1 = _mesh->face_handle(he1).idx();
int fh2 = _mesh->face_handle(he2).idx();
@@ -256,8 +258,10 @@ void InfoMeshObjectPlugin::printMeshInfo( MeshT* _mesh , int _id, unsigned int _
// Edge Length
info_->edgeLengthLabel->setText( tr("Edge Length:") );
info_->edgeLengthLabel->show();
const typename MeshT::Point from = _mesh->point(_mesh->from_vertex_handle( _mesh->halfedge_handle( _mesh->edge_handle(closestEdgeIndex),0 ) ));
const typename MeshT::Point to = _mesh->point(_mesh->to_vertex_handle( _mesh->halfedge_handle( _mesh->edge_handle(closestEdgeIndex),0 ) ));
const typename MeshT::Point from = _mesh->point(OpenMesh::SmartEdgeHandle(closestEdgeIndex, _mesh).h0().from());
const typename MeshT::Point to = _mesh->point(OpenMesh::SmartEdgeHandle(closestEdgeIndex, _mesh).h0().to());
info_->edgeLength->setText( locale.toString( (to - from).norm() ) );
info_->edgeLength->show();
@@ -603,17 +607,15 @@ void InfoMeshObjectPlugin::printMeshInfo( MeshT* _mesh , int _id, unsigned int _
template <class MeshT>
int InfoMeshObjectPlugin::getClosestVertexInFace(MeshT* _mesh, int _face_idx, ACG::Vec3d& _hitPoint) {
typename MeshT::FaceVertexIter fv_it;
int closest_v_idx = 0;
double dist = DBL_MAX;
ACG::Vec3d vTemp = ACG::Vec3d(0.0, 0.0, 0.0);
typename MeshT::Point p;
for (fv_it = _mesh->fv_iter(_mesh->face_handle(_face_idx)); fv_it.is_valid(); ++fv_it){
for (auto fv_it : OpenMesh::SmartFaceHandle(_face_idx, _mesh).vertices()) {
p = _mesh->point( *fv_it );
p = _mesh->point( fv_it );
// Find closest vertex to selection
vTemp = ACG::Vec3d(p[0], p[1], p[2]);
@@ -621,7 +623,7 @@ int InfoMeshObjectPlugin::getClosestVertexInFace(MeshT* _mesh, int _face_idx, AC
if (temp_dist < dist) {
dist = temp_dist;
closest_v_idx = fv_it->idx();
closest_v_idx = fv_it.idx();
}
}
@@ -642,7 +644,6 @@ int InfoMeshObjectPlugin::getClosestVertexInFace(MeshT* _mesh, int _face_idx, AC
template <class MeshT>
int InfoMeshObjectPlugin::getClosestEdgeInFace(MeshT* _mesh, int _face_idx, const ACG::Vec3d& _hitPoint) {
typename MeshT::ConstFaceHalfedgeIter fh_it;
typename MeshT::VertexHandle v1, v2;
typename MeshT::Point p1, p2;
@@ -650,10 +651,10 @@ int InfoMeshObjectPlugin::getClosestEdgeInFace(MeshT* _mesh, int _face_idx, cons
double dist = DBL_MAX;
int closest_e_handle = 0;
for (fh_it = _mesh->fh_iter(_mesh->face_handle(_face_idx)); fh_it.is_valid(); ++fh_it){
for (auto fh_it : OpenMesh::SmartFaceHandle(_face_idx, _mesh).halfedges()) {
v1 = _mesh->from_vertex_handle(*fh_it);
v2 = _mesh->to_vertex_handle(*fh_it);
v1 = _mesh->from_vertex_handle(fh_it);
v2 = _mesh->to_vertex_handle(fh_it);
p1 = _mesh->point(v1);
p2 = _mesh->point(v2);
@@ -668,6 +669,7 @@ int InfoMeshObjectPlugin::getClosestEdgeInFace(MeshT* _mesh, int _face_idx, cons
const double temp_dist = (_hitPoint - (vp1 + x * e)).length();
if (temp_dist < dist) {
closest_e_handle = fh_it.edge().idx();
dist = temp_dist;
}
}
@@ -689,16 +691,16 @@ int InfoMeshObjectPlugin::getClosestEdgeInFace(MeshT* _mesh, int _face_idx, cons
template <class MeshT>
int InfoMeshObjectPlugin::getClosestVertexFromEdge(MeshT* _mesh, int _edge_idx, ACG::Vec3d& _hitPoint) {
ACG::Vec3d toVertex = _mesh->point( _mesh->to_vertex_handle( _mesh->halfedge_handle(_mesh->edge_handle(_edge_idx),0 )) );
ACG::Vec3d fromVertex = _mesh->point( _mesh->from_vertex_handle( _mesh->halfedge_handle(_mesh->edge_handle(_edge_idx),0 )) );
ACG::Vec3d toVertex = _mesh->point(OpenMesh::SmartEdgeHandle(_edge_idx, _mesh).h0().to());
ACG::Vec3d fromVertex = _mesh->point(OpenMesh::SmartEdgeHandle(_edge_idx, _mesh).h0().from());
double distTo = (_hitPoint - toVertex ).norm();
double distFrom = (_hitPoint - fromVertex).norm();
if ( distTo > distFrom )
return _mesh->from_vertex_handle( _mesh->halfedge_handle(_mesh->edge_handle(_edge_idx),0 ) ).idx();
return OpenMesh::SmartEdgeHandle(_edge_idx, _mesh).h0().from().idx();
else
return _mesh->to_vertex_handle( _mesh->halfedge_handle(_mesh->edge_handle(_edge_idx),0 ) ).idx();
return OpenMesh::SmartEdgeHandle(_edge_idx, _mesh).h0().to().idx();
}
@@ -796,8 +798,8 @@ void InfoMeshObjectPlugin::getEdgeLengths(MeshT* _mesh, double &min, double &max
for (auto e_it : _mesh->edges())
{
typename MeshT::Scalar len = (_mesh->point(_mesh->halfedge_handle(e_it, 0).to()) -
_mesh->point(_mesh->halfedge_handle(e_it, 1).to())).norm ();
typename MeshT::Scalar len = (_mesh->point(e_it.h0().to()) -
_mesh->point(e_it.h1().to())).norm ();
if (len < min) min = len;
if (len > max) max = len;
mean += len;
Loading