fill_props.hh 2.99 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
#ifndef FILL_PROPS_HH
#define FILL_PROPS_HH

#include <OpenMesh/Core/Utils/Property.hh>
#include "int2roman.hh"


template <typename Mesh>
bool 
fill_props( Mesh& _m, OpenMesh::VPropHandleT<float> _ph, bool _check=false)
{
  float  v;
  static float a[9] = { 1.1f, 2.2f, 3.3f, 4.4f, 5.5f, 6.6f, 7.7f, 8.8f, 9.9f };

  for(typename Mesh::VertexIter it=_m.vertices_begin(); 
      it != _m.vertices_end(); ++it)
  {
    v = a[it.handle().idx()%9];
    if ( _check && !(_m.property( _ph, it ) == v) )
      return false;
    else  
      _m.property( _ph, it ) = v;
  }
  return true;
}


template <typename Mesh>
bool 
fill_props( Mesh& _m, OpenMesh::EPropHandleT<bool> _ph, bool _check=false )
{
  size_t n;
  bool   v;
  for( typename Mesh::EdgeIter it=_m.edges_begin();
       it != _m.edges_end(); ++it)
  {
    n = it.handle().idx();
    v = ((n&(n-1))==0); // true for 0,1,2,4,8,..

    if (_check && _m.property( _ph, it ) != v)
    {
      std::cout << "    eprop_bool: " << n << " -> " 
                << _m.property(_ph, it ) << " != " << v << std::endl;
      return false;
    }
    else
    {
      _m.property( _ph, it ) = v;
      std::cout << "    eprop_bool: " << n << " -> " << v << std::endl;
    }
  }
  return true;
}



template <typename Mesh>
bool 
fill_props(Mesh& _m, OpenMesh::FPropHandleT<std::string> _ph, bool _check=false)
{
  int  n;
  for( typename Mesh::FaceIter it=_m.faces_begin();
       it != _m.faces_end(); ++it)
  {
    n = it.handle().idx();
    _m.property( _ph, it ) = int2roman(++n);
  }
  return true;
}


template <typename Mesh, typename T>
bool 
fill_props( Mesh& _m, OpenMesh::HPropHandleT<T> _ph, bool _check=false)
{
  int  n;
  T    v;  
  static float a[9] = { 1.1f, 2.2f, 3.3f, 4.4f, 5.5f, 6.6f, 7.7f, 8.8f, 9.9f };
  static float b[9] = { 2.2f, 3.3f, 4.4f, 5.5f, 6.6f, 7.7f, 8.8f, 9.9f, 1.1f };
  static float c[9] = { 3.3f, 4.4f, 5.5f, 6.6f, 7.7f, 8.8f, 9.9f, 1.1f, 2.2f };
  static float d[9] = { 4.4f, 5.5f, 6.6f, 7.7f, 8.8f, 9.9f, 1.1f, 2.2f, 3.3f };
  static double values[9] = { 0.1, 0.02, 0.003, 0.0004, 0.00005, 0.000006,
                              0.0000007, 0.00000008, 0.000000009 };

  for( typename Mesh::HalfedgeIter it=_m.halfedges_begin();
       it != _m.halfedges_end(); ++it)
  {
    n = it.handle().idx();

Jan Möbius's avatar
Jan Möbius committed
90 91
//    v = it.handle().idx()+1; // ival
//    v = values[n%9];         // dval
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
    v = ((n&(n-1))==0);      // bval
    v.vec4fval[0] = a[n%9];
    v.vec4fval[1] = b[n%9];
    v.vec4fval[2] = c[n%9];
    v.vec4fval[3] = d[n%9];

    if ( _check && _m.property( _ph, it ) != v )
      return false;
    else
      _m.property( _ph, it ) = v;
  }
  return true;
}

template <typename Mesh, typename T>
bool 
fill_props( Mesh& _m, OpenMesh::MPropHandleT<T> _ph, bool _check=false)
{
  size_t idx;
  for( typename Mesh::FaceIter it=_m.faces_begin(); it != _m.faces_end(); ++it)
  {
    idx = it.handle().idx();
    if ( _check && _m.property( _ph )[int2roman(idx+1)] != idx )
      return false;
    else
      _m.property( _ph )[int2roman(idx+1)] = idx;
  }
  return true;
}


#endif