9
9
10
10
11
11
class DFCsvExporter (component ):
12
+ def _get_id (self , idx , i_result ):
13
+ """ Get the ID of the element """
14
+ counter = 0
15
+
16
+ if self .prefix == "beam" :
17
+ return idx
18
+ elif self .prefix == "joint" :
19
+ for idx_b , beam in enumerate (i_result .assembly .beams ):
20
+ for idx_j , joint in enumerate (beam .joints ):
21
+ if counter == idx :
22
+ return f"{ idx_b } --{ idx_b } --{ idx_j } "
23
+ counter += 1
24
+ elif self .prefix == "joint_face" :
25
+ for idx_b , beam in enumerate (i_result .assembly .beams ):
26
+ for idx_j , joint in enumerate (beam .joints ):
27
+ for idx_f , face in enumerate (joint .faces ):
28
+ if counter == idx :
29
+ return f"{ idx_b } --{ idx_j } --{ idx_f } "
30
+ counter += 1
31
+
32
+ def _write_csv (self , file_path , rows ):
33
+ """ Write the CSV file """
34
+ with open (file_path , mode = 'w' , newline = '' ) as file :
35
+ writer = csv .writer (file )
36
+ writer .writerow ([f"{ self .prefix } id" , "distances" , "min_deviation" , "max_deviation" , "std_deviation" , "rmse" ])
37
+ writer .writerows (rows )
38
+
39
+ def _prepare_row (self , idx , i_result ):
40
+ """ Prepare a row for the CSV file """
41
+ distances = [round (value , 4 ) for value in i_result .distances [idx ]]
42
+ min_dev = round (i_result .distances_min_deviation [idx ], 4 )
43
+ max_dev = round (i_result .distances_max_deviation [idx ], 4 )
44
+ std_dev = round (i_result .distances_sd_deviation [idx ], 4 )
45
+ rmse = round (i_result .distances_rmse [idx ], 4 )
46
+ distances_str = ";" .join (map (str , distances ))
47
+ return [self ._get_id (idx , i_result ), distances_str , min_dev , max_dev , std_dev , rmse ]
48
+
12
49
def RunScript (self ,
13
50
i_dump : bool ,
14
51
i_export_dir : str ,
@@ -17,31 +54,21 @@ def RunScript(self,
17
54
i_result : DFVizResults ):
18
55
19
56
if i_dump :
20
- # Ensure the export directory exists
21
57
os .makedirs (i_export_dir , exist_ok = True )
22
58
59
+ if len (i_result .assembly .beams ) == len (i_result .source ):
60
+ self .prefix = "beam"
61
+ elif len (i_result .assembly .all_joints ) == len (i_result .source ):
62
+ self .prefix = "joint"
63
+ elif len (i_result .assembly .all_joint_faces ) == len (i_result .source ):
64
+ self .prefix = "joint_face"
65
+
23
66
if i_export_seperate_files :
24
- # Export each list of values to a separate file
25
- for idx , list_of_values in enumerate (i_result .distances ):
26
- file_name = f"{ i_file_name } _{ idx + 1 } .csv"
27
- file_path = os .path .join (i_export_dir , file_name )
28
- with open (file_path , mode = 'w' , newline = '' ) as file :
29
- writer = csv .writer (file )
30
- writer .writerow ([list_of_values ])
67
+ for idx in range (len (i_result .source )):
68
+ element_id = self ._get_id ( idx , i_result )
69
+ file_path = os .path .join (i_export_dir , f"{ i_file_name } _{ self .prefix } _{ element_id } .csv" )
70
+ self ._write_csv (file_path , [self ._prepare_row (idx , i_result )])
31
71
else :
32
- # Export all values to a single file
33
72
file_path = os .path .join (i_export_dir , f"{ i_file_name } .csv" )
34
- with open (file_path , mode = 'w' , newline = '' ) as file :
35
- writer = csv .writer (file )
36
- for list_of_values in i_result .distances :
37
- writer .writerow ([list_of_values ])
38
-
39
- # if __name__ == "__main__":
40
- # com = DFCsvExporter()
41
- # o_viz_settings = com.RunScript(
42
- # i_dump,
43
- # i_export_dir,
44
- # i_file_name,
45
- # i_export_seperate_files,
46
- # i_result
47
- # )
73
+ rows = [self ._prepare_row (idx , i_result ) for idx in range (len (i_result .source ))]
74
+ self ._write_csv (file_path , rows )
0 commit comments