/**
 * @brief Changes the default animation name of the sprite.
 * @param default_animation_name The new default animation name.
 */
void SpriteModel::set_default_animation_name(
    const QString& default_animation_name) {

  QString old_default_animation_name = get_default_animation_name();

  if (default_animation_name == old_default_animation_name) {
    return;
  }

  sprite.set_default_animation_name(default_animation_name.toStdString());

  emit default_animation_changed(
        old_default_animation_name, default_animation_name);

  // Notify data change
  Index old_index(old_default_animation_name);
  Index new_index(default_animation_name);

  if (animation_exists(old_index)) {
    QModelIndex model_index = get_model_index(old_index);
    emit dataChanged(model_index, model_index);
  }

  if (animation_exists(new_index)) {
    QModelIndex model_index = get_model_index(new_index);
    emit dataChanged(model_index, model_index);
  }
}
Esempio n. 2
0
void NetCdfConfigureDialog::reverseNorthSouth(double* data, size_t width, size_t height)
{
    double* cp_array = new double[width*height];

    for (size_t i=0; i<height; i++)
    {
        for (size_t j=0; j<width; j++)
        {
            size_t old_index((width*height)-(width*(i+1)));
            size_t new_index(width*i);
            cp_array[new_index+j] = data[old_index+j];
        }
    }

    size_t length(height*width);
    for (size_t i=0; i<length; i++)
        data[i] = cp_array[i];

    delete[] cp_array;
}
Esempio n. 3
0
ReedMullerSystematicCoder::ReedMullerSystematicCoder(int order, int length_power) :
  ReedMullerCoder(order, length_power),
  signal_permutation_(std::valarray<bool>(signal_length_ * signal_length_)),
  signal_inverse_permutation_(std::valarray<bool>(signal_length_ * signal_length_)),
  code_permutation_(std::valarray<bool>(code_length_ * code_length_)),
  code_inverse_permutation_(std::valarray<bool>(code_length_ * code_length_))
{
  // Finding the new order of columns from generator matrix making it triangular.
  // The value -1 means this element wasn't processed.
  std::vector<int> new_index(code_length_, -1);
  std::vector<int> old_index(code_length_, -1);
  for (int new_column = 0; new_column < signal_length_; ++new_column) {
    for (int old_column = 0; old_column < code_length_; ++old_column) {
      if (Weight(generator_[std::slice(new_column * code_length_ + old_column,
            signal_length_ - new_column, code_length_)]) == 1 &&
          Weight(generator_[std::slice((new_column + 1) * code_length_ + old_column,
            signal_length_ - new_column - 1, code_length_)]) == 0) {
        new_index[new_column] = old_column;
        old_index[old_column] = new_column;
        break;
      }
    }
  }

  // Permutation of columns from generator matrix
  for (int new_column = signal_length_; new_column < code_length_; ++new_column) {
    for (int old_column = 0; old_column < code_length_; ++old_column) {
      if (old_index[old_column] == -1) {
        new_index[new_column] = old_column;
        old_index[old_column] = new_column;
        break;
      }
    }
  }

  for (int row = 0; row < code_length_; ++row) {
    code_permutation_[row * code_length_ + old_index[row]] = 1;
    code_inverse_permutation_[row * code_length_ + new_index[row]] = 1;
  }

  for (int column = 0; column < signal_length_; ++column) {
    signal_inverse_permutation_[std::slice(column, signal_length_, signal_length_)] = generator_[std::slice(new_index[column], signal_length_, code_length_)];
  }

  // Filling signal_permutation_ by rows since source matrix have triangular form.
  // Product of signal_permutation_ and square submatrix of generator matrix with 
  // new order of columns must be the identity matrix.
  std::valarray<bool> permutation_row(signal_length_);
  std::valarray<bool> generator_column(signal_length_);
  int element_value = 0;
  for (int row = 0; row < signal_length_; ++row) {
    for (int column = 0; column < signal_length_; ++column) {
      permutation_row = signal_permutation_[std::slice(row * signal_length_, signal_length_, 1)];
      generator_column = generator_[std::slice(new_index[column], signal_length_, code_length_)];

      // Product of permutation row and generator column must be 1 on diagonal and 0 else.
      element_value = (Weight(permutation_row * generator_column) % 2) != (row == column);
      signal_permutation_[row * signal_length_ + column] = element_value;
    }
  }
}