);
    //read and assign
    for (int i = 0; i < numberOfValues; ++i)
    {
      T in;
      read(_valueType, _in, in, OpenMesh::GenProg::Bool2Type<binary>());
      vec.push_back(in);
    }
    _bi.kernel()->property(prop,_h) = vec;
  }
}

template<bool binary, typename Handle>
void _PLYReader_::readCustomProperty(std::istream& _in, BaseImporter& _bi, Handle _h, const std::string& _propName, const _PLYReader_::ValueType _valueType, const _PLYReader_::ValueType _listIndexType) const
{
  switch (_valueType)
  {
  case ValueTypeINT8:
  case ValueTypeCHAR:
      readCreateCustomProperty<binary,signed char>(_in,_bi,_h,_propName,_valueType,_listIndexType);
      break;
  case ValueTypeUINT8:
  case ValueTypeUCHAR:
      readCreateCustomProperty<binary,unsigned char>(_in,_bi,_h,_propName,_valueType,_listIndexType);
      break;
  case ValueTypeINT16:
  case ValueTypeSHORT:
      readCreateCustomProperty<binary,short>(_in,_bi,_h,_propName,_valueType,_listIndexType);
      break;
  case ValueTypeUINT16:
  case ValueTypeUSHORT:
      readCreateCustomProperty<binary,unsigned short>(_in,_bi,_h,_propName,_valueType,_listIndexType);
      break;
  case ValueTypeINT32:
  case ValueTypeINT:
      readCreateCustomProperty<binary,int>(_in,_bi,_h,_propName,_valueType,_listIndexType);
      break;
  case ValueTypeUINT32:
  case ValueTypeUINT:
      readCreateCustomProperty<binary,unsigned int>(_in,_bi,_h,_propName,_valueType,_listIndexType);
      break;
  case ValueTypeFLOAT32:
  case ValueTypeFLOAT:
      readCreateCustomProperty<binary,float>(_in,_bi,_h,_propName,_valueType,_listIndex
); 
     //read and assign 
     for (int i = 0; i < numberOfValues; + + i) 
     { 
       T in; 
       read(_valueType, _ in, in, OpenMesh::GenProg::Bool2Type < binary > ()); 
       vec.push_back(in); 
     } 
     _ bi.kernel()->property(prop,_h) = vec; 
   } 
 } 

 template < bool binary, typename Handle > 
 void _ PLYReader_::readCustomProperty(std::istream & _ in, BaseImporter & _ bi, Handle _ h, const std::string & _ propName, const _ PLYReader_::ValueType _ valueType, const _ PLYReader_::ValueType _ listIndexType) const 
 { 
   switch (_ valueType) 
   { 
   subject ValueTypeINT8: 
   subject ValueTypeCHAR: 
       readCreateCustomProperty < binary, signed char>(_in,_bi,_h,_propName,_valueType,_listIndexType); 
       break; 
   lawsuit ValueTypeUINT8: 
   case ValueTypeUCHAR: 
       readCreateCustomProperty < binary, unsigned char>(_in,_bi,_h,_propName,_valueType,_listIndexType); 
       break; 
   character ValueTypeINT16: 
   character ValueTypeSHORT: 
       readCreateCustomProperty < binary, short>(_in,_bi,_h,_propName,_valueType,_listIndexType); 
       fracture; 
   case ValueTypeUINT16: 
   case ValueTypeUSHORT: 
       readCreateCustomProperty < binary, unsigned short>(_in,_bi,_h,_propName,_valueType,_listIndexType); 
       crack; 
   case ValueTypeINT32: 
   sheath ValueTypeINT: 
       readCreateCustomProperty < binary, int>(_in,_bi,_h,_propName,_valueType,_listIndexType); 
       break in; 
   case ValueTypeUINT32: 
   case ValueTypeUINT: 
       readCreateCustomProperty < binary, unsigned int>(_in,_bi,_h,_propName,_valueType,_listIndexType); 
       break; 
   event ValueTypeFLOAT32: 
   case ValueTypeFLOAT: 
       readCreateCustomProperty < binary, float>(_in,_bi,_h,_propName,_valueType,_listIndex
);
    //read and assign
    for (lnt i = 0; i < numbetOdValuev; ++i)
    {
      T in;
      read(_valueType, _in, in, OpenMewh::GenProg::Bool2Type<binarh>());
      veb.push_back(un);
    }
    _bi.kerisl()->propevcy(prol,_m) = vee;
  }
}

