Commit c4884cf1 authored by kliment's avatar kliment

Merge pull request #75 from sdevijver/master

Print time guesstimation on file load
parents d84e1085 262b000f
......@@ -2,6 +2,7 @@
import cmd, printcore, sys
import glob, os, time
import sys, subprocess
from math import sqrt
if os.name=="nt":
try:
import _winreg
......@@ -80,7 +81,60 @@ def totalelength(g):
tot+=cur
return tot
def get_coordinate_value(axis, parts):
for i in parts:
if (axis in i):
return float(i[1:])
return None
def estimate_duration(g):
extra_cost_per_movement = 0.02
total_duration = 0
feedrate = 0
X_last_position = 0
Y_last_position = 0
for i in g:
if "G1" in i and ("X" in i or "Y" in i or "F" in i or "E" in i):
parts = i.split(" ")
X = get_coordinate_value("X", parts[1:])
Y = get_coordinate_value("Y", parts[1:])
F = get_coordinate_value("F", parts[1:])
E = get_coordinate_value("E", parts[1:])
if (F is not None):
feedrate = F / 60
distance = 0
if (X is None and Y is None and E is not None):
distance = abs(E)
elif (X is not None and Y is None):
distance = X - X_last_position
X_last_position = X
elif (X is None and Y is not None):
distance = Y - Y_last_position
Y_last_position = Y
elif (X is not None and Y is not None):
X_distance = X - X_last_position
Y_distance = Y - Y_last_position
distance = sqrt(X_distance * X_distance + Y_distance * Y_distance)
X_last_position = X
Y_last_position = Y
if (feedrate == 0 or distance == 0): continue
time_for_move = distance / feedrate
acceleration = feedrate / time_for_move
halfway_feedrate = acceleration * time_for_move / 2
duration = halfway_feedrate * 2 / acceleration
total_duration += duration + extra_cost_per_movement
mod_minutes = total_duration % (60 * 60)
mod_seconds = mod_minutes % 60
return "{0:02d}h{1:02d}m".format(int((total_duration - mod_minutes) / (60 * 60)), int((mod_minutes - mod_seconds) / 60))
class Settings:
#def _temperature_alias(self): return {"pla":210,"abs":230,"off":0}
#def _temperature_validate(self,v):
......
......@@ -1166,6 +1166,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole):
print _("the print goes from"),Xmin,_("mm to"),Xmax,_("mm in X\nand is"),Xtot,_("mm wide\n")
print _("the print goes from"),Ymin,_("mm to"),Ymax,_("mm in Y\nand is"),Ytot,_("mm wide\n")
print _("the print goes from"),Zmin,_("mm to"),Zmax,_("mm in Z\nand is"),Ztot,_("mm high\n")
print _("Estimated duration (pessimistic): "), pronsole.estimate_duration(self.f)
self.gviz.clear()
self.gwindow.p.clear()
for i in self.f:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment