- small changes in the TclCommands: MillDrills, MillSlots, DrillCNCJob: the new parameter for tolerance is now named: tooldia

- cleaned up the 'About FlatCAM' window, started to give credits for the translation team
This commit is contained in:
Marius Stanciu
2019-09-12 17:28:56 +03:00
parent 8e2cca827a
commit d22592e64c
6 changed files with 160 additions and 55 deletions

View File

@@ -1854,7 +1854,7 @@ class App(QtCore.QObject):
]
self.ordinary_keywords = ['all', 'angle_x', 'angle_y', 'axis', 'axisoffset', 'box', 'center_x', 'center_y',
'columns', 'combine', 'connect', 'contour', 'depthperpass', 'dia', 'dist',
'columns', 'combine', 'connect', 'contour', 'depthperpass', 'dia', 'diatol', 'dist',
'drilled_dias', 'drillz',
'endz', 'extracut', 'factor', 'False', 'false', 'feedrate', 'feedrate_rapid',
'filename', 'follow', 'gaps', 'gapsize', 'grid', 'gridoffset', 'gridoffsetx',
@@ -3757,7 +3757,8 @@ class App(QtCore.QObject):
# Icon and title
self.setWindowIcon(parent.app_icon)
self.setWindowTitle("FlatCAM")
self.setWindowTitle(_("About FlatCAM"))
self.resize(600, 200)
# self.setStyleSheet("background-image: url(share/flatcam_icon256.png); background-attachment: fixed")
# self.setStyleSheet(
# "border-image: url(share/flatcam_icon256.png) 0 0 0 0 stretch stretch; "
@@ -3770,58 +3771,151 @@ class App(QtCore.QObject):
# palette.setBrush(10, QtGui.QBrush(bgimage)) # 10 = Windowrole
# self.setPalette(palette)
layout1 = QtWidgets.QVBoxLayout()
self.setLayout(layout1)
layout2 = QtWidgets.QHBoxLayout()
layout1.addLayout(layout2)
logo = QtWidgets.QLabel()
logo.setPixmap(QtGui.QPixmap('share/flatcam_icon256.png'))
layout2.addWidget(logo, stretch=0)
title = QtWidgets.QLabel(
_(
"<font size=8><B>FlatCAM</B></font><BR>"
"Version {version} {beta} ({date}) - {arch} <BR>"
"<BR>"
"2D Computer-Aided Printed Circuit Board<BR>"
"Manufacturing.<BR>"
"<BR>"
"<B> License: </B><BR>"
"Licensed under MIT license (2014 - 2019)"
"<BR>"
"by (c)Juan Pablo Caram <BR>"
"<BR>"
"<B> Programmers:</B><BR>"
"Denis Hayrullin<BR>"
"Kamil Sopko<BR>"
"Marius Stanciu<BR>"
"Matthieu Berthomé<BR>"
"and many others found "
"<a href = \"https://bitbucket.org/jpcgt/flatcam/pull-requests/?state=MERGED\">here.</a><BR>"
"<BR>"
"<B>Development</B> is done "
"<B>Development</B> "
"<a href = \"https://bitbucket.org/jpcgt/flatcam/src/Beta/\">here.</a><BR>"
"<b>DOWNLOAD</B> area "
"<a href = \"https://bitbucket.org/jpcgt/flatcam/downloads/\">here.</a><BR>"
""
)
)
title.setOpenExternalLinks(True)
closebtn = QtWidgets.QPushButton(_("Close"))
tab_widget = QtWidgets.QTabWidget()
description_label = QtWidgets.QLabel(
_(
"FlatCAM {version} {beta} ({date}) - {arch}<br>"
"<a href = \"http://flatcam.org/\">http://flatcam.org</a><br>"
).format(version=version,
beta=('BETA' if beta else ''),
date=version_date,
arch=platform.architecture()[0])
)
title.setOpenExternalLinks(True)
description_label.setOpenExternalLinks(True)
layout2.addWidget(title, stretch=1)
programmers_label = QtWidgets.QLabel(
_(
"Juan Pablo Caram <BR>"
"<BR>"
"Denis Hayrullin<BR>"
"Kamil Sopko<BR>"
"Marius Stanciu<BR>"
"Matthieu Berthomé<BR><Br>"
"and many others found "
"<a href = \"https://bitbucket.org/jpcgt/flatcam/pull-requests/?state=MERGED\">here.</a><BR>"
"<BR>"
)
)
programmers_label.setOpenExternalLinks(True)
translators_label = QtWidgets.QLabel(
_(
"Brasilian - Portuguese: \t\t Carlos Stein\n"
"German: \t\t Marius Stanciu (Google-Translation)\n"
"Romanian: \t\t Marius Stanciu\n"
"Russian: \t\t Andrey Kultyapov <camellan@yandex.ru>\n"
"Spanish: \t\t Marius Stanciu (Google-Translation)\n"
)
)
translators_label.setOpenExternalLinks(True)
license_label = QtWidgets.QLabel(
_(
'(c) Copyright 2014 Juan Pablo Caram.\n\n'
'Licensed under the MIT license:\n'
'http://www.opensource.org/licenses/mit-license.php\n\n'
'Permission is hereby granted, free of charge, to any person obtaining a copy\n'
'of this software and associated documentation files (the "Software"), to deal\n'
'in the Software without restriction, including without limitation the rights\n'
'to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n'
'copies of the Software, and to permit persons to whom the Software is\n'
' furnished to do so, subject to the following conditions:\n\n'
'The above copyright notice and this permission notice shall be included in\n'
'all copies or substantial portions of the Software.\n\n'
'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n'
'IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n'
'FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n'
'AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n'
'LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n'
'OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n'
'THE SOFTWARE.'
)
)
license_label.setOpenExternalLinks(True)
# layouts
layout1 = QtWidgets.QVBoxLayout()
layout1_1 = QtWidgets.QHBoxLayout()
layout1_2 = QtWidgets.QHBoxLayout()
layout2 = QtWidgets.QHBoxLayout()
layout3 = QtWidgets.QHBoxLayout()
layout1.addLayout(layout3)
layout3.addStretch()
okbtn = QtWidgets.QPushButton(_("Close"))
layout3.addWidget(okbtn)
okbtn.clicked.connect(self.accept)
self.setLayout(layout1)
layout1.addLayout(layout1_1)
layout1.addLayout(layout1_2)
layout1.addLayout(layout2)
layout1.addLayout(layout3)
layout1_1.addStretch()
layout1_1.addWidget(description_label)
layout1_2.addWidget(tab_widget)
self.splash_tab = QtWidgets.QWidget()
self.splash_tab.setObjectName("splash_about")
self.splash_tab_layout = QtWidgets.QHBoxLayout(self.splash_tab)
self.splash_tab_layout.setContentsMargins(2, 2, 2, 2)
tab_widget.addTab(self.splash_tab, _("Splash"))
self.programmmers_tab = QtWidgets.QWidget()
self.programmmers_tab.setObjectName("programmers_about")
self.programmmers_tab_layout = QtWidgets.QVBoxLayout(self.programmmers_tab)
self.programmmers_tab_layout.setContentsMargins(2, 2, 2, 2)
tab_widget.addTab(self.programmmers_tab, _("Programmers"))
self.translators_tab = QtWidgets.QWidget()
self.translators_tab.setObjectName("translators_about")
self.translators_tab_layout = QtWidgets.QVBoxLayout(self.translators_tab)
self.translators_tab_layout.setContentsMargins(2, 2, 2, 2)
tab_widget.addTab(self.translators_tab, _("Translators"))
self.license_tab = QtWidgets.QWidget()
self.license_tab.setObjectName("license_about")
self.license_tab_layout = QtWidgets.QVBoxLayout(self.license_tab)
self.license_tab_layout.setContentsMargins(2, 2, 2, 2)
tab_widget.addTab(self.license_tab, _("License"))
self.splash_tab_layout.addWidget(logo, stretch=0)
self.splash_tab_layout.addWidget(title, stretch=1)
self.programmmers_tab_layout.addWidget(programmers_label)
self.programmmers_tab_layout.addStretch()
self.translators_tab_layout.addWidget(translators_label)
self.translators_tab_layout.addStretch()
self.license_tab_layout.addWidget(license_label)
self.license_tab_layout.addStretch()
layout3.addStretch()
layout3.addWidget(closebtn)
closebtn.clicked.connect(self.accept)
AboutDialog(self.ui).exec_()

View File

@@ -9,6 +9,11 @@ CAD program, and create G-Code for Isolation routing.
=================================================
12.09.2019
- small changes in the TclCommands: MillDrills, MillSlots, DrillCNCJob: the new parameter for tolerance is now named: tooldia
- cleaned up the 'About FlatCAM' window, started to give credits for the translation team
11.09.2019
- added the Gerber code as source for the panelized object in Panelize Tool

View File

@@ -397,14 +397,14 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
# ## Help ###
self.menuhelp = self.menu.addMenu(_('&Help'))
self.menuhelp_manual = self.menuhelp.addAction(QtGui.QIcon('share/globe16.png'), _('Help\tF1'))
self.menuhelp_manual = self.menuhelp.addAction(QtGui.QIcon('share/globe16.png'), _('Online Help\tF1'))
self.menuhelp_home = self.menuhelp.addAction(QtGui.QIcon('share/home16.png'), _('FlatCAM.org'))
self.menuhelp.addSeparator()
self.menuhelp_shortcut_list = self.menuhelp.addAction(QtGui.QIcon('share/shortcuts24.png'),
_('Shortcuts List\tF3'))
self.menuhelp_videohelp = self.menuhelp.addAction(QtGui.QIcon('share/youtube32.png'), _('YouTube Channel\tF4')
)
self.menuhelp_about = self.menuhelp.addAction(QtGui.QIcon('share/about32.png'), _('About'))
self.menuhelp_about = self.menuhelp.addAction(QtGui.QIcon('share/about32.png'), _('About FlatCAM'))
# ## FlatCAM Editor menu ###
self.geo_editor_menu = QtWidgets.QMenu(">Geo Editor<")

View File

@@ -30,7 +30,7 @@ class TclCommandDrillcncjob(TclCommandSignaled):
('ppname_e', str),
('outname', str),
('opt_type', str),
('tol', float)
('diatol', float)
])
# array of mandatory options for current Tcl command: required = {'name','outname'}
@@ -57,10 +57,11 @@ class TclCommandDrillcncjob(TclCommandSignaled):
('opt_type', 'Name of move optimization type. B by default for Basic OR-Tools, M for Metaheuristic OR-Tools'
'T from Travelling Salesman Algorithm. B and M works only for 64bit version of FlatCAM and '
'T works only for 32bit version of FlatCAM'),
('tol', 'Tolerance. Percentange (0.0 ... 100.0) within which dias in drilled_dias will be judged to be the'
'same as the ones in the tools from the Excellon object. E.g: if in drill_dias we have a diameter'
'with value 1.0, in the Excellon we have a tool with dia = 1.05 and we set a tolerance tol = 5.0'
'then the drills with the dia 1.05 in Excellon will be processed. Float number.')
('diatol', 'Tolerance. Percentange (0.0 ... 100.0) within which dias in drilled_dias will be judged to be '
'the same as the ones in the tools from the Excellon object. E.g: if in drill_dias we have a '
'diameter with value 1.0, in the Excellon we have a tool with dia = 1.05 and we set a tolerance '
'diatol = 5.0 then the drills with the dia = (0.95 ... 1.05) '
'in Excellon will be processed. Float number.')
]),
'examples': ['drillcncjob test.TXT -drillz -1.5 -travelz 14 -feedrate 222 -feedrate_rapid 456 -spindlespeed 777'
' -toolchange True -toolchangez 33 -endz 22 -ppname_e default\n'
@@ -111,8 +112,8 @@ class TclCommandDrillcncjob(TclCommandSignaled):
req_dia_form = float('%.2f' % float(req_dia)) if units == 'MM' else \
float('%.4f' % float(req_dia))
if 'tol' in args:
tolerance = args['tol'] / 100
if 'diatol' in args:
tolerance = args['diatol'] / 100
tolerance = 0.0 if tolerance < 0.0 else tolerance
tolerance = 1.0 if tolerance > 1.0 else tolerance
@@ -134,6 +135,7 @@ class TclCommandDrillcncjob(TclCommandSignaled):
# no longer needed
del args['drilled_dias']
del args['diatol']
# Split and put back. We are passing the whole dictionary later.
# args['milled_dias'] = [x.strip() for x in args['tools'].split(",")]

View File

@@ -25,7 +25,7 @@ class TclCommandMillDrills(TclCommandSignaled):
('outname', str),
('tooldia', float),
('use_threads', bool),
('tol', float)
('diatol', float)
])
# array of mandatory options for current Tcl command: required = {'name','outname'}
@@ -40,12 +40,13 @@ class TclCommandMillDrills(TclCommandSignaled):
('tooldia', 'Diameter of the milling tool (example: 0.1).'),
('outname', 'Name of object to create.'),
('use_thread', 'If to use multithreading: True or False.'),
('tol', 'Tolerance. Percentange (0.0 ... 100.0) within which dias in milled_dias will be judged to be the'
'same as the ones in the tools from the Excellon object. E.g: if in milled_dias we have a diameter'
'with value 1.0, in the Excellon we have a tool with dia = 1.05 and we set a tolerance tol = 5.0'
'then the drills with the dia 1.05 in Excellon will be processed. Float number.')
('diatol', 'Tolerance. Percentange (0.0 ... 100.0) within which dias in milled_dias will be judged to be '
'the same as the ones in the tools from the Excellon object. E.g: if in milled_dias we have a '
'diameter with value 1.0, in the Excellon we have a tool with dia = 1.05 and we set a tolerance '
'diatol = 5.0 then the drills with the dia = (0.95 ... 1.05) '
'in Excellon will be processed. Float number.')
]),
'examples': ['milldrills mydrills']
'examples': ['milldrills mydrills', 'milld my_excellon.drl']
}
def execute(self, args, unnamed_args):
@@ -86,8 +87,8 @@ class TclCommandMillDrills(TclCommandSignaled):
req_dia_form = float('%.2f' % float(req_dia)) if units == 'MM' else \
float('%.4f' % float(req_dia))
if 'tol' in args:
tolerance = args['tol'] / 100
if 'diatol' in args:
tolerance = args['diatol'] / 100
tolerance = 0.0 if tolerance < 0.0 else tolerance
tolerance = 1.0 if tolerance > 1.0 else tolerance
@@ -107,6 +108,7 @@ class TclCommandMillDrills(TclCommandSignaled):
# no longer needed
del args['milled_dias']
del args['diatol']
# Split and put back. We are passing the whole dictionary later.
# args['milled_dias'] = [x.strip() for x in args['tools'].split(",")]

