Ejemplo n.º 1
0
class ConnectedAirfoilsModel(QtCore.QObject):
    data_changed = QtCore.pyqtSignal()

    def __init__(self):
        super().__init__()
        self.af_left = Airfoil()
        self.af_right = Airfoil()
        self.it_point_list_right = []
        self.it_point_list_left = []

        self.af_left.data_changed.connect(self.connect_airfoils)
        self.af_right.data_changed.connect(self.connect_airfoils)

    def connect_airfoils(self):
        if (self.af_left.loaded and self.af_right.loaded):
            degrees = list(
                set(self.af_left.get_degree_list() +
                    self.af_right.get_degree_list()))
            degrees.sort()

            self.it_point_list_right = self.af_right.get_interpolated_point_list(
                degrees)
            self.it_point_list_left = self.af_left.get_interpolated_point_list(
                degrees)

            self.data_changed.emit()

    def generate_gcode(self, feedrate):
        gcode = list()
        if (self.af_left.loaded and self.af_right.loaded):
            # turn on the spindle (hotwire) at the given temp
            gcode.append("M3 S" + str(control_widget.temp_spbox.value()) +
                         "\n")
            gcode.append("M7\n")
            gcode.append("F%.2f\n" % feedrate)

            # example coordinate for cutting block to size:
            # (x, y) -> x = x and u, y = y and z
            if (control_widget.cutBlockToSizeCheckbox.isChecked()):
                # (0, 0)
                gcode.append("G01 X%.3f Y%.3f U%.3f Z%.3f\n" % (0, 0, 0, 0))

                # (0, block height)
                gcode.append("G01 X%.3f Y%.3f U%.3f Z%.3f\n" %
                             (0, control_widget.block_height_spbox.value(), 0,
                              control_widget.block_height_spbox.value()))

                # (block length, block height)
                gcode.append("G01 X%.3f Y%.3f U%.3f Z%.3f\n" %
                             (control_widget.block_length_spbox.value(),
                              control_widget.block_height_spbox.value(),
                              control_widget.block_length_spbox.value(),
                              control_widget.block_height_spbox.value()))

                # (block length, 0)
                gcode.append("G01 X%.3f Y%.3f U%.3f Z%.3f\n" %
                             (control_widget.block_length_spbox.value(), 0,
                              control_widget.block_length_spbox.value(), 0))

                # (block length, block height)
                gcode.append("G01 X%.3f Y%.3f U%.3f Z%.3f\n" %
                             (control_widget.block_length_spbox.value(),
                              control_widget.block_height_spbox.value(),
                              control_widget.block_length_spbox.value(),
                              control_widget.block_height_spbox.value()))

                # (0, block height)
                gcode.append("G01 X%.3f Y%.3f U%.3f Z%.3f\n" %
                             (0, control_widget.block_height_spbox.value(), 0,
                              control_widget.block_height_spbox.value()))

                # (0, 0)
                gcode.append("G01 X%.3f Y%.3f U%.3f Z%.3f\n" % (0, 0, 0, 0))

            # Cut the wing profiles
            gcode.append("G01 X%.3f Y%.3f U%.3f Z%.3f\n" %
                         (self.af_right.start[0], self.af_right.start[1],
                          self.af_left.start[0], self.af_left.start[1]))

            for i in range(len(self.it_point_list_right[0])):
                gcode.append("G01 X%.3f Y%.3f U%.3f Z%.3f\n" %
                             (self.it_point_list_right[0][i],
                              self.it_point_list_right[1][i],
                              self.it_point_list_left[0][i],
                              self.it_point_list_left[1][i]))

            gcode.append("G01 X%.3f Y%.3f U%.3f Z%.3f\n" %
                         (self.af_right.end[0], self.af_right.end[1],
                          self.af_left.end[0], self.af_left.end[1]))

        return gcode