def generateObject(self, availableId): object = None while object is None: if time.time() - self.generation_time > MAX_GENERATION_WAIT: raise RuntimeError('MAX_GENERATION_ATTEMPTS') if QtCore.qrand() % 3 == 0: xx = int(random.normalvariate(0, 150)) yy = int(random.normalvariate(0, 150)) else: xx = QtCore.qrand() % 800 - 400 yy = QtCore.qrand() % 800 - 400 object = RegularObject(availableId, xx, yy, (QtCore.qrand() % 360) - 180) if not self.room.containsPolygon(object.polygon()): object = None return object
def generateComplementaryObject(self, human, availableId): a = math.pi * human.angle / 180. dist = float(QtCore.qrand() % 250 + 50) obj = None while obj is None: if time.time() - self.generation_time > MAX_GENERATION_WAIT: raise RuntimeError('MAX_GENERATION_ATTEMPTS') xPos = human.xPos + dist * math.sin(a) yPos = human.yPos - dist * math.cos(a) obj = RegularObject(availableId, xPos, yPos, (human.angle + 180) % 360) if not self.room.containsPolygon(obj.polygon()): dist -= 5 if dist <= 5: obj.setAngle(human.angle + 180) a = math.pi * human.angle / 180. dist = float(QtCore.qrand() % 300 + 50) obj = None return obj
def generateFromData(self, raw_data): data = json.loads(raw_data) idMap = dict() self.clear() self.ds_identifier = int(data['identifier'].split()[0]) self.room = Room(data['room']) self.addItem(self.room) self.humans = [] for raw_human in data['humans']: human = Human.from_json(raw_human) self.addItem(human) self.humans.append(human) idMap[raw_human['id']] = human self.heads = [] for raw_head in data['heads']: head = Head.from_json(raw_head) self.addItem(head) self.heads.append(head) idMap[raw_head['id']] = head self.objects = [] for raw_object in data['objects']: obj = RegularObject.from_json(raw_object) self.addItem(obj) self.objects.append(obj) idMap[raw_object['id']] = obj self.interactions = [] interactions_done = [] for interaction_raw in data['links']: if not [ interaction_raw[1], interaction_raw[0], interaction_raw[2] ] in interactions_done: interactions_done.append(interaction_raw) human = idMap[interaction_raw[0]] other = idMap[interaction_raw[1]] interaction = Interaction(human, other) self.interactions.append(interaction) self.addItem(interaction) #self.irregularobjects = [] #for raw_irregularobjects in data['irregularobjects']: #obj = IrregularObject.from_json(raw_irregularobjects) #self.addItem(obj) #self.irregularobjects.append(obj) #idMap[raw_irregularobjects['id']] = obj self.robot = Robot() self.robot.setPos(0, 0) self.addItem(self.robot)