Last active
June 20, 2025 13:02
-
-
Save dzid26/e0ff365de43cabe658df9d93b92d1954 to your computer and use it in GitHub Desktop.
remove trailing space
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Copyright 2016, Jon Nordby <[email protected]>. Licensed LGPLv2+ & MIT | |
# [email protected]: ChatGPT + Deepseek R1 | |
""" | |
exportProject: | |
Exports all files in document which have names like "mypart [dxf]" or "otherpart[stl,step]" | |
to individual files in an export directory. Default prefix: 'export/$project-'. | |
Prints clean results to console only when exports occur. | |
""" | |
import os | |
import re | |
import FreeCAD | |
from PySide import QtGui | |
# Regex to extract part names and types | |
partTypeRegex = re.compile(r'^(.*)\[([,\w]+)\].*$') | |
# Export functions | |
def exportMesh(objs, p): import Mesh; Mesh.export(objs, p) | |
def exportDxf(objs, p): import importDXF; importDXF.export(objs, p) | |
def exportStep(objs, p): | |
for o in objs: o.Shape.exportStep(p) | |
supportedTypes = { | |
'stl': exportMesh, | |
'obj': exportMesh, | |
'step': exportStep, | |
'dxf': exportDxf, | |
} | |
def extractTypes(label): | |
match = re.search(partTypeRegex, label) | |
return (match.group(1), match.group(2).split(',')) if match else (label, []) | |
def exportDocument(doc, exportdir): | |
exported = [] | |
os.makedirs(exportdir, exist_ok=True) | |
docname = os.path.splitext(os.path.basename(doc.FileName))[0] if doc.FileName else "Untitled" | |
for obj in doc.Objects: | |
partname, types = extractTypes(obj.Label) | |
for t in types: | |
if t in supportedTypes: | |
filename = f"{docname}-{partname.strip()}.{t}" | |
filepath = os.path.join(exportdir, filename) | |
supportedTypes[t]([obj], filepath) | |
exported.append(filename) | |
return exported | |
def macromain(): | |
doc = FreeCAD.ActiveDocument | |
if not doc: | |
return | |
try: | |
# Handle unsaved documents | |
if not doc.FileName: | |
path = QtGui.QFileDialog.getSaveFileName( | |
None, "Save document before export", | |
"Untitled.FCStd", | |
"FreeCAD documents (*.FCStd)")[0] | |
if not path: | |
return | |
doc.saveAs(path) | |
if FreeCAD.GuiUp: | |
FreeCAD.Gui.updateGui() | |
doc.save() | |
if FreeCAD.GuiUp: | |
FreeCAD.Gui.SendMsgToActiveView("Save") | |
FreeCAD.Gui.updateGui() | |
doc.recompute() | |
exportdir = os.path.join(os.path.dirname(doc.FileName), 'export/') | |
exported_files = exportDocument(doc, exportdir) | |
if exported_files: | |
# Clean console output without timestamps | |
print("\n ============ Exported files ============") | |
print(exportdir.replace('\\', '/')) | |
for f in exported_files: | |
print("- ", f) | |
print("="*40 + "\n") | |
except Exception as e: | |
print("\n! Export error:", str(e), "\n") | |
if __name__ == '__main__' and FreeCAD.GuiUp: | |
macromain() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment