#pragma once #include "cursors.hh" /// Bindings for property-based functions /// Example usage: /// auto areas = m.faces().map(fbind(face_area, pos)); namespace polymesh { template auto fbind(FuncT&& f, Args... args) -> decltype(f(std::declval(), std::forward(args)...)) { return [&](face_handle h) { return f(h, std::forward(args)...); }; } template auto vbind(FuncT&& f, Args... args) -> decltype(f(std::declval(), std::forward(args)...)) { return [&](vertex_handle h) { return f(h, std::forward(args)...); }; } template auto ebind(FuncT&& f, Args... args) -> decltype(f(std::declval(), std::forward(args)...)) { return [&](edge_handle h) { return f(h, std::forward(args)...); }; } template auto hbind(FuncT&& f, Args... args) -> decltype(f(std::declval(), std::forward(args)...)) { return [&](halfedge_handle h) { return f(h, std::forward(args)...); }; } }