diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 8d9b3567..b7be068e 100644 --- a/FlatCAMApp.py +++ b/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): """ diff --git a/README.md b/README.md index 4eeb6cd1..0a20de74 100644 --- a/README.md +++ b/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 diff --git a/flatcamGUI/FlatCAMGUI.py b/flatcamGUI/FlatCAMGUI.py index 0e13913a..16be60fb 100644 --- a/flatcamGUI/FlatCAMGUI.py +++ b/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")) diff --git a/flatcamTools/ToolQRCode.py b/flatcamTools/ToolQRCode.py new file mode 100644 index 00000000..2305f69e --- /dev/null +++ b/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) diff --git a/flatcamTools/__init__.py b/flatcamTools/__init__.py index f4b48149..87b63d10 100644 --- a/flatcamTools/__init__.py +++ b/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 diff --git a/share/qrcode32.png b/share/qrcode32.png new file mode 100644 index 00000000..e2856f8c Binary files /dev/null and b/share/qrcode32.png differ diff --git a/tclCommands/TclCommandImportSvg.py b/tclCommands/TclCommandImportSvg.py index d29eb99a..3edea7ef 100644 --- a/tclCommands/TclCommandImportSvg.py +++ b/tclCommands/TclCommandImportSvg.py @@ -1,4 +1,4 @@ -from ObjectCollection import * +from camlib import * from tclCommands.TclCommand import TclCommandSignaled