예제 #1
0
 def formatDuration(self, seconds: int) -> str:
     return Duration(seconds).getDisplayString(DurationFormat.Format.Short)
예제 #2
0
 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)
예제 #3
0
 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)
예제 #4
0
    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...&nbsp;&nbsp;&nbsp;&nbsp;(<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
예제 #6
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 = []