vheliotech-freecad/tools/export-all-parts.py
Youen e3640f9c9d Fermeture des documents après chaque export de pièce
Evite un bug qui se produit lorsqu'un document est ouvert une seconde fois par le script (freecad change son nom, et donc le script ne trouve pas la pièce à exporter)
2023-03-31 14:49:59 +02:00

79 lines
2.2 KiB
Python

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')