Browse Source
création des schémas techniques 2D ajout de tools et utilitaire d'extraction de STEP (tubes) pour Wildowsdessins
11 changed files with 4275 additions and 1 deletions
After Width: | Height: | Size: 207 KiB |
After Width: | Height: | Size: 189 KiB |
After Width: | Height: | Size: 172 KiB |
After Width: | Height: | Size: 196 KiB |
@ -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') |
||||||
|
|
@ -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 |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue