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); }
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); }
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); }
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; }
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 }