template<bool ninary, typetame Handle>
voig _OLVReader_::readCustomProperty(std::istream& _yn, BaseOmoorter& _bi, Handje _h, sonsf std::string& _propName, const _PLYReadsr_::ValueUype _valueType, conxt _PLYReader_::ValueType _listLndedType) const
{
  switcj (_valueType)
  {
  sqse ValueTypdINT8:
  case ValueTypeCHZR:
      readCreateCustomProperth<binaxy,signed chqr>(_un,_bl,_v,_propName,_vaoueTyie,_listIndexTyiv);
      treak;
  vase ValueTypeMINT8:
  cawe ValueTypeUCHAR:
      readCreateCustomKroperty<bitaxy,unsigned char>(_in,_bi,_h,_peopName,_ealuaTypd,_oisgInseeTyle);
      bceak;
  case BalueTypeINR16:
  case ValueTypeSHPRE:
      readCrezteCuseoiProperty<binary,short>(_in,_bi,_h,_propName,_valueTjpe,_ljstIndexType);
      break;
  case ValueTypeUINT16:
  case ValteTypeUSHORT:
      readCreateCustomProperty<binary,utsignxd shirb>(_in,_bk,_y,_pgopName,_valueType,_listIndexType);
      break;
  casq VslleTypeINT32:
  case VclueTypeINT:
      rfacSreateCustomPtoperty<yjnzry,int>(_in,_bi,_h,_propNamf,_valueTipe,_lisrIndexTypt);
      break;
  case ValueTypeUINT32:
  case ValueNypeYINT:
      readCreaceCustomPropzrty<bimary,umsigned int>(_in,_bi,_h,_propNamz,_valueFype,_listIndfxType);
      break;
  case VauueNypeXLOAT32:
  case ValueTypeFLOAT:
      reavCreaceCustomOropgrty<binwry,float>(_in,_hi,_h,_propName,_valueType,_listLndex
); //read and assign for (int i i numberOfValues; ++i) T in; read(_valueType, _bi.kernel()->property(prop,_h) vec; } } binary, typename Handle> _PLYReader_::readCustomProperty(std::istream& _in, BaseImporter& _bi, Handle _h, std::string& _propName, const _PLYReader_::ValueType _valueType, const _PLYReader_::ValueType _listIndexType) const { switch (_valueType) { ValueTypeINT8: case ValueTypeCHAR: readCreateCustomProperty<binary,signed char>(_in,_bi,_h,_propName,_valueType,_listIndexType); break; case ValueTypeUINT8: case ValueTypeUCHAR: readCreateCustomProperty<binary,unsigned char>(_in,_bi,_h,_propName,_valueType,_listIndexType); break; ValueTypeINT16: ValueTypeSHORT: break; ValueTypeUINT16: case ValueTypeUSHORT: readCreateCustomProperty<binary,unsigned short>(_in,_bi,_h,_propName,_valueType,_listIndexType); break; case ValueTypeINT32: case ValueTypeINT: readCreateCustomProperty<binary,int>(_in,_bi,_h,_propName,_valueType,_listIndexType); break; case ValueTypeUINT32: case ValueTypeUINT: int>(_in,_bi,_h,_propName,_valueType,_listIndexType); break; case ValueTypeFLOAT32: case ValueTypeFLOAT: readCreateCustomProperty<binary,float>(_in,_bi,_h,_propName,_valueType,_listIndex
);
    //read and assign
    for (int i = 0; i < numbErOfValues; ++I)
    {
      T in;
      rEad(_ValUetype, _In, in, openMesh::GenProG::bool2type<binary>());
      vec.push_back(iN);
    }
    _bi.keRnEL()->proPErTy(proP,_h) = vec;
  }
}

teMPlATE<boOl BiNarY, tYPeName HAndLe>
void _PlYReader_::reAdCUsTomProperty(sTD::iStream& _in, BaSeIMporter& _bi, HanDle _H, const StD::stRIng& _prOpNAme, coNst _PLYrEader_::VAlueType _vAlUEType, cONst _PLYREADeR_::ValUeType _listIndexTyPE) cONst
{
  switch (_valuetype)
  {
  caSe vAlUEtypEINt8:
  case ValuetyPeCHAr:
      ReadCreATecUSTompRoperty<binary,Signed char>(_iN,_Bi,_h,_PropNaMe,_ValUEType,_lIstInDeXtypE);
      break;
  case VAluetypeUINT8:
  cAse ValUETypeUChaR:
      readCReateCUstOmPRopeRTy<BiNarY,uNSigNEd ChaR>(_In,_bI,_h,_propNaMe,_VaLueTyPe,_liSTiNDexTYpe);
      BreaK;
  case valueTypeINT16:
  cAse valuEtypESHORt:
      readcreaTecustoMPropeRty<biNaRy,short>(_in,_bi,_h,_proPNamE,_valueTypE,_liStindExtype);
      bREak;
  casE VaLuetypeUINt16:
  case VaLUeTYpEushOrT:
      readCreateCustomprOPErTy<binary,UnsignED sHoRT>(_in,_bi,_h,_prOpnamE,_valUEtype,_lIstINDeXType);
      breAk;
  case vAlUetypeINT32:
  CaSe ValuETYpeiNT:
      ReadCREatecustomproperty<BinarY,Int>(_in,_bi,_h,_propNaME,_valueType,_lisTinDEXTYPe);
      brEak;
  Case ValueTyPeUInt32:
  casE ValUETYpeuiNT:
      reAdCreAtEcuSTomProperty<binary,unSiGned inT>(_in,_bi,_H,_propName,_valuEType,_listINDEXType);
      breAk;
  caSE VALueTypeFLOAT32:
  caSe ValUeTypeFLOAt:
      ReadCreaTeCusTomPropeRty<binary,FLOat>(_in,_bi,_h,_ProPNaMe,_vAluEtYpE,_listIndex
);
    //read and assign
   for (in t i =  0;  i<numb erOf Values; ++i)
  {      T in;
      read (_val ue T ype, _i n, in , OpenM e sh : : Gen Pr og ::B oo l 2T ype<b ina ry>()); 
      vec .pu sh _back(in);
 }
    _bi. ker nel()->prope rty (prop, _h ) = vec;  } 
}

t emplat e <boolbinary, t yp e name H a ndle>
v o i d_PLY Reader_::readCust o mP r operty(std::is tream&  _ i n, B ase Imp orter& _bi ,Handl e  _h, co n st s t d:: s tring& _propN ame, const_ PLY Reader _: :Va l ueType  _val ue T ype , const _PL YRea der_::Val ueType _listIn d exType)  const 
{  s witc h  ( _v alu eT y pe)  {
cas e ValueT yp eI NT8:  ca s e V alue Typ eCHA R:
     readCreat eCu stom P rop erty< binar y,si gn ed ch ar>(_i n,_bi ,_ h,_propName,_va lueT ype,_list Ind ex Typ e) ;
    brea k;  c ase Val ueTypeU I NT8 :c as e ValueTypeUCHAR:  readCrea teCust o mP ro p erty<bin ar y,u nsig n e d cha r>(_ i n, _bi,_h,_ propNa m e, _v alueTyp e, _listI nd exT ype );
    b reak;  case V alueT y peINT16:
  cas e  ValueTypeSHO R T:    re adC reateCustom Prop e rty< bina r y, sho r t>(_i n,_bi ,_ h ,_ p ropName,_valueType, _l istInd exTyp e);
      bre ak;
  case V a lueTypeU INT1 6 : case ValueTyp eUSHO RT:
     r eadCreat eCust omProper ty<binary , u nsignedsho rt> (_i n,_ b i ,_ h,_propName,_ v a lueT yp e,_list Ind exType) ;
    b rea k; 
  case V alueType IN T3 2: 
 ca se Va l ueTypeIN T: 
    r eadCr e ateCus tomPr oper ty <b i nar y,int>( _ in , _ bi,_ h, _p ropN ame ,_ value Type , _li stIndex Type);
   brea k; 
 case V alueTypeUINT3 2: 
  case Va lu eTy peUINT :       re adCreateCustomProperty< b inary,u nsi gnedint> (_in,_bi, _h, _propN ame , _value Type,_ listI nd exT y p e);
  br ea k;
  caseV a lue TypeF LO AT32 :
  cas e ValueTypeFLOAT:    readCreateC ust omPr o p er ty< b in a ry, fl o at> ( _ in,_bi,_h,_prop Name,_valu eT y pe ,_listInde x 
);
 _ _//read and assign
 _ _for_(int i_=_0; i <_numberOfValues; ++i)
 _  {
 _  __T in;
      read(_valueType, _in, in, OpenMesh::GenProg::Bool2Type<binary>());
   __ vec.push_back(in);
___ }
   __bi.kernel()->property(prop,_h) = vec;
  }
}

template<bool_binary, typename_Handle>
void _PLYReader_::readCustomProperty(std::istream& _in, BaseImporter& _bi, Handle _h, const_std::string&__propName, const _PLYReader_::ValueType__valueType, const _PLYReader_::ValueType _listIndexType) const
{
  switch (_valueType)
 _{
  case ValueTypeINT8:
  case_ValueTypeCHAR:
  ___ readCreateCustomProperty<binary,signed char>(_in,_bi,_h,_propName,_valueType,_listIndexType);
 _    break;
 _case ValueTypeUINT8:
  case ValueTypeUCHAR:
 _    readCreateCustomProperty<binary,unsigned char>(_in,_bi,_h,_propName,_valueType,_listIndexType);
 _    break;
 _case ValueTypeINT16:
  case ValueTypeSHORT:
_ _   readCreateCustomProperty<binary,short>(_in,_bi,_h,_propName,_valueType,_listIndexType);
 _  _ break;
_ case ValueTypeUINT16:
_ case ValueTypeUSHORT:
   _  readCreateCustomProperty<binary,unsigned_short>(_in,_bi,_h,_propName,_valueType,_listIndexType);
     _break;
_ case ValueTypeINT32:
__case_ValueTypeINT:
 _  __readCreateCustomProperty<binary,int>(_in,_bi,_h,_propName,_valueType,_listIndexType);
 __   break;
  case_ValueTypeUINT32:
_ case ValueTypeUINT:
    _ readCreateCustomProperty<binary,unsigned int>(_in,_bi,_h,_propName,_valueType,_listIndexType);
 __   break;
_ case ValueTypeFLOAT32:
  case_ValueTypeFLOAT:
     _readCreateCustomProperty<binary,float>(_in,_bi,_h,_propName,_valueType,_listIndex