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
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
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