Skip to content
Snippets Groups Projects
main.py 4.58 KiB
Newer Older
Djalim Simaila's avatar
Djalim Simaila committed
from utils.math import data_extraction
from utils.files import output
Djalim Simaila's avatar
Djalim Simaila committed
from utils.files.input import ScannedObject
from utils.math.position_manipulation import verticalise
from utils.graph3D.visplot_render import render3D
Djalim Simaila's avatar
Djalim Simaila committed
def get_raw_data(obj:ScannedObject, ndigits:int)->dict:
    """
    Calculates data from the given object

    :param obj: Object to analyse
    :param ndigits: Number of digits to keep after the comma
    :return: dict(str:list) with the following keys:
        - X (en mm)     : list of x values
        - Y (en mm)     : list of y values
        - Z (en mm)     : list of z values
        - teta (en rad) : list of teta values
        - rayon (en mm) : list of radius values
        - Xi-Xmoy       : list of Xi-Xmoy values
        - Yi-Ymoy       : list of Yi-Ymoy values
    """
    colones = ["X (en mm)", "Y (en mm)", "Z (en mm)", "teta (en rad)", "rayon (en mm)","Xi-Xmoy","Yi-Ymoy"]
    data = {}
    for colone in colones:
        data[colone] = []
Djalim Simaila's avatar
Djalim Simaila committed
    for discrete_values in obj.get_discrete_vertices():
Djalim Simaila's avatar
Djalim Simaila committed
        mean_x ,mean_y, mean_z = data_extraction.get_x_y_z_mean(discrete_values)
        for x,y,z in discrete_values:
            data["X (en mm)"].append(round(x, ndigits))
            data["Y (en mm)"].append(round(y, ndigits))
            data["Z (en mm)"].append(round(z, ndigits))
Djalim Simaila's avatar
Djalim Simaila committed
            data["teta (en rad)"].append(round(data_extraction.get_teta_from_x_y(x,y,mean_x,mean_y), ndigits))
            data["rayon (en mm)"].append(round(data_extraction.get_radius_from_x_y(x,y,mean_x,mean_y), ndigits))
            data["Xi-Xmoy"].append(round(x-mean_x, ndigits))
            data["Yi-Ymoy"].append(round(y-mean_y, ndigits))
    return data

Djalim Simaila's avatar
Djalim Simaila committed
def get_discrete_data(obj:ScannedObject, ndigits:int)->dict:
    """
    Calculates data from the given object

    :param obj: Object to analyse
    :param ndigits: Number of digits to keep after the comma
    :return: dict(str:list) with the following keys:
        - X moy (en mm)             : list of x mean values
        - Y moy (en mm)             : list of y mean values
        - Z moy (en mm)             : list of z mean values
        - Rayon moyen (en mm)       : list of mean radius values
        - Rayon ecart type (en mm)  : list of radius standard deviation values
    """
    colones = ["X moy (en mm)", "Y moy (en mm)", "Z moy (en mm)","Delta z(en mm)","Rayon moyen (en mm)","Rayon ecart type (en mm)"]
    data = {}
    for colone in colones:
        data[colone] = []
Djalim Simaila's avatar
Djalim Simaila committed
    for discrete_values in obj.get_discrete_vertices():
Djalim Simaila's avatar
Djalim Simaila committed
        x,y,z = data_extraction.get_x_y_z_mean(discrete_values)
        data["X moy (en mm)"].append(round(x, ndigits))
        data["Y moy (en mm)"].append(round(y, ndigits))
        data["Z moy (en mm)"].append(round(z, ndigits))
        first = discrete_values[0]
        last = discrete_values[-1]
        data["Delta z(en mm)"].append(round(last[2]-first[2],ndigits))
Djalim Simaila's avatar
Djalim Simaila committed
        data["Rayon moyen (en mm)"].append(round(data_extraction.get_mean_radius(discrete_values), ndigits))
        data["Rayon ecart type (en mm)"].append(round(data_extraction.get_radius_std(discrete_values), ndigits))
def main():
    # Create an object from the given file
    obj = ScannedObject.from_obj_file("datasets/Barette/1 - BARETTE.obj")
    verticalise(obj)
    obj.normalise()

    # Calculate raw data and save it in a file
    data = get_raw_data(obj, 6)
Djalim Simaila's avatar
Djalim Simaila committed
    output.save_output_file('analyse_brute.txt',
                             output.format_data(data,
                                                '\t',
                                                ["X (en mm)",
                                                "Y (en mm)",
                                                "Z (en mm)",
                                                "teta (en rad)",
                                                "rayon (en mm)",
                                                "Xi-Xmoy",
                                                "Yi-Ymoy"] ))
    # Calculate discrete data and save it in a file
    data = get_discrete_data(obj, 6)
Djalim Simaila's avatar
Djalim Simaila committed
    output.save_output_file('analyse_rayon.txt',
                             output.format_data(data,
                                                '\t',
                                                ["X moy (en mm)",
                                                "Y moy (en mm)",
                                                "Z moy (en mm)",
                                                "Delta z(en mm)",
Djalim Simaila's avatar
Djalim Simaila committed
                                                "Rayon moyen (en mm)",
                                                "Rayon ecart type (en mm)"] ))

if __name__ == '__main__':
    main()