freecad_install_path = '/home/youen/dev/FreeCAD-asm3-Daily-Conda-Py3.10-20221128-glibc2.12-x86_64' import sys sys.path.insert(0,freecad_install_path + '/usr/lib') from pathlib import Path import FreeCAD as App import Import script_folder = os.path.dirname(__file__) project_folder = os.path.realpath(script_folder + '/..') output_folder = project_folder + '-STEP' def convert_file(file_name, output_format): doc = App.open(project_folder + '/' + file_name) root_objects = [] main_object = None #print("document: " + doc.Name) for obj in doc.Objects: if len(obj.Parents) == 0: #print(obj.Label) root_objects.append(obj) if obj.Label == doc.Name: main_object = obj if main_object is None and len(root_objects) == 1: main_object = root_objects[0] if main_object is None: raise Exception("Can't find main object in file " + file_name + " (found " + str(len(root_objects)) + " root object(s), none named like the document " + doc.Name + ")") secondary_objects = [] code_obj = doc.getObjectsByLabel('Code_Tube_Draft') if len(code_obj) == 1: code_obj = code_obj[0] #code_obj.Label = 'Code_Tube' #secondary_objects.append(code_obj) # engrave code on tube code_pocket = main_object.newObjectAt('PartDesign::Pocket','Pocket', [code_obj]) code_pocket.Profile = code_obj code_pocket.Length = 0.2 code_pocket.recompute() main_object.recompute() if len(secondary_objects) > 0: group = doc.addObject('App::Part', 'Groupe') group.addObject(main_object) for obj in secondary_objects: group.addObject(obj) main_object = group output_path = output_folder + '/' + os.path.dirname(file_name) + '/' + Path(file_name).stem + '.' + output_format output_dir = os.path.dirname(output_path) if not os.path.exists(output_dir): os.makedirs(output_dir) Import.export([main_object], output_path) # close all documents while len(FreeCAD.listDocuments().values()) > 0: FreeCAD.closeDocument(list(FreeCAD.listDocuments().values())[0].Name) folders = [ 'chaudronnerie', 'tubes' ] for folder in folders: files = os.listdir(project_folder + '/' + folder) for source_file in files: if not source_file.endswith('.FCStd'): continue source_path = folder + '/' + source_file print(source_path) convert_file(source_path, 'step')