diff --git a/chaudronnerie/CHO30.FCStd b/chaudronnerie/CHO30.FCStd index a2c3b6e..100e13c 100644 Binary files a/chaudronnerie/CHO30.FCStd and b/chaudronnerie/CHO30.FCStd differ diff --git a/tools/export-all-parts.py b/tools/export-all-parts.py index 436b2fb..ca6c16a 100644 --- a/tools/export-all-parts.py +++ b/tools/export-all-parts.py @@ -1,15 +1,13 @@ -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 os import FreeCAD as App import Import +import ImportGui -script_folder = os.path.dirname(__file__) -project_folder = os.path.realpath(script_folder + '/..') +#script_folder = os.path.dirname(__file__) +#project_folder = os.path.realpath(script_folder + '/..') +project_folder = os.getcwd() output_folder = project_folder + '-STEP' def convert_file(file_name, output_format): @@ -64,6 +62,49 @@ def convert_file(file_name, output_format): while len(FreeCAD.listDocuments().values()) > 0: FreeCAD.closeDocument(list(FreeCAD.listDocuments().values())[0].Name) +def convert_assembly(file_name, output_format): + print(file_name) + + doc = App.open(project_folder + '/' + file_name) + + root_objects = [] + main_object = None + + # remove all objects that are not visible, or not in the TypeId whitelist, because we don't want to export those + need_check_objects = True + while need_check_objects: + need_check_objects = False + for obj in doc.Objects: + if not obj.Visibility or obj.TypeId not in ['Part::Feature', 'Part::FeaturePython', 'PartDesign::Body', 'Part::Mirroring', 'Part::Cut', 'Part::Part2DObjectPython', 'Part::MultiFuse', 'Part::Loft', 'Part::Torus', 'Part::Cylinder', 'App::DocumentObjectGroup', 'App::Part', 'App::Link']: + #print('removing ' + obj.Name + ' ('+obj.Label+')') + doc.removeObject(obj.Name) + need_check_objects = True + break + + 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 assembly in file " + file_name + " (found " + str(len(root_objects)) + " root object(s), none named like the document " + doc.Name + ")") + + 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) + + ImportGui.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' @@ -77,3 +118,8 @@ for folder in folders: print(source_path) convert_file(source_path, 'step') +convert_assembly('vheliotech.FCStd', 'step') + +# exit FreeCAD +FreeCADGui.getMainWindow().close() + diff --git a/tools/export-all-parts.sh b/tools/export-all-parts.sh new file mode 100755 index 0000000..58b1494 --- /dev/null +++ b/tools/export-all-parts.sh @@ -0,0 +1,4 @@ +#!/bin/bash +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +cd $SCRIPT_DIR/.. +~/dev/FreeCAD-asm3-Daily-Conda-Py3.10-20221128-glibc2.12-x86_64.AppImage tools/export-all-parts.py diff --git a/vheliotech.FCStd b/vheliotech.FCStd index 64174c9..390bdd0 100644 Binary files a/vheliotech.FCStd and b/vheliotech.FCStd differ