class DraggableTreeDialog(qg.QDialog): def __init__(self, list_in, *args, **kwargs): super(DraggableTreeDialog, self).__init__(*args, **kwargs) self.listwidget = DraggableTreeWidget() button_ok = qg.QPushButton('Ok') button_cancel = qg.QPushButton('Cancel') sub_layout1 = qg.QHBoxLayout() sub_layout1.addWidget(button_ok) sub_layout1.addWidget(button_cancel) layout = qg.QVBoxLayout() layout.addWidget(self.listwidget) layout.addLayout(sub_layout1) self.setLayout(layout) button_ok.clicked.connect(self.accept) button_cancel.clicked.connect(self.reject) self.listwidget.linklist(list_in) def set_data(self,ini): self.listwidget.selectIndeces(ini) def results(self): return self.listwidget.currentIndeces2()
class DraggableTreeDialog(qg.QDialog): def __init__(self, list_in, *args, **kwargs): super(DraggableTreeDialog, self).__init__(*args, **kwargs) self.listwidget = DraggableTreeWidget() button_ok = qg.QPushButton('Ok') button_cancel = qg.QPushButton('Cancel') sub_layout1 = qg.QHBoxLayout() sub_layout1.addWidget(button_ok) sub_layout1.addWidget(button_cancel) layout = qg.QVBoxLayout() layout.addWidget(self.listwidget) layout.addLayout(sub_layout1) self.setLayout(layout) button_ok.clicked.connect(self.accept) button_cancel.clicked.connect(self.reject) self.listwidget.linklist(list_in) def set_data(self,ini): self.listwidget.selectIndeces(ini) def results(self): return self.listwidget.currentIndeces2()
class Dialog(qg.QDialog): def __init__(self, design, operations, selectedop=None, outputref=0): super(Dialog, self).__init__() self.design = design self.le1 = DraggableTreeWidget() self.le1.linklist(operations) if selectedop is not None: self.le1.selectIndeces([(selectedop, outputref)]) layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('Operation to Flatten')) layout.addWidget(self.le1) button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout.addLayout(layout2) self.setLayout(layout) button1.clicked.connect(self.accept) button2.clicked.connect(self.reject) def acceptdata(self): ref, ii = self.le1.currentRefs()[0] generic = self.design.op_from_ref(ref).output[ii].generic_laminate() return ref, ii, generic
class Dialog(qg.QDialog): def __init__(self, design, operations, selectedop=None, outputref=0): super(Dialog, self).__init__() self.design = design self.le1 = DraggableTreeWidget() self.le1.linklist(operations) if selectedop is not None: self.le1.selectIndeces([(selectedop, outputref)]) layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('Operation to Flatten')) layout.addWidget(self.le1) button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout.addLayout(layout2) self.setLayout(layout) button1.clicked.connect(self.accept) button2.clicked.connect(self.reject) def acceptdata(self): ref, ii = self.le1.currentRefs()[0] generic = self.design.op_from_ref(ref).output[ii].generic_laminate() return ref, ii, generic
def __init__(self, design, operations, selectedop=None, outputref=0): super(Dialog, self).__init__() self.design = design self.le1 = DraggableTreeWidget() self.le1.linklist(operations) if selectedop is not None: self.le1.selectIndeces([(selectedop, outputref)]) layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('Operation to Flatten')) layout.addWidget(self.le1) button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout.addLayout(layout2) self.setLayout(layout) button1.clicked.connect(self.accept) button2.clicked.connect(self.reject)
def __init__(self, design, operations, operation_index, sketch=None): super(Dialog, self).__init__() SketchListManager(design) self.optree = DraggableTreeWidget() self.optree.linklist(operations) self.sketchwidget = SketchListManager(design) button1 = qg.QPushButton('Ok') button1.clicked.connect(self.accept) button2 = qg.QPushButton('Cancel') button2.clicked.connect(self.reject) layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout = qg.QVBoxLayout() layout.addWidget(self.optree) layout.addWidget(self.sketchwidget) layout.addLayout(layout2) self.setLayout(layout) for ii in range(self.sketchwidget.itemlist.count()): item = self.sketchwidget.itemlist.item(ii) if item.value == sketch: item.setSelected(True) try: self.optree.selectIndeces([operation_index]) except NoOperation: pass
class Dialog(qg.QDialog): def __init__(self,operations,index,shift=0,flip=False,rotate = False,outputref = 0): super(Dialog,self).__init__() self.operations = operations self.le1 = DraggableTreeWidget() self.le1.linklist(self.operations) self.le1.selectIndeces([(index,outputref)]) # self.le1.addItems([str(op) for op in operations]) layout5 = qg.QHBoxLayout() layout5.addWidget(qg.QLabel('Flip Layers')) self.flip = qg.QCheckBox() self.flip.setChecked(flip) layout5.addWidget(self.flip) layout6 = qg.QHBoxLayout() layout6.addWidget(qg.QLabel('Rotate Layers')) self.rotate = qg.QCheckBox() self.rotate.setChecked(rotate) layout6.addWidget(self.rotate) layout4 = qg.QHBoxLayout() layout4.addWidget(qg.QLabel('Shift Layers')) self.sb = qg.QSpinBox() self.sb.setRange(-100,100) self.sb.setSingleStep(1) self.sb.setValue(shift) layout4.addWidget(self.sb) button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('Parent Operation')) layout.addWidget(self.le1) layout.addLayout(layout5) layout.addLayout(layout6) layout.addLayout(layout4) layout.addLayout(layout2) self.setLayout(layout) button1.pressed.connect(self.accept) button2.pressed.connect(self.reject) # self.le1.setCurrentIndex(index) def acceptdata(self): # ii = self.le1.currentIndex() ref,ii = self.le1.currentRefs()[0] return ref,self.sb.value(),self.flip.isChecked(),self.rotate.isChecked(),ii
def __init__(self,operationlist,index0,operationindeces1=None,operationindeces2 = None): super(Dialog,self).__init__() if operationindeces1 ==None: operationindeces1 = [] if operationindeces2 ==None: operationindeces2 = [] from popupcad.widgets.operationlist import OperationList self.le0 = OperationList(LaminateOperation.unaryoperationtypes,LaminateOperation.pairoperationtypes,LaminateOperation.displayorder) self.operationlist = operationlist self.unarylistwidget = DraggableTreeWidget() self.unarylistwidget.linklist(self.operationlist) self.unarylistwidget.setSelectionMode(qg.QListWidget.SelectionMode.ExtendedSelection) self.unarylistwidget.selectIndeces(operationindeces1) self.pairlistwidget = DraggableTreeWidget() self.pairlistwidget.linklist(self.operationlist) self.pairlistwidget.setSelectionMode(qg.QListWidget.SelectionMode.ExtendedSelection) self.pairlistwidget.selectIndeces(operationindeces2) layout3 = qg.QVBoxLayout() layout3.addWidget(qg.QLabel('Unary Operators')) layout3.addWidget(self.unarylistwidget) layout4 = qg.QVBoxLayout() layout4.addWidget(qg.QLabel('Binary Operators')) layout4.addWidget(self.pairlistwidget) layout5 = qg.QHBoxLayout() layout5.addLayout(layout3) layout5.addLayout(layout4) button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout = qg.QVBoxLayout() layout.addWidget(self.le0) layout.addLayout(layout5) # layout.addWidget(self.unarylistwidget) # layout.addWidget(self.pairlistwidget) layout.addLayout(layout2) self.setLayout(layout) button1.pressed.connect(self.accept) button2.pressed.connect(self.reject) self.le0.unary_selected.connect(lambda:self.pairlistwidget.setEnabled(False)) self.le0.binary_selected.connect(lambda:self.pairlistwidget.setEnabled(True)) self.le0.setCurrentIndex(index0)
def __init__(self, operations, index, shift=0, flip=False, rotate=False, outputref=0): super(Dialog, self).__init__() self.operations = operations self.le1 = DraggableTreeWidget() self.le1.linklist(self.operations) self.le1.selectIndeces([(index, outputref)]) # self.le1.addItems([str(op) for op in operations]) layout5 = qg.QHBoxLayout() layout5.addWidget(qg.QLabel('Flip Layers')) self.flip = qg.QCheckBox() self.flip.setChecked(flip) layout5.addWidget(self.flip) layout6 = qg.QHBoxLayout() layout6.addWidget(qg.QLabel('Rotate Layers')) self.rotate = qg.QCheckBox() self.rotate.setChecked(rotate) layout6.addWidget(self.rotate) layout4 = qg.QHBoxLayout() layout4.addWidget(qg.QLabel('Shift Layers')) self.sb = qg.QSpinBox() self.sb.setRange(popupcad.gui_negative_infinity, popupcad.gui_positive_infinity) self.sb.setSingleStep(1) self.sb.setValue(shift) layout4.addWidget(self.sb) button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('Parent Operation')) layout.addWidget(self.le1) layout.addLayout(layout5) layout.addLayout(layout6) layout.addLayout(layout4) layout.addLayout(layout2) self.setLayout(layout) button1.clicked.connect(self.accept) button2.clicked.connect(self.reject)
def __init__(self, design, operations, selectedop=None, outputref=0): super(Dialog, self).__init__() self.design = design self.le1 = DraggableTreeWidget() self.le1.linklist(operations) if selectedop is not None: self.le1.selectIndeces([(selectedop, outputref)]) layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('Operation to Flatten')) layout.addWidget(self.le1) button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout.addLayout(layout2) self.setLayout(layout) button1.clicked.connect(self.accept) button2.clicked.connect(self.reject)
def __init__(self, design, operations, operation_index, sketch=None): super(Dialog, self).__init__() SketchListManager(design) self.optree = DraggableTreeWidget() self.optree.linklist(operations) self.sketchwidget = SketchListManager(design) button1 = qg.QPushButton('Ok') button1.clicked.connect(self.accept) button2 = qg.QPushButton('Cancel') button2.clicked.connect(self.reject) layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout = qg.QVBoxLayout() layout.addWidget(self.optree) layout.addWidget(self.sketchwidget) layout.addLayout(layout2) self.setLayout(layout) for ii in range(self.sketchwidget.itemlist.count()): item = self.sketchwidget.itemlist.item(ii) if item.value == sketch: item.setSelected(True) try: self.optree.selectIndeces([operation_index]) except NoOperation: pass
class Dialog(qg.QDialog): def __init__(self,design,operations,operation_index,sketch = None): super(Dialog,self).__init__() SketchListManager(design) self.optree = DraggableTreeWidget() self.optree.linklist(operations) self.sketchwidget = SketchListManager(design) button1 = qg.QPushButton('Ok') button1.pressed.connect(self.accept) button2 = qg.QPushButton('Cancel') button2.pressed.connect(self.reject) layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout=qg.QVBoxLayout() layout.addWidget(self.optree) layout.addWidget(self.sketchwidget) layout.addLayout(layout2) self.setLayout(layout) for ii in range(self.sketchwidget.itemlist.count()): item = self.sketchwidget.itemlist.item(ii) if item.value==sketch: item.setSelected(True) try: self.optree.selectIndeces([operation_index]) except NoOperation: pass def acceptdata(self): operation_links = {} operation_links['source'] = [self.optree.currentRefs()[0]] sketch_links= {} try: sketch_links['cross_section'] = [self.sketchwidget.itemlist.selectedItems()[0].value.id] except IndexError: pass return operation_links,sketch_links,100
def setupLayout(self): self.constraint_editor = ListEditor() if self.selectops: self.optree = DraggableTreeWidget() self.propertieswindow = qg.QWidget() ok_button = qg.QPushButton('&Ok',self) cancel_button= qg.QPushButton('&Cancel',self) ok_button.clicked.connect(self.accept) cancel_button.clicked.connect(self.reject) sublayout= qg.QHBoxLayout() sublayout.addStretch(1) sublayout.addWidget(ok_button) sublayout.addWidget(cancel_button) sublayout.addStretch(1) self.scene = GraphicsScene() self.graphicsview = GraphicsView(self.scene) centrallayout = qg.QVBoxLayout() centrallayout.addWidget(self.graphicsview) centrallayout.addLayout(sublayout) centralwidget = qg.QWidget() centralwidget.setLayout(centrallayout) if self.selectops: self.optreedock = qg.QDockWidget() self.optreedock.setWidget(self.optree) self.optreedock.setAllowedAreas(qc.Qt.AllDockWidgetAreas) self.optreedock.setWindowTitle('Operatons') self.constraintdock = qg.QDockWidget() self.constraintdock.setWidget(self.constraint_editor) self.constraintdock.setAllowedAreas(qc.Qt.AllDockWidgetAreas) self.constraintdock.setWindowTitle('Constraints') self.constraintdock.setMinimumHeight(200) self.propdock = qg.QDockWidget() self.propdock.setWidget(self.propertieswindow) self.propdock.setAllowedAreas(qc.Qt.AllDockWidgetAreas) self.propdock.setWindowTitle('Properties') self.propdock.setMinimumHeight(200) if self.selectops: self.addDockWidget(qc.Qt.LeftDockWidgetArea,self.optreedock) self.addDockWidget(qc.Qt.RightDockWidgetArea,self.constraintdock) self.addDockWidget(qc.Qt.RightDockWidgetArea,self.propdock) self.setCentralWidget(centralwidget) self.setWindowTitle('Sketcher') self.set_nominal_size() self.move_center() if self.selectops: self.optreedock.closeEvent = lambda event: self.action_uncheck(self.act_view_ops) self.constraintdock.closeEvent = lambda event: self.action_uncheck(self.act_view_constraints) self.propdock.closeEvent = lambda event: self.action_uncheck(self.act_view_properties)
def __init__( self,design, operations, index, shift=0, flip=False, rotate=False, outputref=0): super(Dialog, self).__init__() self.design = design self.operations = operations self.le1 = DraggableTreeWidget() self.le1.linklist(self.operations) self.le1.selectIndeces([(index, outputref)]) # self.le1.addItems([str(op) for op in operations]) self.layer_widget = popupcad.widgets.listeditor.ListSelector() self.layer_widget.linklist(self.design.return_layer_definition().layers) layout5 = qg.QHBoxLayout() layout5.addWidget(qg.QLabel('Flip Layers')) self.flip = qg.QCheckBox() self.flip.setChecked(flip) layout5.addWidget(self.flip) layout6 = qg.QHBoxLayout() layout6.addWidget(qg.QLabel('Rotate Layers')) self.rotate = qg.QCheckBox() self.rotate.setChecked(rotate) layout6.addWidget(self.rotate) layout4 = qg.QHBoxLayout() layout4.addWidget(qg.QLabel('Shift Layers')) self.sb = qg.QSpinBox() self.sb.setRange(-100, 100) self.sb.setSingleStep(1) self.sb.setValue(shift) layout4.addWidget(self.sb) button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('Filter')) layout.addWidget(self.layer_widget) layout.addWidget(qg.QLabel('Parent Operation')) layout.addWidget(self.le1) layout.addLayout(layout5) layout.addLayout(layout6) layout.addLayout(layout4) layout.addLayout(layout2) self.setLayout(layout) button1.clicked.connect(self.accept) button2.clicked.connect(self.reject)
class Dialog(qg.QDialog): def __init__(self, design, operations, operation_index, sketch=None): super(Dialog, self).__init__() SketchListManager(design) self.optree = DraggableTreeWidget() self.optree.linklist(operations) self.sketchwidget = SketchListManager(design) button1 = qg.QPushButton('Ok') button1.clicked.connect(self.accept) button2 = qg.QPushButton('Cancel') button2.clicked.connect(self.reject) layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout = qg.QVBoxLayout() layout.addWidget(self.optree) layout.addWidget(self.sketchwidget) layout.addLayout(layout2) self.setLayout(layout) for ii in range(self.sketchwidget.itemlist.count()): item = self.sketchwidget.itemlist.item(ii) if item.value == sketch: item.setSelected(True) try: self.optree.selectIndeces([operation_index]) except NoOperation: pass def acceptdata(self): operation_links = {} operation_links['source'] = [self.optree.currentRefs()[0]] sketch_links = {} try: sketch_links['cross_section'] = [ self.sketchwidget.itemlist.selectedItems()[0].value.id ] except IndexError: pass return operation_links, sketch_links, 100
def __init__(self,keepouttypes,valuenames,defaults,operations,selectedop, show,values=None,keepouttype=None,outputref=0): super(Dialog, self).__init__() self.operations = operations self.le1 = DraggableTreeWidget() self.le1.linklist(self.operations) self.le1.selectIndeces([(selectedop, outputref)]) if values is None: values = defaults[:] layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('Parent Operation')) layout.addWidget(self.le1) self.valueboxes = [] for valuename, v in zip(valuenames, values): templayout = qg.QHBoxLayout() valueedit = qg.QLineEdit() valueedit.setAlignment(qc.Qt.AlignRight) valueedit.setText(str(v)) # self.valueedit.setInputMask('#009.0') valueedit.setValidator(StrictDoubleValidator(popupcad.gui_negative_infinity, popupcad.gui_positive_infinity, popupcad.gui_default_decimals, valueedit)) templayout.addStretch() templayout.addWidget(qg.QLabel(valuename)) templayout.addWidget(valueedit) self.valueboxes.append(valueedit) layout.addLayout(templayout) self.radiobuttons = [] if 'keepout' in show: for key, value2 in keepouttypes.dict.items(): b = qg.QRadioButton(key) b.setChecked(keepouttype == value2) b.uservalue = value2 self.radiobuttons.append(b) layout.addWidget(b) button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout.addLayout(layout2) self.setLayout(layout) button1.clicked.connect(self.accept) button2.clicked.connect(self.reject)
def __init__(self, list_in, *args, **kwargs): super(DraggableTreeDialog, self).__init__(*args, **kwargs) self.listwidget = DraggableTreeWidget() button_ok = qg.QPushButton('Ok') button_cancel = qg.QPushButton('Cancel') sub_layout1 = qg.QHBoxLayout() sub_layout1.addWidget(button_ok) sub_layout1.addWidget(button_cancel) layout = qg.QVBoxLayout() layout.addWidget(self.listwidget) layout.addLayout(sub_layout1) self.setLayout(layout) button_ok.clicked.connect(self.accept) button_cancel.clicked.connect(self.reject) self.listwidget.linklist(list_in)
def __init__(self,cls,design,operations,selectedopindex=None,outputref = 0,selectedoutput = None,sketch = None,operation_type_index = 0): super(Dialog,self).__init__() self.design = design self.operations = [NullOp()]+operations self.cls = cls self.optree = DraggableTreeWidget() self.optree.linklist(self.operations) if selectedopindex!=None: selectedopindex = selectedopindex+1 else: selectedopindex = 0 self.optree.selectIndeces([(selectedopindex,outputref)]) self.sketchwidget = SketchListManager(self.design) for ii in range(self.sketchwidget.itemlist.count()): item = self.sketchwidget.itemlist.item(ii) if item.value==sketch: item.setSelected(True) if selectedoutput == None: selectedoutput = [item.id for item in design.return_layer_definition().layers] self.outputlayerselector = qg.QListWidget() self.outputlayerselector.setSelectionBehavior(qg.QListWidget.SelectionBehavior.SelectRows) self.outputlayerselector.setSelectionMode(qg.QListWidget.SelectionMode.MultiSelection) outputitems = [popupcad.filetypes.listwidgetitem.ListWidgetItem(item,self.outputlayerselector) for item in design.return_layer_definition().layers] [item.setSelected(item.customdata.id in selectedoutput) for item in outputitems] from popupcad.widgets.operationlist import OperationList self.operationtypeselector = OperationList([],cls.function_names,cls.function_names) self.operationtypeselector.setCurrentIndex(operation_type_index) button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') buttonlayout = qg.QHBoxLayout() buttonlayout.addWidget(button1) buttonlayout.addWidget(button2) layout = qg.QVBoxLayout() layout.addWidget(self.sketchwidget) layout.addWidget(self.operationtypeselector) layout.addWidget(qg.QLabel('Parent Operation')) layout.addWidget(self.optree) layout.addWidget(qg.QLabel('Select Layers')) layout.addWidget(self.outputlayerselector) layout.addLayout(buttonlayout) self.setLayout(layout) button1.pressed.connect(self.accept) button2.pressed.connect(self.reject)
def __init__(self, list_in, *args, **kwargs): super(DraggableTreeDialog, self).__init__(*args, **kwargs) self.listwidget = DraggableTreeWidget() button_ok = qg.QPushButton('Ok') button_cancel = qg.QPushButton('Cancel') sub_layout1 = qg.QHBoxLayout() sub_layout1.addWidget(button_ok) sub_layout1.addWidget(button_cancel) layout = qg.QVBoxLayout() layout.addWidget(self.listwidget) layout.addLayout(sub_layout1) self.setLayout(layout) button_ok.clicked.connect(self.accept) button_cancel.clicked.connect(self.reject) self.listwidget.linklist(list_in)
class Dialog(qg.QDialog): def __init__(self, keepouttypes, valuenames, defaults, operations, selectedop, show, values=None, keepouttype=None, outputref=0): super(Dialog, self).__init__() self.operations = operations self.le1 = DraggableTreeWidget() self.le1.linklist(self.operations) self.le1.selectIndeces([(selectedop, outputref)]) if values is None: values = defaults[:] layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('Parent Operation')) layout.addWidget(self.le1) self.valueboxes = [] for valuename, v in zip(valuenames, values): templayout = qg.QHBoxLayout() valueedit = qg.QLineEdit() valueedit.setAlignment(qc.Qt.AlignRight) valueedit.setText(str(v)) # self.valueedit.setInputMask('#009.0') valueedit.setValidator( StrictDoubleValidator(popupcad.gui_negative_infinity, popupcad.gui_positive_infinity, popupcad.gui_default_decimals, valueedit)) templayout.addStretch() templayout.addWidget(qg.QLabel(valuename)) templayout.addWidget(valueedit) self.valueboxes.append(valueedit) layout.addLayout(templayout) self.radiobuttons = [] if 'keepout' in show: for key, value2 in keepouttypes.dict.items(): b = qg.QRadioButton(key) b.setChecked(keepouttype == value2) b.uservalue = value2 self.radiobuttons.append(b) layout.addWidget(b) button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout.addLayout(layout2) self.setLayout(layout) button1.clicked.connect(self.accept) button2.clicked.connect(self.reject) def acceptdata(self): option = None for b in self.radiobuttons: if b.isChecked(): option = b.uservalue ref, ii = self.le1.currentRefs()[0] values = [float(valueedit.text()) for valueedit in self.valueboxes] operation_links = {} operation_links['parent'] = [(ref, ii)] return operation_links, values, option
def __init__(self, operations, layerlist, index0=0, selectedop=None, selectedunary=None, selectedpair=None, selectedoutput=None, outputref=0): super(Dialog, self).__init__() sp = qg.QSizePolicy() sp.setHorizontalPolicy(sp.Minimum) sp.setVerticalPolicy(sp.Minimum) if selectedop is None: selectedop = len(operations) - 1 if selectedunary is None: selectedunary = [] if selectedpair is None: selectedpair = [] if selectedoutput is None: selectedoutput = layerlist from popupcad.widgets.operationlist import OperationList self.le0 = OperationList(LayerOp2.unaryoperationtypes, LayerOp2.pairoperationtypes, LayerOp2.displayorder) self.operations = operations self.operationselector = DraggableTreeWidget() self.operationselector.linklist(self.operations) self.operationselector.selectIndeces([(selectedop, outputref)]) self.unarylayerselector = qg.QListWidget() self.unarylayerselector.setSelectionBehavior(qg.QListWidget.SelectRows) self.unarylayerselector.setSelectionMode(qg.QListWidget.MultiSelection) unaryitems = [ ListWidgetItem(item, self.unarylayerselector) for item in layerlist ] self.pairlayerselector = qg.QListWidget() self.pairlayerselector.setSelectionBehavior(qg.QListWidget.SelectRows) self.pairlayerselector.setSelectionMode(qg.QListWidget.MultiSelection) pairitems = [ ListWidgetItem(item, self.pairlayerselector) for item in layerlist ] self.outputlayerselector = qg.QListWidget() self.outputlayerselector.setSelectionBehavior( qg.QListWidget.SelectRows) self.outputlayerselector.setSelectionMode( qg.QListWidget.MultiSelection) outputitems = [ ListWidgetItem(item, self.outputlayerselector) for item in layerlist ] layout2 = qg.QVBoxLayout() # self.layout2.setContentsMargins(0,0,0,0) layout2.addWidget(qg.QLabel('Unary Operators')) layout2.addWidget(self.unarylayerselector) layout3 = qg.QVBoxLayout() # self.layout2.setContentsMargins(0,0,0,0) layout3.addWidget(qg.QLabel('Binary Operators')) layout3.addWidget(self.pairlayerselector) layout4 = qg.QHBoxLayout() layout4.addLayout(layout2) layout4.addLayout(layout3) layout = qg.QVBoxLayout() layout.addWidget(self.le0) layout.addWidget(qg.QLabel('Parent Operation')) layout.addWidget(self.operationselector) layout.addLayout(layout4) layout.addWidget(qg.QLabel('Output Layers')) layout.addWidget(self.outputlayerselector) button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout.addLayout(layout2) self.setLayout(layout) button1.clicked.connect(self.accept) button2.clicked.connect(self.reject) self.le0.unary_selected.connect( lambda: self.pairlayerselector.setEnabled(False)) self.le0.binary_selected.connect( lambda: self.pairlayerselector.setEnabled(True)) self.le0.setCurrentIndex(index0) [ item.setSelected(item.customdata.id in selectedunary) for item in unaryitems ] [ item.setSelected(item.customdata.id in selectedpair) for item in pairitems ] [ item.setSelected(item.customdata.id in selectedoutput) for item in outputitems ]
class Dialog(qg.QDialog): def __init__( self, keepouttypes, valuenames, defaults, operations, selectedop, show, values=None, keepouttype=None, outputref=0): super(Dialog, self).__init__() self.operations = operations self.le1 = DraggableTreeWidget() self.le1.linklist(self.operations) self.le1.selectIndeces([(selectedop, outputref)]) if values is None: values = defaults[:] layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('Parent Operation')) layout.addWidget(self.le1) self.valueboxes = [] for valuename, v in zip(valuenames, values): templayout = qg.QHBoxLayout() valueedit = qg.QLineEdit() valueedit.setAlignment(qc.Qt.AlignRight) valueedit.setText(str(v)) # self.valueedit.setInputMask('#009.0') valueedit.setValidator( qg.QDoubleValidator(-999.0, 999.0, 4, valueedit)) templayout.addStretch() templayout.addWidget(qg.QLabel(valuename)) templayout.addWidget(valueedit) self.valueboxes.append(valueedit) layout.addLayout(templayout) self.radiobuttons = [] if 'keepout' in show: for key, value2 in keepouttypes.dict.items(): b = qg.QRadioButton(key) b.setChecked(keepouttype == value2) b.uservalue = value2 self.radiobuttons.append(b) layout.addWidget(b) button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout.addLayout(layout2) self.setLayout(layout) button1.clicked.connect(self.accept) button2.clicked.connect(self.reject) def acceptdata(self): option = None for b in self.radiobuttons: if b.isChecked(): option = b.uservalue ref, ii = self.le1.currentRefs()[0] values = [float(valueedit.text()) for valueedit in self.valueboxes] return ref, values, option, ii
class Dialog(qg.QDialog): def __init__( self, operationlist, index0, operationindeces1=None, operationindeces2=None): super(Dialog, self).__init__() if operationindeces1 is None: operationindeces1 = [] if operationindeces2 is None: operationindeces2 = [] from popupcad.widgets.operationlist import OperationList self.le0 = OperationList( LaminateOperation2.unaryoperationtypes, LaminateOperation2.pairoperationtypes, LaminateOperation2.displayorder) self.operationlist = operationlist self.unarylistwidget = DraggableTreeWidget() self.unarylistwidget.linklist(self.operationlist) self.unarylistwidget.setSelectionMode(qg.QListWidget.ExtendedSelection) self.unarylistwidget.selectIndeces(operationindeces1) self.pairlistwidget = DraggableTreeWidget() self.pairlistwidget.linklist(self.operationlist) self.pairlistwidget.setSelectionMode( qg.QListWidget.ExtendedSelection) self.pairlistwidget.selectIndeces(operationindeces2) layout3 = qg.QVBoxLayout() layout3.addWidget(qg.QLabel('Unary Operators')) layout3.addWidget(self.unarylistwidget) layout4 = qg.QVBoxLayout() layout4.addWidget(qg.QLabel('Binary Operators')) layout4.addWidget(self.pairlistwidget) layout5 = qg.QHBoxLayout() layout5.addLayout(layout3) layout5.addLayout(layout4) button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout = qg.QVBoxLayout() layout.addWidget(self.le0) layout.addLayout(layout5) # layout.addWidget(self.unarylistwidget) # layout.addWidget(self.pairlistwidget) layout.addLayout(layout2) self.setLayout(layout) button1.clicked.connect(self.accept) button2.clicked.connect(self.reject) self.le0.unary_selected.connect( lambda: self.pairlistwidget.setEnabled(False)) self.le0.binary_selected.connect( lambda: self.pairlistwidget.setEnabled(True)) self.le0.setCurrentIndex(index0) def acceptdata(self): unaryparents = self.unarylistwidget.currentRefs() pairparents = self.pairlistwidget.currentRefs() function = self.le0.currentText() operation_links = {'unary': unaryparents, 'binary': pairparents} return operation_links, function
class Dialog(qg.QDialog): def __init__(self, design, prioroperations, placeop=None): super(Dialog, self).__init__() if placeop is None: self.placeop = TransformInternal( None, None, TransformInternal.transformtypes.scale, TransformInternal.transformtypes.scale, 0, False, 1., 1.) else: self.placeop = placeop self.prioroperations = prioroperations self.design = design self.operation_list = DraggableTreeWidget() self.operation_list.linklist(prioroperations) self.sketchwidget_from = SketchListViewer(design, name='From Line') self.sketchwidget_to = SketchListManager(design, name='To Lines') self.radiobox_scale_x = qg.QRadioButton('Scale X') self.radiobox_custom_x = qg.QRadioButton('Custom X') self.radiobox_scale_y = qg.QRadioButton('Scale Y') self.radiobox_custom_y = qg.QRadioButton('Custom Y') self.x_scale_option = qg.QButtonGroup() self.x_scale_option.addButton(self.radiobox_scale_x) self.x_scale_option.addButton(self.radiobox_custom_x) self.y_scale_option = qg.QButtonGroup() self.y_scale_option.addButton(self.radiobox_scale_y) self.y_scale_option.addButton(self.radiobox_custom_y) # custom_layout = qg.QVBoxLayout() self.scalex = qg.QLineEdit() self.scaley = qg.QLineEdit() templayout1 = qg.QHBoxLayout() templayout1.addStretch() templayout1.addWidget(self.radiobox_scale_x) templayout1.addWidget(self.radiobox_custom_x) templayout1.addWidget(self.scalex) templayout1.addStretch() templayout2 = qg.QHBoxLayout() templayout2.addStretch() templayout2.addWidget(self.radiobox_scale_y) templayout2.addWidget(self.radiobox_custom_y) templayout2.addWidget(self.scaley) templayout2.addStretch() layout5 = qg.QHBoxLayout() layout5.addWidget(qg.QLabel('Flip Layers')) self.flip = qg.QCheckBox() layout5.addWidget(self.flip) layout4 = qg.QHBoxLayout() layout4.addWidget(qg.QLabel('Shift Layers')) self.sb = qg.QSpinBox() self.sb.setRange(popupcad.gui_negative_infinity, popupcad.gui_positive_infinity) self.sb.setSingleStep(1) layout4.addWidget(self.sb) button1 = qg.QPushButton('Ok') button1.clicked.connect(self.accept) button2 = qg.QPushButton('Cancel') button2.clicked.connect(self.reject) layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout3 = qg.QHBoxLayout() layout3.addWidget(self.sketchwidget_from) layout3.addWidget(self.sketchwidget_to) layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('Operations')) layout.addWidget(self.operation_list) # layout.addWidget(qg.QLabel('Sketch')) layout.addLayout(layout3) layout.addLayout(templayout1) layout.addLayout(templayout2) layout.addLayout(layout5) layout.addLayout(layout4) layout.addLayout(layout2) self.setLayout(layout) self.radiobox_scale_x.setChecked(False) self.radiobox_custom_x.setChecked(False) self.radiobox_scale_y.setChecked(False) self.radiobox_custom_y.setChecked(False) if self.placeop.transformtype_x == TransformInternal.transformtypes.scale: self.radiobox_scale_x.setChecked(True) elif self.placeop.transformtype_x == TransformInternal.transformtypes.custom: self.radiobox_custom_x.setChecked(True) if self.placeop.transformtype_y == TransformInternal.transformtypes.scale: self.radiobox_scale_y.setChecked(True) elif self.placeop.transformtype_y == TransformInternal.transformtypes.custom: self.radiobox_custom_y.setChecked(True) if self.placeop.sketch_links is not None: sketch_from = self.design.sketches[ self.placeop.sketch_links['sketch_from'][0]] sketch_to = self.design.sketches[ self.placeop.sketch_links['sketch_to'][0]] for ii in range(self.sketchwidget_from.itemlist.count()): item = self.sketchwidget_from.itemlist.item(ii) if item.value == sketch_from: item.setSelected(True) for ii in range(self.sketchwidget_to.itemlist.count()): item = self.sketchwidget_to.itemlist.item(ii) if item.value == sketch_to: item.setSelected(True) if self.placeop.operation_links is not None: id, jj = self.placeop.operation_links['from'][0] ii = design.operation_index(id) self.operation_list.selectIndeces([(ii, jj)]) self.scalex.setText(str(self.placeop.scalex)) self.scaley.setText(str(self.placeop.scaley)) self.flip.setChecked(self.placeop.flip) self.sb.setValue(self.placeop.shift) self.sketchwidget_from.items_updated.connect( lambda: self.sketchwidget_to.refresh_list(retain_selection=True)) self.sketchwidget_to.items_updated.connect( lambda: self.sketchwidget_from.refresh_list(retain_selection=True)) def build_sketch_links(self): try: sketch_links = {} sketch_links['sketch_from'] = [ self.sketchwidget_from.itemlist.selectedItems()[0].value.id ] sketch_links['sketch_to'] = [ self.sketchwidget_to.itemlist.selectedItems()[0].value.id ] return sketch_links except IndexError: return None def acceptdata(self): if self.radiobox_scale_x.isChecked(): transformtype_x = TransformInternal.transformtypes.scale elif self.radiobox_custom_x.isChecked(): transformtype_x = TransformInternal.transformtypes.custom if self.radiobox_scale_y.isChecked(): transformtype_y = TransformInternal.transformtypes.scale elif self.radiobox_custom_y.isChecked(): transformtype_y = TransformInternal.transformtypes.custom ii, jj = self.operation_list.currentIndeces2()[0] opid = self.design.operations[ii].id opref = opid, jj operation_links = {'from': [opref]} sketch_links = self.build_sketch_links() shift = self.sb.value() flip = self.flip.isChecked() scale_x = float(self.scalex.text()) scale_y = float(self.scaley.text()) return sketch_links, operation_links, transformtype_x, transformtype_y, shift, flip, scale_x, scale_y
def __init__( self, operationlist, device_index=0, support_index=0, support_width=1.0, support_out=1.0, hole_radius=1.0, cut_width=1.0, deviceoutputref=0, supportoutputref=0): super(Dialog, self).__init__() self.operationlist = operationlist self.device_index = DraggableTreeWidget() self.device_index.linklist(self.operationlist) # self.device_index.setCurrentIndeces(device_index,deviceoutputref) self.device_index.selectIndeces([(device_index, deviceoutputref)]) self.support_index = DraggableTreeWidget() self.support_index.linklist(self.operationlist) # self.support_index.setCurrentIndeces(support_index,supportoutputref) self.support_index.selectIndeces([(support_index, supportoutputref)]) self.support_width = qg.QLineEdit() self.support_width.setAlignment(qc.Qt.AlignRight) self.support_width.setText(str(support_width)) v = StrictDoubleValidator(0, 1e6, 4, self.support_width) self.support_width.setValidator(v) self.support_out = qg.QLineEdit() self.support_out.setAlignment(qc.Qt.AlignRight) self.support_out.setText(str(support_out)) v = StrictDoubleValidator(0, 1e6, 4, self.support_out) self.support_out.setValidator(v) self.hole_radius = qg.QLineEdit() self.hole_radius.setAlignment(qc.Qt.AlignRight) self.hole_radius.setText(str(hole_radius)) v = StrictDoubleValidator(0, 1e6, 4, self.hole_radius) self.hole_radius.setValidator(v) self.cut_width = qg.QLineEdit() self.cut_width.setAlignment(qc.Qt.AlignRight) self.cut_width.setText(str(cut_width)) v = StrictDoubleValidator(0, 1e6, 4, self.cut_width) self.cut_width.setValidator(v) self.Device = qg.QRadioButton('Device') self.Support = qg.QRadioButton('Support') self.Cuts = qg.QRadioButton('Cuts') button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') layout = qg.QGridLayout() # layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('Device'), 1, 1) layout.addWidget(self.device_index, 1, 2) layout.addWidget(qg.QLabel('Support Sketch'), 2, 1) layout.addWidget(self.support_index, 2, 2) layout.addWidget(qg.QLabel('Support Width'), 3, 1) layout.addWidget(self.support_width, 3, 2) layout.addWidget(qg.QLabel('Support Out'), 4, 1) layout.addWidget(self.support_out, 4, 2) layout.addWidget(qg.QLabel('Hole Radius'), 5, 1) layout.addWidget(self.hole_radius, 5, 2) layout.addWidget(qg.QLabel('CutWidth'), 6, 1) layout.addWidget(self.cut_width, 6, 2) layout.addWidget(button1, 7, 1) layout.addWidget(button2, 7, 2) self.setLayout(layout) button1.clicked.connect(self.accept) button2.clicked.connect(self.reject)
def __init__(self, operationlist, index0, operationindeces1=None, operationindeces2=None): super(Dialog, self).__init__() if operationindeces1 is None: operationindeces1 = [] if operationindeces2 is None: operationindeces2 = [] from popupcad.widgets.operationlist import OperationList self.le0 = OperationList(LaminateOperation2.unaryoperationtypes, LaminateOperation2.pairoperationtypes, LaminateOperation2.displayorder) self.operationlist = operationlist self.unarylistwidget = DraggableTreeWidget() self.unarylistwidget.linklist(self.operationlist) self.unarylistwidget.setSelectionMode(qg.QListWidget.ExtendedSelection) self.unarylistwidget.selectIndeces(operationindeces1) self.pairlistwidget = DraggableTreeWidget() self.pairlistwidget.linklist(self.operationlist) self.pairlistwidget.setSelectionMode(qg.QListWidget.ExtendedSelection) self.pairlistwidget.selectIndeces(operationindeces2) layout3 = qg.QVBoxLayout() layout3.addWidget(qg.QLabel('Unary Operators')) layout3.addWidget(self.unarylistwidget) layout4 = qg.QVBoxLayout() layout4.addWidget(qg.QLabel('Binary Operators')) layout4.addWidget(self.pairlistwidget) layout5 = qg.QHBoxLayout() layout5.addLayout(layout3) layout5.addLayout(layout4) button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout = qg.QVBoxLayout() layout.addWidget(self.le0) layout.addLayout(layout5) # layout.addWidget(self.unarylistwidget) # layout.addWidget(self.pairlistwidget) layout.addLayout(layout2) self.setLayout(layout) button1.clicked.connect(self.accept) button2.clicked.connect(self.reject) self.le0.unary_selected.connect( lambda: self.pairlistwidget.setEnabled(False)) self.le0.binary_selected.connect( lambda: self.pairlistwidget.setEnabled(True)) self.le0.setCurrentIndex(index0)
class MainWidget(qg.QDialog): def __init__(self, design, sketches, layers, operations, jointop=None, buffer=.01): super(MainWidget, self).__init__() self.design = design self.sketches = sketches self.layers = layers self.operations = operations self.operation_list = DraggableTreeWidget() self.operation_list.linklist(self.operations) self.table = Table(JointRow(self.get_sketches, self.get_layers), Delegate) table_control = TableControl(self.table, self) button_ok = qg.QPushButton('Ok') button_cancel = qg.QPushButton('Cancel') button_ok.clicked.connect(self.accept) button_cancel.clicked.connect(self.reject) self.buffer_val = qg.QLineEdit() sublayout2 = qg.QHBoxLayout() sublayout2.addStretch() sublayout2.addWidget(button_ok) sublayout2.addWidget(button_cancel) sublayout2.addStretch() layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('Device')) layout.addWidget(self.operation_list) layout.addWidget(table_control) layout.addWidget(qg.QLabel('Buffer')) layout.addWidget(self.buffer_val) layout.addLayout(sublayout2) self.setLayout(layout) if jointop is not None: try: op_ref, output_ii = jointop.operation_links['parent'][0] op_ii = design.operation_index(op_ref) self.operation_list.selectIndeces([(op_ii, output_ii)]) except (IndexError, KeyError): pass try: fixed_ref, fixed_output_ii = jointop.operation_links['fixed'][ 0] fixed_ii = design.operation_index(fixed_ref) self.fixed.selectIndeces([(fixed_ii, fixed_output_ii)]) except (IndexError, KeyError): pass for item in jointop.joint_defs: sketch = self.design.sketches[item.sketch] joint_layer = self.design.return_layer_definition().getlayer( item.joint_layer) sublaminate_layers = [ self.design.return_layer_definition().getlayer(item2) for item2 in item.sublaminate_layers ] self.table.row_add(sketch, joint_layer, sublaminate_layers, item.width) else: self.table.row_add_empty() self.buffer_val.setText(str(buffer)) self.table.resizeColumnsToContents() self.table.reset_min_width() self.table.setHorizontalScrollBarPolicy(qc.Qt.ScrollBarAlwaysOff) def contact_sketch(self): try: return self.sketchwidget.itemlist.selectedItems()[0].value except IndexError: return None def get_sketches(self): return self.sketches def get_layers(self): return self.layers def acceptdata(self): jointdefs = [] for ii in range(self.table.rowCount()): sketch = self.table.item(ii, 0).data(qc.Qt.UserRole) joint_layer = self.table.item(ii, 1).data(qc.Qt.UserRole) sublaminate_layers = self.table.item(ii, 2).data(qc.Qt.UserRole) width = (self.table.item(ii, 3).data(qc.Qt.UserRole)) jointdefs.append( JointDef(sketch.id, joint_layer.id, [item.id for item in sublaminate_layers], width)) operation_links = {} operation_links['parent'] = self.operation_list.currentRefs() sketch_links = {} return operation_links, sketch_links, jointdefs, float( self.buffer_val.text())
class Dialog(qg.QDialog): def __init__( self, keepouttypes, valuenames, defaults, operations, show, operationindeces=None, values=None, keepouttype=None): super(Dialog, self).__init__() self.operations = operations self.le1 = DraggableTreeWidget() self.le1.linklist(self.operations) self.le3 = DraggableTreeWidget() self.le3.linklist(self.operations) if operationindeces is not None: self.le1.selectIndeces(operationindeces[0:1]) self.le3.selectIndeces(operationindeces[1:2]) if values is None: values = defaults[:] layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('Sheet')) layout.addWidget(self.le1) layout.addWidget(qg.QLabel('Device')) layout.addWidget(self.le3) self.valueboxes = [] for valuename, v in zip(valuenames, values): templayout = qg.QHBoxLayout() valueedit = qg.QLineEdit() valueedit.setAlignment(qc.Qt.AlignRight) valueedit.setText(str(v)) # self.valueedit.setInputMask('#009.0') valueedit.setValidator(StrictDoubleValidator(popupcad.gui_negative_infinity, popupcad.gui_positive_infinity, popupcad.gui_default_decimals, valueedit)) templayout.addStretch() templayout.addWidget(qg.QLabel(valuename)) templayout.addWidget(valueedit) self.valueboxes.append(valueedit) layout.addLayout(templayout) self.radiobuttons = [] if 'keepout' in show: for key, value2 in keepouttypes.dict.items(): b = qg.QRadioButton(key) b.setChecked(keepouttype == value2) b.uservalue = value2 self.radiobuttons.append(b) layout.addWidget(b) button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout.addLayout(layout2) self.setLayout(layout) button1.clicked.connect(self.accept) button2.clicked.connect(self.reject) def acceptdata(self): option = None for b in self.radiobuttons: if b.isChecked(): option = b.uservalue operation_links = { 'sheet': self.le1.currentRefs(), 'device': self.le3.currentRefs()} values = [float(valueedit.text()) for valueedit in self.valueboxes] return operation_links, values, option
def __init__(self, design, sketches, layers, operations, jointop=None,sketch = None): super(MainWidget, self).__init__() self.design = design self.sketches = sketches self.layers = layers self.operations = operations self.operation_list = DraggableTreeWidget() self.operation_list.linklist(self.operations) self.fixed = DraggableTreeWidget() self.fixed.linklist(self.operations) self.table = Table(JointRow(self.get_sketches, self.get_layers),Delegate) table_control= TableControl(self.table, self) self.sketchwidget = SketchListManager(self.design,name='Contact Points Sketch') for ii in range(self.sketchwidget.itemlist.count()): item = self.sketchwidget.itemlist.item(ii) if item.value == sketch: item.setSelected(True) button_ok = qg.QPushButton('Ok') button_cancel = qg.QPushButton('Cancel') button_ok.clicked.connect(self.accept) button_cancel.clicked.connect(self.reject) sublayout1 = qg.QHBoxLayout() sublayout1_1 = qg.QVBoxLayout() sublayout1_2 = qg.QVBoxLayout() sublayout1_3 = qg.QVBoxLayout() sublayout1_1.addWidget(qg.QLabel('Device')) sublayout1_1.addWidget(self.operation_list) sublayout1_2.addWidget(qg.QLabel('Fixed Region')) sublayout1_2.addWidget(self.fixed) sublayout1_3.addWidget(self.sketchwidget) sublayout1.addLayout(sublayout1_1) sublayout1.addLayout(sublayout1_2) sublayout1.addLayout(sublayout1_3) sublayout2 = qg.QHBoxLayout() sublayout2.addStretch() sublayout2.addWidget(button_ok) sublayout2.addWidget(button_cancel) sublayout2.addStretch() layout = qg.QVBoxLayout() layout.addLayout(sublayout1) layout.addWidget(table_control) layout.addLayout(sublayout2) self.setLayout(layout) if jointop is not None: try: op_ref, output_ii = jointop.operation_links['parent'][0] op_ii = design.operation_index(op_ref) self.operation_list.selectIndeces([(op_ii, output_ii)]) except(IndexError, KeyError): pass try: fixed_ref, fixed_output_ii = jointop.operation_links[ 'fixed'][0] fixed_ii = design.operation_index(fixed_ref) self.fixed.selectIndeces([(fixed_ii, fixed_output_ii)]) except(IndexError, KeyError): pass for item in jointop.joint_defs: sketch = self.design.sketches[item.sketch] joint_layer = self.design.return_layer_definition().getlayer( item.joint_layer) sublaminate_layers = [self.design.return_layer_definition().getlayer( item2) for item2 in item.sublaminate_layers] self.table.row_add( sketch, joint_layer, sublaminate_layers, item.width, item.stiffness, item.damping, item.preload_angle, item.limit_negative, item.limit_positive) else: self.table.row_add_empty() self.table.resizeColumnsToContents() self.table.reset_min_width() self.table.setHorizontalScrollBarPolicy(qc.Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
class MainWidget(qg.QDialog): def __init__(self, design, sketches, layers, operations, jointop=None,sketch = None): super(MainWidget, self).__init__() self.design = design self.sketches = sketches self.layers = layers self.operations = operations self.operation_list = DraggableTreeWidget() self.operation_list.linklist(self.operations) self.fixed = DraggableTreeWidget() self.fixed.linklist(self.operations) self.table = Table(JointRow(self.get_sketches, self.get_layers),Delegate) table_control= TableControl(self.table, self) self.sketchwidget = SketchListManager(self.design,name='Contact Points Sketch') for ii in range(self.sketchwidget.itemlist.count()): item = self.sketchwidget.itemlist.item(ii) if item.value == sketch: item.setSelected(True) button_ok = qg.QPushButton('Ok') button_cancel = qg.QPushButton('Cancel') button_ok.clicked.connect(self.accept) button_cancel.clicked.connect(self.reject) sublayout1 = qg.QHBoxLayout() sublayout1_1 = qg.QVBoxLayout() sublayout1_2 = qg.QVBoxLayout() sublayout1_3 = qg.QVBoxLayout() sublayout1_1.addWidget(qg.QLabel('Device')) sublayout1_1.addWidget(self.operation_list) sublayout1_2.addWidget(qg.QLabel('Fixed Region')) sublayout1_2.addWidget(self.fixed) sublayout1_3.addWidget(self.sketchwidget) sublayout1.addLayout(sublayout1_1) sublayout1.addLayout(sublayout1_2) sublayout1.addLayout(sublayout1_3) sublayout2 = qg.QHBoxLayout() sublayout2.addStretch() sublayout2.addWidget(button_ok) sublayout2.addWidget(button_cancel) sublayout2.addStretch() layout = qg.QVBoxLayout() layout.addLayout(sublayout1) layout.addWidget(table_control) layout.addLayout(sublayout2) self.setLayout(layout) if jointop is not None: try: op_ref, output_ii = jointop.operation_links['parent'][0] op_ii = design.operation_index(op_ref) self.operation_list.selectIndeces([(op_ii, output_ii)]) except(IndexError, KeyError): pass try: fixed_ref, fixed_output_ii = jointop.operation_links[ 'fixed'][0] fixed_ii = design.operation_index(fixed_ref) self.fixed.selectIndeces([(fixed_ii, fixed_output_ii)]) except(IndexError, KeyError): pass for item in jointop.joint_defs: sketch = self.design.sketches[item.sketch] joint_layer = self.design.return_layer_definition().getlayer( item.joint_layer) sublaminate_layers = [self.design.return_layer_definition().getlayer( item2) for item2 in item.sublaminate_layers] self.table.row_add( sketch, joint_layer, sublaminate_layers, item.width, item.stiffness, item.damping, item.preload_angle, item.limit_negative, item.limit_positive) else: self.table.row_add_empty() self.table.resizeColumnsToContents() self.table.reset_min_width() self.table.setHorizontalScrollBarPolicy(qc.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) def contact_sketch(self): try: return self.sketchwidget.itemlist.selectedItems()[0].value except IndexError: return None def get_sketches(self): return self.sketches def get_layers(self): return self.layers def acceptdata(self): jointdefs = [] for ii in range(self.table.rowCount()): sketch = self.table.item(ii, 0).data(qc.Qt.ItemDataRole.UserRole) joint_layer = self.table.item( ii, 1).data( qc.Qt.ItemDataRole.UserRole) sublaminate_layers = self.table.item( ii, 2).data( qc.Qt.ItemDataRole.UserRole) width = (self.table.item(ii, 3).data(qc.Qt.ItemDataRole.UserRole)) stiffness = ( self.table.item( ii, 4).data( qc.Qt.ItemDataRole.UserRole)) damping = ( self.table.item( ii, 5).data( qc.Qt.ItemDataRole.UserRole)) preload_angle = (self.table.item(ii, 6).data(qc.Qt.ItemDataRole.UserRole)) limit_negative = (self.table.item(ii, 7).data(qc.Qt.ItemDataRole.UserRole)) limit_positive = (self.table.item(ii, 8).data(qc.Qt.ItemDataRole.UserRole)) jointdefs.append(JointDef(sketch.id, joint_layer.id, [item.id for item in sublaminate_layers], width, stiffness, damping, preload_angle,limit_negative,limit_positive)) operation_links = {} operation_links['parent'] = self.operation_list.currentRefs() operation_links['fixed'] = self.fixed.currentRefs() sketch_links = {} sketch_links['contact_points'] = [self.contact_sketch().id] return operation_links,sketch_links,jointdefs
class Dialog(qg.QDialog): def __init__( self, design, prioroperations, sketch=None, subdesign=None, subopref=None, transformtype_x=None, transformtype_y=None, shift=0, flip=False, scalex=1., scaley=1.): super(Dialog, self).__init__() if transformtype_x is None: self.transformtype_x = PlaceOperation8.transformtypes.scale else: self.transformtype_x = transformtype_x if transformtype_y is None: self.transformtype_y = PlaceOperation8.transformtypes.scale else: self.transformtype_y = transformtype_y self.prioroperations = prioroperations self.design = design self.designwidget = DesignListManager(design) self.optree = DraggableTreeWidget() self.sketchwidget = SketchListManager(design) self.radiobox_scale_x = qg.QRadioButton('Scale X') self.radiobox_custom_x = qg.QRadioButton('Custom X') self.radiobox_scale_y = qg.QRadioButton('Scale Y') self.radiobox_custom_y = qg.QRadioButton('Custom Y') self.x_scale_option = qg.QButtonGroup() self.x_scale_option.addButton(self.radiobox_scale_x) self.x_scale_option.addButton(self.radiobox_custom_x) self.y_scale_option = qg.QButtonGroup() self.y_scale_option.addButton(self.radiobox_scale_y) self.y_scale_option.addButton(self.radiobox_custom_y) # custom_layout = qg.QVBoxLayout() self.scalex = qg.QLineEdit() self.scaley = qg.QLineEdit() self.scalex.setText(str(scalex)) self.scaley.setText(str(scaley)) # custom_layout.addWidget(self.scalex) # custom_layout.addWidget(self.scaley) templayout1 = qg.QHBoxLayout() templayout1.addStretch() templayout1.addWidget(self.radiobox_scale_x) templayout1.addWidget(self.radiobox_custom_x) templayout1.addWidget(self.scalex) templayout1.addStretch() templayout2 = qg.QHBoxLayout() templayout2.addStretch() templayout2.addWidget(self.radiobox_scale_y) templayout2.addWidget(self.radiobox_custom_y) templayout2.addWidget(self.scaley) templayout2.addStretch() layout5 = qg.QHBoxLayout() layout5.addWidget(qg.QLabel('Flip Layers')) self.flip = qg.QCheckBox() self.flip.setChecked(flip) layout5.addWidget(self.flip) layout4 = qg.QHBoxLayout() layout4.addWidget(qg.QLabel('Shift Layers')) self.sb = qg.QSpinBox() self.sb.setRange(-100, 100) self.sb.setSingleStep(1) self.sb.setValue(shift) layout4.addWidget(self.sb) # layout3 = qg.QHBoxLayout() # layout3.addWidget(self.lineedit) # layout3.addWidget(button3) button1 = qg.QPushButton('Ok') button1.clicked.connect(self.accept) button2 = qg.QPushButton('Cancel') button2.clicked.connect(self.reject) layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout = qg.QVBoxLayout() # layout.addWidget(qg.QLabel('Design')) layout.addWidget(self.designwidget) layout.addWidget(qg.QLabel('Sub-Design Operations')) layout.addWidget(self.optree) # layout.addWidget(qg.QLabel('Sketch')) layout.addWidget(self.sketchwidget) layout.addLayout(templayout1) layout.addLayout(templayout2) layout.addLayout(layout5) layout.addLayout(layout4) layout.addLayout(layout2) self.setLayout(layout) self.radiobox_scale_x.setChecked(False) self.radiobox_custom_x.setChecked(False) self.radiobox_scale_y.setChecked(False) self.radiobox_custom_y.setChecked(False) if self.transformtype_x == PlaceOperation8.transformtypes.scale: self.radiobox_scale_x.setChecked(True) elif self.transformtype_x == PlaceOperation8.transformtypes.custom: self.radiobox_custom_x.setChecked(True) if self.transformtype_y == PlaceOperation8.transformtypes.scale: self.radiobox_scale_y.setChecked(True) elif self.transformtype_y == PlaceOperation8.transformtypes.custom: self.radiobox_custom_y.setChecked(True) self.designwidget.itemlist.itemSelectionChanged.connect( self.loadoperations) for ii in range(self.designwidget.itemlist.count()): item = self.designwidget.itemlist.item(ii) if item.value == subdesign: item.setSelected(True) for ii in range(self.sketchwidget.itemlist.count()): item = self.sketchwidget.itemlist.item(ii) if item.value == sketch: item.setSelected(True) self.loadoperations() try: if subopref is not None: id, jj = subopref if subdesign is not None: ii = subdesign.operation_index(id) self.optree.selectIndeces([(ii, jj)]) except NoOperation: pass def subdesign(self): try: return self.designwidget.itemlist.selectedItems()[0].value except IndexError: return None def sketch(self): try: return self.sketchwidget.itemlist.selectedItems()[0].value except IndexError: return None def loadoperations(self): if len(self.designwidget.itemlist.selectedItems()) > 0: self.optree.linklist(self.subdesign().operations) def acceptdata(self): if self.radiobox_scale_x.isChecked(): transformtype_x = PlaceOperation8.transformtypes.scale elif self.radiobox_custom_x.isChecked(): transformtype_x = PlaceOperation8.transformtypes.custom if self.radiobox_scale_y.isChecked(): transformtype_y = PlaceOperation8.transformtypes.scale elif self.radiobox_custom_y.isChecked(): transformtype_y = PlaceOperation8.transformtypes.custom ii, jj = self.optree.currentIndeces2()[0] subopid = self.subdesign().operations[ii].id subopref = subopid, jj sketch_links = {'place': [self.sketch().id]} design_links = {'subdesign': [self.subdesign().id]} return sketch_links, design_links, subopref, transformtype_x, transformtype_y, self.sb.value( ), self.flip.isChecked(), float(self.scalex.text()), float(self.scaley.text())
def __init__(self, design, sketches, layers, operations, jointop=None, buffer=.01): super(MainWidget, self).__init__() self.design = design self.sketches = sketches self.layers = layers self.operations = operations self.operation_list = DraggableTreeWidget() self.operation_list.linklist(self.operations) self.table = Table(JointRow(self.get_sketches, self.get_layers), Delegate) table_control = TableControl(self.table, self) button_ok = qg.QPushButton('Ok') button_cancel = qg.QPushButton('Cancel') button_ok.clicked.connect(self.accept) button_cancel.clicked.connect(self.reject) self.buffer_val = qg.QLineEdit() sublayout2 = qg.QHBoxLayout() sublayout2.addStretch() sublayout2.addWidget(button_ok) sublayout2.addWidget(button_cancel) sublayout2.addStretch() layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('Device')) layout.addWidget(self.operation_list) layout.addWidget(table_control) layout.addWidget(qg.QLabel('Buffer')) layout.addWidget(self.buffer_val) layout.addLayout(sublayout2) self.setLayout(layout) if jointop is not None: try: op_ref, output_ii = jointop.operation_links['parent'][0] op_ii = design.operation_index(op_ref) self.operation_list.selectIndeces([(op_ii, output_ii)]) except (IndexError, KeyError): pass try: fixed_ref, fixed_output_ii = jointop.operation_links['fixed'][ 0] fixed_ii = design.operation_index(fixed_ref) self.fixed.selectIndeces([(fixed_ii, fixed_output_ii)]) except (IndexError, KeyError): pass for item in jointop.joint_defs: sketch = self.design.sketches[item.sketch] joint_layer = self.design.return_layer_definition().getlayer( item.joint_layer) sublaminate_layers = [ self.design.return_layer_definition().getlayer(item2) for item2 in item.sublaminate_layers ] self.table.row_add(sketch, joint_layer, sublaminate_layers, item.width) else: self.table.row_add_empty() self.buffer_val.setText(str(buffer)) self.table.resizeColumnsToContents() self.table.reset_min_width() self.table.setHorizontalScrollBarPolicy(qc.Qt.ScrollBarAlwaysOff)
def __init__(self,design,prioroperations,placeop = None): super(Dialog, self).__init__() if placeop is None: self.placeop=TransformInternal(None,None,TransformInternal.transformtypes.scale,TransformInternal.transformtypes.scale,0,False,1.,1.) else: self.placeop = placeop self.prioroperations = prioroperations self.design = design self.operation_list = DraggableTreeWidget() self.operation_list.linklist(prioroperations) self.sketchwidget_from = SketchListViewer(design,name = 'From Line') self.sketchwidget_to = SketchListManager(design,name = 'To Lines') self.radiobox_scale_x = qg.QRadioButton('Scale X') self.radiobox_custom_x = qg.QRadioButton('Custom X') self.radiobox_scale_y = qg.QRadioButton('Scale Y') self.radiobox_custom_y = qg.QRadioButton('Custom Y') self.x_scale_option = qg.QButtonGroup() self.x_scale_option.addButton(self.radiobox_scale_x) self.x_scale_option.addButton(self.radiobox_custom_x) self.y_scale_option = qg.QButtonGroup() self.y_scale_option.addButton(self.radiobox_scale_y) self.y_scale_option.addButton(self.radiobox_custom_y) # custom_layout = qg.QVBoxLayout() self.scalex = qg.QLineEdit() self.scaley = qg.QLineEdit() templayout1 = qg.QHBoxLayout() templayout1.addStretch() templayout1.addWidget(self.radiobox_scale_x) templayout1.addWidget(self.radiobox_custom_x) templayout1.addWidget(self.scalex) templayout1.addStretch() templayout2 = qg.QHBoxLayout() templayout2.addStretch() templayout2.addWidget(self.radiobox_scale_y) templayout2.addWidget(self.radiobox_custom_y) templayout2.addWidget(self.scaley) templayout2.addStretch() layout5 = qg.QHBoxLayout() layout5.addWidget(qg.QLabel('Flip Layers')) self.flip = qg.QCheckBox() layout5.addWidget(self.flip) layout4 = qg.QHBoxLayout() layout4.addWidget(qg.QLabel('Shift Layers')) self.sb = qg.QSpinBox() self.sb.setRange(popupcad.gui_negative_infinity, popupcad.gui_positive_infinity) self.sb.setSingleStep(1) layout4.addWidget(self.sb) button1 = qg.QPushButton('Ok') button1.clicked.connect(self.accept) button2 = qg.QPushButton('Cancel') button2.clicked.connect(self.reject) layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout3 = qg.QHBoxLayout() layout3.addWidget(self.sketchwidget_from) layout3.addWidget(self.sketchwidget_to) layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('Operations')) layout.addWidget(self.operation_list) # layout.addWidget(qg.QLabel('Sketch')) layout.addLayout(layout3) layout.addLayout(templayout1) layout.addLayout(templayout2) layout.addLayout(layout5) layout.addLayout(layout4) layout.addLayout(layout2) self.setLayout(layout) self.radiobox_scale_x.setChecked(False) self.radiobox_custom_x.setChecked(False) self.radiobox_scale_y.setChecked(False) self.radiobox_custom_y.setChecked(False) if self.placeop.transformtype_x == TransformInternal.transformtypes.scale: self.radiobox_scale_x.setChecked(True) elif self.placeop.transformtype_x == TransformInternal.transformtypes.custom: self.radiobox_custom_x.setChecked(True) if self.placeop.transformtype_y == TransformInternal.transformtypes.scale: self.radiobox_scale_y.setChecked(True) elif self.placeop.transformtype_y == TransformInternal.transformtypes.custom: self.radiobox_custom_y.setChecked(True) if self.placeop.sketch_links is not None: sketch_from = self.design.sketches[self.placeop.sketch_links['sketch_from'][0]] sketch_to = self.design.sketches[self.placeop.sketch_links['sketch_to'][0]] for ii in range(self.sketchwidget_from.itemlist.count()): item = self.sketchwidget_from.itemlist.item(ii) if item.value == sketch_from: item.setSelected(True) for ii in range(self.sketchwidget_to.itemlist.count()): item = self.sketchwidget_to.itemlist.item(ii) if item.value == sketch_to: item.setSelected(True) if self.placeop.operation_links is not None: id, jj = self.placeop.operation_links['from'][0] ii = design.operation_index(id) self.operation_list.selectIndeces([(ii, jj)]) self.scalex.setText(str(self.placeop.scalex)) self.scaley.setText(str(self.placeop.scaley)) self.flip.setChecked(self.placeop.flip) self.sb.setValue(self.placeop.shift) self.sketchwidget_from.items_updated.connect(lambda:self.sketchwidget_to.refresh_list(retain_selection=True)) self.sketchwidget_to.items_updated.connect(lambda:self.sketchwidget_from.refresh_list(retain_selection=True))
def __init__(self, design, prioroperations, placeop=None): super(Dialog, self).__init__() if placeop is None: self.placeop = TransformExternal( None, None, None, None, TransformExternal.transformtypes.scale, TransformExternal.transformtypes.scale, 0, False, 1., 1.) else: self.placeop = placeop self.prioroperations = prioroperations self.design = design self.designwidget = DesignListManager(design) self.operation_list = DraggableTreeWidget() self.operation_list.linklist(prioroperations) self.sketchwidget_from = SketchListViewer(design, name='From Line') self.sketchwidget_to = SketchListManager(design, name='To Lines') self.radiobox_scale_x = qg.QRadioButton('Scale X') self.radiobox_custom_x = qg.QRadioButton('Custom X') self.radiobox_scale_y = qg.QRadioButton('Scale Y') self.radiobox_custom_y = qg.QRadioButton('Custom Y') self.x_scale_option = qg.QButtonGroup() self.x_scale_option.addButton(self.radiobox_scale_x) self.x_scale_option.addButton(self.radiobox_custom_x) self.y_scale_option = qg.QButtonGroup() self.y_scale_option.addButton(self.radiobox_scale_y) self.y_scale_option.addButton(self.radiobox_custom_y) self.scalex = qg.QLineEdit() self.scaley = qg.QLineEdit() templayout1 = qg.QHBoxLayout() templayout1.addStretch() templayout1.addWidget(self.radiobox_scale_x) templayout1.addWidget(self.radiobox_custom_x) templayout1.addWidget(self.scalex) templayout1.addStretch() templayout2 = qg.QHBoxLayout() templayout2.addStretch() templayout2.addWidget(self.radiobox_scale_y) templayout2.addWidget(self.radiobox_custom_y) templayout2.addWidget(self.scaley) templayout2.addStretch() layout5 = qg.QHBoxLayout() layout5.addWidget(qg.QLabel('Flip Layers')) self.flip = qg.QCheckBox() layout5.addWidget(self.flip) layout4 = qg.QHBoxLayout() layout4.addWidget(qg.QLabel('Shift Layers')) self.sb = qg.QSpinBox() self.sb.setRange(popupcad.gui_negative_infinity, popupcad.gui_positive_infinity) self.sb.setSingleStep(1) layout4.addWidget(self.sb) button1 = qg.QPushButton('Ok') button1.clicked.connect(self.accept) button2 = qg.QPushButton('Cancel') button2.clicked.connect(self.reject) layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout3 = qg.QHBoxLayout() layout3.addWidget(self.sketchwidget_from) layout3.addWidget(self.sketchwidget_to) layout = qg.QVBoxLayout() layout.addWidget(self.designwidget) layout.addWidget(qg.QLabel('Operations')) layout.addWidget(self.operation_list) layout.addLayout(layout3) layout.addLayout(templayout1) layout.addLayout(templayout2) layout.addLayout(layout5) layout.addLayout(layout4) layout.addLayout(layout2) self.setLayout(layout) self.radiobox_scale_x.setChecked(False) self.radiobox_custom_x.setChecked(False) self.radiobox_scale_y.setChecked(False) self.radiobox_custom_y.setChecked(False) if self.placeop.transformtype_x == TransformExternal.transformtypes.scale: self.radiobox_scale_x.setChecked(True) elif self.placeop.transformtype_x == TransformExternal.transformtypes.custom: self.radiobox_custom_x.setChecked(True) if self.placeop.transformtype_y == TransformExternal.transformtypes.scale: self.radiobox_scale_y.setChecked(True) elif self.placeop.transformtype_y == TransformExternal.transformtypes.custom: self.radiobox_custom_y.setChecked(True) self.designwidget.itemlist.itemSelectionChanged.connect( self.loadoperations) if self.placeop.sketch_links is not None: sketch_to = self.design.sketches[ self.placeop.sketch_links['sketch_to'][0]] for ii in range(self.sketchwidget_to.itemlist.count()): item = self.sketchwidget_to.itemlist.item(ii) if item.value == sketch_to: item.setSelected(True) self.loadoperations() try: subdesign = design.subdesigns[ self.placeop.design_links['subdesign'][0]] for ii in range(self.designwidget.itemlist.count()): item = self.designwidget.itemlist.item(ii) if item.value == subdesign: item.setSelected(True) if self.placeop.subopref is not None: id, jj = self.placeop.subopref ii = subdesign.operation_index(id) self.operation_list.selectIndeces([(ii, jj)]) sketch_from = subdesign.sketches[self.placeop.sub_sketch_id] for ii in range(self.sketchwidget_from.itemlist.count()): item = self.sketchwidget_from.itemlist.item(ii) if item.value == sketch_from: item.setSelected(True) except TypeError: pass self.scalex.setText(str(self.placeop.scalex)) self.scaley.setText(str(self.placeop.scaley)) self.flip.setChecked(self.placeop.flip) self.sb.setValue(self.placeop.shift)
def __init__(self,design,operationlist,device_index=0,support_width = 1.0,support_out = 1.0,hole_radius = 1.0,cut_width = 1.0,deviceoutputref = 0,sketch = None,selectedoutput = None): super(Dialog,self).__init__() self.design = design self.operationlist = operationlist self.device_index = DraggableTreeWidget() self.device_index.linklist(self.operationlist) # self.device_index.setCurrentIndeces(device_index,deviceoutputref) self.device_index.selectIndeces([(device_index,deviceoutputref)]) self.sketchwidget = SketchListManager(self.design) for ii in range(self.sketchwidget.itemlist.count()): item = self.sketchwidget.itemlist.item(ii) if item.value==sketch: item.setSelected(True) if selectedoutput == None: selectedoutput = [item.id for item in design.return_layer_definition().layers] self.outputlayerselector = qg.QListWidget() self.outputlayerselector.setSelectionBehavior(qg.QListWidget.SelectionBehavior.SelectRows) self.outputlayerselector.setSelectionMode(qg.QListWidget.SelectionMode.MultiSelection) outputitems = [ListWidgetItem(item,self.outputlayerselector) for item in design.return_layer_definition().layers] [item.setSelected(item.customdata.id in selectedoutput) for item in outputitems] self.support_width = qg.QLineEdit() self.support_width.setAlignment(qc.Qt.AlignRight) self.support_width.setText(str(support_width)) v = StrictDoubleValidator(0, 1e6, 4,self.support_width) self.support_width.setValidator(v) self.support_out = qg.QLineEdit() self.support_out.setAlignment(qc.Qt.AlignRight) self.support_out.setText(str(support_out)) v = StrictDoubleValidator(0, 1e6, 4,self.support_out) self.support_out.setValidator(v) self.hole_radius = qg.QLineEdit() self.hole_radius.setAlignment(qc.Qt.AlignRight) self.hole_radius.setText(str(hole_radius)) v = StrictDoubleValidator(0, 1e6, 4,self.hole_radius) self.hole_radius.setValidator(v) self.cut_width = qg.QLineEdit() self.cut_width.setAlignment(qc.Qt.AlignRight) self.cut_width.setText(str(cut_width)) v = StrictDoubleValidator(0, 1e6, 4,self.cut_width) self.cut_width.setValidator(v) layout = qg.QVBoxLayout() button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') gridlayout = qg.QGridLayout() gridlayout.addWidget(qg.QLabel('Support Width'),1,1) gridlayout.addWidget(self.support_width,1,2) gridlayout.addWidget(qg.QLabel('Support Out'),2,1) gridlayout.addWidget(self.support_out,2,2) gridlayout.addWidget(qg.QLabel('Hole Radius'),3,1) gridlayout.addWidget(self.hole_radius,3,2) gridlayout.addWidget(qg.QLabel('CutWidth'),4,1) gridlayout.addWidget(self.cut_width,4,2) gridlayout.addWidget(button1,5,1) gridlayout.addWidget(button2,5,2) layout.addWidget(self.device_index) layout.addWidget(self.sketchwidget) layout.addWidget(self.outputlayerselector) layout.addLayout(gridlayout) self.setLayout(layout) button1.pressed.connect(self.accept) button2.pressed.connect(self.reject)
def __init__( self, keepouttypes, valuenames, defaults, operations, show, operationindeces=None, values=None, keepouttype=None ): super(Dialog, self).__init__() self.operations = operations self.le1 = DraggableTreeWidget() self.le1.linklist(self.operations) self.le3 = DraggableTreeWidget() self.le3.linklist(self.operations) if operationindeces is not None: self.le1.selectIndeces(operationindeces[0:1]) self.le3.selectIndeces(operationindeces[1:2]) if values is None: values = defaults[:] layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel("Sheet")) layout.addWidget(self.le1) layout.addWidget(qg.QLabel("Device")) layout.addWidget(self.le3) self.valueboxes = [] for valuename, v in zip(valuenames, values): templayout = qg.QHBoxLayout() valueedit = qg.QLineEdit() valueedit.setAlignment(qc.Qt.AlignRight) valueedit.setText(str(v)) # self.valueedit.setInputMask('#009.0') valueedit.setValidator(qg.QDoubleValidator(-999.0, 999.0, 4, valueedit)) templayout.addStretch() templayout.addWidget(qg.QLabel(valuename)) templayout.addWidget(valueedit) self.valueboxes.append(valueedit) layout.addLayout(templayout) self.radiobuttons = [] if "keepout" in show: for key, value2 in keepouttypes.dict.items(): b = qg.QRadioButton(key) b.setChecked(keepouttype == value2) b.uservalue = value2 self.radiobuttons.append(b) layout.addWidget(b) button1 = qg.QPushButton("Ok") button2 = qg.QPushButton("Cancel") layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout.addLayout(layout2) self.setLayout(layout) button1.clicked.connect(self.accept) button2.clicked.connect(self.reject)
def build_editor(self, parent, delegate): editor = DraggableTreeWidget(parent) editor.linklist(self.get_list()) # editor.editingFinished.connect(delegate.commitAndCloseEditor) return editor
def __init__( self, operations, layerlist, index0=0, selectedop=None, selectedunary=None, selectedpair=None, selectedoutput=None, outputref=0): super(Dialog, self).__init__() sp = qg.QSizePolicy() sp.setHorizontalPolicy(sp.Policy.Minimum) sp.setVerticalPolicy(sp.Policy.Minimum) if selectedop is None: selectedop = len(operations) - 1 if selectedunary is None: selectedunary = [] if selectedpair is None: selectedpair = [] if selectedoutput is None: selectedoutput = layerlist from popupcad.widgets.operationlist import OperationList self.le0 = OperationList( LayerOp2.unaryoperationtypes, LayerOp2.pairoperationtypes, LayerOp2.displayorder) self.operations = operations self.operationselector = DraggableTreeWidget() self.operationselector.linklist(self.operations) self.operationselector.selectIndeces([(selectedop, outputref)]) self.unarylayerselector = qg.QListWidget() self.unarylayerselector.setSelectionBehavior( qg.QListWidget.SelectionBehavior.SelectRows) self.unarylayerselector.setSelectionMode( qg.QListWidget.SelectionMode.MultiSelection) unaryitems = [ ListWidgetItem( item, self.unarylayerselector) for item in layerlist] self.pairlayerselector = qg.QListWidget() self.pairlayerselector.setSelectionBehavior( qg.QListWidget.SelectionBehavior.SelectRows) self.pairlayerselector.setSelectionMode( qg.QListWidget.SelectionMode.MultiSelection) pairitems = [ ListWidgetItem( item, self.pairlayerselector) for item in layerlist] self.outputlayerselector = qg.QListWidget() self.outputlayerselector.setSelectionBehavior( qg.QListWidget.SelectionBehavior.SelectRows) self.outputlayerselector.setSelectionMode( qg.QListWidget.SelectionMode.MultiSelection) outputitems = [ ListWidgetItem( item, self.outputlayerselector) for item in layerlist] layout2 = qg.QVBoxLayout() # self.layout2.setContentsMargins(0,0,0,0) layout2.addWidget(qg.QLabel('Unary Operators')) layout2.addWidget(self.unarylayerselector) layout3 = qg.QVBoxLayout() # self.layout2.setContentsMargins(0,0,0,0) layout3.addWidget(qg.QLabel('Binary Operators')) layout3.addWidget(self.pairlayerselector) layout4 = qg.QHBoxLayout() layout4.addLayout(layout2) layout4.addLayout(layout3) layout = qg.QVBoxLayout() layout.addWidget(self.le0) layout.addWidget(qg.QLabel('Parent Operation')) layout.addWidget(self.operationselector) layout.addLayout(layout4) layout.addWidget(qg.QLabel('Output Layers')) layout.addWidget(self.outputlayerselector) button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout.addLayout(layout2) self.setLayout(layout) button1.clicked.connect(self.accept) button2.clicked.connect(self.reject) self.le0.unary_selected.connect( lambda: self.pairlayerselector.setEnabled(False)) self.le0.binary_selected.connect( lambda: self.pairlayerselector.setEnabled(True)) self.le0.setCurrentIndex(index0) [item.setSelected(item.customdata.id in selectedunary) for item in unaryitems] [item.setSelected(item.customdata.id in selectedpair) for item in pairitems] [item.setSelected(item.customdata.id in selectedoutput) for item in outputitems]
def __init__(self, design, prioroperations, sketch=None, subdesign=None, subopref=None, transformtype_x=None, transformtype_y=None, shift=0, flip=False, scalex=1., scaley=1.): super(Dialog, self).__init__() if transformtype_x is None: self.transformtype_x = PlaceOperation8.transformtypes.scale else: self.transformtype_x = transformtype_x if transformtype_y is None: self.transformtype_y = PlaceOperation8.transformtypes.scale else: self.transformtype_y = transformtype_y self.prioroperations = prioroperations self.design = design self.designwidget = DesignListManager(design) self.optree = DraggableTreeWidget() self.sketchwidget = SketchListManager(design) self.radiobox_scale_x = qg.QRadioButton('Scale X') self.radiobox_custom_x = qg.QRadioButton('Custom X') self.radiobox_scale_y = qg.QRadioButton('Scale Y') self.radiobox_custom_y = qg.QRadioButton('Custom Y') self.x_scale_option = qg.QButtonGroup() self.x_scale_option.addButton(self.radiobox_scale_x) self.x_scale_option.addButton(self.radiobox_custom_x) self.y_scale_option = qg.QButtonGroup() self.y_scale_option.addButton(self.radiobox_scale_y) self.y_scale_option.addButton(self.radiobox_custom_y) # custom_layout = qg.QVBoxLayout() self.scalex = qg.QLineEdit() self.scaley = qg.QLineEdit() self.scalex.setText(str(scalex)) self.scaley.setText(str(scaley)) # custom_layout.addWidget(self.scalex) # custom_layout.addWidget(self.scaley) templayout1 = qg.QHBoxLayout() templayout1.addStretch() templayout1.addWidget(self.radiobox_scale_x) templayout1.addWidget(self.radiobox_custom_x) templayout1.addWidget(self.scalex) templayout1.addStretch() templayout2 = qg.QHBoxLayout() templayout2.addStretch() templayout2.addWidget(self.radiobox_scale_y) templayout2.addWidget(self.radiobox_custom_y) templayout2.addWidget(self.scaley) templayout2.addStretch() layout5 = qg.QHBoxLayout() layout5.addWidget(qg.QLabel('Flip Layers')) self.flip = qg.QCheckBox() self.flip.setChecked(flip) layout5.addWidget(self.flip) layout4 = qg.QHBoxLayout() layout4.addWidget(qg.QLabel('Shift Layers')) self.sb = qg.QSpinBox() self.sb.setRange(popupcad.gui_negative_infinity, popupcad.gui_positive_infinity) self.sb.setSingleStep(1) self.sb.setValue(shift) layout4.addWidget(self.sb) # layout3 = qg.QHBoxLayout() # layout3.addWidget(self.lineedit) # layout3.addWidget(button3) button1 = qg.QPushButton('Ok') button1.clicked.connect(self.accept) button2 = qg.QPushButton('Cancel') button2.clicked.connect(self.reject) layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout = qg.QVBoxLayout() # layout.addWidget(qg.QLabel('Design')) layout.addWidget(self.designwidget) layout.addWidget(qg.QLabel('Sub-Design Operations')) layout.addWidget(self.optree) # layout.addWidget(qg.QLabel('Sketch')) layout.addWidget(self.sketchwidget) layout.addLayout(templayout1) layout.addLayout(templayout2) layout.addLayout(layout5) layout.addLayout(layout4) layout.addLayout(layout2) self.setLayout(layout) self.radiobox_scale_x.setChecked(False) self.radiobox_custom_x.setChecked(False) self.radiobox_scale_y.setChecked(False) self.radiobox_custom_y.setChecked(False) if self.transformtype_x == PlaceOperation8.transformtypes.scale: self.radiobox_scale_x.setChecked(True) elif self.transformtype_x == PlaceOperation8.transformtypes.custom: self.radiobox_custom_x.setChecked(True) if self.transformtype_y == PlaceOperation8.transformtypes.scale: self.radiobox_scale_y.setChecked(True) elif self.transformtype_y == PlaceOperation8.transformtypes.custom: self.radiobox_custom_y.setChecked(True) self.designwidget.itemlist.itemSelectionChanged.connect( self.loadoperations) for ii in range(self.designwidget.itemlist.count()): item = self.designwidget.itemlist.item(ii) if item.value == subdesign: item.setSelected(True) for ii in range(self.sketchwidget.itemlist.count()): item = self.sketchwidget.itemlist.item(ii) if item.value == sketch: item.setSelected(True) self.loadoperations() try: if subopref is not None: id, jj = subopref if subdesign is not None: ii = subdesign.operation_index(id) self.optree.selectIndeces([(ii, jj)]) except NoOperation: pass
class Dialog(qg.QDialog): def __init__(self,design,prioroperations, tilepart = None): super(Dialog, self).__init__() if tilepart is not None: self.sheet_opref_tp = tilepart.sheet_opref self.release_opref_tp = tilepart.release_opref self.part_opref_tp = tilepart.part_opref self.sketch_bounding_box_tp = tilepart.sketch_bounding_box self.sketch_id_tp = tilepart.sketch_id self.sc_tp = tilepart.sc self.N_tp = tilepart.N self.x_gap_tp = tilepart.x_gap self.y_gap_tp = tilepart.y_gap self.support_offset_tp = tilepart.support_offset else: # define defaults self.sheet_opref_tp = None if len(design.operations) == 0 else design.operations[0].id self.release_opref_tp = None if len(design.operations) == 0 else design.operations[0].id self.part_opref_tp = None if len(design.operations) == 0 else design.operations[0].id sketchids = [id for key, id in enumerate(design.sketches)] self.sketch_id_tp = None if len(design.sketches) == 0 else design.sketches[sketchids[0]] self.sketch_bounding_box_tp = [(0,0),(0,0)] self.sc_tp = 1 self.N_tp = 10 self.x_gap_tp = 0 self.y_gap_tp = 0 self.support_offset_tp = 0 self.build_dialog(design, prioroperations) def build_dialog(self, design, prioroperations): self.prioroperations = prioroperations self.design = design # operation/part | sketch to tile in | sheet to tile into # 'Number of parts', 'Scale' # 'x-gap', 'y-gap' # 'Support offset' self.part = DraggableTreeWidget() self.part.linklist(prioroperations) # self.part.setCurrentItem() self.part.selectIndeces([(design.operation_index(self.part_opref_tp), 0)]) self.release = DraggableTreeWidget() self.release.linklist(prioroperations) self.release.selectIndeces([(design.operation_index(self.release_opref_tp), 0)]) self.sketch_to_tile = SketchListManager(design,name = 'Sketch of tile area') self.sketch_to_tile.refresh_list(selected_item = self.sketch_id_tp) self.sheet = DraggableTreeWidget() self.sheet.linklist(prioroperations) self.sheet.selectIndeces([(design.operation_index(self.sheet_opref_tp), 0)]) # operation/part | sketch to tile in | sheet to tile into layout_ops_sheet_sketch = qg.QHBoxLayout() layout_ops_sheet_sketch.addWidget(self.part) layout_ops_sheet_sketch.addWidget(self.release) layout_ops_sheet_sketch.addWidget(self.sketch_to_tile) layout_ops_sheet_sketch.addWidget(self.sheet) # layout_ops_sheet_sketch = qg.QHBoxLayout() # part_vbox = qg.QVBoxLayout() # part_vbox.addWidget(qg.QLabel('Part to tile')) # part_vbox.addWidget(self.part) # layout_ops_sheet_sketch.addLayout(part_vbox) # layout_ops_sheet_sketch.addStretch() # # rel_vbox = qg.QVBoxLayout() # rel_vbox.addWidget(qg.QLabel('Release cut (optional)')) # rel_vbox.addWidget(self.release) # layout_ops_sheet_sketch.addLayout(rel_vbox) # layout_ops_sheet_sketch.addStretch() # # sktch_vbox = qg.QVBoxLayout() # sktch_vbox.addWidget(self.sketch_to_tile) # layout_ops_sheet_sketch.addLayout(sktch_vbox) # layout_ops_sheet_sketch.addStretch() # # sht_vbox = qg.QVBoxLayout() # sht_vbox.addWidget(qg.QLabel('Sheet to tile into')) # sht_vbox.addWidget(self.release) # layout_ops_sheet_sketch.addLayout(sht_vbox) # 'Number of parts', 'Scale' number_of_parts_and_scale = qg.QHBoxLayout() number_of_parts_and_scale.addStretch() number_of_parts_and_scale.addWidget(qg.QLabel('Number of parts')) self.N = qg.QLineEdit() number_of_parts_and_scale.addWidget(self.N) number_of_parts_and_scale.addWidget(qg.QLabel('Scale')) self.scale = qg.QLineEdit() number_of_parts_and_scale.addWidget(self.scale) number_of_parts_and_scale.addStretch() # 'x-gap', 'y-gap' xy_gap = qg.QHBoxLayout() xy_gap.addStretch() xy_gap.addWidget(qg.QLabel('X-gap')) self.x_gap = qg.QLineEdit() xy_gap.addWidget(self.x_gap) xy_gap.addWidget(qg.QLabel('Y-gap')) self.y_gap = qg.QLineEdit() xy_gap.addWidget(self.y_gap) xy_gap.addStretch() s_offset = qg.QHBoxLayout() s_offset.addStretch() s_offset.addWidget(qg.QLabel('Support offset')) self.support_offset = qg.QLineEdit() s_offset.addWidget(self.support_offset) s_offset.addStretch() # Button 1 and 2 buttons = qg.QHBoxLayout() button1 = qg.QPushButton('Ok') button1.clicked.connect(self.accept) buttons.addWidget(button1) button2 = qg.QPushButton('Cancel') button2.clicked.connect(self.reject) buttons.addWidget(button2) instructions = qg.QHBoxLayout() instructions.addStretch() instructions.addWidget(qg.QLabel("Part to tile | Release cut (optional) | " "Bounding box sketch | Sheet to tile into")) instructions.addStretch() layout = qg.QVBoxLayout() layout.addLayout(instructions) layout.addLayout(layout_ops_sheet_sketch) layout.addLayout(number_of_parts_and_scale) layout.addLayout(xy_gap) layout.addLayout(s_offset) layout.addLayout(buttons) self.setLayout(layout) # set text of all boxes self.scale.setText(str(self.sc_tp)) self.N.setText(str(self.N_tp)) self.y_gap.setText(str(self.y_gap_tp)) self.x_gap.setText(str(self.x_gap_tp)) self.support_offset.setText(str(self.support_offset_tp)) def build_sketch_links(self): try: sketch_links = {} sketch_links['sketch_from']=[self.sketch_to_tile.itemlist.selectedItems()[0].value.id] return sketch_links except IndexError: return None def acceptdata(self): # get operation reference for part ii, jj = self.part.currentIndeces2()[0] opid = self.design.operations[ii].id part_opref = opid # get operation reference for sheet ii, jj = self.sheet.currentIndeces2()[0] opid = self.design.operations[ii].id sheet_opref = opid # get operation reference for release ii, jj = self.release.currentIndeces2()[0] opid = self.design.operations[ii].id release_opref = opid # get bounding box from the sketch tmp_sketch_id = self.sketch_to_tile.itemlist.selectedItems()[0].value.id sketch_bounding_box = self.design.sketches[tmp_sketch_id].output_csg()[0].bounds # may break if multiple sketches sketch_bounding_box = [geom/popupcad.csg_processing_scaling for geom in sketch_bounding_box] sketch_id = self.sketch_to_tile.itemlist.selectedItems()[0].value N = int(self.N.text()) scale = float(self.scale.text()) x_gap = float(self.x_gap.text()) y_gap = float(self.y_gap.text()) support_offset = float(self.support_offset.text()) return part_opref, release_opref, sheet_opref, sketch_bounding_box, N, scale, \ x_gap, y_gap, support_offset, sketch_id
def setupLayout(self): self.constraint_editor = ListEditor() if self.selectops: self.optree = DraggableTreeWidget() self.propertieswindow = qg.QWidget() ok_button = qg.QPushButton('&Ok', self) cancel_button = qg.QPushButton('&Cancel', self) ok_button.clicked.connect(self.accept) cancel_button.clicked.connect(self.reject) sublayout = qg.QHBoxLayout() sublayout.addStretch(1) sublayout.addWidget(ok_button) sublayout.addWidget(cancel_button) sublayout.addStretch(1) self.graphicsview = GraphicsView() self.scene = GraphicsScene(self.graphicsview) self.graphicsview.setScene(self.scene) self.graphicsview.finish_init() self.scene.connect_mouse_modes(self.graphicsview) centrallayout = qg.QVBoxLayout() centrallayout.addWidget(self.graphicsview) centrallayout.addLayout(sublayout) centralwidget = qg.QWidget() centralwidget.setLayout(centrallayout) if self.selectops: self.optreedock = qg.QDockWidget() self.optreedock.setWidget(self.optree) self.optreedock.setAllowedAreas(qc.Qt.AllDockWidgetAreas) self.optreedock.setWindowTitle('Operatons') self.constraintdock = qg.QDockWidget() self.constraintdock.setWidget(self.constraint_editor) self.constraintdock.setAllowedAreas(qc.Qt.AllDockWidgetAreas) self.constraintdock.setWindowTitle('Constraints') self.constraintdock.setMinimumHeight(200) self.propdock = qg.QDockWidget() self.propdock.setWidget(self.propertieswindow) self.propdock.setAllowedAreas(qc.Qt.AllDockWidgetAreas) self.propdock.setWindowTitle('Properties') self.propdock.setMinimumHeight(200) if self.selectops: self.addDockWidget(qc.Qt.LeftDockWidgetArea, self.optreedock) self.addDockWidget(qc.Qt.RightDockWidgetArea, self.constraintdock) self.addDockWidget(qc.Qt.RightDockWidgetArea, self.propdock) self.setCentralWidget(centralwidget) self.setWindowTitle('Sketcher') # self.set_nominal_size() if self.selectops: self.optreedock.closeEvent = lambda event: self.action_uncheck( self.menu_system.actions['view_operations']) self.constraintdock.closeEvent = lambda event: self.action_uncheck( self.menu_system.actions['view_constraints']) self.propdock.closeEvent = lambda event: self.action_uncheck( self.menu_system.actions['view_properties'])
class MainWidget(qg.QDialog): def __init__(self, design, sketches, layers, operations, jointop=None,buffer = .01): super(MainWidget, self).__init__() self.design = design self.sketches = sketches self.layers = layers self.operations = operations self.operation_list = DraggableTreeWidget() self.operation_list.linklist(self.operations) self.table = Table(JointRow(self.get_sketches, self.get_layers),Delegate) table_control= TableControl(self.table, self) button_ok = qg.QPushButton('Ok') button_cancel = qg.QPushButton('Cancel') button_ok.clicked.connect(self.accept) button_cancel.clicked.connect(self.reject) self.buffer_val = qg.QLineEdit() sublayout2 = qg.QHBoxLayout() sublayout2.addStretch() sublayout2.addWidget(button_ok) sublayout2.addWidget(button_cancel) sublayout2.addStretch() layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('Device')) layout.addWidget(self.operation_list) layout.addWidget(table_control) layout.addWidget(qg.QLabel('Buffer')) layout.addWidget(self.buffer_val) layout.addLayout(sublayout2) self.setLayout(layout) if jointop is not None: try: op_ref, output_ii = jointop.operation_links['parent'][0] op_ii = design.operation_index(op_ref) self.operation_list.selectIndeces([(op_ii, output_ii)]) except(IndexError, KeyError): pass try: fixed_ref, fixed_output_ii = jointop.operation_links[ 'fixed'][0] fixed_ii = design.operation_index(fixed_ref) self.fixed.selectIndeces([(fixed_ii, fixed_output_ii)]) except(IndexError, KeyError): pass for item in jointop.joint_defs: sketch = self.design.sketches[item.sketch] joint_layer = self.design.return_layer_definition().getlayer( item.joint_layer) sublaminate_layers = [self.design.return_layer_definition().getlayer( item2) for item2 in item.sublaminate_layers] self.table.row_add( sketch, joint_layer, sublaminate_layers, item.width) else: self.table.row_add_empty() self.buffer_val.setText(str(buffer)) self.table.resizeColumnsToContents() self.table.reset_min_width() self.table.setHorizontalScrollBarPolicy(qc.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) def contact_sketch(self): try: return self.sketchwidget.itemlist.selectedItems()[0].value except IndexError: return None def get_sketches(self): return self.sketches def get_layers(self): return self.layers def acceptdata(self): jointdefs = [] for ii in range(self.table.rowCount()): sketch = self.table.item(ii, 0).data(qc.Qt.ItemDataRole.UserRole) joint_layer = self.table.item( ii, 1).data( qc.Qt.ItemDataRole.UserRole) sublaminate_layers = self.table.item( ii, 2).data( qc.Qt.ItemDataRole.UserRole) width = (self.table.item(ii, 3).data(qc.Qt.ItemDataRole.UserRole)) jointdefs.append(JointDef(sketch.id,joint_layer.id,[item.id for item in sublaminate_layers],width)) operation_links = {} operation_links['parent'] = self.operation_list.currentRefs() sketch_links = {} return operation_links,sketch_links,jointdefs,float(self.buffer_val.text())
class Sketcher(MainGui, qg.QMainWindow): showprop = qc.Signal(object) def __init__(self, parent, sketch, design=None, accept_method=None, selectops=False): qg.QMainWindow.__init__(self, parent) self.design = design self.accept_method = accept_method self.selectops = selectops if self.design is None: self.operations = [NullOp()] else: self.operations = [NullOp()] + self.design.operations[:] self.setupLayout() if self.selectops: self.optree.linklist(self.operations) self.undoredo = UndoRedo(self.get_current_sketch, self.loadsketch) self.loadsketch(sketch) self.undoredo.restartundoqueue() self.create_menu_system(popupcad.supportfiledir + '/sketcher_menu.yaml') self.load_references() self.connectSignals() def connectSignals(self): self.setWindowModality(qc.Qt.ApplicationModal) self.setAttribute(qc.Qt.WA_DeleteOnClose) self.scene.itemclicked.connect(self.loadpropwindow) self.showprop.connect(self.loadpropwindow) self.scene.newpolygon.connect(self.undoredo.savesnapshot) self.scene.savesnapshot.connect(self.undoredo.savesnapshot) self.scene.itemdeleted.connect(self.cleanupconstraints) self.scene.refresh_request.connect(self.refreshconstraints) self.scene.constraint_update_request.connect(self.update_selective) self.constraint_editor.signal_edit.connect(self.editItem) self.constraint_editor.itemPressed.connect(self.showconstraint_item) self.constraint_editor.itemdeleted.connect(self.constraint_deleted) if self.selectops: self.optree.currentRowChanged.connect(self.load_references_inner) def setupLayout(self): self.constraint_editor = ListEditor() if self.selectops: self.optree = DraggableTreeWidget() self.propertieswindow = qg.QWidget() ok_button = qg.QPushButton('&Ok', self) cancel_button = qg.QPushButton('&Cancel', self) ok_button.clicked.connect(self.accept) cancel_button.clicked.connect(self.reject) sublayout = qg.QHBoxLayout() sublayout.addStretch(1) sublayout.addWidget(ok_button) sublayout.addWidget(cancel_button) sublayout.addStretch(1) self.graphicsview = GraphicsView() self.scene = GraphicsScene(self.graphicsview) self.graphicsview.setScene(self.scene) self.graphicsview.finish_init() self.scene.connect_mouse_modes(self.graphicsview) centrallayout = qg.QVBoxLayout() centrallayout.addWidget(self.graphicsview) centrallayout.addLayout(sublayout) centralwidget = qg.QWidget() centralwidget.setLayout(centrallayout) if self.selectops: self.optreedock = qg.QDockWidget() self.optreedock.setWidget(self.optree) self.optreedock.setAllowedAreas(qc.Qt.AllDockWidgetAreas) self.optreedock.setWindowTitle('Operatons') self.constraintdock = qg.QDockWidget() self.constraintdock.setWidget(self.constraint_editor) self.constraintdock.setAllowedAreas(qc.Qt.AllDockWidgetAreas) self.constraintdock.setWindowTitle('Constraints') self.constraintdock.setMinimumHeight(200) self.propdock = qg.QDockWidget() self.propdock.setWidget(self.propertieswindow) self.propdock.setAllowedAreas(qc.Qt.AllDockWidgetAreas) self.propdock.setWindowTitle('Properties') self.propdock.setMinimumHeight(200) if self.selectops: self.addDockWidget(qc.Qt.LeftDockWidgetArea, self.optreedock) self.addDockWidget(qc.Qt.RightDockWidgetArea, self.constraintdock) self.addDockWidget(qc.Qt.RightDockWidgetArea, self.propdock) self.setCentralWidget(centralwidget) self.setWindowTitle('Sketcher') # self.set_nominal_size() if self.selectops: self.optreedock.closeEvent = lambda event: self.action_uncheck( self.menu_system.actions['view_operations']) self.constraintdock.closeEvent = lambda event: self.action_uncheck( self.menu_system.actions['view_constraints']) self.propdock.closeEvent = lambda event: self.action_uncheck( self.menu_system.actions['view_properties']) # self.move_center() def regen_id(self): self.sketch.regen_id() def editItem(self, constraint): self.undoredo.savesnapshot() constraint.edit() self.refreshconstraints() def cut_to_clipboard(self): self.undoredo.savesnapshot() self.scene.cut_to_clipboard() def copy_to_clipboard(self): # self.undoredo.savesnapshot() self.scene.copy_to_clipboard() def paste_from_clipboard(self): self.undoredo.savesnapshot() self.scene.paste_from_clipboard() def add_constraint(self, constraintclass): from popupcad.filetypes.genericshapes import GenericLine self.undoredo.savesnapshot() items = [] new_constraints = [] for item in self.scene.selectedItems(): if isinstance(item, ReferenceInteractiveVertex): generic = item.get_generic() newgeneric = DrawnPoint(generic.getpos(), construction=True) newitem = newgeneric.gen_interactive() self.scene.addItem(newitem) items.append(newgeneric) item.setSelected(False) newitem.setSelected(True) new_constraints.append( constraints.FixedConstraint.new(newgeneric)) elif isinstance(item, ReferenceInteractiveEdge): generic = item.get_generic() v1 = ShapeVertex(generic.vertex1.getpos()) v2 = ShapeVertex(generic.vertex2.getpos()) new_constraints.append(constraints.FixedConstraint.new(v1, v2)) l = GenericLine([v1, v2], [], construction=True) a = l.outputinteractive() self.scene.addItem(a) item.setSelected(False) a.setSelected(True) items.append(a.selectableedges[0].get_generic()) elif isinstance(item, InteractiveVertex): items.append(item.get_generic()) elif isinstance(item, InteractiveEdge): items.append(item.get_generic()) elif isinstance(item, DrawingPoint): items.append(item.get_generic()) new_constraint = constraintclass.new(*items) if new_constraint is not None: new_constraints.append(new_constraint) for constraint in new_constraints: self.sketch.constraintsystem.add_constraint(constraint) self.refreshconstraints() def constraint_deleted(self): self.refreshconstraints() def refreshconstraints(self): self.sketch.constraintsystem.cleanup() del self.sketch.constraintsystem.generator self.sketch.constraintsystem.update() self.scene.updateshape() self.constraint_editor.refresh() def update_constraints(self, vertices): self.sketch.constraintsystem.update() self.scene.updateshape() self.constraint_editor.refresh() def update_selective(self, vertices): self.sketch.constraintsystem.update_selective(vertices) self.scene.updateshape() self.constraint_editor.refresh() def get_sketch_vertices(self): self.update_sketch_geometries() vertices = [ vertex for geom in self.sketch.operationgeometry for vertex in geom.vertices() ] return vertices def cleanupconstraints(self): self.sketch.constraintsystem.cleanup() self.constraint_editor.refresh() del self.sketch.constraintsystem.generator def showconstraint_item(self, obj1): self.showprop.emit(obj1.customdata) self.scene.clearSelection() vertices = [ item for item in self.scene.items() if isinstance(item, InteractiveVertexBase) ] for v in vertices: if v.get_generic().id in obj1.customdata.vertex_ids: v.setSelected(True) pass edges = [ item for item in self.scene.items() if isinstance(item, InteractiveEdge) or isinstance(item, ReferenceInteractiveEdge) ] for edge in edges: c = tuple(sorted([item.id for item in edge.generic.vertices()])) if c in obj1.customdata.segment_ids: edge.setSelected(True) def loadsketch(self, sketch): self.sketch = sketch.copy() self.scene.deleteall() self.scene.sketch = self.sketch for item in self.sketch.operationgeometry: newitem = item.outputinteractive() self.scene.addItem(newitem) newitem.refreshview() self.constraint_editor.linklist( self.sketch.constraintsystem.constraints) self.sketch.constraintsystem.get_vertices = self.get_sketch_vertices self.load_references() self.update_window_title() def showvertices(self): if self.menu_system.actions['constraints_show'].isChecked(): self.scene.cancelcreate() self.scene.showvertices( self.menu_system.actions['constraints_show'].isChecked()) self.scene.updatevertices() def update_sketch_geometries(self): self.sketch.cleargeometries() geometries = [ item.generic for item in self.scene.items() if isinstance(item, Interactive) if item.generic.isValid() ] geometries.extend([ item.generic for item in self.scene.items() if isinstance(item, DrawingPoint) ]) geometries.extend([ item.generic for item in self.scene.items() if isinstance(item, TextParent) ]) self.sketch.addoperationgeometries(geometries) def get_current_sketch(self): self.update_sketch_geometries() return self.sketch def newfile(self): sketch = popupcad.filetypes.sketch.Sketch.new() self.loadsketch(sketch) self.undoredo.restartundoqueue() def solidworksimport(self): from popupcad.filetypes.solidworksimport import Assembly a = Assembly.open() if a is not None: sketch = a.build_face_sketch() self.loadsketch(sketch) self.undoredo.restartundoqueue() def open(self): sketch = popupcad.filetypes.sketch.Sketch.open() if not sketch is None: self.loadsketch(sketch) self.undoredo.restartundoqueue() def save(self): self.update_sketch_geometries() self.sketch.save() self.update_window_title() def saveAs(self): self.update_sketch_geometries() self.sketch.saveAs() self.update_window_title() def adddrawingpoint(self): self.graphicsview.turn_off_drag() self.scene.addpolygon(DrawingPoint) def addproto(self, proto): self.graphicsview.turn_off_drag() self.scene.addpolygon(proto) def add_line(self): self.addproto(ProtoLine) def add_path(self): self.addproto(ProtoPath) def add_rect(self): self.addproto(ProtoRect2Point) def add_circle(self): self.addproto(ProtoCircle) def add_poly(self): self.addproto(ProtoPoly) def add_text(self): self.addproto(TextParent) def convex_hull(self): from popupcad.graphics2d.interactivevertexbase import InteractiveVertexBase from popupcad.graphics2d.interactiveedge import InteractiveEdge selecteditems = self.scene.selectedItems() genericvertices = [] for item in selecteditems: if isinstance(item, InteractiveVertexBase): genericvertices.append(item.get_generic()) elif isinstance(item, InteractiveEdge): genericvertices.extend(item.get_generic().vertices()) vertices2 = [vertex.getpos() for vertex in genericvertices] vertices2 = numpy.array(vertices2) poly = popupcad.algorithms.triangulate.convex_hull(vertices2) self.scene.addItem(poly.outputinteractive()) def triangulate(self): from popupcad.graphics2d.interactivevertexbase import InteractiveVertexBase from popupcad.graphics2d.interactiveedge import InteractiveEdge selecteditems = self.scene.selectedItems() genericvertices = [] for item in selecteditems: if isinstance(item, InteractiveVertexBase): genericvertices.append(item.get_generic()) elif isinstance(item, InteractiveEdge): genericvertices.extend(item.get_generic().vertices()) vertices2 = [vertex.getpos() for vertex in genericvertices] polys = popupcad.algorithms.triangulate.triangulate(vertices2) [self.scene.addItem(poly.outputinteractive()) for poly in polys] def getjoints(self): items = [] for item in self.scene.items(): if isinstance(item, Interactive): items.append(item.generic) item.removefromscene() roundvalue = 3 genericlines = popupcad.algorithms.getjoints.getjoints( items, roundvalue) interactive_lines = [ segment.outputinteractive() for segment in genericlines ] [self.scene.addItem(line) for line in interactive_lines] def showconstraint(self, row): item = self.constraint_editor.item(row) self.showconstraint_item(item) def accept(self): if self.accept_method is not None: self.accept_method(*self.acceptdata()) self.close() def reject(self): self.close() def loadpropwindow(self, obj): widget = obj.properties() self.propdock.setWidget(widget) def acceptdata(self): self.update_sketch_geometries() return self.sketch, def load_references3(self, ii, jj): staticgeometries, controlpoints, controllines = [], [], [] ii -= 1 if ii >= 0: if self.design is not None: print(ii, jj) try: operationgeometries = self.design.operations[ii].output[ jj].controlpolygons() staticgeometries = [ item.outputstatic() for item in operationgeometries ] controlpoints = self.design.operations[ii].output[ jj].controlpoints() controlpoints = [ point.gen_interactive() for point in controlpoints ] controllines = self.design.operations[ii].output[ jj].controllines() controllines = [ line.gen_interactive() for line in controllines ] except (IndexError, AttributeError): pass return staticgeometries, controlpoints, controllines def load_references_inner(self, ii, jj): self.scene.removerefgeoms() self.static_items, self.controlpoints, self.controllines = self.load_references3( ii, jj) self.scene.update_extra_objects(self.controlpoints + self.controllines) self.scene.updatevertices() [self.scene.addItem(item) for item in self.static_items] def load_references(self): if self.selectops: selected_indeces = self.optree.currentIndeces2() if len(selected_indeces) > 0: ii, jj = selected_indeces[0] self.load_references_inner(ii, jj) def flipdirection(self): selecteditems = self.scene.selectedItems() for item in selecteditems: item.generic.flip() item.updateshape() def hollow(self): selecteditems = self.scene.selectedItems() newgenerics = [] for item in selecteditems: newgenerics.extend(item.generic.hollow()) item.harddelete() for item in newgenerics: self.scene.addItem(item.outputinteractive()) def fill(self): selecteditems = self.scene.selectedItems() newgenerics = [] for item in selecteditems: newgenerics.extend(item.generic.fill()) item.harddelete() for item in newgenerics: self.scene.addItem(item.outputinteractive()) def extract(self): if self.selectops: selected_indeces = self.optree.currentIndeces2() if len(selected_indeces) > 0: ii, jj = selected_indeces[0] # self.load_references_inner(ii, jj) self.scene.removerefgeoms() staticgeometries = [] ii -= 1 if ii >= 0: if self.design is not None: print(ii, jj) try: operationgeometries = self.design.operations[ ii].output[jj].controlpolygons() staticgeometries = [ item.copy().outputinteractive() for item in operationgeometries ] except (IndexError, AttributeError): pass [self.scene.addItem(item) for item in staticgeometries] def array(self): dialog = qg.QDialog() x_num = qg.QSpinBox() x_num.setValue(2) x_num.setMinimum(1) x_val = qg.QDoubleSpinBox() x_val.setMinimum(popupcad.gui_negative_infinity) x_val.setMaximum(popupcad.gui_positive_infinity) x_val.setValue(1) y_num = qg.QSpinBox() y_num.setValue(1) y_num.setMinimum(1) y_val = qg.QDoubleSpinBox() y_val.setValue(1) y_val.setMinimum(popupcad.gui_negative_infinity) y_val.setMaximum(popupcad.gui_positive_infinity) button_ok = qg.QPushButton('Ok') button_cancel = qg.QPushButton('Cancel') sublayout1 = qg.QHBoxLayout() sublayout1.addWidget(button_ok) sublayout1.addWidget(button_cancel) layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('# in x')) layout.addWidget(x_num) layout.addWidget(qg.QLabel('x spacing')) layout.addWidget(x_val) layout.addWidget(qg.QLabel('# in y')) layout.addWidget(y_num) layout.addWidget(qg.QLabel('y spacing')) layout.addWidget(y_val) layout.addLayout(sublayout1) dialog.setLayout(layout) button_ok.clicked.connect(dialog.accept) button_cancel.clicked.connect(dialog.reject) copies = [] if dialog.exec_(): for ii in range(x_num.value()): for jj in range(y_num.value()): if ii == jj == 0: pass else: for item in self.scene.selectedItems(): shift_val = (ii * x_val.value(), jj * y_val.value()) new = item.generic.copy(identical=False) new.shift(shift_val) copies.append(new) copies = [ self.scene.addItem(item.outputinteractive()) for item in copies ] def set_construction(self, value): for item in self.scene.selectedItems(): try: item.generic.set_construction(value) except AttributeError: pass def set_construction_on(self): self.set_construction(True) def set_construction_off(self): self.set_construction(False) def update_window_title(self): basename = self.sketch.get_basename() self.setWindowTitle('Sketcher' + ' - ' + basename) def undo(self): self.undoredo.undo() def redo(self): self.undoredo.redo() def show_hide_op_tree(self): self.showhide2(self.optreedock, self.menu_system.actions['view_operations']) def show_hide_constraints(self): self.showhide2(self.optreedock, self.menu_system.actions['view_constraints']) def show_hide_properties(self): self.showhide2(self.optreedock, self.menu_system.actions['view_properties']) def rubberband(self): self.graphicsview.rubberband() def scrollhand(self): self.graphicsview.scrollhand() def zoomToFit(self): self.graphicsview.zoomToFit() def screenShot(self): self.scene.screenShot() def add_constraint_coincident(self): self.add_constraint(constraints.CoincidentConstraint) def add_constraint_distance(self): self.add_constraint(constraints.DistanceConstraint) def add_constraint_x_distance(self): self.add_constraint(constraints.XDistanceConstraint) def add_constraint_y_distance(self): self.add_constraint(constraints.YDistanceConstraint) def add_constraint_fixed(self): self.add_constraint(constraints.FixedConstraint) def add_constraint_angle(self): self.add_constraint(constraints.AngleConstraint) def add_constraint_parallel(self): self.add_constraint(constraints.ParallelLinesConstraint) def add_constraint_perpendicular(self): self.add_constraint(constraints.PerpendicularLinesConstraint) def add_constraint_equal(self): self.add_constraint(constraints.EqualLengthLinesConstraint) def add_constraint_horizontal(self): self.add_constraint(constraints.HorizontalConstraint) def add_constraint_vertical(self): self.add_constraint(constraints.VerticalConstraint) def add_constraint_point_line_distance(self): self.add_constraint(constraints.PointLineDistanceConstraint) def add_constraint_line_midpoint(self): self.add_constraint(constraints.LineMidpointConstraint)
def __init__(self, design, sketches, layers, operations, jointop=None,sketch = None): super(MainWidget, self).__init__() self.design = design self.sketches = sketches self.layers = layers self.operations = operations self.operation_list = DraggableTreeWidget() self.operation_list.linklist(self.operations) self.fixed = DraggableTreeWidget() self.fixed.linklist(self.operations) self.table = Table(JointRow(self.get_sketches, self.get_layers),Delegate) table_control= TableControl(self.table, self) self.sketchwidget = SketchListManager(self.design,name='Contact Points Sketch') for ii in range(self.sketchwidget.itemlist.count()): item = self.sketchwidget.itemlist.item(ii) if item.value == sketch: item.setSelected(True) button_ok = qg.QPushButton('Ok') button_cancel = qg.QPushButton('Cancel') button_ok.clicked.connect(self.accept) button_cancel.clicked.connect(self.reject) sublayout1 = qg.QHBoxLayout() sublayout1_1 = qg.QVBoxLayout() sublayout1_2 = qg.QVBoxLayout() sublayout1_3 = qg.QVBoxLayout() sublayout1_1.addWidget(qg.QLabel('Device')) sublayout1_1.addWidget(self.operation_list) sublayout1_2.addWidget(qg.QLabel('Fixed Region')) sublayout1_2.addWidget(self.fixed) sublayout1_3.addWidget(self.sketchwidget) sublayout1.addLayout(sublayout1_1) sublayout1.addLayout(sublayout1_2) sublayout1.addLayout(sublayout1_3) sublayout2 = qg.QHBoxLayout() sublayout2.addStretch() sublayout2.addWidget(button_ok) sublayout2.addWidget(button_cancel) sublayout2.addStretch() layout = qg.QVBoxLayout() layout.addLayout(sublayout1) layout.addWidget(table_control) layout.addLayout(sublayout2) self.setLayout(layout) if jointop is not None: try: op_ref, output_ii = jointop.operation_links['parent'][0] op_ii = design.operation_index(op_ref) self.operation_list.selectIndeces([(op_ii, output_ii)]) except(IndexError, KeyError): pass try: fixed_ref, fixed_output_ii = jointop.operation_links[ 'fixed'][0] fixed_ii = design.operation_index(fixed_ref) self.fixed.selectIndeces([(fixed_ii, fixed_output_ii)]) except(IndexError, KeyError): pass for item in jointop.joint_defs: sketch = self.design.sketches[item.sketch] joint_layer = self.design.return_layer_definition().getlayer( item.joint_layer) sublaminate_layers = [self.design.return_layer_definition().getlayer( item2) for item2 in item.sublaminate_layers] self.table.row_add( sketch, joint_layer, sublaminate_layers, item.width, item.stiffness, item.damping, item.preload_angle, item.limit_negative, item.limit_positive) else: self.table.row_add_empty() self.table.resizeColumnsToContents() self.table.reset_min_width() self.table.setHorizontalScrollBarPolicy(qc.Qt.ScrollBarAlwaysOff)
def build_editor(self, parent, delegate): editor = DraggableTreeWidget(parent) editor.linklist(self.get_list()) # editor.editingFinished.connect(delegate.commitAndCloseEditor) return editor
def __init__( self, design, prioroperations, sketch=None, subdesign=None, subopref=None, transformtype_x=None, transformtype_y=None, shift=0, flip=False, scalex=1., scaley=1.): super(Dialog, self).__init__() if transformtype_x is None: self.transformtype_x = PlaceOperation8.transformtypes.scale else: self.transformtype_x = transformtype_x if transformtype_y is None: self.transformtype_y = PlaceOperation8.transformtypes.scale else: self.transformtype_y = transformtype_y self.prioroperations = prioroperations self.design = design self.designwidget = DesignListManager(design) self.optree = DraggableTreeWidget() self.sketchwidget = SketchListManager(design) self.radiobox_scale_x = qg.QRadioButton('Scale X') self.radiobox_custom_x = qg.QRadioButton('Custom X') self.radiobox_scale_y = qg.QRadioButton('Scale Y') self.radiobox_custom_y = qg.QRadioButton('Custom Y') self.x_scale_option = qg.QButtonGroup() self.x_scale_option.addButton(self.radiobox_scale_x) self.x_scale_option.addButton(self.radiobox_custom_x) self.y_scale_option = qg.QButtonGroup() self.y_scale_option.addButton(self.radiobox_scale_y) self.y_scale_option.addButton(self.radiobox_custom_y) # custom_layout = qg.QVBoxLayout() self.scalex = qg.QLineEdit() self.scaley = qg.QLineEdit() self.scalex.setText(str(scalex)) self.scaley.setText(str(scaley)) # custom_layout.addWidget(self.scalex) # custom_layout.addWidget(self.scaley) templayout1 = qg.QHBoxLayout() templayout1.addStretch() templayout1.addWidget(self.radiobox_scale_x) templayout1.addWidget(self.radiobox_custom_x) templayout1.addWidget(self.scalex) templayout1.addStretch() templayout2 = qg.QHBoxLayout() templayout2.addStretch() templayout2.addWidget(self.radiobox_scale_y) templayout2.addWidget(self.radiobox_custom_y) templayout2.addWidget(self.scaley) templayout2.addStretch() layout5 = qg.QHBoxLayout() layout5.addWidget(qg.QLabel('Flip Layers')) self.flip = qg.QCheckBox() self.flip.setChecked(flip) layout5.addWidget(self.flip) layout4 = qg.QHBoxLayout() layout4.addWidget(qg.QLabel('Shift Layers')) self.sb = qg.QSpinBox() self.sb.setRange(popupcad.gui_negative_infinity, popupcad.gui_positive_infinity) self.sb.setSingleStep(1) self.sb.setValue(shift) layout4.addWidget(self.sb) # layout3 = qg.QHBoxLayout() # layout3.addWidget(self.lineedit) # layout3.addWidget(button3) button1 = qg.QPushButton('Ok') button1.clicked.connect(self.accept) button2 = qg.QPushButton('Cancel') button2.clicked.connect(self.reject) layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout = qg.QVBoxLayout() # layout.addWidget(qg.QLabel('Design')) layout.addWidget(self.designwidget) layout.addWidget(qg.QLabel('Sub-Design Operations')) layout.addWidget(self.optree) # layout.addWidget(qg.QLabel('Sketch')) layout.addWidget(self.sketchwidget) layout.addLayout(templayout1) layout.addLayout(templayout2) layout.addLayout(layout5) layout.addLayout(layout4) layout.addLayout(layout2) self.setLayout(layout) self.radiobox_scale_x.setChecked(False) self.radiobox_custom_x.setChecked(False) self.radiobox_scale_y.setChecked(False) self.radiobox_custom_y.setChecked(False) if self.transformtype_x == PlaceOperation8.transformtypes.scale: self.radiobox_scale_x.setChecked(True) elif self.transformtype_x == PlaceOperation8.transformtypes.custom: self.radiobox_custom_x.setChecked(True) if self.transformtype_y == PlaceOperation8.transformtypes.scale: self.radiobox_scale_y.setChecked(True) elif self.transformtype_y == PlaceOperation8.transformtypes.custom: self.radiobox_custom_y.setChecked(True) self.designwidget.itemlist.itemSelectionChanged.connect( self.loadoperations) for ii in range(self.designwidget.itemlist.count()): item = self.designwidget.itemlist.item(ii) if item.value == subdesign: item.setSelected(True) for ii in range(self.sketchwidget.itemlist.count()): item = self.sketchwidget.itemlist.item(ii) if item.value == sketch: item.setSelected(True) self.loadoperations() try: if subopref is not None: id, jj = subopref if subdesign is not None: ii = subdesign.operation_index(id) self.optree.selectIndeces([(ii, jj)]) except NoOperation: pass
def build_dialog(self, design, prioroperations): self.prioroperations = prioroperations self.design = design # operation/part | sketch to tile in | sheet to tile into # 'Number of parts', 'Scale' # 'x-gap', 'y-gap' # 'Support offset' self.part = DraggableTreeWidget() self.part.linklist(prioroperations) # self.part.setCurrentItem() self.part.selectIndeces([(design.operation_index(self.part_opref_tp), 0)]) self.release = DraggableTreeWidget() self.release.linklist(prioroperations) self.release.selectIndeces([(design.operation_index(self.release_opref_tp), 0)]) self.sketch_to_tile = SketchListManager(design,name = 'Sketch of tile area') self.sketch_to_tile.refresh_list(selected_item = self.sketch_id_tp) self.sheet = DraggableTreeWidget() self.sheet.linklist(prioroperations) self.sheet.selectIndeces([(design.operation_index(self.sheet_opref_tp), 0)]) # operation/part | sketch to tile in | sheet to tile into layout_ops_sheet_sketch = qg.QHBoxLayout() layout_ops_sheet_sketch.addWidget(self.part) layout_ops_sheet_sketch.addWidget(self.release) layout_ops_sheet_sketch.addWidget(self.sketch_to_tile) layout_ops_sheet_sketch.addWidget(self.sheet) # layout_ops_sheet_sketch = qg.QHBoxLayout() # part_vbox = qg.QVBoxLayout() # part_vbox.addWidget(qg.QLabel('Part to tile')) # part_vbox.addWidget(self.part) # layout_ops_sheet_sketch.addLayout(part_vbox) # layout_ops_sheet_sketch.addStretch() # # rel_vbox = qg.QVBoxLayout() # rel_vbox.addWidget(qg.QLabel('Release cut (optional)')) # rel_vbox.addWidget(self.release) # layout_ops_sheet_sketch.addLayout(rel_vbox) # layout_ops_sheet_sketch.addStretch() # # sktch_vbox = qg.QVBoxLayout() # sktch_vbox.addWidget(self.sketch_to_tile) # layout_ops_sheet_sketch.addLayout(sktch_vbox) # layout_ops_sheet_sketch.addStretch() # # sht_vbox = qg.QVBoxLayout() # sht_vbox.addWidget(qg.QLabel('Sheet to tile into')) # sht_vbox.addWidget(self.release) # layout_ops_sheet_sketch.addLayout(sht_vbox) # 'Number of parts', 'Scale' number_of_parts_and_scale = qg.QHBoxLayout() number_of_parts_and_scale.addStretch() number_of_parts_and_scale.addWidget(qg.QLabel('Number of parts')) self.N = qg.QLineEdit() number_of_parts_and_scale.addWidget(self.N) number_of_parts_and_scale.addWidget(qg.QLabel('Scale')) self.scale = qg.QLineEdit() number_of_parts_and_scale.addWidget(self.scale) number_of_parts_and_scale.addStretch() # 'x-gap', 'y-gap' xy_gap = qg.QHBoxLayout() xy_gap.addStretch() xy_gap.addWidget(qg.QLabel('X-gap')) self.x_gap = qg.QLineEdit() xy_gap.addWidget(self.x_gap) xy_gap.addWidget(qg.QLabel('Y-gap')) self.y_gap = qg.QLineEdit() xy_gap.addWidget(self.y_gap) xy_gap.addStretch() s_offset = qg.QHBoxLayout() s_offset.addStretch() s_offset.addWidget(qg.QLabel('Support offset')) self.support_offset = qg.QLineEdit() s_offset.addWidget(self.support_offset) s_offset.addStretch() # Button 1 and 2 buttons = qg.QHBoxLayout() button1 = qg.QPushButton('Ok') button1.clicked.connect(self.accept) buttons.addWidget(button1) button2 = qg.QPushButton('Cancel') button2.clicked.connect(self.reject) buttons.addWidget(button2) instructions = qg.QHBoxLayout() instructions.addStretch() instructions.addWidget(qg.QLabel("Part to tile | Release cut (optional) | " "Bounding box sketch | Sheet to tile into")) instructions.addStretch() layout = qg.QVBoxLayout() layout.addLayout(instructions) layout.addLayout(layout_ops_sheet_sketch) layout.addLayout(number_of_parts_and_scale) layout.addLayout(xy_gap) layout.addLayout(s_offset) layout.addLayout(buttons) self.setLayout(layout) # set text of all boxes self.scale.setText(str(self.sc_tp)) self.N.setText(str(self.N_tp)) self.y_gap.setText(str(self.y_gap_tp)) self.x_gap.setText(str(self.x_gap_tp)) self.support_offset.setText(str(self.support_offset_tp))
class Dialog(qg.QDialog): def __init__(self,cls,design,operations,selectedopindex=None,outputref = 0,selectedoutput = None,sketch = None,operation_type_index = 0): super(Dialog,self).__init__() self.design = design self.operations = [NullOp()]+operations self.cls = cls self.optree = DraggableTreeWidget() self.optree.linklist(self.operations) if selectedopindex!=None: selectedopindex = selectedopindex+1 else: selectedopindex = 0 self.optree.selectIndeces([(selectedopindex,outputref)]) self.sketchwidget = SketchListManager(self.design) for ii in range(self.sketchwidget.itemlist.count()): item = self.sketchwidget.itemlist.item(ii) if item.value==sketch: item.setSelected(True) if selectedoutput == None: selectedoutput = [item.id for item in design.return_layer_definition().layers] self.outputlayerselector = qg.QListWidget() self.outputlayerselector.setSelectionBehavior(qg.QListWidget.SelectionBehavior.SelectRows) self.outputlayerselector.setSelectionMode(qg.QListWidget.SelectionMode.MultiSelection) outputitems = [popupcad.filetypes.listwidgetitem.ListWidgetItem(item,self.outputlayerselector) for item in design.return_layer_definition().layers] [item.setSelected(item.customdata.id in selectedoutput) for item in outputitems] from popupcad.widgets.operationlist import OperationList self.operationtypeselector = OperationList([],cls.function_names,cls.function_names) self.operationtypeselector.setCurrentIndex(operation_type_index) button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') buttonlayout = qg.QHBoxLayout() buttonlayout.addWidget(button1) buttonlayout.addWidget(button2) layout = qg.QVBoxLayout() layout.addWidget(self.sketchwidget) layout.addWidget(self.operationtypeselector) layout.addWidget(qg.QLabel('Parent Operation')) layout.addWidget(self.optree) layout.addWidget(qg.QLabel('Select Layers')) layout.addWidget(self.outputlayerselector) layout.addLayout(buttonlayout) self.setLayout(layout) button1.pressed.connect(self.accept) button2.pressed.connect(self.reject) def sketch(self): try: return self.sketchwidget.itemlist.selectedItems()[0].value except IndexError: return None def acceptdata(self): sketchid = self.sketch().id selected_indeces = self.optree.currentIndeces2() if len(selected_indeces)>0: ii,jj = selected_indeces[0] else: ii,jj = 0,0 self.operationeditor.selectIndeces([(ii,jj)]) ii -= 1 if ii==-1: operation_link1, outputref = None,0 else: operation_link1, outputref = self.optree.currentRefs()[0] layer_links = [item.customdata.id for item in self.outputlayerselector.selectedItems()] operation_type_index = self.operationtypeselector.currentIndex() function = self.cls.operationtypes[operation_type_index] # outputref = 0 return sketchid, operation_link1,layer_links,function,outputref
def __init__(self, design, sketches, layers, operations, jointop=None,buffer = .01): super(MainWidget, self).__init__() self.design = design self.sketches = sketches self.layers = layers self.operations = operations self.operation_list = DraggableTreeWidget() self.operation_list.linklist(self.operations) self.table = Table(JointRow(self.get_sketches, self.get_layers),Delegate) table_control= TableControl(self.table, self) button_ok = qg.QPushButton('Ok') button_cancel = qg.QPushButton('Cancel') button_ok.clicked.connect(self.accept) button_cancel.clicked.connect(self.reject) self.buffer_val = qg.QLineEdit() sublayout2 = qg.QHBoxLayout() sublayout2.addStretch() sublayout2.addWidget(button_ok) sublayout2.addWidget(button_cancel) sublayout2.addStretch() layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('Device')) layout.addWidget(self.operation_list) layout.addWidget(table_control) layout.addWidget(qg.QLabel('Buffer')) layout.addWidget(self.buffer_val) layout.addLayout(sublayout2) self.setLayout(layout) if jointop is not None: try: op_ref, output_ii = jointop.operation_links['parent'][0] op_ii = design.operation_index(op_ref) self.operation_list.selectIndeces([(op_ii, output_ii)]) except(IndexError, KeyError): pass try: fixed_ref, fixed_output_ii = jointop.operation_links[ 'fixed'][0] fixed_ii = design.operation_index(fixed_ref) self.fixed.selectIndeces([(fixed_ii, fixed_output_ii)]) except(IndexError, KeyError): pass for item in jointop.joint_defs: sketch = self.design.sketches[item.sketch] joint_layer = self.design.return_layer_definition().getlayer( item.joint_layer) sublaminate_layers = [self.design.return_layer_definition().getlayer( item2) for item2 in item.sublaminate_layers] self.table.row_add( sketch, joint_layer, sublaminate_layers, item.width) else: self.table.row_add_empty() self.buffer_val.setText(str(buffer)) self.table.resizeColumnsToContents() self.table.reset_min_width() self.table.setHorizontalScrollBarPolicy(qc.Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
def __init__(self, keepouttypes, valuenames, defaults, operations, show, operationindeces=None, values=None, keepouttype=None): super(Dialog, self).__init__() self.operations = operations self.le1 = DraggableTreeWidget() self.le1.linklist(self.operations) self.le3 = DraggableTreeWidget() self.le3.linklist(self.operations) if operationindeces is not None: self.le1.selectIndeces(operationindeces[0:1]) self.le3.selectIndeces(operationindeces[1:2]) if values is None: values = defaults[:] layout = qg.QVBoxLayout() layout.addWidget(qg.QLabel('Sheet')) layout.addWidget(self.le1) layout.addWidget(qg.QLabel('Device')) layout.addWidget(self.le3) self.valueboxes = [] for valuename, v in zip(valuenames, values): templayout = qg.QHBoxLayout() valueedit = qg.QLineEdit() valueedit.setAlignment(qc.Qt.AlignRight) valueedit.setText(str(v)) # self.valueedit.setInputMask('#009.0') valueedit.setValidator( StrictDoubleValidator(popupcad.gui_negative_infinity, popupcad.gui_positive_infinity, popupcad.gui_default_decimals, valueedit)) templayout.addStretch() templayout.addWidget(qg.QLabel(valuename)) templayout.addWidget(valueedit) self.valueboxes.append(valueedit) layout.addLayout(templayout) self.radiobuttons = [] if 'keepout' in show: for key, value2 in keepouttypes.dict.items(): b = qg.QRadioButton(key) b.setChecked(keepouttype == value2) b.uservalue = value2 self.radiobuttons.append(b) layout.addWidget(b) button1 = qg.QPushButton('Ok') button2 = qg.QPushButton('Cancel') layout2 = qg.QHBoxLayout() layout2.addWidget(button1) layout2.addWidget(button2) layout.addLayout(layout2) self.setLayout(layout) button1.clicked.connect(self.accept) button2.clicked.connect(self.reject)