[Racer-svn] SF.net SVN: racer:[89] trunk/libtrack
Status: Alpha
Brought to you by:
jlegg
From: <jl...@us...> - 2009-11-26 00:45:38
|
Revision: 89 http://racer.svn.sourceforge.net/racer/?rev=89&view=rev Author: jlegg Date: 2009-11-26 00:45:30 +0000 (Thu, 26 Nov 2009) Log Message: ----------- Move connected edge updater to a member function of Track::Path. Modified Paths: -------------- trunk/libtrack/Path.cpp trunk/libtrack/Path.h trunk/libtrack/document/MoveNodeDelta.cpp trunk/libtrack/document/RotateVertexDelta.cpp Modified: trunk/libtrack/Path.cpp =================================================================== --- trunk/libtrack/Path.cpp 2009-11-25 00:29:38 UTC (rev 88) +++ trunk/libtrack/Path.cpp 2009-11-26 00:45:30 UTC (rev 89) @@ -638,4 +638,28 @@ } } +void Path::update_connected_edges(Path::Graph::vertex_descriptor vertex_descriptor) +{ + // edges out of the vertex + typedef boost::graph_traits<Graph>::out_edge_iterator OutEdgeIterator; + std::pair<OutEdgeIterator, OutEdgeIterator> out_edge_range; + for (out_edge_range = boost::out_edges(vertex_descriptor, graph); + out_edge_range.first != out_edge_range.second; + out_edge_range.first++) + { + PathEdge & edge = graph[*(out_edge_range.first)]; + edge.update(); + } + // edges into the vertex + typedef boost::graph_traits<Graph>::in_edge_iterator InEdgeIterator; + std::pair<InEdgeIterator, InEdgeIterator> in_edge_range; + for (in_edge_range = boost::in_edges(vertex_descriptor, graph); + in_edge_range.first != in_edge_range.second; + in_edge_range.first++) + { + PathEdge & edge = graph[*(in_edge_range.first)]; + edge.update(); + } } + +} Modified: trunk/libtrack/Path.h =================================================================== --- trunk/libtrack/Path.h 2009-11-25 00:29:38 UTC (rev 88) +++ trunk/libtrack/Path.h 2009-11-26 00:45:30 UTC (rev 89) @@ -309,6 +309,14 @@ * rotate. */ void set_handle_lengths(btScalar handle_length); + + /** Update the edges connected to a particular vertex. + * This recalculates the length, number of segments, and meshes. You + * should call this after changing a vertex's position, segment, or angle. + * @param vertex_descriptor The vertex descriptor of the vertex that was + * changed. + */ + void update_connected_edges(Path::Graph::vertex_descriptor vertex_descriptor); private: const Theme & theme; Path::Graph::vertex_descriptor get_node_descriptor_internal(const std::size_t index) const; Modified: trunk/libtrack/document/MoveNodeDelta.cpp =================================================================== --- trunk/libtrack/document/MoveNodeDelta.cpp 2009-11-25 00:29:38 UTC (rev 88) +++ trunk/libtrack/document/MoveNodeDelta.cpp 2009-11-26 00:45:30 UTC (rev 89) @@ -28,41 +28,10 @@ void NodePositionFinder::write(Track::Track & track, const btVector3 & new_position) { Track::Path & path = track.get_path(); - Track::PathVertex & vertex = path.get_node(node_id); Track::Path::Graph::vertex_descriptor vertex_descriptor = path.get_node_descriptor(node_id); - Track::Path::Graph & graph = path.graph; + Track::PathVertex & vertex = path.graph[vertex_descriptor]; vertex.set_position(new_position); - //update the connecting edges. - /*typedef boost::graph_traits<Track::Path::Graph>::edge_iterator EdgeIterator; - std::pair<EdgeIterator, EdgeIterator> edge_range; - for (edge_range = boost::edges(graph); - edge_range.first != edge_range.second; - edge_range.first++) - { - //Track::PathVertex vertex_1 = graph[source(*(edge_range.first), graph)]; - //Track::PathVertex vertex_2 = graph[target(*(edge_range.first), graph)]; - Track::PathEdge & edge = path.graph[*(edge_range.first)]; - //edge.update(vertex_1, vertex_2); - edge.update(); - }*/ - typedef boost::graph_traits<Track::Path::Graph>::out_edge_iterator OutEdgeIterator; - std::pair<OutEdgeIterator, OutEdgeIterator> out_edge_range; - for (out_edge_range = boost::out_edges(vertex_descriptor, graph); - out_edge_range.first != out_edge_range.second; - out_edge_range.first++) - { - Track::PathEdge & edge = path.graph[*(out_edge_range.first)]; - edge.update(); - } - typedef boost::graph_traits<Track::Path::Graph>::in_edge_iterator InEdgeIterator; - std::pair<InEdgeIterator, InEdgeIterator> in_edge_range; - for (in_edge_range = boost::in_edges(vertex_descriptor, graph); - in_edge_range.first != in_edge_range.second; - in_edge_range.first++) - { - Track::PathEdge & edge = path.graph[*(in_edge_range.first)]; - edge.update(); - } + path.update_connected_edges(vertex_descriptor); } } Modified: trunk/libtrack/document/RotateVertexDelta.cpp =================================================================== --- trunk/libtrack/document/RotateVertexDelta.cpp 2009-11-25 00:29:38 UTC (rev 88) +++ trunk/libtrack/document/RotateVertexDelta.cpp 2009-11-26 00:45:30 UTC (rev 89) @@ -28,29 +28,10 @@ void VertexAngleFinder::write(Track::Track & track, const btQuaternion & new_angle) { Track::Path & path = track.get_path(); - Track::PathVertex & vertex = path.get_node(vertex_id); - vertex.set_angle(new_angle); - // Update connected edges. Track::Path::Graph::vertex_descriptor vertex_descriptor = path.get_node_descriptor(vertex_id); - Track::Path::Graph & graph = path.graph; - typedef boost::graph_traits<Track::Path::Graph>::out_edge_iterator OutEdgeIterator; - std::pair<OutEdgeIterator, OutEdgeIterator> out_edge_range; - for (out_edge_range = boost::out_edges(vertex_descriptor, graph); - out_edge_range.first != out_edge_range.second; - out_edge_range.first++) - { - Track::PathEdge & edge = path.graph[*(out_edge_range.first)]; - edge.update(); - } - typedef boost::graph_traits<Track::Path::Graph>::in_edge_iterator InEdgeIterator; - std::pair<InEdgeIterator, InEdgeIterator> in_edge_range; - for (in_edge_range = boost::in_edges(vertex_descriptor, graph); - in_edge_range.first != in_edge_range.second; - in_edge_range.first++) - { - Track::PathEdge & edge = path.graph[*(in_edge_range.first)]; - edge.update(); - } + Track::PathVertex & vertex = path.graph[vertex_descriptor]; + vertex.set_angle(new_angle); + path.update_connected_edges(vertex_descriptor); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |