99
1010
1111class 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+
1249 def RunScript (self ,
1350 i_dump : bool ,
1451 i_export_dir : str ,
@@ -17,31 +54,21 @@ def RunScript(self,
1754 i_result : DFVizResults ):
1855
1956 if i_dump :
20- # Ensure the export directory exists
2157 os .makedirs (i_export_dir , exist_ok = True )
2258
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+
2366 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 )])
3171 else :
32- # Export all values to a single file
3372 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