def get_add_activity(self, select_empty=True, is_viable=True, excluded_grids=[]): if self.canvas.size() == 0: self.mode_loc == LOC_ABS color = random.choice(COLORS) shape = random.choice(SHAPES) options = [] loc_abs, row_abs, col_abs = self.canvas.select_loc_abs( select_empty, is_viable) if loc_abs: options.append(LOC_ABS) obj_ref, row_ref, col_ref, loc_rel = self.canvas.select_obj_ref_grid( select_empty, is_viable, excluded_grids) if obj_ref: options.append(LOC_REL) if len(options) == 0: return if self.mode_loc in options: mode_loc = self.mode_loc else: mode_loc = random.choice(options) if mode_loc == LOC_ABS: self.obj = Object(color, shape, row_abs, col_abs) self.loc_abs = loc_abs elif mode_loc == LOC_REL: self.obj = Object(color, shape, row_ref, col_ref) self.obj_ref = obj_ref self.loc_rel = loc_rel '''
def get_add_activity(self, select_empty=True, excluded_grids=[]): if self.canvas.size() == 0: self.mode_loc == LOC_ABS options = [] row_abs, col_abs, loc_abs = self.canvas.select_grid_loc_abs( select_empty) if row_abs is not None and col_abs is not None: options.append(LOC_ABS) row_ref, col_ref, obj_ref, loc_rel = self.canvas.select_grid_obj_ref( select_empty, excluded_grids) if obj_ref: options.append(LOC_REL) if len(options) == 0: return color = random.choice(COLORS) shape = random.choice(SHAPES) if self.mode_loc in options: mode_loc = self.mode_loc else: mode_loc = random.choice(options) if mode_loc == LOC_ABS: self.obj = Object(color, shape, row_abs, col_abs) self.loc_abs = loc_abs elif mode_loc == LOC_REL: self.obj = Object(color, shape, row_ref, col_ref) self.obj_ref = obj_ref self.loc_rel = loc_rel
def get_activity(self, act): if not self.mode_loc: self.mode_loc = random.choice(MODES_LOC) activities = [] if act == ADD: self.act = act self.get_add_activity(select_empty=True, is_viable=self.is_viable) self.message = self.generate_act_message_by_tmpl() self.canvas.add(self.obj) activities.append(self.activity2dict()) if act == DELETE: self.act = act self.get_delete_activity(select_empty=False, is_viable=self.is_viable) self.message = self.generate_act_message_by_tmpl() self.canvas.delete(self.obj) activities.append(self.activity2dict()) if act == MOVE: self.get_delete_activity(select_empty=False, is_viable=self.is_viable) self.act = DELETE activities.append(self.activity2dict()) obj_from = self.obj self.get_add_activity(select_empty=True, is_viable=self.is_viable, excluded_grids=[(obj_from.row, obj_from.col)]) self.act = ADD self.obj.color, self.obj.shape = obj_from.color, obj_from.shape activities.append(self.activity2dict()) obj_to = Object(self.obj.color, self.obj.shape, self.obj.row, self.obj.col) self.obj = obj_from self.message = self.generate_act_message_by_tmpl(MOVE) self.canvas.delete(obj_from) self.canvas.add(obj_to) self.canvas.update_ref_obj_features() return activities
def get_activities(self, act, is_viable=True): if not self.mode_loc: self.mode_loc = random.choice(MODES_LOC) activities = [] if act == ADD: self.act = act self.get_add_activity(select_empty=(True and is_viable)) self.message = generate_act_message_by_tmpl( self.canvas, self.obj, self.act, MODE_FULL) self.canvas.add(self.obj) activities.append(self.activity2dict()) if act == DELETE: self.act = act self.get_delete_activity(select_empty=not (False ^ is_viable)) if self.obj is None: return [] # print(self.obj) if not self.mode_ref: mode_ref = random.choice(MODES_REF) else: mode_ref = self.mode_ref # print(self.obj) self.message = generate_act_message_by_tmpl( self.canvas, self.obj, self.act, mode_ref) self.canvas.delete(self.obj) activities.append(self.activity2dict()) if act == MOVE: self.get_delete_activity(select_empty=False) self.act = DELETE activities.append(self.activity2dict()) obj_from = self.obj self.get_add_activity(select_empty=True, excluded_grids=[(obj_from.row, obj_from.col) ]) self.act = ADD self.obj.color, self.obj.shape = obj_from.color, obj_from.shape obj_to = Object(self.obj.color, self.obj.shape, self.obj.row, self.obj.col) self.obj = obj_to activities.append(self.activity2dict()) self.obj = obj_from # self.message = self.generate_act_message_by_tmpl(MOVE) self.canvas.delete(obj_from) self.canvas.add(obj_to) self.canvas.update_ref_obj_features() # for k, v in self.canvas.d_id_feature.items(): # print(k, v.keys()) return activities
def get_delete_activity(self, select_empty=False): assert self.canvas.size() > 0 if self.canvas.size() == 1 and not select_empty: self.obj = list(self.canvas.d_id_obj.values())[0] return row = col = None row_a, col_a, self.loc_abs = self.canvas.select_grid_loc_abs( select_empty) row_r, col_r, self.obj_ref, self.loc_rel = self.canvas.select_grid_obj_ref( select_empty) options = [] if row_a is not None: options.append(LOC_ABS) if row_r is not None: options.append(LOC_REL) if not options: for id_, obj in self.canvas.d_id_obj.items(): d_features = self.canvas.get_obj_features(obj) if MODE_CS in d_features: self.obj = obj break return if self.mode_loc not in options: self.mode_loc = random.choice(options) if row_r is not None and self.mode_loc == LOC_REL: row, col = row_r, col_r if row_a is not None and self.mode_loc == LOC_ABS: row, col = row_a, col_a if row is not None and col is not None: if select_empty: color = random.choice(COLORS) shape = random.choice(SHAPES) self.obj = Object(color, shape, row, col) else: for id_, obj in self.canvas.d_id_obj.items(): if (row, col) == (obj.row, obj.col): self.obj = obj break