Example #1
0
void MeshWarpWidget::drawActiveCP(QPainter & painter)
{
  //QPen old_pen = painter.pen();
  //painter.setPen(old_pen);

  const Point p = m_mesh(m_active_cp_x, m_active_cp_y);
  painter.drawEllipse(p.x - (CONTROL_POINT_SIZE / 2), p.y - (CONTROL_POINT_SIZE / 2),
                      CONTROL_POINT_SIZE, CONTROL_POINT_SIZE);
}
Example #2
0
void MeshWarpWidget::paintEvent(QPaintEvent *event)
{
  m_transform = QTransform(m_scale, 0.0f, 0.0f, m_scale,
                           (width() - m_img.width()) * 0.5f + m_offset_x,
                           (height() - m_img.height()) * 0.5f + m_offset_y);

  QPainter painter(this);

  /*
   * The following 3 lines of code should enable Qt stylesheets for this widget
   * this code was inspired by qt's documentation.
   * see: http://developer.qt.nokia.com/doc/qt-4.8/stylesheet-reference.html
   */
  //QStyleOption opt;
  //opt.init(this);
  //style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);

  painter.fillRect(0, 0, width(), height(), QColor(0x20, 0x1F, 0x1F));

  painter.setTransform(m_transform);
  painter.drawImage(0, 0, m_img);

  //drawMesh(painter);

  painter.setCompositionMode(QPainter::RasterOp_SourceXorDestination);
  //painter.setCompositionMode(QPainter::RasterOp_SourceAndNotDestination);
  //painter.setCompositionMode(QPainter::CompositionMode_Xor);
  //painter.setCompositionMode(QPainter::CompositionMode_Lighten);
  //painter.setCompositionMode(QPainter::CompositionMode_Darken);
  //painter.setCompositionMode(QPainter::CompositionMode_ColorDodge);
  //painter.setCompositionMode(QPainter::CompositionMode_ColorBurn);
  //painter.setCompositionMode(QPainter::CompositionMode_Difference);
  //painter.setCompositionMode(QPainter::CompositionMode_SourceAtop);
  //painter.setCompositionMode(QPainter::CompositionMode_Screen);
  //painter.setCompositionMode(QPainter::CompositionMode_Overlay);
  //painter.setCompositionMode(QPainter::CompositionMode_Multiply);

  painter.drawImage(-(CONTROL_POINT_SIZE / 2), -(CONTROL_POINT_SIZE / 2), drawMesh());

  if (m_has_active_cp)
  {
    painter.setCompositionMode(QPainter::CompositionMode_SourceAtop);

    QPen pen;
    pen.setWidth(CONTROL_POINT_SIZE);
    pen.setColor(QColor(255, 153, 0, 255));
    //pen.setColor(QColor(185, 103, 0, 255));
    painter.setPen(pen);
    const Point p = m_mesh(m_active_cp_x, m_active_cp_y);
    painter.drawEllipse(p.x - (CONTROL_POINT_SIZE / 2), p.y - (CONTROL_POINT_SIZE / 2),
                        CONTROL_POINT_SIZE, CONTROL_POINT_SIZE);
  }

  return QWidget::paintEvent(event);
}
Example #3
0
void Demo() {
    const int nspins=2;
    const int nfreq=10;
    const double beta=5;

    // Construct the meshes:
    g::matsubara_positive_mesh m_mesh(beta, nfreq);
    g::momentum_index_mesh k_mesh(generate_momentum_mesh());
    g::index_mesh s_mesh(nspins);
    
    // construct a GF using a pre-defined convenience type
    g::omega_k_sigma_gf gf(m_mesh, k_mesh, s_mesh);
    // initialize a GF to all-zeros
    gf.initialize();

    // Make indices:
    g::matsubara_index omega;
    omega=4;
    g::momentum_index ii(2);
    g::index sigma(0);

    // Assign a GF element:
    gf(omega,ii,sigma)=std::complex<double>(3,4);

    // Density matrix as a double-valued GF
    // on momentum and integer-index space:
    typedef
        g::two_index_gf<double, g::momentum_index_mesh, g::index_mesh>
        density_matrix_type;
    
    // Construct the object:
    density_matrix_type denmat=density_matrix_type(k_mesh,s_mesh);

    // prepare diagonal matrix
    const double U=3.0;
    denmat.initialize();
    // loop over first mesh index:
    for (g::momentum_index i=g::momentum_index(0);
         i<denmat.mesh1().extent(); ++i) {
        denmat(i,g::index(0))=0.5*U;
        denmat(i,g::index(1))=0.5*U;
    }

    // construct a tailed GF using predefined convenience type:
    g::omega_k_sigma_gf_with_tail gft(gf); 
    gft.set_tail(0, denmat);              // set the tail

    density_matrix_type gftail=gft.tail(0); // retrieve the tail

    // access the tailed GF element
    std::complex<double> x=gft(omega,ii,sigma);
}
Example #4
0
QImage MeshWarpWidget::drawMesh(void)
{
  // create image and painter
  QImage mesh_img(m_img.width() + CONTROL_POINT_SIZE,
                  m_img.height() + CONTROL_POINT_SIZE,
                  QImage::Format_ARGB32);

  QPainter painter(&mesh_img);

  QTransform transform;
  transform.translate(CONTROL_POINT_SIZE / 2, CONTROL_POINT_SIZE / 2);
  painter.setTransform(transform);

  // create pen
  //QPen pen(QColor(255, 153, 0, 128));
  //QPen pen(QColor(255, 153, 0, 255));
  //QPen pen(QColor(255, 153, 0));

  QPen pen(QColor(255, 255, 255, 255));
  painter.setPen(pen);
  //painter.setCompositionMode(QPainter::CompositionMode_Source);

  int mesh_w = m_mesh.sizeX();
  int mesh_h = m_mesh.sizeY();

  // draw horizontal mesh lines
  for (int i = 0; i < mesh_h; ++i)
  {
    Point start = m_mesh(0, i);
    for (int j = 1; j < mesh_w; ++j)
    {
      Point end = m_mesh(j, i);
      painter.drawLine(start.x, start.y, end.x, end.y);
      start = end;
    }
  }

  // draw horizontal mesh lines
  for (int j = 0; j < mesh_w; ++j)
  {
    Point start = m_mesh(j, 0);
    for (int i = 1; i < mesh_h; ++i)
    {
      Point end = m_mesh(j, i);
      painter.drawLine(start.x, start.y, end.x, end.y);
      start = end;
    }
  }

  // draw control points them selves
  Point * __restrict__ p_points = m_mesh.data();
  int n = m_mesh.pointCount();

  //pen.setColor(QColor(205, 153, 0));
  //pen.setColor(QColor(205, 153, 0, 255));

  //pen.setColor(QColor(210, 210, 210, 255));
  pen.setColor(QColor(255, 255, 255, 255));
  pen.setWidth(CONTROL_POINT_SIZE);
  painter.setPen(pen);

  for (int i = 0; i < n; ++i)
  {
    painter.drawPoint(p_points->x, p_points->y);
    ++p_points;
  }

#if 0
  if (m_has_active_cp)
  {
    //pen.setColor(QColor(185, 103, 0, 255));

    pen.setColor(QColor(255, 153, 0, 255));
    painter.setPen(pen);
    const Point p = m_mesh(m_active_cp_x, m_active_cp_y);
    painter.drawEllipse(p.x - (CONTROL_POINT_SIZE / 2), p.y - (CONTROL_POINT_SIZE / 2),
                        CONTROL_POINT_SIZE, CONTROL_POINT_SIZE);
  }
#endif

  return mesh_img;
}
Example #5
0
void MeshWarpWidget::drawMesh(QPainter & painter)
{
  //QPen pen(QColor(Qt::red));
  //QPen pen(QColor(0xFF, 0xFF, 0xFF));
  //QPen pen(QColor(Qt::black));
  QPen pen(QColor(255, 153, 0));
  painter.setPen(pen);

  //painter.setCompositionMode(QPainter::RasterOp_SourceXorDestination);
  //painter.setCompositionMode(QPainter::RasterOp_SourceAndNotDestination);
  //painter.setCompositionMode(QPainter::CompositionMode_Xor);
  //painter.setCompositionMode(QPainter::CompositionMode_Lighten);
  //painter.setCompositionMode(QPainter::CompositionMode_ColorDodge);
  //painter.setCompositionMode(QPainter::CompositionMode_ColorBurn);
  //painter.setCompositionMode(QPainter::CompositionMode_Difference);
  //painter.setPen(QColor(0xFF,0xFF,0xFF));

  int mesh_w = m_mesh.sizeX();
  int mesh_h = m_mesh.sizeY();

  // draw horizontal mesh lines
  for (int i = 0; i < mesh_h; ++i)
  {
    Point start = m_mesh(0, i);
    for (int j = 1; j < mesh_w; ++j)
    {
      Point end = m_mesh(j, i);
      painter.drawLine(start.x, start.y, end.x, end.y);
      start = end;
    }
  }

  // draw horizontal mesh lines
  for (int j = 0; j < mesh_w; ++j)
  {
    Point start = m_mesh(j, 0);
    for (int i = 1; i < mesh_h; ++i)
    {
      Point end = m_mesh(j, i);
      painter.drawLine(start.x, start.y, end.x, end.y);
      start = end;
    }
  }

  // draw control points them selves
  Point * __restrict__ p_points = m_mesh.data();
  int n = m_mesh.pointCount();

  //QPen pen(painter.pen());
  pen = painter.pen();
  pen.setWidth(CONTROL_POINT_SIZE);
  painter.setPen(pen);

  for (int i = 0; i < n; ++i)
  {
    painter.drawPoint(p_points->x, p_points->y);
    ++p_points;
  }

  if (m_has_active_cp)
  {
    drawActiveCP(painter);
  }

  // TODO: mozno nastavit pero spat
}