diff --git a/BeamReinforcement/HookExtensionEditDialog.py b/BeamReinforcement/HookExtensionEditDialog.py index 5083556..3e8a184 100644 --- a/BeamReinforcement/HookExtensionEditDialog.py +++ b/BeamReinforcement/HookExtensionEditDialog.py @@ -1,141 +1,141 @@ -# -*- coding: utf-8 -*- -# *************************************************************************** -# * * -# * Copyright (c) 2019 - Suraj * -# * * -# * This program is free software; you can redistribute it and/or modify * -# * it under the terms of the GNU Lesser General Public License (LGPL) * -# * as published by the Free Software Foundation; either version 2 of * -# * the License, or (at your option) any later version. * -# * for detail see the LICENCE text file. * -# * * -# * This program is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -# * GNU Library General Public License for more details. * -# * * -# * You should have received a copy of the GNU Library General Public * -# * License along with this program; if not, write to the Free Software * -# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -# * USA * -# * * -# *************************************************************************** - -__title__ = "Hook Extension Edit Dialog" -__author__ = "Suraj" -__url__ = "https://www.freecadweb.org" - -from pathlib import Path - -import FreeCAD -import FreeCADGui -from PySide2 import QtWidgets, QtGui - - -class _HookExtensionEditDialog: - def __init__(self, hook_extension_tuple): - self.HookExtensionTuple = hook_extension_tuple - self.Layers = [] - self.HookExtensionInputFieldList = [] - self.form = FreeCADGui.PySideUic.loadUi( - str(Path(__file__).with_suffix(".ui")) - ) - self.form.setWindowTitle( - QtWidgets.QApplication.translate( - "Arch", "Hook Extension Edit Dialog", None - ) - ) - - def setupUi(self): - """This function is used to set values in ui.""" - self.connectSignalSlots() - layers_count = len(self.HookExtensionTuple) - sets_count_list = [len(x) for x in self.HookExtensionTuple] - for layer in range(1, layers_count + 1): - self.addLayer() - for i in range(0, sets_count_list[layer - 1]): - self.addSet() - if self.HookExtensionTuple[layer - 1][i] is None: - self.HookExtensionInputFieldList[layer - 1][i].setText( - "40 mm" - ) - self.HookExtensionInputFieldList[layer - 1][i].setEnabled( - False - ) - else: - self.HookExtensionInputFieldList[layer - 1][i].setText( - str(self.HookExtensionTuple[layer - 1][i]) - ) - self.HookExtensionInputFieldList[layer - 1][i].setEnabled( - True - ) - - def connectSignalSlots(self): - """This function is used to connect different slots in UI to appropriate - functions.""" - self.form.buttonBox.accepted.connect(self.accept) - self.form.buttonBox.rejected.connect(lambda: self.form.close()) - - def addLayer(self): - layer = len(self.Layers) + 1 - layout = self.form.verticalLayout - index = layout.indexOf(self.form.buttonBox) - # Create Layer label - layer_label = QtWidgets.QLabel("Layer" + str(layer) + ":") - layer_label.setFont(QtGui.QFont("Sans", weight=QtGui.QFont.Bold)) - layout.insertWidget(index, layer_label) - self.Layers.append(layer_label) - self.HookExtensionInputFieldList.append([]) - - def addSet(self): - layer = len(self.Layers) - sets = len(self.HookExtensionInputFieldList[layer - 1]) - # Create horizontal layout and its components - h_layout = QtWidgets.QHBoxLayout() - set_label = QtWidgets.QLabel("Set " + str(sets + 1)) - set_label.setSizePolicy( - QtWidgets.QSizePolicy( - QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed - ) - ) - ui = FreeCADGui.UiLoader() - hook_extension = ui.createWidget("Gui::InputField") - hook_extension.setProperty("unit", "mm") - hook_extension.setProperty("minimum", 10) - hook_extension.setText("40 mm") - h_layout.addWidget(set_label) - h_layout.addWidget(hook_extension) - v_layout = self.form.verticalLayout - index = v_layout.indexOf(self.form.buttonBox) - v_layout.insertLayout(index, h_layout) - self.HookExtensionInputFieldList[layer - 1].append(hook_extension) - - def accept(self): - """This function is executed when 'OK' button is clicked from ui.""" - layers = len(self.Layers) - hook_extension_list = [] - for layer in range(1, layers + 1): - hook_extension_list.append(self.getHookExtensionTuple(layer)) - self.HookExtensionTuple = tuple(hook_extension_list) - self.form.close() - - def getHookExtensionTuple(self, layer): - sets = len(self.HookExtensionInputFieldList[layer - 1]) - hook_extension_list = [] - for i in range(0, sets): - if self.HookExtensionInputFieldList[layer - 1][i].isEnabled(): - hook_extension = self.HookExtensionInputFieldList[layer - 1][ - i - ].text() - hook_extension = FreeCAD.Units.Quantity(hook_extension).Value - hook_extension_list.append(hook_extension) - else: - hook_extension_list.append(None) - return tuple(hook_extension_list) - - -def runHookExtensionEditDialog(self, hook_extension_tuple): - dialog = _HookExtensionEditDialog(hook_extension_tuple) - dialog.setupUi() - dialog.form.exec_() - self.HookExtensionTuple = dialog.HookExtensionTuple +# -*- coding: utf-8 -*- +# *************************************************************************** +# * * +# * Copyright (c) 2019 - Suraj * +# * * +# * This program is free software; you can redistribute it and/or modify * +# * it under the terms of the GNU Lesser General Public License (LGPL) * +# * as published by the Free Software Foundation; either version 2 of * +# * the License, or (at your option) any later version. * +# * for detail see the LICENCE text file. * +# * * +# * This program is distributed in the hope that it will be useful, * +# * but WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +# * GNU Library General Public License for more details. * +# * * +# * You should have received a copy of the GNU Library General Public * +# * License along with this program; if not, write to the Free Software * +# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +# * USA * +# * * +# *************************************************************************** + +__title__ = "Hook Extension Edit Dialog" +__author__ = "Suraj" +__url__ = "https://www.freecadweb.org" + +from pathlib import Path + +import FreeCAD +import FreeCADGui +from PySide2 import QtWidgets, QtGui + + +class _HookExtensionEditDialog: + def __init__(self, hook_extension_tuple): + self.HookExtensionTuple = hook_extension_tuple + self.Layers = [] + self.HookExtensionInputFieldList = [] + self.form = FreeCADGui.PySideUic.loadUi( + str(Path(__file__).with_suffix(".ui")) + ) + self.form.setWindowTitle( + QtWidgets.QApplication.translate( + "Arch", "Hook Extension Edit Dialog", None + ) + ) + + def setupUi(self): + """This function is used to set values in ui.""" + self.connectSignalSlots() + layers_count = len(self.HookExtensionTuple) + sets_count_list = [len(x) for x in self.HookExtensionTuple] + for layer in range(1, layers_count + 1): + self.addLayer() + for i in range(0, sets_count_list[layer - 1]): + self.addSet() + if self.HookExtensionTuple[layer - 1][i] is None: + self.HookExtensionInputFieldList[layer - 1][i].setText( + FreeCAD.Units.Quantity(40.0, FreeCAD.Units.Length).UserString + ) + self.HookExtensionInputFieldList[layer - 1][i].setEnabled( + False + ) + else: + self.HookExtensionInputFieldList[layer - 1][i].setText( + FreeCAD.Units.Quantity(self.HookExtensionTuple[layer - 1][i], FreeCAD.Units.Length).UserString + ) + self.HookExtensionInputFieldList[layer - 1][i].setEnabled( + True + ) + + def connectSignalSlots(self): + """This function is used to connect different slots in UI to appropriate + functions.""" + self.form.buttonBox.accepted.connect(self.accept) + self.form.buttonBox.rejected.connect(lambda: self.form.close()) + + def addLayer(self): + layer = len(self.Layers) + 1 + layout = self.form.verticalLayout + index = layout.indexOf(self.form.buttonBox) + # Create Layer label + layer_label = QtWidgets.QLabel("Layer" + str(layer) + ":") + layer_label.setFont(QtGui.QFont("Sans", weight=QtGui.QFont.Bold)) + layout.insertWidget(index, layer_label) + self.Layers.append(layer_label) + self.HookExtensionInputFieldList.append([]) + + def addSet(self): + layer = len(self.Layers) + sets = len(self.HookExtensionInputFieldList[layer - 1]) + # Create horizontal layout and its components + h_layout = QtWidgets.QHBoxLayout() + set_label = QtWidgets.QLabel("Set " + str(sets + 1)) + set_label.setSizePolicy( + QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed + ) + ) + ui = FreeCADGui.UiLoader() + hook_extension = ui.createWidget("Gui::InputField") + hook_extension.setProperty("unit", "mm") + hook_extension.setProperty("minimum", 10) + hook_extension.setText(FreeCAD.Units.Quantity(40.0, FreeCAD.Units.Length).UserString) + h_layout.addWidget(set_label) + h_layout.addWidget(hook_extension) + v_layout = self.form.verticalLayout + index = v_layout.indexOf(self.form.buttonBox) + v_layout.insertLayout(index, h_layout) + self.HookExtensionInputFieldList[layer - 1].append(hook_extension) + + def accept(self): + """This function is executed when 'OK' button is clicked from ui.""" + layers = len(self.Layers) + hook_extension_list = [] + for layer in range(1, layers + 1): + hook_extension_list.append(self.getHookExtensionTuple(layer)) + self.HookExtensionTuple = tuple(hook_extension_list) + self.form.close() + + def getHookExtensionTuple(self, layer): + sets = len(self.HookExtensionInputFieldList[layer - 1]) + hook_extension_list = [] + for i in range(0, sets): + if self.HookExtensionInputFieldList[layer - 1][i].isEnabled(): + hook_extension = self.HookExtensionInputFieldList[layer - 1][ + i + ].text() + hook_extension = FreeCAD.Units.Quantity(hook_extension).Value + hook_extension_list.append(hook_extension) + else: + hook_extension_list.append(None) + return tuple(hook_extension_list) + + +def runHookExtensionEditDialog(self, hook_extension_tuple): + dialog = _HookExtensionEditDialog(hook_extension_tuple) + dialog.setupUi() + dialog.form.exec_() + self.HookExtensionTuple = dialog.HookExtensionTuple diff --git a/BeamReinforcement/LayerSpacingEditDialog.py b/BeamReinforcement/LayerSpacingEditDialog.py index b54ceca..d80f75d 100644 --- a/BeamReinforcement/LayerSpacingEditDialog.py +++ b/BeamReinforcement/LayerSpacingEditDialog.py @@ -1,96 +1,96 @@ -# -*- coding: utf-8 -*- -# *************************************************************************** -# * * -# * Copyright (c) 2019 - Suraj * -# * * -# * This program is free software; you can redistribute it and/or modify * -# * it under the terms of the GNU Lesser General Public License (LGPL) * -# * as published by the Free Software Foundation; either version 2 of * -# * the License, or (at your option) any later version. * -# * for detail see the LICENCE text file. * -# * * -# * This program is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -# * GNU Library General Public License for more details. * -# * * -# * You should have received a copy of the GNU Library General Public * -# * License along with this program; if not, write to the Free Software * -# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -# * USA * -# * * -# *************************************************************************** - -__title__ = "Layer Spacing Edit Dialog" -__author__ = "Suraj" -__url__ = "https://www.freecadweb.org" - -from pathlib import Path - -import FreeCAD -import FreeCADGui -from PySide2 import QtWidgets - - -class _LayerSpacingEditDialog: - def __init__(self, layer_spacing_tuple): - self.LayerSpacingTuple = layer_spacing_tuple - self.Layers = 0 - self.LayerSpacingInputFieldList = [] - self.form = FreeCADGui.PySideUic.loadUi( - str(Path(__file__).with_suffix(".ui")) - ) - self.form.setWindowTitle( - QtWidgets.QApplication.translate( - "Arch", "Layer Spacing Edit Dialog", None - ) - ) - - def setupUi(self): - """This function is used to set values in ui.""" - self.connectSignalSlots() - layers_count = len(self.LayerSpacingTuple) - for layer in range(1, layers_count + 1): - self.addLayer() - self.LayerSpacingInputFieldList[layer - 1].setText( - str(self.LayerSpacingTuple[layer - 1]) - ) - - def connectSignalSlots(self): - """This function is used to connect different slots in UI to appropriate - functions.""" - self.form.buttonBox.accepted.connect(self.accept) - self.form.buttonBox.rejected.connect(lambda: self.form.close()) - - def addLayer(self): - layer = self.Layers + 1 - # Create Layer Spacing Input Field - ui = FreeCADGui.UiLoader() - layer_spacing = ui.createWidget("Gui::InputField") - layer_spacing.setProperty("unit", "mm") - layer_spacing.setText("30 mm") - self.LayerSpacingInputFieldList.append(layer_spacing) - - layout = self.form.formLayout - index = layer - 1 - layout.insertRow(index, "Layer" + str(layer), layer_spacing) - self.Layers += 1 - - def accept(self): - """This function is executed when 'OK' button is clicked from ui.""" - layers = self.Layers - layer_spacing_list = [] - for layer in range(1, layers + 1): - layer_spacing = self.LayerSpacingInputFieldList[layer - 1].text() - layer_spacing_list.append( - FreeCAD.Units.Quantity(layer_spacing).Value - ) - self.LayerSpacingTuple = tuple(layer_spacing_list) - self.form.close() - - -def runLayerSpacingEditDialog(self, layer_spacing_tuple): - dialog = _LayerSpacingEditDialog(layer_spacing_tuple) - dialog.setupUi() - dialog.form.exec_() - self.LayerSpacingTuple = dialog.LayerSpacingTuple +# -*- coding: utf-8 -*- +# *************************************************************************** +# * * +# * Copyright (c) 2019 - Suraj * +# * * +# * This program is free software; you can redistribute it and/or modify * +# * it under the terms of the GNU Lesser General Public License (LGPL) * +# * as published by the Free Software Foundation; either version 2 of * +# * the License, or (at your option) any later version. * +# * for detail see the LICENCE text file. * +# * * +# * This program is distributed in the hope that it will be useful, * +# * but WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +# * GNU Library General Public License for more details. * +# * * +# * You should have received a copy of the GNU Library General Public * +# * License along with this program; if not, write to the Free Software * +# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +# * USA * +# * * +# *************************************************************************** + +__title__ = "Layer Spacing Edit Dialog" +__author__ = "Suraj" +__url__ = "https://www.freecadweb.org" + +from pathlib import Path + +import FreeCAD +import FreeCADGui +from PySide2 import QtWidgets + + +class _LayerSpacingEditDialog: + def __init__(self, layer_spacing_tuple): + self.LayerSpacingTuple = layer_spacing_tuple + self.Layers = 0 + self.LayerSpacingInputFieldList = [] + self.form = FreeCADGui.PySideUic.loadUi( + str(Path(__file__).with_suffix(".ui")) + ) + self.form.setWindowTitle( + QtWidgets.QApplication.translate( + "Arch", "Layer Spacing Edit Dialog", None + ) + ) + + def setupUi(self): + """This function is used to set values in ui.""" + self.connectSignalSlots() + layers_count = len(self.LayerSpacingTuple) + for layer in range(1, layers_count + 1): + self.addLayer() + self.LayerSpacingInputFieldList[layer - 1].setText( + FreeCAD.Units.Quantity(self.LayerSpacingTuple[layer - 1], FreeCAD.Units.Length).UserString + ) + + def connectSignalSlots(self): + """This function is used to connect different slots in UI to appropriate + functions.""" + self.form.buttonBox.accepted.connect(self.accept) + self.form.buttonBox.rejected.connect(lambda: self.form.close()) + + def addLayer(self): + layer = self.Layers + 1 + # Create Layer Spacing Input Field + ui = FreeCADGui.UiLoader() + layer_spacing = ui.createWidget("Gui::InputField") + layer_spacing.setProperty("unit", "mm") + layer_spacing.setText(FreeCAD.Units.Quantity(30.0, FreeCAD.Units.Length).UserString) + self.LayerSpacingInputFieldList.append(layer_spacing) + + layout = self.form.formLayout + index = layer - 1 + layout.insertRow(index, "Layer" + str(layer), layer_spacing) + self.Layers += 1 + + def accept(self): + """This function is executed when 'OK' button is clicked from ui.""" + layers = self.Layers + layer_spacing_list = [] + for layer in range(1, layers + 1): + layer_spacing = self.LayerSpacingInputFieldList[layer - 1].text() + layer_spacing_list.append( + FreeCAD.Units.Quantity(layer_spacing).Value + ) + self.LayerSpacingTuple = tuple(layer_spacing_list) + self.form.close() + + +def runLayerSpacingEditDialog(self, layer_spacing_tuple): + dialog = _LayerSpacingEditDialog(layer_spacing_tuple) + dialog.setupUi() + dialog.form.exec_() + self.LayerSpacingTuple = dialog.LayerSpacingTuple diff --git a/BeamReinforcement/NumberDiameterOffset.py b/BeamReinforcement/NumberDiameterOffset.py index 044d005..c02b591 100644 --- a/BeamReinforcement/NumberDiameterOffset.py +++ b/BeamReinforcement/NumberDiameterOffset.py @@ -1,260 +1,258 @@ -# -*- coding: utf-8 -*- -# *************************************************************************** -# * * -# * Copyright (c) 2019 - Suraj * -# * * -# * This program is free software; you can redistribute it and/or modify * -# * it under the terms of the GNU Lesser General Public License (LGPL) * -# * as published by the Free Software Foundation; either version 2 of * -# * the License, or (at your option) any later version. * -# * for detail see the LICENCE text file. * -# * * -# * This program is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -# * GNU Library General Public License for more details. * -# * * -# * You should have received a copy of the GNU Library General Public * -# * License along with this program; if not, write to the Free Software * -# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -# * USA * -# * * -# *************************************************************************** - -__title__ = "Number Diameter Offset Dialog" -__author__ = "Suraj" -__url__ = "https://www.freecadweb.org" - -from pathlib import Path - -import FreeCAD -import FreeCADGui -from PySide2 import QtWidgets, QtGui - -from Rebarfunc import getdictofNumberDiameterOffset - - -class _NumberDiameterOffsetDialog: - def __init__(self, number_diameter_offset_tuple): - self.NumberDiameterOffsetTuple = number_diameter_offset_tuple - self.Layers = [] - self.SetsDict = {} - self.AddSetButtonList = [] - self.RemoveSetButtonList = [] - self.form = FreeCADGui.PySideUic.loadUi( - str(Path(__file__).with_suffix(".ui")) - ) - self.form.setWindowTitle( - QtWidgets.QApplication.translate( - "Arch", "Rebar Number Diameter Offset", None - ) - ) - - def setupUi(self): - """This function is used to set values in ui.""" - self.connectSignalSlots() - layers_count = len(self.NumberDiameterOffsetTuple) - sets_count_list = [ - len(x.split("+")) for x in self.NumberDiameterOffsetTuple - ] - number_diameter_offset_dict = getdictofNumberDiameterOffset( - self.NumberDiameterOffsetTuple - ) - for layer in range(0, layers_count): - self.addLayerButtonClicked(layer) - for sets in range(1, sets_count_list[layer] + 1): - if sets < sets_count_list[layer]: - self.addSetButtonClicked(self.AddSetButtonList[layer]) - _, number, diameter, offset, _ = self.SetsDict[ - "layer" + str(layer + 1) - ][sets - 1] - number.setValue( - number_diameter_offset_dict["layer" + str(layer + 1)][ - sets - 1 - ][0] - ) - diameter.setText( - str( - number_diameter_offset_dict["layer" + str(layer + 1)][ - sets - 1 - ][1] - ) - + "mm" - ) - offset.setText( - str( - number_diameter_offset_dict["layer" + str(layer + 1)][ - sets - 1 - ][2] - ) - + "mm" - ) - - def connectSignalSlots(self): - """This function is used to connect different slots in UI to appropriate - functions.""" - self.form.addLayerButton.clicked.connect(self.addLayerButtonClicked) - self.form.removeLayerButton.clicked.connect( - self.removeLayerButtonClicked - ) - self.form.buttonBox.accepted.connect(self.accept) - self.form.buttonBox.rejected.connect(lambda: self.form.close()) - - def addSetButtonClicked(self, button): - layer = self.AddSetButtonList.index(button) + 1 - sets = len(self.SetsDict["layer" + str(layer)]) - self.SetsDict["layer" + str(layer)].append([]) - # Create horizontal layout and its components - h_layout = QtWidgets.QHBoxLayout() - set_label = QtWidgets.QLabel("Set " + str(sets + 1)) - set_label.setSizePolicy( - QtWidgets.QSizePolicy( - QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed - ) - ) - number = QtWidgets.QSpinBox() - number.setSizePolicy( - QtWidgets.QSizePolicy( - QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed - ) - ) - number.setMinimum(1) - ui = FreeCADGui.UiLoader() - diameter = ui.createWidget("Gui::InputField") - diameter.setSizePolicy( - QtWidgets.QSizePolicy( - QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed - ) - ) - diameter.setProperty("unit", "mm") - diameter.setText("16 mm") - offset = ui.createWidget("Gui::InputField") - offset.setSizePolicy( - QtWidgets.QSizePolicy( - QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed - ) - ) - offset.setProperty("unit", "mm") - offset.setText("20 mm") - h_layout.addWidget(set_label) - h_layout.addWidget(number) - h_layout.addWidget(diameter) - h_layout.addWidget(offset) - v_layout = self.form.verticalLayout - index = v_layout.indexOf(button) - v_layout.insertLayout(index, h_layout) - self.SetsDict["layer" + str(layer)][-1].append(set_label) - self.SetsDict["layer" + str(layer)][-1].append(number) - self.SetsDict["layer" + str(layer)][-1].append(diameter) - self.SetsDict["layer" + str(layer)][-1].append(offset) - self.SetsDict["layer" + str(layer)][-1].append(h_layout) - sets += 1 - if sets == 2: - self.RemoveSetButtonList[layer - 1].setEnabled(True) - - def removeSetButtonClicked(self, button): - layer = self.RemoveSetButtonList.index(button) + 1 - sets = len(self.SetsDict["layer" + str(layer)]) - h_layout = self.SetsDict["layer" + str(layer)][-1][4] - for i in reversed( - range(0, len(self.SetsDict["layer" + str(layer)][-1]) - 1) - ): - h_layout.removeWidget(self.SetsDict["layer" + str(layer)][-1][i]) - self.SetsDict["layer" + str(layer)][-1][i].deleteLater() - del self.SetsDict["layer" + str(layer)][-1][i] - self.form.verticalLayout.removeItem(h_layout) - h_layout.deleteLater() - del self.SetsDict["layer" + str(layer)][-1] - sets -= 1 - if sets == 1: - button.setEnabled(False) - - def addLayerButtonClicked(self, layer=None): - if not layer: - layer = len(self.Layers) - layer += 1 - layout = self.form.verticalLayout - index = layout.indexOf(self.form.addLayerButton) - # Create Layer label - layer_label = QtWidgets.QLabel("Layer" + str(layer) + ":") - layer_label.setFont(QtGui.QFont("Sans", weight=QtGui.QFont.Bold)) - layout.insertWidget(index, layer_label) - self.Layers.append(layer_label) - index += 1 - # Create Add Set button - add_set_button = QtWidgets.QPushButton("Add Set") - add_set_button.clicked.connect( - lambda: self.addSetButtonClicked(add_set_button) - ) - layout.insertWidget(index, add_set_button) - self.AddSetButtonList.append(add_set_button) - index += 1 - # Create Remove Set Button - remove_set_button = QtWidgets.QPushButton("Remove Set") - remove_set_button.clicked.connect( - lambda: self.removeSetButtonClicked(remove_set_button) - ) - remove_set_button.setEnabled(False) - layout.insertWidget(index, remove_set_button) - self.RemoveSetButtonList.append(remove_set_button) - - self.SetsDict["layer" + str(layer)] = [] - self.addSetButtonClicked(add_set_button) - if layer == 2: - self.form.removeLayerButton.setEnabled(True) - - def removeLayerButtonClicked(self): - layer = len(self.Layers) - sets = len(self.SetsDict["layer" + str(layer)]) - remove_set_button = self.RemoveSetButtonList[layer - 1] - for i in range(0, sets): - self.removeSetButtonClicked(remove_set_button) - self.form.verticalLayout.removeWidget(self.AddSetButtonList[layer - 1]) - self.AddSetButtonList[layer - 1].deleteLater() - del self.AddSetButtonList[layer - 1] - self.form.verticalLayout.removeWidget( - self.RemoveSetButtonList[layer - 1] - ) - self.RemoveSetButtonList[layer - 1].deleteLater() - del self.RemoveSetButtonList[layer - 1] - self.form.verticalLayout.removeWidget(self.Layers[layer - 1]) - self.Layers[layer - 1].deleteLater() - del self.Layers[layer - 1] - if layer == 2: - self.form.removeLayerButton.setEnabled(False) - - def accept(self): - """This function is executed when 'OK' button is clicked from ui.""" - layers = len(self.Layers) - number_diameter_offset_list = [] - for layer in range(1, layers + 1): - number_diameter_offset_list.append( - self.getNumberDiameterOffsetString(layer) - ) - self.NumberDiameterOffsetTuple = tuple(number_diameter_offset_list) - self.form.close() - - def getNumberDiameterOffsetString(self, layer): - sets = len(self.SetsDict["layer" + str(layer)]) - number_diameter_offset_string = "" - for i in range(0, sets): - number = self.SetsDict["layer" + str(layer)][i][1].value() - diameter = self.SetsDict["layer" + str(layer)][i][2].text() - diameter = FreeCAD.Units.Quantity(diameter).Value - offset = self.SetsDict["layer" + str(layer)][i][3].text() - offset = FreeCAD.Units.Quantity(offset).Value - number_diameter_offset_string += ( - str(number) + "#" + str(diameter) + "@" + str(offset) - ) - if i != sets - 1: - number_diameter_offset_string += "+" - return number_diameter_offset_string - - -def runNumberDiameterOffsetDialog(self, number_diameter_offset): - if isinstance(number_diameter_offset, str): - number_diameter_offset = (number_diameter_offset,) - dialog = _NumberDiameterOffsetDialog(number_diameter_offset) - dialog.setupUi() - dialog.form.exec_() - self.NumberDiameterOffsetTuple = dialog.NumberDiameterOffsetTuple +# -*- coding: utf-8 -*- +# *************************************************************************** +# * * +# * Copyright (c) 2019 - Suraj * +# * * +# * This program is free software; you can redistribute it and/or modify * +# * it under the terms of the GNU Lesser General Public License (LGPL) * +# * as published by the Free Software Foundation; either version 2 of * +# * the License, or (at your option) any later version. * +# * for detail see the LICENCE text file. * +# * * +# * This program is distributed in the hope that it will be useful, * +# * but WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +# * GNU Library General Public License for more details. * +# * * +# * You should have received a copy of the GNU Library General Public * +# * License along with this program; if not, write to the Free Software * +# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +# * USA * +# * * +# *************************************************************************** + +__title__ = "Number Diameter Offset Dialog" +__author__ = "Suraj" +__url__ = "https://www.freecadweb.org" + +from pathlib import Path + +import FreeCAD +import FreeCADGui +from PySide2 import QtWidgets, QtGui + +from Rebarfunc import getdictofNumberDiameterOffset + + +class _NumberDiameterOffsetDialog: + def __init__(self, number_diameter_offset_tuple): + self.NumberDiameterOffsetTuple = number_diameter_offset_tuple + self.Layers = [] + self.SetsDict = {} + self.AddSetButtonList = [] + self.RemoveSetButtonList = [] + self.form = FreeCADGui.PySideUic.loadUi( + str(Path(__file__).with_suffix(".ui")) + ) + self.form.setWindowTitle( + QtWidgets.QApplication.translate( + "Arch", "Rebar Number Diameter Offset", None + ) + ) + + def setupUi(self): + """This function is used to set values in ui.""" + self.connectSignalSlots() + layers_count = len(self.NumberDiameterOffsetTuple) + sets_count_list = [ + len(x.split("+")) for x in self.NumberDiameterOffsetTuple + ] + number_diameter_offset_dict = getdictofNumberDiameterOffset( + self.NumberDiameterOffsetTuple + ) + for layer in range(0, layers_count): + self.addLayerButtonClicked(layer) + for sets in range(1, sets_count_list[layer] + 1): + if sets < sets_count_list[layer]: + self.addSetButtonClicked(self.AddSetButtonList[layer]) + _, number, diameter, offset, _ = self.SetsDict[ + "layer" + str(layer + 1) + ][sets - 1] + number.setValue( + number_diameter_offset_dict["layer" + str(layer + 1)][ + sets - 1 + ][0] + ) + diameter.setText( + FreeCAD.Units.Quantity( + number_diameter_offset_dict["layer" + str(layer + 1)][ + sets - 1 + ][1] + , FreeCAD.Units.Length).UserString + ) + offset.setText( + FreeCAD.Units.Quantity( + number_diameter_offset_dict["layer" + str(layer + 1)][ + sets - 1 + ][2] + , FreeCAD.Units.Length).UserString + ) + + def connectSignalSlots(self): + """This function is used to connect different slots in UI to appropriate + functions.""" + self.form.addLayerButton.clicked.connect(self.addLayerButtonClicked) + self.form.removeLayerButton.clicked.connect( + self.removeLayerButtonClicked + ) + self.form.buttonBox.accepted.connect(self.accept) + self.form.buttonBox.rejected.connect(lambda: self.form.close()) + + def addSetButtonClicked(self, button): + layer = self.AddSetButtonList.index(button) + 1 + sets = len(self.SetsDict["layer" + str(layer)]) + self.SetsDict["layer" + str(layer)].append([]) + # Create horizontal layout and its components + h_layout = QtWidgets.QHBoxLayout() + set_label = QtWidgets.QLabel("Set " + str(sets + 1)) + set_label.setSizePolicy( + QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed + ) + ) + number = QtWidgets.QSpinBox() + number.setSizePolicy( + QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed + ) + ) + number.setMinimum(1) + ui = FreeCADGui.UiLoader() + diameter = ui.createWidget("Gui::InputField") + diameter.setSizePolicy( + QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed + ) + ) + diameter.setProperty("unit", "mm") + diameter.setText(FreeCAD.Units.Quantity(16.0, FreeCAD.Units.Length).UserString) + offset = ui.createWidget("Gui::InputField") + offset.setSizePolicy( + QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed + ) + ) + offset.setProperty("unit", "mm") + offset.setText(FreeCAD.Units.Quantity(20.0, FreeCAD.Units.Length).UserString) + h_layout.addWidget(set_label) + h_layout.addWidget(number) + h_layout.addWidget(diameter) + h_layout.addWidget(offset) + v_layout = self.form.verticalLayout + index = v_layout.indexOf(button) + v_layout.insertLayout(index, h_layout) + self.SetsDict["layer" + str(layer)][-1].append(set_label) + self.SetsDict["layer" + str(layer)][-1].append(number) + self.SetsDict["layer" + str(layer)][-1].append(diameter) + self.SetsDict["layer" + str(layer)][-1].append(offset) + self.SetsDict["layer" + str(layer)][-1].append(h_layout) + sets += 1 + if sets == 2: + self.RemoveSetButtonList[layer - 1].setEnabled(True) + + def removeSetButtonClicked(self, button): + layer = self.RemoveSetButtonList.index(button) + 1 + sets = len(self.SetsDict["layer" + str(layer)]) + h_layout = self.SetsDict["layer" + str(layer)][-1][4] + for i in reversed( + range(0, len(self.SetsDict["layer" + str(layer)][-1]) - 1) + ): + h_layout.removeWidget(self.SetsDict["layer" + str(layer)][-1][i]) + self.SetsDict["layer" + str(layer)][-1][i].deleteLater() + del self.SetsDict["layer" + str(layer)][-1][i] + self.form.verticalLayout.removeItem(h_layout) + h_layout.deleteLater() + del self.SetsDict["layer" + str(layer)][-1] + sets -= 1 + if sets == 1: + button.setEnabled(False) + + def addLayerButtonClicked(self, layer=None): + if not layer: + layer = len(self.Layers) + layer += 1 + layout = self.form.verticalLayout + index = layout.indexOf(self.form.addLayerButton) + # Create Layer label + layer_label = QtWidgets.QLabel("Layer" + str(layer) + ":") + layer_label.setFont(QtGui.QFont("Sans", weight=QtGui.QFont.Bold)) + layout.insertWidget(index, layer_label) + self.Layers.append(layer_label) + index += 1 + # Create Add Set button + add_set_button = QtWidgets.QPushButton("Add Set") + add_set_button.clicked.connect( + lambda: self.addSetButtonClicked(add_set_button) + ) + layout.insertWidget(index, add_set_button) + self.AddSetButtonList.append(add_set_button) + index += 1 + # Create Remove Set Button + remove_set_button = QtWidgets.QPushButton("Remove Set") + remove_set_button.clicked.connect( + lambda: self.removeSetButtonClicked(remove_set_button) + ) + remove_set_button.setEnabled(False) + layout.insertWidget(index, remove_set_button) + self.RemoveSetButtonList.append(remove_set_button) + + self.SetsDict["layer" + str(layer)] = [] + self.addSetButtonClicked(add_set_button) + if layer == 2: + self.form.removeLayerButton.setEnabled(True) + + def removeLayerButtonClicked(self): + layer = len(self.Layers) + sets = len(self.SetsDict["layer" + str(layer)]) + remove_set_button = self.RemoveSetButtonList[layer - 1] + for i in range(0, sets): + self.removeSetButtonClicked(remove_set_button) + self.form.verticalLayout.removeWidget(self.AddSetButtonList[layer - 1]) + self.AddSetButtonList[layer - 1].deleteLater() + del self.AddSetButtonList[layer - 1] + self.form.verticalLayout.removeWidget( + self.RemoveSetButtonList[layer - 1] + ) + self.RemoveSetButtonList[layer - 1].deleteLater() + del self.RemoveSetButtonList[layer - 1] + self.form.verticalLayout.removeWidget(self.Layers[layer - 1]) + self.Layers[layer - 1].deleteLater() + del self.Layers[layer - 1] + if layer == 2: + self.form.removeLayerButton.setEnabled(False) + + def accept(self): + """This function is executed when 'OK' button is clicked from ui.""" + layers = len(self.Layers) + number_diameter_offset_list = [] + for layer in range(1, layers + 1): + number_diameter_offset_list.append( + self.getNumberDiameterOffsetString(layer) + ) + self.NumberDiameterOffsetTuple = tuple(number_diameter_offset_list) + self.form.close() + + def getNumberDiameterOffsetString(self, layer): + sets = len(self.SetsDict["layer" + str(layer)]) + number_diameter_offset_string = "" + for i in range(0, sets): + number = self.SetsDict["layer" + str(layer)][i][1].value() + diameter = self.SetsDict["layer" + str(layer)][i][2].text() + diameter = FreeCAD.Units.Quantity(diameter).Value + offset = self.SetsDict["layer" + str(layer)][i][3].text() + offset = FreeCAD.Units.Quantity(offset).Value + number_diameter_offset_string += ( + str(number) + "#" + str(diameter) + "@" + str(offset) + ) + if i != sets - 1: + number_diameter_offset_string += "+" + return number_diameter_offset_string + + +def runNumberDiameterOffsetDialog(self, number_diameter_offset): + if isinstance(number_diameter_offset, str): + number_diameter_offset = (number_diameter_offset,) + dialog = _NumberDiameterOffsetDialog(number_diameter_offset) + dialog.setupUi() + dialog.form.exec_() + self.NumberDiameterOffsetTuple = dialog.NumberDiameterOffsetTuple diff --git a/BeamReinforcement/ShearRebars_HookExtensionEditDialog.py b/BeamReinforcement/ShearRebars_HookExtensionEditDialog.py index 17b6b6f..3efdf20 100644 --- a/BeamReinforcement/ShearRebars_HookExtensionEditDialog.py +++ b/BeamReinforcement/ShearRebars_HookExtensionEditDialog.py @@ -1,101 +1,101 @@ -# -*- coding: utf-8 -*- -# *************************************************************************** -# * * -# * Copyright (c) 2019 - Suraj * -# * * -# * This program is free software; you can redistribute it and/or modify * -# * it under the terms of the GNU Lesser General Public License (LGPL) * -# * as published by the Free Software Foundation; either version 2 of * -# * the License, or (at your option) any later version. * -# * for detail see the LICENCE text file. * -# * * -# * This program is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -# * GNU Library General Public License for more details. * -# * * -# * You should have received a copy of the GNU Library General Public * -# * License along with this program; if not, write to the Free Software * -# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -# * USA * -# * * -# *************************************************************************** - -__title__ = "Hook Extension Edit Dialog" -__author__ = "Suraj" -__url__ = "https://www.freecadweb.org" - -from pathlib import Path - -import FreeCAD -import FreeCADGui -from PySide2 import QtWidgets - - -class _HookExtensionEditDialog: - def __init__(self, hook_extension_tuple): - self.HookExtensionTuple = hook_extension_tuple - self.HookExtensionInputFieldList = [] - self.form = FreeCADGui.PySideUic.loadUi( - str(Path(__file__).with_suffix(".ui")) - ) - self.form.setWindowTitle( - QtWidgets.QApplication.translate( - "Arch", "Hook Extension Edit Dialog", None - ) - ) - - def setupUi(self): - """This function is used to set values in ui.""" - self.connectSignalSlots() - sets = len(self.HookExtensionTuple) - for i in range(0, sets): - self.addSet() - if self.HookExtensionTuple[i] is None: - self.HookExtensionInputFieldList[i].setText("40 mm") - self.HookExtensionInputFieldList[i].setEnabled(False) - else: - self.HookExtensionInputFieldList[i].setText( - str(self.HookExtensionTuple[i]) - ) - self.HookExtensionInputFieldList[i].setEnabled(True) - - def connectSignalSlots(self): - """This function is used to connect different slots in UI to appropriate - functions.""" - self.form.buttonBox.accepted.connect(self.accept) - self.form.buttonBox.rejected.connect(lambda: self.form.close()) - - def addSet(self): - sets = len(self.HookExtensionInputFieldList) - # Create Hook Extension Combo Box - ui = FreeCADGui.UiLoader() - hook_extension = ui.createWidget("Gui::InputField") - hook_extension.setProperty("unit", "mm") - hook_extension.setProperty("minimum", 10) - hook_extension.setText("40 mm") - form_layout = self.form.formLayout - index = sets - form_layout.insertRow(index, "Set " + str(sets + 1), hook_extension) - self.HookExtensionInputFieldList.append(hook_extension) - - def accept(self): - """This function is executed when 'OK' button is clicked from ui.""" - sets = len(self.HookExtensionInputFieldList) - hook_extension_list = [] - for i in range(0, sets): - if self.HookExtensionInputFieldList[i].isEnabled(): - hook_extension = self.HookExtensionInputFieldList[i].text() - hook_extension = FreeCAD.Units.Quantity(hook_extension).Value - hook_extension_list.append(hook_extension) - else: - hook_extension_list.append(None) - self.HookExtensionTuple = tuple(hook_extension_list) - self.form.close() - - -def runHookExtensionEditDialog(self, hook_extension_tuple): - dialog = _HookExtensionEditDialog(hook_extension_tuple) - dialog.setupUi() - dialog.form.exec_() - self.HookExtensionTuple = dialog.HookExtensionTuple +# -*- coding: utf-8 -*- +# *************************************************************************** +# * * +# * Copyright (c) 2019 - Suraj * +# * * +# * This program is free software; you can redistribute it and/or modify * +# * it under the terms of the GNU Lesser General Public License (LGPL) * +# * as published by the Free Software Foundation; either version 2 of * +# * the License, or (at your option) any later version. * +# * for detail see the LICENCE text file. * +# * * +# * This program is distributed in the hope that it will be useful, * +# * but WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +# * GNU Library General Public License for more details. * +# * * +# * You should have received a copy of the GNU Library General Public * +# * License along with this program; if not, write to the Free Software * +# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +# * USA * +# * * +# *************************************************************************** + +__title__ = "Hook Extension Edit Dialog" +__author__ = "Suraj" +__url__ = "https://www.freecadweb.org" + +from pathlib import Path + +import FreeCAD +import FreeCADGui +from PySide2 import QtWidgets + + +class _HookExtensionEditDialog: + def __init__(self, hook_extension_tuple): + self.HookExtensionTuple = hook_extension_tuple + self.HookExtensionInputFieldList = [] + self.form = FreeCADGui.PySideUic.loadUi( + str(Path(__file__).with_suffix(".ui")) + ) + self.form.setWindowTitle( + QtWidgets.QApplication.translate( + "Arch", "Hook Extension Edit Dialog", None + ) + ) + + def setupUi(self): + """This function is used to set values in ui.""" + self.connectSignalSlots() + sets = len(self.HookExtensionTuple) + for i in range(0, sets): + self.addSet() + if self.HookExtensionTuple[i] is None: + self.HookExtensionInputFieldList[i].setText(FreeCAD.Units.Quantity(40.0, FreeCAD.Units.Length).UserString) + self.HookExtensionInputFieldList[i].setEnabled(False) + else: + self.HookExtensionInputFieldList[i].setText( + FreeCAD.Units.Quantity(self.HookExtensionTuple[i], FreeCAD.Units.Length).UserString + ) + self.HookExtensionInputFieldList[i].setEnabled(True) + + def connectSignalSlots(self): + """This function is used to connect different slots in UI to appropriate + functions.""" + self.form.buttonBox.accepted.connect(self.accept) + self.form.buttonBox.rejected.connect(lambda: self.form.close()) + + def addSet(self): + sets = len(self.HookExtensionInputFieldList) + # Create Hook Extension Combo Box + ui = FreeCADGui.UiLoader() + hook_extension = ui.createWidget("Gui::InputField") + hook_extension.setProperty("unit", "mm") + hook_extension.setProperty("minimum", 10) + hook_extension.setText(FreeCAD.Units.Quantity(40.0, FreeCAD.Units.Length).UserString) + form_layout = self.form.formLayout + index = sets + form_layout.insertRow(index, "Set " + str(sets + 1), hook_extension) + self.HookExtensionInputFieldList.append(hook_extension) + + def accept(self): + """This function is executed when 'OK' button is clicked from ui.""" + sets = len(self.HookExtensionInputFieldList) + hook_extension_list = [] + for i in range(0, sets): + if self.HookExtensionInputFieldList[i].isEnabled(): + hook_extension = self.HookExtensionInputFieldList[i].text() + hook_extension = FreeCAD.Units.Quantity(hook_extension).Value + hook_extension_list.append(hook_extension) + else: + hook_extension_list.append(None) + self.HookExtensionTuple = tuple(hook_extension_list) + self.form.close() + + +def runHookExtensionEditDialog(self, hook_extension_tuple): + dialog = _HookExtensionEditDialog(hook_extension_tuple) + dialog.setupUi() + dialog.form.exec_() + self.HookExtensionTuple = dialog.HookExtensionTuple diff --git a/BeamReinforcement/ShearRebars_NumberDiameterOffset.py b/BeamReinforcement/ShearRebars_NumberDiameterOffset.py index b049181..5c513ee 100644 --- a/BeamReinforcement/ShearRebars_NumberDiameterOffset.py +++ b/BeamReinforcement/ShearRebars_NumberDiameterOffset.py @@ -1,163 +1,163 @@ -# -*- coding: utf-8 -*- -# *************************************************************************** -# * * -# * Copyright (c) 2019 - Suraj * -# * * -# * This program is free software; you can redistribute it and/or modify * -# * it under the terms of the GNU Lesser General Public License (LGPL) * -# * as published by the Free Software Foundation; either version 2 of * -# * the License, or (at your option) any later version. * -# * for detail see the LICENCE text file. * -# * * -# * This program is distributed in the hope that it will be useful, * -# * but WITHOUT ANY WARRANTY; without even the implied warranty of * -# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -# * GNU Library General Public License for more details. * -# * * -# * You should have received a copy of the GNU Library General Public * -# * License along with this program; if not, write to the Free Software * -# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * -# * USA * -# * * -# *************************************************************************** - -__title__ = "Number Diameter Offset Edit Dialog" -__author__ = "Suraj" -__url__ = "https://www.freecadweb.org" - -from pathlib import Path - -import FreeCAD -import FreeCADGui -from PySide2 import QtWidgets - -from Rebarfunc import gettupleOfNumberDiameterOffset - - -class _NumberDiameterOffsetDialog: - def __init__(self, number_diameter_offset_string): - self.NumberDiameterOffsetString = number_diameter_offset_string - self.SetsDict = {} - self.form = FreeCADGui.PySideUic.loadUi( - str(Path(__file__).with_suffix(".ui")) - ) - self.form.setWindowTitle( - QtWidgets.QApplication.translate( - "Arch", "Rebar Number Diameter Offset Edit Dialog", None - ) - ) - - def setupUi(self): - """This function is used to set values in ui.""" - self.connectSignalSlots() - if self.NumberDiameterOffsetString: - number_diameter_offset_tuple = gettupleOfNumberDiameterOffset( - self.NumberDiameterOffsetString - ) - sets = len(number_diameter_offset_tuple) - for i in range(0, sets): - self.addSetButtonClicked() - _, number, diameter, offset, _ = self.SetsDict[ - "set" + str(i + 1) - ] - number.setValue(number_diameter_offset_tuple[i][0]) - diameter.setText(str(number_diameter_offset_tuple[i][1]) + "mm") - offset.setText(str(number_diameter_offset_tuple[i][2]) + "mm") - - def connectSignalSlots(self): - """This function is used to connect different slots in UI to appropriate - functions.""" - self.form.addSetButton.clicked.connect(self.addSetButtonClicked) - self.form.removeSetButton.clicked.connect(self.removeSetButtonClicked) - self.form.buttonBox.accepted.connect(self.accept) - self.form.buttonBox.rejected.connect(lambda: self.form.close()) - - def addSetButtonClicked(self): - sets = len(self.SetsDict) - sets += 1 - self.SetsDict["set" + str(sets)] = [] - # Create horizontal layout and its components - h_layout = QtWidgets.QHBoxLayout() - set_label = QtWidgets.QLabel("Set " + str(sets)) - set_label.setSizePolicy( - QtWidgets.QSizePolicy( - QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed - ) - ) - ui = FreeCADGui.UiLoader() - number = ui.createWidget("Gui::PrefSpinBox") - number.setSizePolicy( - QtWidgets.QSizePolicy( - QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed - ) - ) - number.setMinimum(1) - diameter = ui.createWidget("Gui::InputField") - diameter.setSizePolicy( - QtWidgets.QSizePolicy( - QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed - ) - ) - diameter.setProperty("unit", "mm") - diameter.setText("16 mm") - offset = ui.createWidget("Gui::InputField") - offset.setSizePolicy( - QtWidgets.QSizePolicy( - QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed - ) - ) - offset.setProperty("unit", "mm") - offset.setText("20 mm") - h_layout.addWidget(set_label) - h_layout.addWidget(number) - h_layout.addWidget(diameter) - h_layout.addWidget(offset) - v_layout = self.form.verticalLayout - index = v_layout.indexOf(self.form.addSetButton) - v_layout.insertLayout(index, h_layout) - self.SetsDict["set" + str(sets)].append(set_label) - self.SetsDict["set" + str(sets)].append(number) - self.SetsDict["set" + str(sets)].append(diameter) - self.SetsDict["set" + str(sets)].append(offset) - self.SetsDict["set" + str(sets)].append(h_layout) - if sets == 1: - self.form.removeSetButton.setEnabled(True) - - def removeSetButtonClicked(self): - sets = len(self.SetsDict) - h_layout = self.SetsDict["set" + str(sets)][4] - for i in reversed(range(0, len(self.SetsDict["set" + str(sets)]) - 1)): - h_layout.removeWidget(self.SetsDict["set" + str(sets)][i]) - self.SetsDict["set" + str(sets)][i].deleteLater() - del self.SetsDict["set" + str(sets)][i] - self.form.verticalLayout.removeItem(h_layout) - h_layout.deleteLater() - del self.SetsDict["set" + str(sets)] - sets -= 1 - if sets == 0: - self.form.removeSetButton.setEnabled(False) - - def accept(self): - """This function is executed when 'OK' button is clicked from ui.""" - sets = len(self.SetsDict) - number_diameter_offset_string = "" - for i in range(1, sets + 1): - number = self.SetsDict["set" + str(i)][1].value() - diameter = self.SetsDict["set" + str(i)][2].text() - diameter = FreeCAD.Units.Quantity(diameter).Value - offset = self.SetsDict["set" + str(i)][3].text() - offset = FreeCAD.Units.Quantity(offset).Value - number_diameter_offset_string += ( - str(number) + "#" + str(diameter) + "mm@" + str(offset) + "mm" - ) - if i != sets: - number_diameter_offset_string += "+" - self.NumberDiameterOffsetString = number_diameter_offset_string - self.form.close() - - -def runNumberDiameterOffsetDialog(self, number_diameter_offset_string): - dialog = _NumberDiameterOffsetDialog(number_diameter_offset_string) - dialog.setupUi() - dialog.form.exec_() - self.NumberDiameterOffsetString = dialog.NumberDiameterOffsetString +# -*- coding: utf-8 -*- +# *************************************************************************** +# * * +# * Copyright (c) 2019 - Suraj * +# * * +# * This program is free software; you can redistribute it and/or modify * +# * it under the terms of the GNU Lesser General Public License (LGPL) * +# * as published by the Free Software Foundation; either version 2 of * +# * the License, or (at your option) any later version. * +# * for detail see the LICENCE text file. * +# * * +# * This program is distributed in the hope that it will be useful, * +# * but WITHOUT ANY WARRANTY; without even the implied warranty of * +# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +# * GNU Library General Public License for more details. * +# * * +# * You should have received a copy of the GNU Library General Public * +# * License along with this program; if not, write to the Free Software * +# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +# * USA * +# * * +# *************************************************************************** + +__title__ = "Number Diameter Offset Edit Dialog" +__author__ = "Suraj" +__url__ = "https://www.freecadweb.org" + +from pathlib import Path + +import FreeCAD +import FreeCADGui +from PySide2 import QtWidgets + +from Rebarfunc import gettupleOfNumberDiameterOffset + + +class _NumberDiameterOffsetDialog: + def __init__(self, number_diameter_offset_string): + self.NumberDiameterOffsetString = number_diameter_offset_string + self.SetsDict = {} + self.form = FreeCADGui.PySideUic.loadUi( + str(Path(__file__).with_suffix(".ui")) + ) + self.form.setWindowTitle( + QtWidgets.QApplication.translate( + "Arch", "Rebar Number Diameter Offset Edit Dialog", None + ) + ) + + def setupUi(self): + """This function is used to set values in ui.""" + self.connectSignalSlots() + if self.NumberDiameterOffsetString: + number_diameter_offset_tuple = gettupleOfNumberDiameterOffset( + self.NumberDiameterOffsetString + ) + sets = len(number_diameter_offset_tuple) + for i in range(0, sets): + self.addSetButtonClicked() + _, number, diameter, offset, _ = self.SetsDict[ + "set" + str(i + 1) + ] + number.setValue(number_diameter_offset_tuple[i][0]) + diameter.setText(FreeCAD.Units.Quantity(number_diameter_offset_tuple[i][1], FreeCAD.Units.Length).UserString) + offset.setText(FreeCAD.Units.Quantity(number_diameter_offset_tuple[i][2], FreeCAD.Units.Length).UserString) + + def connectSignalSlots(self): + """This function is used to connect different slots in UI to appropriate + functions.""" + self.form.addSetButton.clicked.connect(self.addSetButtonClicked) + self.form.removeSetButton.clicked.connect(self.removeSetButtonClicked) + self.form.buttonBox.accepted.connect(self.accept) + self.form.buttonBox.rejected.connect(lambda: self.form.close()) + + def addSetButtonClicked(self): + sets = len(self.SetsDict) + sets += 1 + self.SetsDict["set" + str(sets)] = [] + # Create horizontal layout and its components + h_layout = QtWidgets.QHBoxLayout() + set_label = QtWidgets.QLabel("Set " + str(sets)) + set_label.setSizePolicy( + QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed + ) + ) + ui = FreeCADGui.UiLoader() + number = ui.createWidget("Gui::PrefSpinBox") + number.setSizePolicy( + QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed + ) + ) + number.setMinimum(1) + diameter = ui.createWidget("Gui::InputField") + diameter.setSizePolicy( + QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed + ) + ) + diameter.setProperty("unit", "mm") + diameter.setText(FreeCAD.Units.Quantity(16.0, FreeCAD.Units.Length).UserString) + offset = ui.createWidget("Gui::InputField") + offset.setSizePolicy( + QtWidgets.QSizePolicy( + QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed + ) + ) + offset.setProperty("unit", "mm") + offset.setText(FreeCAD.Units.Quantity(20.0, FreeCAD.Units.Length).UserString) + h_layout.addWidget(set_label) + h_layout.addWidget(number) + h_layout.addWidget(diameter) + h_layout.addWidget(offset) + v_layout = self.form.verticalLayout + index = v_layout.indexOf(self.form.addSetButton) + v_layout.insertLayout(index, h_layout) + self.SetsDict["set" + str(sets)].append(set_label) + self.SetsDict["set" + str(sets)].append(number) + self.SetsDict["set" + str(sets)].append(diameter) + self.SetsDict["set" + str(sets)].append(offset) + self.SetsDict["set" + str(sets)].append(h_layout) + if sets == 1: + self.form.removeSetButton.setEnabled(True) + + def removeSetButtonClicked(self): + sets = len(self.SetsDict) + h_layout = self.SetsDict["set" + str(sets)][4] + for i in reversed(range(0, len(self.SetsDict["set" + str(sets)]) - 1)): + h_layout.removeWidget(self.SetsDict["set" + str(sets)][i]) + self.SetsDict["set" + str(sets)][i].deleteLater() + del self.SetsDict["set" + str(sets)][i] + self.form.verticalLayout.removeItem(h_layout) + h_layout.deleteLater() + del self.SetsDict["set" + str(sets)] + sets -= 1 + if sets == 0: + self.form.removeSetButton.setEnabled(False) + + def accept(self): + """This function is executed when 'OK' button is clicked from ui.""" + sets = len(self.SetsDict) + number_diameter_offset_string = "" + for i in range(1, sets + 1): + number = self.SetsDict["set" + str(i)][1].value() + diameter = self.SetsDict["set" + str(i)][2].text() + diameter = FreeCAD.Units.Quantity(diameter).Value + offset = self.SetsDict["set" + str(i)][3].text() + offset = FreeCAD.Units.Quantity(offset).Value + number_diameter_offset_string += ( + str(number) + "#" + str(diameter) + "mm@" + str(offset) + "mm" + ) + if i != sets: + number_diameter_offset_string += "+" + self.NumberDiameterOffsetString = number_diameter_offset_string + self.form.close() + + +def runNumberDiameterOffsetDialog(self, number_diameter_offset_string): + dialog = _NumberDiameterOffsetDialog(number_diameter_offset_string) + dialog.setupUi() + dialog.form.exec_() + self.NumberDiameterOffsetString = dialog.NumberDiameterOffsetString