from utils.math import data_extraction from utils.files import output from utils.files.input import ScannedObject from utils.math.position_manipulation import verticalise from utils.graph3D.visplot_render import render3D 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] = [] for discrete_values in obj.get_discrete_vertices(): 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)) 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 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] = [] for discrete_values in obj.get_discrete_vertices(): 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)) 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)) return data 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) 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) 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)", "Rayon moyen (en mm)", "Rayon ecart type (en mm)"] )) if __name__ == '__main__': main()