in utils/house3d.py [0:0]
def spawn_object(self, obj=None, room=None):
if object == None:
return False, None
if isinstance(obj, list) == False:
obj = [obj]
is_door = False
if 'door' in obj:
is_door = True
target_obj = ['_'.join(x.lower().split(' ')) for x in obj]
if room != None:
if 'nodeIndices' in room:
objs = [
self.objects['0_' + str(x)] for x in room['nodeIndices']
if self.objects['0_' + str(x)]['fine_class'] in target_obj
]
else:
objs = [
self.objects['0_' + str(x)] for x in room['nodes']
if self.objects['0_' + str(x)]['fine_class'] in target_obj
]
else:
obj_id_list = list(
itertools.chain.from_iterable(
[x['nodes'] for x in self.rooms if x['type'] != []]))
objs = [
self.objects['0_' + str(x)] for x in obj_id_list
if self.objects['0_' + str(x)]['fine_class'] in target_obj
]
if len(objs) == 0:
return False, None, None
obj_idx = np.random.choice(len(objs))
obj = objs[obj_idx]
self.target_obj_class = obj['fine_class'].lower()
gx1, gy1, gx2, gy2 = self.env.house._getRoomBounds(obj)
if room == None:
obj_node_idx = int(obj['id'][2:])
room = [
x for x in self.env.house.all_rooms
if 'nodeIndices' in x and obj_node_idx in x['nodeIndices']
][0]
self.set_target_object(obj, room)
available_x, available_y = np.where(self.env.house.connMap == 0)
if len(available_x) == 0:
return False, None, None
spawn_coords = []
for i in range(len(available_x)):
spawn_coords.append((available_x[i], available_y[i]))
return spawn_coords, obj, room