def formatDuration(self, seconds: int) -> str: return Duration(seconds).getDisplayString(DurationFormat.Format.Short)
def _initPrintTimeMessageValues(self, build_plate_number): # Full fill message values using keys from _print_time_message_translations self._print_time_message_values[build_plate_number] = {} for key in self._print_time_message_translations.keys(): self._print_time_message_values[build_plate_number][ key] = Duration(None, self)
def _initPrintTimesPerFeature(self, build_plate_number: int) -> None: # Full fill message values using keys from _print_time_message_translations self._print_times_per_feature[build_plate_number] = {} for key in self._print_time_message_translations.keys(): self._print_times_per_feature[build_plate_number][key] = Duration( None, self)
def __call__(self, job: pywim.http.thor.JobInfo) -> bool: Logger.log("d", "Current job status: {}".format(job.status)) self.connector.api_connection.clearErrorMessage() self.connector._proxy.jobProgress = job.progress if job.status == pywim.http.thor.JobInfo.Status.queued and self.connector.status is not SmartSliceCloudStatus.Queued: self.connector.status = SmartSliceCloudStatus.Queued self.connector.updateSliceWidget() elif job.status == pywim.http.thor.JobInfo.Status.running and self.connector.status not in (SmartSliceCloudStatus.BusyOptimizing, SmartSliceCloudStatus.BusyValidating): self.connector.status = self._previous_status self.connector.updateSliceWidget() if job.status == pywim.http.thor.JobInfo.Status.running and self.connector.status is SmartSliceCloudStatus.BusyOptimizing: self.connector._proxy.sliceStatus = "Optimizing... (<i>Remaining Time: {}</i>)".format(Duration(job.runtime_remaining).getDisplayString()) return self.connector.cloudJob.canceled if self.connector.cloudJob else True
def __init__(self) -> None: super().__init__() # Primary Button (Slice/Validate/Optimize) self._sliceStatusEnum = SmartSliceCloudStatus.Errors self._sliceStatus = "_Status" self._sliceHint = "_Hint" self._sliceButtonText = "_ButtonText" self._sliceButtonEnabled = False self._sliceButtonVisible = True self._sliceButtonFillWidth = True self._sliceIconImage = "" self._sliceIconVisible = False self._sliceInfoOpen = False self._errors = {} self._job_progress = 0 self._progress_bar_visible = False # Secondary Button (Preview/Cancel) self._secondaryButtonText = "_SecondaryText" self._secondaryButtonFillWidth = False self._secondaryButtonVisible = False self._loadDialog = Dialog.Dialog() self._resultsTableDialog = Dialog.Dialog() # Proxy Values (DO NOT USE DIRECTLY) self._targetFactorOfSafety = 2.0 self._targetMaximalDisplacement = 1.0 self._safetyFactorColor = "#000000" self._maxDisplaceColor = "#000000" # Use-case & Requirements Cache self.reqsMaxDeflect = self._targetMaximalDisplacement # Results table self._resultsTable = ResultTableData() self._resultsTable.updateDisplaySignal.connect( self.updatePropertiesFromResults) self._resultsTable.resultsUpdated.connect(self._resultsTableUpdated) # Properties (mainly) for the sliceinfo widget self._resultSafetyFactor = 0.0 #copy.copy(self._targetFactorOfSafety) self._resultMaximalDisplacement = 0.0 #copy.copy(self._targetMaximalDisplacement) self._resultTimeTotal = Duration() self._resultTimeInfill = Duration() self._resultTimeInnerWalls = Duration() self._resultTimeOuterWalls = Duration() self._resultTimeRetractions = Duration() self._resultTimeSkin = Duration() self._resultTimeSkirt = Duration() self._resultTimeTravel = Duration() self._resultTimes = (self._resultTimeInfill, self._resultTimeInnerWalls, self._resultTimeOuterWalls, self._resultTimeRetractions, self._resultTimeSkin, self._resultTimeSkirt, self._resultTimeTravel) self._percentageTimeInfill = 0.0 self._percentageTimeInnerWalls = 0.0 self._percentageTimeOuterWalls = 0.0 self._percentageTimeRetractions = 0.0 self._percentageTimeSkin = 0.0 self._percentageTimeSkirt = 0.0 self._percentageTimeTravel = 0.0 self.resultTimeInfillChanged.connect(self._onResultTimeChanged) self.resultTimeInnerWallsChanged.connect(self._onResultTimeChanged) self.resultTimeOuterWallsChanged.connect(self._onResultTimeChanged) self.resultTimeRetractionsChanged.connect(self._onResultTimeChanged) self.resultTimeSkinChanged.connect(self._onResultTimeChanged) self.resultTimeSkirtChanged.connect(self._onResultTimeChanged) self.resultTimeTravelChanged.connect(self._onResultTimeChanged) self._materialName = None self._materialCost = 0.0 self._materialLength = 0.0 self._materialWeight = 0.0
def __init__(self, parent = None): super().__init__(parent) self._current_print_time = Duration(None, self) self._print_times_per_feature = { "none": Duration(None, self), "inset_0": Duration(None, self), "inset_x": Duration(None, self), "skin": Duration(None, self), "support": Duration(None, self), "skirt": Duration(None, self), "infill": Duration(None, self), "support_infill": Duration(None, self), "travel": Duration(None, self), "retract": Duration(None, self), "support_interface": Duration(None, self) } self._material_lengths = [] self._material_weights = [] self._material_costs = [] self._pre_sliced = False self._backend = Application.getInstance().getBackend() if self._backend: self._backend.printDurationMessage.connect(self._onPrintDurationMessage) self._job_name = "" self._abbr_machine = "" Application.getInstance().globalContainerStackChanged.connect(self._setAbbreviatedMachineName) Application.getInstance().fileLoaded.connect(self.setJobName) Preferences.getInstance().preferenceChanged.connect(self._onPreferencesChanged) self._active_material_container = None Application.getInstance().getMachineManager().activeMaterialChanged.connect(self._onActiveMaterialChanged) self._onActiveMaterialChanged() self._material_amounts = []