50 #ifndef OPENMESH_BASE_KERNEL_HH
51 #define OPENMESH_BASE_KERNEL_HH
57 #include <OpenMesh/Core/System/config.h>
63 #include <OpenMesh/Core/Utils/PropertyContainer.hh>
134 vprops_.resize(n_vertices());
141 hprops_.resize(n_halfedges());
148 eprops_.resize(n_edges());
155 fprops_.resize(n_faces());
180 template <
typename T>
188 template <
typename T>
196 template <
typename T>
204 template <
typename T>
212 template <
typename T>
237 const std::string& _name)
const
244 const std::string& _name)
const
251 const std::string& _name)
const
258 const std::string& _name)
const
265 const std::string& _name)
const
288 return vprops_.property(_ph);
292 return vprops_.property(_ph);
297 return hprops_.property(_ph);
301 return hprops_.property(_ph);
306 return eprops_.property(_ph);
310 return eprops_.property(_ph);
315 return fprops_.property(_ph);
319 return fprops_.property(_ph);
324 return mprops_.property(_ph);
328 return mprops_.property(_ph);
342 typename VPropHandleT<T>::reference
344 return vprops_.property(_ph)[_vh.
idx()];
348 typename VPropHandleT<T>::const_reference
350 return vprops_.property(_ph)[_vh.
idx()];
355 typename HPropHandleT<T>::reference
357 return hprops_.property(_ph)[_hh.
idx()];
361 typename HPropHandleT<T>::const_reference
363 return hprops_.property(_ph)[_hh.
idx()];
368 typename EPropHandleT<T>::reference
370 return eprops_.property(_ph)[_eh.
idx()];
374 typename EPropHandleT<T>::const_reference
376 return eprops_.property(_ph)[_eh.
idx()];
381 typename FPropHandleT<T>::reference
383 return fprops_.property(_ph)[_fh.
idx()];
387 typename FPropHandleT<T>::const_reference
389 return fprops_.property(_ph)[_fh.
idx()];
394 typename MPropHandleT<T>::reference
396 return mprops_.property(_ph)[0];
400 typename MPropHandleT<T>::const_reference
402 return mprops_.property(_ph)[0];
419 vprops_.property(_ph)[_vh_from.
idx()] = vprops_.property(_ph)[_vh_from.
idx()];
431 hprops_.property(_ph)[_hh_from.
idx()] = hprops_.property(_ph)[_hh_from.
idx()];
443 eprops_.property(_ph)[_eh_from.
idx()] = eprops_.property(_ph)[_eh_from.
idx()];
455 fprops_.property(_ph)[_fh_from.
idx()] = fprops_.property(_ph)[_fh_from.
idx()];
471 for( PropertyContainer::iterator p_it = vprops_.begin();
472 p_it != vprops_.end(); ++p_it) {
476 if ( _copyBuildIn || (*p_it)->name().substr(0,2) !=
"v:")
477 (*p_it)->copy(_vh_from.
idx(), _vh_to.
idx());
490 for( PropertyContainer::iterator p_it = hprops_.begin();
491 p_it != hprops_.end(); ++p_it) {
495 if ( _copyBuildIn || (*p_it)->name().substr(0,2) !=
"h:")
496 (*p_it)->copy(_hh_from.
idx(), _hh_to.
idx());
508 for( PropertyContainer::iterator p_it = eprops_.begin();
509 p_it != eprops_.end(); ++p_it) {
513 if ( _copyBuildIn || (*p_it)->name().substr(0,2) !=
"e:")
514 (*p_it)->copy(_eh_from.
idx(), _eh_to.
idx());
528 for( PropertyContainer::iterator p_it = fprops_.begin();
529 p_it != fprops_.end(); ++p_it) {
533 if ( _copyBuildIn || (*p_it)->name().substr(0,2) !=
"f:")
534 (*p_it)->copy(_fh_from.
idx(), _fh_to.
idx());
543 size_t n_vprops(
void)
const {
return vprops_.size(); }
545 size_t n_eprops(
void)
const {
return eprops_.size(); }
547 size_t n_hprops(
void)
const {
return hprops_.size(); }
549 size_t n_fprops(
void)
const {
return fprops_.size(); }
551 size_t n_mprops(
void)
const {
return mprops_.size(); }
553 BaseProperty* _get_vprop(
const std::string& _name)
554 {
return vprops_.property(_name); }
556 BaseProperty* _get_eprop(
const std::string& _name)
557 {
return eprops_.property(_name); }
559 BaseProperty* _get_hprop(
const std::string& _name)
560 {
return hprops_.property(_name); }
562 BaseProperty* _get_fprop(
const std::string& _name)
563 {
return fprops_.property(_name); }
565 BaseProperty* _get_mprop(
const std::string& _name)
566 {
return mprops_.property(_name); }
568 const BaseProperty* _get_vprop(
const std::string& _name)
const
569 {
return vprops_.property(_name); }
571 const BaseProperty* _get_eprop(
const std::string& _name)
const
572 {
return eprops_.property(_name); }
574 const BaseProperty* _get_hprop(
const std::string& _name)
const
575 {
return hprops_.property(_name); }
577 const BaseProperty* _get_fprop(
const std::string& _name)
const
578 {
return fprops_.property(_name); }
580 const BaseProperty* _get_mprop(
const std::string& _name)
const
581 {
return mprops_.property(_name); }
583 BaseProperty& _vprop(
size_t _idx ) {
return vprops_._property( _idx ); }
584 BaseProperty& _eprop(
size_t _idx ) {
return eprops_._property( _idx ); }
585 BaseProperty& _hprop(
size_t _idx ) {
return hprops_._property( _idx ); }
586 BaseProperty& _fprop(
size_t _idx ) {
return fprops_._property( _idx ); }
587 BaseProperty& _mprop(
size_t _idx ) {
return mprops_._property( _idx ); }
589 const BaseProperty& _vprop(
size_t _idx )
const
590 {
return vprops_._property( _idx ); }
591 const BaseProperty& _eprop(
size_t _idx )
const
592 {
return eprops_._property( _idx ); }
593 const BaseProperty& _hprop(
size_t _idx )
const
594 {
return hprops_._property( _idx ); }
595 const BaseProperty& _fprop(
size_t _idx )
const
596 {
return fprops_._property( _idx ); }
597 const BaseProperty& _mprop(
size_t _idx )
const
598 {
return mprops_._property( _idx ); }
600 size_t _add_vprop( BaseProperty* _bp ) {
return vprops_._add( _bp ); }
601 size_t _add_eprop( BaseProperty* _bp ) {
return eprops_._add( _bp ); }
602 size_t _add_hprop( BaseProperty* _bp ) {
return hprops_._add( _bp ); }
603 size_t _add_fprop( BaseProperty* _bp ) {
return fprops_._add( _bp ); }
604 size_t _add_mprop( BaseProperty* _bp ) {
return mprops_._add( _bp ); }
608 BaseProperty& _vprop( BaseHandle _h )
609 {
return vprops_._property( _h.idx() ); }
610 BaseProperty& _eprop( BaseHandle _h )
611 {
return eprops_._property( _h.idx() ); }
612 BaseProperty& _hprop( BaseHandle _h )
613 {
return hprops_._property( _h.idx() ); }
614 BaseProperty& _fprop( BaseHandle _h )
615 {
return fprops_._property( _h.idx() ); }
616 BaseProperty& _mprop( BaseHandle _h )
617 {
return mprops_._property( _h.idx() ); }
619 const BaseProperty& _vprop( BaseHandle _h )
const
620 {
return vprops_._property( _h.idx() ); }
621 const BaseProperty& _eprop( BaseHandle _h )
const
622 {
return eprops_._property( _h.idx() ); }
623 const BaseProperty& _hprop( BaseHandle _h )
const
624 {
return hprops_._property( _h.idx() ); }
625 const BaseProperty& _fprop( BaseHandle _h )
const
626 {
return fprops_._property( _h.idx() ); }
627 const BaseProperty& _mprop( BaseHandle _h )
const
628 {
return mprops_._property( _h.idx() ); }
634 virtual uint n_vertices()
const {
return 0; }
635 virtual uint n_halfedges()
const {
return 0; }
636 virtual uint n_edges()
const {
return 0; }
637 virtual uint n_faces()
const {
return 0; }
642 void vprops_reserve(
unsigned int _n)
const { vprops_.reserve(_n); }
643 void vprops_resize(
unsigned int _n)
const { vprops_.resize(_n); }
644 void vprops_clear() {
647 void vprops_swap(
unsigned int _i0,
unsigned int _i1)
const {
648 vprops_.swap(_i0, _i1);
651 void hprops_reserve(
unsigned int _n)
const { hprops_.reserve(_n); }
652 void hprops_resize(
unsigned int _n)
const { hprops_.resize(_n); }
653 void hprops_clear() {
656 void hprops_swap(
unsigned int _i0,
unsigned int _i1)
const {
657 hprops_.swap(_i0, _i1);
660 void eprops_reserve(
unsigned int _n)
const { eprops_.reserve(_n); }
661 void eprops_resize(
unsigned int _n)
const { eprops_.resize(_n); }
662 void eprops_clear() {
665 void eprops_swap(
unsigned int _i0,
unsigned int _i1)
const {
666 eprops_.swap(_i0, _i1);
669 void fprops_reserve(
unsigned int _n)
const { fprops_.reserve(_n); }
670 void fprops_resize(
unsigned int _n)
const { fprops_.resize(_n); }
671 void fprops_clear() {
674 void fprops_swap(
unsigned int _i0,
unsigned int _i1)
const {
675 fprops_.swap(_i0, _i1);
678 void mprops_resize(
unsigned int _n)
const { mprops_.resize(_n); }
679 void mprops_clear() {
685 void property_stats(std::ostream& _ostr = std::clog)
const;
687 void vprop_stats( std::string& _string )
const;
688 void hprop_stats( std::string& _string )
const;
689 void eprop_stats( std::string& _string )
const;
690 void fprop_stats( std::string& _string )
const;
691 void mprop_stats( std::string& _string )
const;
693 void vprop_stats(std::ostream& _ostr = std::clog)
const;
694 void hprop_stats(std::ostream& _ostr = std::clog)
const;
695 void eprop_stats(std::ostream& _ostr = std::clog)
const;
696 void fprop_stats(std::ostream& _ostr = std::clog)
const;
697 void mprop_stats(std::ostream& _ostr = std::clog)
const;
701 typedef PropertyContainer::iterator prop_iterator;
702 typedef PropertyContainer::const_iterator const_prop_iterator;
704 prop_iterator vprops_begin() {
return vprops_.begin(); }
705 prop_iterator vprops_end() {
return vprops_.end(); }
706 const_prop_iterator vprops_begin()
const {
return vprops_.begin(); }
707 const_prop_iterator vprops_end()
const {
return vprops_.end(); }
709 prop_iterator eprops_begin() {
return eprops_.begin(); }
710 prop_iterator eprops_end() {
return eprops_.end(); }
711 const_prop_iterator eprops_begin()
const {
return eprops_.begin(); }
712 const_prop_iterator eprops_end()
const {
return eprops_.end(); }
714 prop_iterator hprops_begin() {
return hprops_.begin(); }
715 prop_iterator hprops_end() {
return hprops_.end(); }
716 const_prop_iterator hprops_begin()
const {
return hprops_.begin(); }
717 const_prop_iterator hprops_end()
const {
return hprops_.end(); }
719 prop_iterator fprops_begin() {
return fprops_.begin(); }
720 prop_iterator fprops_end() {
return fprops_.end(); }
721 const_prop_iterator fprops_begin()
const {
return fprops_.begin(); }
722 const_prop_iterator fprops_end()
const {
return fprops_.end(); }
724 prop_iterator mprops_begin() {
return mprops_.begin(); }
725 prop_iterator mprops_end() {
return mprops_.end(); }
726 const_prop_iterator mprops_begin()
const {
return mprops_.begin(); }
727 const_prop_iterator mprops_end()
const {
return mprops_.end(); }
731 PropertyContainer vprops_;
732 PropertyContainer hprops_;
733 PropertyContainer eprops_;
734 PropertyContainer fprops_;
735 PropertyContainer mprops_;
742 #endif // OPENMESH_BASE_KERNEL_HH defined