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()
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
    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)
Beispiel #6
0
    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
Beispiel #7
0
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
Beispiel #8
0
    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)
Beispiel #9
0
    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)
Beispiel #10
0
    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)
Beispiel #11
0
    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
Beispiel #12
0
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
Beispiel #13
0
    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)
Beispiel #14
0
    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)
Beispiel #15
0
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)
Beispiel #18
0
    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)
Beispiel #20
0
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
Beispiel #21
0
    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
Beispiel #24
0
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
Beispiel #25
0
    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)
Beispiel #27
0
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())
Beispiel #28
0
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
Beispiel #31
0
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())
Beispiel #32
0
    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))
Beispiel #34
0
    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)
Beispiel #35
0
    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)
Beispiel #36
0
    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
Beispiel #38
0
    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]
Beispiel #39
0
    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
Beispiel #40
0
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
Beispiel #41
0
    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'])
Beispiel #42
0
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())
Beispiel #43
0
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
Beispiel #46
0
    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
Beispiel #47
0
    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))
Beispiel #48
0
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
Beispiel #49
0
    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)
Beispiel #50
0
    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)