From 089b7d40b53b453674f8ea2c47c68280dd03fa53 Mon Sep 17 00:00:00 2001 From: Syres916 <46537884+Syres916@users.noreply.github.com> Date: Mon, 11 Sep 2023 18:24:57 +0100 Subject: [PATCH] [Path] Improve Sanity to generate html output without... (#5) ...the need for dependences. --- src/Mod/Path/CMakeLists.txt | 4 + src/Mod/Path/Path/Main/Gui/Sanity.py | 1052 ++++++++++++++++- src/Mod/Path/Path/Main/Gui/Sanity_Bulb.svg | 637 ++++++++++ src/Mod/Path/Path/Main/Gui/Sanity_Caution.svg | 88 ++ src/Mod/Path/Path/Main/Gui/Sanity_Note.svg | 281 +++++ src/Mod/Path/Path/Main/Gui/Sanity_Warning.svg | 71 ++ 6 files changed, 2108 insertions(+), 25 deletions(-) create mode 100644 src/Mod/Path/Path/Main/Gui/Sanity_Bulb.svg create mode 100644 src/Mod/Path/Path/Main/Gui/Sanity_Caution.svg create mode 100644 src/Mod/Path/Path/Main/Gui/Sanity_Note.svg create mode 100644 src/Mod/Path/Path/Main/Gui/Sanity_Warning.svg diff --git a/src/Mod/Path/CMakeLists.txt b/src/Mod/Path/CMakeLists.txt index 4e00a938d5..f9c0ae30e7 100644 --- a/src/Mod/Path/CMakeLists.txt +++ b/src/Mod/Path/CMakeLists.txt @@ -95,6 +95,10 @@ SET(PathPythonMainGui_SRCS Path/Main/Gui/JobDlg.py Path/Main/Gui/PreferencesJob.py Path/Main/Gui/Sanity.py + Path/Main/Gui/Sanity_Bulb.svg + Path/Main/Gui/Sanity_Caution.svg + Path/Main/Gui/Sanity_Note.svg + Path/Main/Gui/Sanity_Warning.svg Path/Main/Gui/Simulator.py ) diff --git a/src/Mod/Path/Path/Main/Gui/Sanity.py b/src/Mod/Path/Path/Main/Gui/Sanity.py index f668906c7e..8e7834634d 100644 --- a/src/Mod/Path/Path/Main/Gui/Sanity.py +++ b/src/Mod/Path/Path/Main/Gui/Sanity.py @@ -35,7 +35,9 @@ import Path import Path.Log from collections import Counter from datetime import datetime +import codecs import os +import time import webbrowser import subprocess from PySide.QtCore import QT_TRANSLATE_NOOP @@ -80,7 +82,7 @@ class CommandPathSanity: if "%M" in filepath: pref = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macro") M = pref.GetString("MacroPath", FreeCAD.getUserAppDataDir()) - filepath = filepath.replace("%M", M+ os.path.sep) + filepath = filepath.replace("%M", M + os.path.sep) # strip out all substitutions related to output splitting for elem in ["%O", "%W", "%T", "%t", "%S"]: @@ -130,16 +132,33 @@ class CommandPathSanity: def Activated(self): # if everything is ok, execute - self.squawkData = {"items": []} + if FreeCAD.GuiUp: + currentCamera = FreeCADGui.ActiveDocument.ActiveView.getCameraType() + if currentCamera != "Perspective": + FreeCADGui.SendMsgToActiveView("PerspectiveCamera") + FreeCADGui.updateGui() + time.sleep(4) + FreeCAD.Console.PrintLog( + "Path - Sanity - Changing to Perspective Camera temporarily\n" + ) + FreeCADGui.addIconPath(":/icons") + self.squawkData = {"items": []} obj = FreeCADGui.Selection.getSelectionEx()[0].Object self.outputpath = self.resolveOutputPath(obj) Path.Log.debug(f"outputstring: {self.outputpath}") data = self.__summarize(obj) html = self.__report(data) if html is not None: - FreeCAD.Console.PrintMessage("HTML report written to {}".format(html)) webbrowser.open(html) + if FreeCAD.GuiUp: + if currentCamera != "Perspective": + FreeCADGui.SendMsgToActiveView("OrthographicCamera") + FreeCADGui.updateGui() + time.sleep(0.5) + FreeCAD.Console.PrintLog( + "Path - Sanity - Changing back to Orthographic Camera\n" + ) def __makePicture(self, obj, imageName): """ @@ -187,6 +206,983 @@ class CommandPathSanity: """ generates an asciidoc file with the report information """ + Title = translate("Path_Sanity", "Setup Report for FreeCAD Job") + ToC = translate("Path_Sanity", "Table of Contents") + PartInfoHeading = translate("Path_Sanity", "Part Information") + RunSumHeading = translate("Path_Sanity", "Run Summary") + RoughStkHeading = translate("Path_Sanity", "Rough Stock") + ToolDataHeading = translate("Path_Sanity", "Tool Data") + OutputHeading = translate("Path_Sanity", "Output") + FixturesHeading = translate("Path_Sanity", "Fixtures") + SquawksHeading = translate("Path_Sanity", "Squawks") + + PartLabel = translate("Path_Sanity", "Base Object(s)") + SequenceLabel = translate("Path_Sanity", "Job Sequence") + DescriptionLabel = translate("Path_Sanity", "Job Description") + JobTypeLabel = translate("Path_Sanity", "Job Type") + CADLabel = translate("Path_Sanity", "CAD File Name") + LastSaveLabel = translate("Path_Sanity", "Last Save Date") + CustomerLabel = translate("Path_Sanity", "Customer") + DesignerLabel = translate("Path_Sanity", "Designer") + + b = data["baseData"] + d = data["designData"] + jobname = d["JobLabel"] + + opLabel = translate("Path_Sanity", "Operation") + zMinLabel = translate("Path_Sanity", "Minimum Z Height") + zMaxLabel = translate("Path_Sanity", "Maximum Z Height") + cycleTimeLabel = translate("Path_Sanity", "Cycle Time") + + coolantLabel = translate("Path_Sanity", "Coolant") + jobTotalLabel = translate("Path_Sanity", "TOTAL JOB") + d = data["toolData"] + toolLabel = translate("Path_Sanity", "Tool Number") + imageCounter = 1 + reportHtmlTemplate = """ + + + +
+ +
+
+
+
+ +""" + reportHtmlTemplate += ToC + reportHtmlTemplate += """ +
++ + +""" + reportHtmlTemplate += PartInfoHeading + reportHtmlTemplate += """ +
++ + +""" + reportHtmlTemplate += RunSumHeading + reportHtmlTemplate += """ +
++ + +""" + reportHtmlTemplate += RoughStkHeading + reportHtmlTemplate += """ +
++ + +""" + reportHtmlTemplate += ToolDataHeading + reportHtmlTemplate += """ +
""" + for key, value in d.items(): + reportHtmlTemplate += """ ++ + +""" + reportHtmlTemplate += ( + toolLabel + + ": T" + + key + + "
" + ) + reportHtmlTemplate += """ ++ + +""" + reportHtmlTemplate += OutputHeading + " (Gcode)" + reportHtmlTemplate += """ +
++ + +""" + reportHtmlTemplate += FixturesHeading + reportHtmlTemplate += """ +
++ + +""" + reportHtmlTemplate += SquawksHeading + reportHtmlTemplate += """ +
+
+
+
+
+
+ """ + reportHtmlTemplate += PartLabel + reportHtmlTemplate += """ + + |
+
+
|
+
+ |
+ ||
+ """ + reportHtmlTemplate += SequenceLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["Sequence"] + reportHtmlTemplate += """ + |
+ |||
+ """ + reportHtmlTemplate += JobTypeLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["JobType"] + reportHtmlTemplate += """ + |
+ |||
+ """ + reportHtmlTemplate += DescriptionLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["JobDescription"] + reportHtmlTemplate += """ + |
+ |||
+ """ + reportHtmlTemplate += CADLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["FileName"] + reportHtmlTemplate += """ + |
+ |||
+ """ + reportHtmlTemplate += LastSaveLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["LastModifiedDate"] + reportHtmlTemplate += """ + |
+ |||
+ """ + reportHtmlTemplate += CustomerLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["Customer"] + reportHtmlTemplate += """ + |
+
+ """ + reportHtmlTemplate += opLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += zMinLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += zMaxLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += coolantLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += cycleTimeLabel + reportHtmlTemplate += """ + |
+
+ """ + reportHtmlTemplate += i["opName"] + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += i["minZ"] + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += i["maxZ"] + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += i["coolantMode"] + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += i["cycleTime"] + reportHtmlTemplate += """ + + |
+
+ """ + reportHtmlTemplate += materialLabel + reportHtmlTemplate += """ + + |
+ + """ + reportHtmlTemplate += d["material"] + " " + reportHtmlTemplate += """ + |
+ |
+
+ """ + reportHtmlTemplate += xDimLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["xLen"] + reportHtmlTemplate += """ + |
+ |
+ """ + reportHtmlTemplate += yDimLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["yLen"] + reportHtmlTemplate += """ + |
+ |
+ """ + reportHtmlTemplate += zDimLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["zLen"] + reportHtmlTemplate += """ + |
+
+ """ + reportHtmlTemplate += descriptionLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += value["description"] + reportHtmlTemplate += """ + + |
+
+ |
+
+ """ + reportHtmlTemplate += manufLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += value["manufacturer"] + reportHtmlTemplate += """ + |
+ |
+ """ + reportHtmlTemplate += partNumberLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += value["partNumber"] + reportHtmlTemplate += """ + |
+ |
+ """ + reportHtmlTemplate += urlLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += value["url"] + reportHtmlTemplate += """ + |
+ |
+ """ + reportHtmlTemplate += shapeLabel + reportHtmlTemplate += """ + | + """ + reportHtmlTemplate += value["shape"] + reportHtmlTemplate += """ + |
+ |
+ """ + reportHtmlTemplate += inspectionNotesLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += value["inspectionNotes"] + reportHtmlTemplate += """ + |
+ |
+ """ + reportHtmlTemplate += diameterLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += value["diameter"] + imageCounter += 1 + reportHtmlTemplate += """ + |
+ |
+ """ + reportHtmlTemplate += opLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += tcLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += feedLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += speedLabel + reportHtmlTemplate += """ + |
+
+ """ + reportHtmlTemplate += o["Operation"] + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += o["ToolController"] + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += o["Feed"] + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += o["Speed"] + reportHtmlTemplate += """ + |
+
+ """ + reportHtmlTemplate += gcodeFileLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["lastgcodefile"] + reportHtmlTemplate += """ + |
+
+ """ + reportHtmlTemplate += lastpostLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["lastpostprocess"] + reportHtmlTemplate += """ + |
+
+ """ + reportHtmlTemplate += stopsLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["optionalstops"] + reportHtmlTemplate += """ + |
+
+ """ + reportHtmlTemplate += programmerLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["programmer"] + reportHtmlTemplate += """ + |
+
+ """ + reportHtmlTemplate += machineLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["machine"] + reportHtmlTemplate += """ + |
+
+ """ + reportHtmlTemplate += postLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["postprocessor"] + reportHtmlTemplate += """ + |
+
+ """ + reportHtmlTemplate += flagsLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["postprocessorFlags"] + reportHtmlTemplate += """ + |
+
+ """ + reportHtmlTemplate += fileSizeLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["filesize"] + reportHtmlTemplate += """ + |
+
+ """ + reportHtmlTemplate += lineCountLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["linecount"] + reportHtmlTemplate += """ + |
+
+ """ + reportHtmlTemplate += offsetsLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["fixtures"] + reportHtmlTemplate += """ + |
+
+ """ + reportHtmlTemplate += orderByLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += d["orderBy"] + reportHtmlTemplate += """ + |
+
+ """ + reportHtmlTemplate += datumLabel + reportHtmlTemplate += """ + |
+
+ |
+
+ """ + reportHtmlTemplate += noteLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += operatorLabel + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += dateLabel + reportHtmlTemplate += """ + |
+ |||||
+
|
+ + """ + reportHtmlTemplate += i["Operator"] + reportHtmlTemplate += """ + |
+ + """ + reportHtmlTemplate += i["Date"] + reportHtmlTemplate += """ + |
+
+
+