Просмотр исходного кода

- start working on QRCode Tool - not working yet

Marius Stanciu 6 лет назад
Родитель
Сommit
bf670d7967

+ 5 - 0
FlatCAMApp.py

@@ -2523,6 +2523,7 @@ class App(QtCore.QObject):
         self.image_tool = None
         self.pcb_wizard_tool = None
         self.cal_exc_tool = None
+        self.qrcode_tool = None
 
         # always install tools only after the shell is initialized because the self.inform.emit() depends on shell
         self.install_tools()
@@ -3109,6 +3110,9 @@ class App(QtCore.QObject):
         self.paint_tool.install(icon=QtGui.QIcon('share/paint16.png'), pos=self.ui.menutool,
                                 before=self.sub_tool.menuAction, separator=True)
 
+        self.qrcode_tool = QRCode(self)
+        self.qrcode_tool.install(icon=QtGui.QIcon('share/qrcode32.png'), pos=self.ui.menutool)
+
         self.transform_tool = ToolTransform(self)
         self.transform_tool.install(icon=QtGui.QIcon('share/transform.png'), pos=self.ui.menuoptions, separator=True)
 
@@ -3232,6 +3236,7 @@ class App(QtCore.QObject):
 
         self.ui.calculators_btn.triggered.connect(lambda: self.calculator_tool.run(toggle=True))
         self.ui.transform_btn.triggered.connect(lambda: self.transform_tool.run(toggle=True))
+        self.ui.qrcode_btn.triggered.connect(lambda: self.qrcode_tool.run(toggle=True))
 
     def object2editor(self):
         """

+ 1 - 0
README.md

@@ -12,6 +12,7 @@ CAD program, and create G-Code for Isolation routing.
 
 - working on the Calibrate Excellon Tool
 - finished the GUI layout for the Calibrate Excellon Tool
+- start working on QRCode Tool - not working yet
 
 21.10.2019
 

+ 2 - 0
flatcamGUI/FlatCAMGUI.py

@@ -755,6 +755,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
 
         self.calculators_btn = self.toolbartools.addAction(QtGui.QIcon('share/calculator24.png'), _("Calculators Tool"))
         self.transform_btn = self.toolbartools.addAction(QtGui.QIcon('share/transform.png'), _("Transform Tool"))
+        self.qrcode_btn = self.toolbartools.addAction(QtGui.QIcon('share/qrcode32.png'), _("QRCode Tool"))
 
         # ########################################################################
         # ########################## Excellon Editor Toolbar# ####################
@@ -2171,6 +2172,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
         self.calculators_btn = self.toolbartools.addAction(QtGui.QIcon('share/calculator24.png'),
                                                            _("Calculators Tool"))
         self.transform_btn = self.toolbartools.addAction(QtGui.QIcon('share/transform.png'), _("Transform Tool"))
+        self.qrcode_btn = self.toolbartools.addAction(QtGui.QIcon('share/qrcode32.png'), _("QRCode Tool"))
 
         # ## Excellon Editor Toolbar # ##
         self.select_drill_btn = self.exc_edit_toolbar.addAction(QtGui.QIcon('share/pointer32.png'), _("Select"))

+ 113 - 0
flatcamTools/ToolQRCode.py

@@ -0,0 +1,113 @@
+# ##########################################################
+# FlatCAM: 2D Post-processing for Manufacturing            #
+# File Author: Marius Adrian Stanciu (c)                   #
+# Date: 3/10/2019                                          #
+# MIT Licence                                              #
+# ##########################################################
+
+from PyQt5 import QtWidgets, QtCore
+
+from FlatCAMTool import FlatCAMTool
+from flatcamGUI.GUIElements import FCDoubleSpinner, EvalEntry, FCCheckBox
+from camlib import *
+
+from shapely.geometry import Point
+from shapely.geometry.base import *
+
+import math
+import io
+from datetime import datetime
+import logging
+import pyqrcode
+from lxml import etree as ET
+
+import gettext
+import FlatCAMTranslation as fcTranslate
+import builtins
+
+fcTranslate.apply_language('strings')
+if '_' not in builtins.__dict__:
+    _ = gettext.gettext
+
+log = logging.getLogger('base')
+
+
+class QRCode(FlatCAMTool):
+
+    toolName = _("QRCode Tool")
+
+    def __init__(self, app):
+        FlatCAMTool.__init__(self, app)
+
+        self.app = app
+        self.canvas = self.app.plotcanvas
+
+        self.decimals = 4
+        self.units = ''
+
+        # ## Title
+        title_label = QtWidgets.QLabel("%s" % self.toolName)
+        title_label.setStyleSheet("""
+                        QLabel
+                        {
+                            font-size: 16px;
+                            font-weight: bold;
+                        }
+                        """)
+        self.layout.addWidget(title_label)
+
+    def run(self, toggle=True):
+        self.app.report_usage("QRCode()")
+
+        if toggle:
+            # if the splitter is hidden, display it, else hide it but only if the current widget is the same
+            if self.app.ui.splitter.sizes()[0] == 0:
+                self.app.ui.splitter.setSizes([1, 1])
+            else:
+                try:
+                    if self.app.ui.tool_scroll_area.widget().objectName() == self.toolName:
+                        # if tab is populated with the tool but it does not have the focus, focus on it
+                        if not self.app.ui.notebook.currentWidget() is self.app.ui.tool_tab:
+                            # focus on Tool Tab
+                            self.app.ui.notebook.setCurrentWidget(self.app.ui.tool_tab)
+                        else:
+                            self.app.ui.splitter.setSizes([0, 1])
+                except AttributeError:
+                    pass
+        else:
+            if self.app.ui.splitter.sizes()[0] == 0:
+                self.app.ui.splitter.setSizes([1, 1])
+
+        FlatCAMTool.run(self)
+
+        self.set_tool_ui()
+
+        self.app.ui.notebook.setTabText(2, _("QRCode Tool"))
+
+        self.execute()
+
+    def install(self, icon=None, separator=None, **kwargs):
+        FlatCAMTool.install(self, icon, separator, shortcut='ALT+Q', **kwargs)
+
+    def set_tool_ui(self):
+        self.units = self.app.ui.general_defaults_form.general_app_group.units_radio.get_value().upper()
+
+    def execute(self):
+        svg_file = io.StringIO('')
+        svg_class = pyqrcode.QRCode("FlatCAM - 2D - Computer aided PCB Manufacturing Tool")
+        svg_class.svg(svg_file, scale=4, xmldecl=False)
+
+        def obj_init(geo_obj, app_obj):
+            print(svg_file)
+            geo_obj.import_svg(svg_file)
+
+        with self.app.proc_container.new("Import SVG"):
+
+            # Object creation
+            self.app.new_object('geometry', 'generated_qrcode', obj_init, plot=False)
+
+            # # Register recent file
+            # self.app.file_opened.emit("svg", img)
+            #
+            # # GUI feedback
+            # self.app.inform.emit("Opened: " + img)

+ 1 - 0
flatcamTools/__init__.py

@@ -26,6 +26,7 @@ from flatcamTools.ToolPcbWizard import PcbWizard
 from flatcamTools.ToolPDF import ToolPDF
 from flatcamTools.ToolProperties import Properties
 
+from flatcamTools.ToolQRCode import QRCode
 from flatcamTools.ToolRulesCheck import RulesCheck
 
 from flatcamTools.ToolShell import FCShell

BIN
share/qrcode32.png


+ 1 - 1
tclCommands/TclCommandImportSvg.py

@@ -1,4 +1,4 @@
-from ObjectCollection import *
+from camlib import *
 from tclCommands.TclCommand import TclCommandSignaled