@ -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
from pathlib import Path
import os
import FreeCAD as App
import FreeCAD as App
import Import
import Import
import ImportGui
script_folder = os . path . dirname ( __file__ )
#script_folder = os.path.dirname(__file__)
project_folder = os . path . realpath ( script_folder + ' /.. ' )
#project_folder = os.path.realpath(script_folder + '/..')
project_folder = os . getcwd ( )
output_folder = project_folder + ' -STEP '
output_folder = project_folder + ' -STEP '
def convert_file ( file_name , output_format ) :
def convert_file ( file_name , output_format ) :
@ -64,6 +62,49 @@ def convert_file(file_name, output_format):
while len ( FreeCAD . listDocuments ( ) . values ( ) ) > 0 :
while len ( FreeCAD . listDocuments ( ) . values ( ) ) > 0 :
FreeCAD . closeDocument ( list ( FreeCAD . listDocuments ( ) . values ( ) ) [ 0 ] . Name )
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 = [
folders = [
' chaudronnerie ' ,
' chaudronnerie ' ,
' tubes '
' tubes '
@ -77,3 +118,8 @@ for folder in folders:
print ( source_path )
print ( source_path )
convert_file ( source_path , ' step ' )
convert_file ( source_path , ' step ' )
convert_assembly ( ' vheliotech.FCStd ' , ' step ' )
# exit FreeCAD
FreeCADGui . getMainWindow ( ) . close ( )