View File

@@ -25,7 +25,7 @@ class TclCommandMillSlots(TclCommandSignaled):
('outname', str),
('tooldia', float),
('use_threads', bool),
('tol', float)
('diatol', float)
])
# array of mandatory options for current Tcl command: required = {'name','outname'}
@@ -40,12 +40,13 @@ class TclCommandMillSlots(TclCommandSignaled):
('tooldia', 'Diameter of the milling tool (example: 0.1).'),
('outname', 'Name of object to create.'),
('use_thread', 'If to use multithreading: True or False.'),
('tol', 'Tolerance. Percentange (0.0 ... 100.0) within which dias in milled_dias will be judged to be the'
'same as the ones in the tools from the Excellon object. E.g: if in milled_dias we have a diameter'
'with value 1.0, in the Excellon we have a tool with dia = 1.05 and we set a tolerance tol = 5.0'
'then the slots with the dia 1.05 in Excellon will be processed. Float number.')
('diatol', 'Tolerance. Percentange (0.0 ... 100.0) within which dias in milled_dias will be judged to be '
'the same as the ones in the tools from the Excellon object. E.g: if in milled_dias we have a '
'diameter with value 1.0, in the Excellon we have a tool with dia = 1.05 and we set a tolerance '
'diatol = 5.0 then the slots with the dia = (0.95 ... 1.05) '
'in Excellon will be processed. Float number.')
]),
'examples': ['millholes mydrills']
'examples': ['millslots mydrills', 'mills my_excellon.drl']
}
def execute(self, args, unnamed_args):
@@ -85,8 +86,8 @@ class TclCommandMillSlots(TclCommandSignaled):
req_dia_form = float('%.2f' % float(req_dia)) if units == 'MM' else \
float('%.4f' % float(req_dia))
if 'tol' in args:
tolerance = args['tol'] / 100
if 'diatol' in args:
tolerance = args['diatol'] / 100
tolerance = 0.0 if tolerance < 0.0 else tolerance
tolerance = 1.0 if tolerance > 1.0 else tolerance
@@ -106,6 +107,7 @@ class TclCommandMillSlots(TclCommandSignaled):
# no longer needed
del args['milled_dias']
del args['diatol']
# Split and put back. We are passing the whole dictionary later.
# args['milled_dias'] = [x.strip() for x in args['tools'].split(",")]