mirror of
https://github.com/vofy/fekt-scara.git
synced 2025-04-28 01:31:01 +02:00
74 lines
2.5 KiB
Python
Executable file
74 lines
2.5 KiB
Python
Executable file
#!/usr/bin/freecadcmd
|
|
|
|
import os
|
|
import FreeCAD as App # type: ignore
|
|
import FreeCADGui as Gui # type: ignore
|
|
|
|
# Define the project root directory
|
|
project_root = os.path.abspath(
|
|
os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir)
|
|
)
|
|
|
|
# Define the CAD directory
|
|
cad_dir = os.path.join(project_root, "cad")
|
|
|
|
# Define the output directory
|
|
output_dir = os.path.join(project_root, "tex", "images", "2_prakticka_cast")
|
|
|
|
# Ensure the output directory exists
|
|
os.makedirs(output_dir, exist_ok=True)
|
|
|
|
# Iterate over all files in the CAD directory (excluding nested directories)
|
|
for file in os.listdir(cad_dir):
|
|
if file.endswith(".FCStd"):
|
|
file_path = os.path.join(cad_dir, file)
|
|
App.Console.PrintMessage(f"\nProcessing {file_path}\n")
|
|
|
|
# Open the FreeCAD document
|
|
doc = App.open(file_path)
|
|
App.setActiveDocument(doc.Name)
|
|
App.ActiveDocument.recompute()
|
|
|
|
# Check if the document contains any assemblies (App::Part)
|
|
has_assembly = any(
|
|
hasattr(obj, "Type") and obj.Type == "Assembly" for obj in doc.Objects
|
|
)
|
|
|
|
if has_assembly:
|
|
# Gui.showMainWindow()
|
|
|
|
# Set visibility to true for all objects in the assembly and hide all objects outside of the assembly
|
|
for obj in doc.Objects:
|
|
if hasattr(obj, "Type") and obj.Type == "Assembly":
|
|
for sub_obj in obj.OutList:
|
|
if sub_obj.ViewObject is not None:
|
|
sub_obj.ViewObject.Visibility = True
|
|
else:
|
|
if obj.ViewObject is not None:
|
|
obj.ViewObject.Visibility = False
|
|
|
|
for view in [
|
|
"ViewIsometric",
|
|
"ViewFront",
|
|
"ViewTop",
|
|
"ViewRight",
|
|
"ViewRear",
|
|
"ViewBottom",
|
|
"ViewLeft",
|
|
]:
|
|
Gui.ActiveDocument.sendMsgToViews(view)
|
|
output_path = os.path.join(
|
|
output_dir, f'{file.replace(".FCStd", "")}_{view}.png'
|
|
)
|
|
Gui.ActiveDocument.ActiveView.saveImage(
|
|
output_path, 1920, 1080, "Transparent"
|
|
)
|
|
App.Console.PrintMessage(f"Exported {view} view to {output_path}\n")
|
|
|
|
else:
|
|
App.Console.PrintMessage(
|
|
f"No assembly found in {file_path}, skipping image generation.\n"
|
|
)
|
|
|
|
# Close the FreeCAD document
|
|
App.closeDocument(doc.Name)
|