RMF
reference_frames.py
1 ## \example reference_frames.py
2 # Show how to properly extract coordinates in the presence of rigid bodies.
3 from __future__ import print_function
4 import RMF
5 
6 # print out transformed coordinates
7 
8 
9 def print_coordinates(reference_frame, coords):
10  print(reference_frame.get_global_coordinates(coords))
11 
12 # walk through the hierarchy visiting each node and extracting coordinates
13 
14 
15 def visit(node, reference_frame, reference_frame_factory, particle_factory,
16  segment_factory, ball_factory):
17  if reference_frame_factory.get_is(node):
18  reference_frame = RMF.CoordinateTransformer(
19  reference_frame, reference_frame_factory.get(node))
20  print("reference frame is now", reference_frame)
21  elif segment_factory.get_is(node):
22  segment = segment_factory.get(node)
23  print("segment", node.get_name())
24  # silliness
25  coords = segment.get_coordinates()
26  for i in range(0, len(coords[0])):
27  print_coordinates(reference_frame, [coords[0][i],
28  coords[1][i],
29  coords[2][i]])
30  elif particle_factory.get_is(node):
31  particle = particle_factory.get(node)
32  print("particle", node.get_name(), print_coordinates(reference_frame, particle.get_coordinates()))
33  elif ball_factory.get_is(node):
34  particle = ball_factory.get(node)
35  print("ball", node.get_name(), print_coordinates(reference_frame, particle.get_coordinates()))
36  for c in node.get_children():
37  visit(c, reference_frame, reference_frame_factory, particle_factory,
38  segment_factory, ball_factory)
39 
40 fh = RMF.open_rmf_file_read_only(RMF.get_example_path("reference_frames.rmf3"))
41 
42 
43 visit(fh.get_root_node(), RMF.CoordinateTransformer(),
44  RMF.ReferenceFrameFactory(fh),
45  RMF.ParticleFactory(fh),
46  RMF.SegmentFactory(fh),
47  RMF.BallFactory(fh))
Transform coordinates into the global reference frame.
FileConstHandle open_rmf_file_read_only(std::string path)