
On Mon, May 21, 2012 at 7:33 PM, Jeffrey Lee Hellrung, Jr. < jeffrey.hellrung@gmail.com> wrote:
I may have some suggestions on how to implement this user data, but yes, Luke's suggestion looks to be the simplest solution. Andrii, do you have an example use case for storing the data in situ with the voronoi primitive objects? Looking at a concrete use case might help ground the discussion.
There are two examples on data association usage: 1) Basic tutorial (non-practical examples that shows how to use this functionality): http://svn.boost.org/svn/boost/trunk/libs/polygon/doc/voronoi_basic_tutorial... Section: "Associating User Data with Voronoi Primitives". 2) Voronoi visualizer: http://svn.boost.org/svn/boost/trunk/libs/polygon/example/voronoi_visualizer... Uses depth first search to remove Voronoi edges outside of the polygon bounds. The data field is used to mark edges as visited (I added some comments): void remove_exterior(const VD::edge_type* edge) { if (edge->data()) // visited edge, don't proceed return; edge->data(&edge); // mark edge as visited edge->twin()->data(&edge); // mark twin edge as visited also const voronoi_diagram<double>::vertex_type* v = edge->vertex1(); // if the edge doesn't have endpoint or is not primary stop if (v == NULL || !edge->is_primary()) return; // recursively run dfs for each Voronoi edge around current edge endpoint const voronoi_diagram<double>::edge_type* e = v->incident_edge(); do { remove_exterior(e); e = e->rot_next(); } while (e != v->incident_edge()); } While this example doesn't directly associate any data with Voronoi edges, it shows additional usage of this field that appeared to be practical. Regards, Andrii