Python example: mrpt_rtti_example.py
Lists the classes in the MRPT runtime type registry with mrpt.rtti.
Modules: mrpt.rtti, mrpt.poses, mrpt.obs, mrpt.maps
1#!/usr/bin/env python3
2"""
3Lists the classes in the MRPT runtime type registry with mrpt.rtti.
4
5Demonstrates:
6 - getAllRegisteredClasses(): inspect the class registry
7 - findRegisteredClass(): look up by name
8 - TRuntimeClassId: className, derivedFrom(), getBaseClass()
9 - classFactory(): create objects by name
10"""
11
12import mrpt.rtti as rtti
13import mrpt.poses # importing poses registers CPose2D, CPose3D, etc.
14import mrpt.obs # registers CObservation2DRangeScan, etc.
15import mrpt.maps # registers CSimplePointsMap, etc.
16
17# ---------------------------------------------------------------------------
18# getAllRegisteredClasses — list everything in the RTTI registry
19# ---------------------------------------------------------------------------
20all_classes = rtti.getAllRegisteredClasses()
21print(f"Total registered classes: {len(all_classes)}")
22
23# Print the first few
24for cls in sorted(all_classes, key=lambda c: c.className)[:10]:
25 print(f" {cls.className}")
26print(" ...")
27
28# ---------------------------------------------------------------------------
29# findRegisteredClass — look up by name
30# ---------------------------------------------------------------------------
31import mrpt.poses # ensure CPose2D is registered
32cls_pose2d = rtti.findRegisteredClass("mrpt::poses::CPose2D", False)
33if cls_pose2d:
34 print(f"\nFound 'CPose2D': className='{cls_pose2d.className}'")
35 base = cls_pose2d.getBaseClass()
36 print(f" base class: {base.className if base else '(none)'}")
37 # Note: derivedFrom(str) requires the base class to be registered by name; use getBaseClass() instead
38else:
39 print("\n'CPose2D' not found (poses module may not be loaded)")
40
41# ---------------------------------------------------------------------------
42# classFactory — create an object by class name
43# ---------------------------------------------------------------------------
44obj = rtti.classFactory("CPose2D")
45if obj:
46 print(f"\nclassFactory('CPose2D'): {obj.GetRuntimeClass().className}")
47else:
48 print("\nclassFactory returned None")
49
50# ---------------------------------------------------------------------------
51# getAllRegisteredClassesChildrenOf — filter by base class
52# ---------------------------------------------------------------------------
53import mrpt.obs
54obs_cls = rtti.findRegisteredClass("mrpt::obs::CObservation", False)
55if obs_cls:
56 obs_children = rtti.getAllRegisteredClassesChildrenOf(obs_cls)
57 print(f"\nClasses derived from CObservation: {len(obs_children)}")
58 for c in sorted(obs_children, key=lambda x: x.className)[:8]:
59 print(f" {c.className}")