def convert_data(data, from_type=None, to_type=None): if (data == None or from_type == None or to_type == None): return False, None try: if (to_type == "NUMBER"): if (from_type == "NUMBER"): val = data elif (from_type == "BOOL"): val = float(data) elif (from_type == "STRING"): val = float(eval(data)) elif (from_type == "VECTOR"): val = Vector(data).magnitude elif (from_type == "OBJECT"): val = bpy.data.objects.find(data.name) elif (from_type == "ARRAY"): val = len(eval(data)) elif (from_type == "SELECTION_TYPE"): return False, None elif (to_type == "BOOL"): if (from_type == "NUMBER"): val = bool(data) elif (from_type == "BOOL"): val = data elif (from_type == "STRING"): val = bool(data) elif (from_type == "VECTOR"): val = bool(data) elif (from_type == "OBJECT"): val = bool(data) elif (from_type == "ARRAY"): val = bool(eval(data)) elif (from_type == "SELECTION_TYPE"): val = len(data) != 0 elif (to_type == "STRING"): if (from_type == "NUMBER"): val = str(data) elif (from_type == "BOOL"): val = str(data) elif (from_type == "STRING"): val = data elif (from_type == "VECTOR"): val = str(Vector(data).to_tuple()) elif (from_type == "OBJECT"): val = str(repr(data)) elif (from_type == "ARRAY"): val = data elif (from_type == "SELECTION_TYPE"): val = str(data) elif (to_type == "VECTOR"): if (from_type == "NUMBER"): val = (data, data, data) elif (from_type == "BOOL"): val = (float(data), float(data), float(data)) elif (from_type == "STRING"): val = Vector(eval(data)).to_tuple() elif (from_type == "VECTOR"): val = data elif (from_type == "OBJECT"): return False, None elif (from_type == "ARRAY"): val = Vector( (eval(data)[0], eval(data)[1], eval(data)[2])).to_tuple() elif (from_type == "SELECTION_TYPE"): val = Vector(float("VERT" in data), float("EDGE" in data), float("FACE" in data)).to_tuple() elif (to_type == "OBJECT"): if (from_type == "NUMBER"): val = bpy.data.objects[data] elif (from_type == "BOOL"): return False, None elif (from_type == "STRING"): val = bpy.data.objects[eval(data).name] elif (from_type == "VECTOR"): return False, None elif (from_type == "OBJECT"): val = data elif (from_type == "ARRAY"): return False, None elif (from_type == "SELECTION_TYPE"): return False, None elif (to_type == "ARRAY"): if (from_type == "NUMBER"): val = "[" + str(data) + "]" elif (from_type == "BOOL"): val = "[" + str(data) + "]" elif (from_type == "STRING"): val = str(list(eval(data))) elif (from_type == "VECTOR"): val = str(list(data)) elif (from_type == "OBJECT"): val = "[" + repr(data) + "]" elif (from_type == "ARRAY"): val = data elif (from_type == "SELECTION_TYPE"): val = str(list(data)) elif (to_type == "SELECTION_TYPE"): if (from_type == "NUMBER"): return False, None elif (from_type == "BOOL"): return False, None elif (from_type == "STRING"): val = eval(data) elif (from_type == "VECTOR"): val = set() if bool(data[0]): val.add("VERT") if bool(data[1]): val.add("EDGE") if bool(data[2]): val.add("FACE") elif (from_type == "OBJECT"): return False, None elif (from_type == "ARRAY" ): # Allows you to take in a boolean array data_eval = eval(data) val = set() if bool(data_eval[0]): val.add("VERT") if bool(data_eval[1]): val.add("EDGE") if bool(data_eval[2]): val.add("FACE") elif (from_type == "SELECTION_TYPE"): val = data return True, val except: return False, None