in mujoco_worldgen/objs/obj.py [0:0]
def __init__(self):
self.place_boxes = place_boxes # allow user to override (expensive) default placement
# ####################
# ### First Phase ####
# ####################
# Create a tree of all the objects.
# Invoked functions :
# - append (appends an element to the tree
# - mark (marks an element ; adds site in xml)
# - add_transform (adds posprocessing transform function).
# Nothing has to be overrided in subclasses.
# Determined by append
self.children = OrderedDict() # indexed by placement name
# Determined by mark
self.markers = []
# Determined by add_transform
self.transforms = []
# #####################
# ### Second Phase ####
# #####################
# Compute name for every element in the tree.
# Invoked functions:
# - generate_name (non recursive function. Can be overriden).
# - to_names (recursive function)
# ####################
# ### Third Phase ####
# ####################
# Determine sizes and relative positions of objects.
# Inoveked functions:
# - compile
# - place
# - generate
self.size = None #
self.placements = None # List of placements
# Each placement is a dict {"origin": (x,y,z), "size": (x,y,z)}
# Determined by place.
self.relative_position = None # (X, Y) position relative to parent
# ###################
# ### Four Phase ####
# ###################
# Determines absolute positions of generated objects.
# Invoked functions :
# - set_absolute_position
# (X, Y, Z) position in absolute (world) frame
self.absolute_position = None
# ####################
# ### Fifth Phase ####
# ####################
# Generates xml and initial state in the simulator.
# Invoked functions:
# - to_xml_dict
# - generate_xinit
# - to_xinit
# - generate_xml_dict
# Checks that only allowed functions are overriden in subclasses.
if self.__class__.__name__ != "WorldBuilder":
for key, func in Obj.__dict__.items():
if hasattr(func, "__call__") and key in self.__class__.__dict__:
assert key in ["__init__", "append", "mark", "generate_name",
"generate", "generate_xinit", "generate_xml_dict"], \
("Subclass %s overrides final function :%s. " % (self.__class__, key)) + \
"Please don't override it."
# Extra fields
# ============
# Material to set on the object.
self._material = None
# if False object has base joints, and it's movable,
# otherwise object is static.
self._keep_slide_joint = [True for _ in range(3)]
self._keep_hinge_joint = [True for _ in range(3)]