Example #1
0
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