122 lines
5.5 KiB
Python
122 lines
5.5 KiB
Python
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
|
|
import time
|
|
|
|
def get_raw_data(obj:ScannedObject, ndigits:int, delta_z:int = 1)->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(delta_z):
|
|
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,delta_z:int= 1)->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(delta_z):
|
|
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
|
|
total_time = time.time()
|
|
print("Loading file...")
|
|
t = time.time()
|
|
obj = ScannedObject.from_obj_file("datasets/Barette/1 - BARETTE.obj")
|
|
print("File loaded in {} seconds".format(time.time()-t))
|
|
t = time.time()
|
|
print("Verticalising object...")
|
|
verticalise(obj)
|
|
print("Object verticalised in {} seconds".format(time.time()-t))
|
|
t = time.time()
|
|
print("Normalising object...")
|
|
obj.normalise()
|
|
print("Object normalised in {} seconds".format(time.time()-t))
|
|
|
|
# Calculate raw data and save it in a file
|
|
t = time.time()
|
|
data = get_raw_data(obj, 6,2)
|
|
print("Raw data calculated in {} seconds".format(time.time()-t))
|
|
t = time.time()
|
|
print("Saving data...")
|
|
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"] ))
|
|
print("Data saved in {} seconds".format(time.time()-t))
|
|
|
|
# Calculate discrete data and save it in a file
|
|
t = time.time()
|
|
print("Calculating discrete data...")
|
|
data = get_discrete_data(obj, 6,2)
|
|
print("Discrete data calculated in {} seconds".format(time.time()-t))
|
|
t = time.time()
|
|
print("Saving data...")
|
|
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)"] ))
|
|
print("Data saved in {} seconds".format(time.time()-t))
|
|
print("Total time : {} seconds".format(time.time()-total_time))
|
|
|
|
if __name__ == '__main__':
|
|
main() |