Compare commits

...

1 Commits

Author SHA1 Message Date
Christian cc5bc85faa création schémas en v0.01 3 weeks ago
  1. 1138
      Images/L101.svg
  2. 997
      Images/L102.svg
  3. 883
      Images/M101.svg
  4. 1060
      Images/T101.svg
  5. 7
      README.md
  6. 167
      tools/export-all-parts.py
  7. 24
      tools/test.bat
  8. BIN
      tubes/L101.FCStd
  9. BIN
      tubes/L102.FCStd
  10. BIN
      tubes/M101.FCStd
  11. BIN
      tubes/T101.FCStd

1138
Images/L101.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 207 KiB

997
Images/L102.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 189 KiB

883
Images/M101.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 172 KiB

1060
Images/T101.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 196 KiB

7
README.md

@ -7,8 +7,13 @@ sur la base du travail de Macéo
--- attention ---
fait avec FreeCad v0.21.2, peut-être pas lisible correctement avec les versions antérieures
état au **08/03/2025** - 15h30
## itération 0.01 avec schémas techniques en 2D (.SVG)
(pas de changement du design 3D)
état au **05/03/2025** - 08h30
suite discussion du 3/5/25
### Dimensions:

167
tools/export-all-parts.py

@ -0,0 +1,167 @@
from pathlib import Path
import os
import FreeCAD as App
import Import
import ImportGui
project_folder = os.getcwd()
output_folder = project_folder + '/dist/STEP'
assemblies_output_folder = project_folder + '/dist/FCStd'
def close_all_docs():
while len(App.listDocuments().values()) > 0:
App.closeDocument(list(App.listDocuments().values())[0].Name)
def convert_file(file_name, output_format):
doc = App.open(project_folder + '\\' + file_name)
root_objects = []
main_object = None
#print("document: " + doc.Name)
print("document: " + doc.Name)
for obj in doc.Objects:
if len(obj.Parents) == 0:
#print(obj.Label)
print("Object Label : " + obj.Label)
root_objects.append(obj)
if obj.Label == doc.Name or obj.Label == doc.Name + ' (experimental)':
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 + ")")
if 'experimental' in main_object.Label or 'expérimental' in main_object.Label:
print('Document ' + doc.Name + ' is marked as experimental and will be ignored')
close_all_docs()
return
secondary_objects = []
code_obj = doc.getObjectsByLabel('Code_Tube_Draft')
#
print("len(code_obj) : " + str(len(code_obj)))
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 = main_object.newObject('PartDesign::Pocket','Pocket')
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)
if output_format.lower() == 'stpz':
import stepZ
stepZ.export([main_object], output_path)
else:
Import.export([main_object], output_path)
close_all_docs()
def convert_assembly(file_name, output_format):
print("Exporting assembly " + 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)
if output_format.lower() == 'stpz':
import stepZ
stepZ.export([main_object], output_path)
else:
ImportGui.export([main_object], output_path)
close_all_docs()
def export_configuration(doc, config_name, output_filename):
print('Generating assembly for configuration '+config_name+'...')
Gui.Selection.clearSelection()
Gui.Selection.addSelection('vheliotech','Model','Configurations.'+doc.getObjectsByLabel(config_name)[0].Name+'.')
Gui.runCommand('Asm4_applyConfiguration')
Gui.Selection.clearSelection()
doc.saveAs(assemblies_output_folder + '/' + output_filename + '.FCStd')
try:
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')
#
print ("back from convert")
# convert_assembly('vheliotech.FCStd', 'step')
# '''doc = App.open(project_folder + '/vheliotech.FCStd')
# export_configuration(doc, 'Config_Integrale', 'vheliotech-config-integrale')
# export_configuration(doc, 'Config_Solaire', 'vheliotech-config-solaire')
# export_configuration(doc, 'Config_Motorisee', 'vheliotech-config-motorisee')
# export_configuration(doc, 'Config_Basique', 'vheliotech-config-basique')
# close_all_docs()'''
except Exception as e:
print(e)
# exit FreeCAD
close_all_docs()
# FreeCADGui.getMainWindow().close()
Gui.runCommand('Std_Quit')

24
tools/test.bat

@ -0,0 +1,24 @@
:: Set the path to your FreeCAD executable here
set FREECAD=C:\Program Files\FreeCAD 0.21\bin\freecad.exe
set SCRIPT_DIR=%~dp0
echo %SCRIPT_DIR% >>%TMP%\toto.txt
cd %script_dir%
echo %cd% >>%TMP%\toto.txt
cd ..
echo %cd% >>%TMP%\toto.txt
:: rm -rf ./dist
:: Check script syntax before starting freecad
:: python3 -m py_compile tools/export-all-parts.py
:: Export all versioned files
:: mkdir -p dist/FCStd
:: git archive HEAD . | tar -x -C dist/FCStd
:: Start freecad to run the script. We must start freecad with GUI (otherwise we can't export colors). We start it hidden in a virtual framebuffer (xvfb) so that it can run cleanly in the background.
:: xvfb-run $FREECAD tools/export-all-parts.py
:: %freecad%/freecad.exe tools/export-all-parts.py
echo %freecad%
start "" "%freecad%" tools/export-all-parts.py

BIN
tubes/L101.FCStd

Binary file not shown.

BIN
tubes/L102.FCStd

Binary file not shown.

BIN
tubes/M101.FCStd

Binary file not shown.

BIN
tubes/T101.FCStd

Binary file not shown.
Loading…
Cancel
Save