framework/cg/freecad/Frames/printETA.py

98 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
import subprocess
import time
import FreeCAD
import Mesh
import gcoder
def export_to_stl(doc, output_dir):
objects = doc.Objects
for obj in objects:
if isinstance(obj, Part.Feature):
stl_path = os.path.join(output_dir, obj.Label + ".stl")
mesh = obj.Shape.tessellate(0.1)
# Создаем меш из геометрии объекта
mesh_obj = Mesh.Mesh(mesh)
# Проверяем, что меш содержит данные
if len(mesh_obj.Points) > 0:
# Экспортируем меш в формат STL
mesh_obj.write(stl_path)
def create_gcode(stl_dir, output_dir):
stl_files = [f for f in os.listdir(stl_dir) if f.endswith(".stl")]
for stl_file in stl_files:
stl_path = os.path.join(stl_dir, stl_file)
gcode_file = stl_file.replace(".stl", ".gcode")
gcode_path = os.path.join(output_dir, gcode_file)
# Команда для запуска Slic3r (в Ubuntu используется slic3r-пакет)
cmd = ["slic3r", "--load", "/home/mark-voltov/my_config.ini", "-o", gcode_path, stl_path]
# Запускаем Slic3r
subprocess.run(cmd)
def get_print_duration(gcode_dir):
gcoder.G
gcode_files = [f for f in os.listdir(gcode_dir) if f.endswith(".gcode")]
total_duration = 0
for gcode_file in gcode_files:
gcode_path = os.path.join(gcode_dir, gcode_file)
with open(gcode_path, "r") as file:
lines = file.readlines()
for line in lines:
if line.startswith("; estimated printing time"):
duration = float(line.split(":")[1].strip()) * 60
total_duration += duration
break
return total_duration
file_location = App.ActiveDocument.FileName
file_name = os.path.basename(file_location ) #eds_report.csv
location = os.path.dirname(file_location )
# Путь к документу FreeCAD
doc_path = file_location
# Каталог для сохранения STL-файлов
stl_dir = location + '/stl'
# Каталог для сохранения G-code файлов
gcode_dir = location + '/gcode'
# Открываем документ FreeCAD
doc = FreeCAD.open(doc_path)
# Экспортируем модель в файлы STL
export_to_stl(doc, stl_dir)
print("STL файлы успешно созданы.")
# Создаем G-code файлы с помощью Slic3r
create_gcode(stl_dir, gcode_dir)
print("G-code файлы успешно созданы.")
# Получаем оценочную длительность печати
print_duration = get_print_duration(gcode_dir)
print("Оценочная длительность печати: {} секунд.".format(print_duration))
# Закрываем документ FreeCAD
FreeCAD.closeDocument(doc)