Exemple #1
0
void Image::draw(QPainter* painter) const
      {
      bool emptyImage = false;
      if (imageType == ImageType::SVG) {
            if (!svgDoc)
                  emptyImage = true;
            else
                  svgDoc->render(painter, bbox());
            }
      else if (imageType == ImageType::RASTER) {
            if (rasterDoc == nullptr)
                  emptyImage = true;
            else {
                  painter->save();
                  QSizeF s;
                  if (_sizeIsSpatium)
                        s = _size * spatium();
                  else
                        s = _size * MScore::DPMM;
                  if (score()->printing()) {
                        // use original image size for printing
                        painter->scale(s.width() / rasterDoc->width(), s.height() / rasterDoc->height());
                        painter->drawPixmap(QPointF(0, 0), QPixmap::fromImage(*rasterDoc));
                        }
                  else {
                        QTransform t = painter->transform();
                        QSize ss = QSizeF(s.width() * t.m11(), s.height() * t.m22()).toSize();
                        t.setMatrix(1.0, t.m12(), t.m13(), t.m21(), 1.0, t.m23(), t.m31(), t.m32(), t.m33());
                        painter->setWorldTransform(t);
                        if ((buffer.size() != ss || _dirty) && rasterDoc && !rasterDoc->isNull()) {
                              buffer = QPixmap::fromImage(rasterDoc->scaled(ss, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
                              _dirty = false;
                              }
                        if (buffer.isNull())
                              emptyImage = true;
                        else
                              painter->drawPixmap(QPointF(0.0, 0.0), buffer);
                        }
                  painter->restore();
                  }
            }
      if (emptyImage) {
            painter->setBrush(Qt::NoBrush);
            painter->setPen(Qt::black);
            painter->drawRect(bbox());
            painter->drawLine(0.0, 0.0, bbox().width(), bbox().height());
            painter->drawLine(bbox().width(), 0.0, 0.0, bbox().height());
            }
      if (selected() && !(score() && score()->printing())) {
            painter->setBrush(Qt::NoBrush);
            painter->setPen(MScore::selectColor[0]);
            painter->drawRect(bbox());
            }
      }
Exemple #2
0
//-------------------------------------------------------------
void GDeviceQt::UnsetScale()
{
#if absoluteTransform1
	QTransform m = mQPainter->worldTransform();
	m.setMatrix (1 / mScaleX, m.m12(), m.m13(), m.m21(), 1 / mScaleY, m.m23(), m.m31(), m.m32(), m.m33()),
	mQPainter->setWorldTransform (m);
#elif absoluteTransform2
	float curxs = GetXScale();
	float curys = GetYScale();
	mQPainter->scale( mPrevScaleX / curxs, mPrevScaleY / curys);
#else
	mQPainter->scale(1 / mScaleX, 1 / mScaleY);
#endif
}
Exemple #3
0
void Cannon::SetRotation(qreal r)
{
    r /= 100;
    QTransform t;

    QVector2D a(30,-3);

    a.normalize();

    //t.setMatrix(cos(r), -sin(r), 0, sin(r) , cos(r), 0, 0, 0, 1);
    t.setMatrix(a.y(), a.x(), 0, -a.x() , a.y(), 0, 0, 0, 1);

    this->transformation = t;
}
Exemple #4
0
void RasterImage::draw(Painter*) const
{
#if 0
    QTransform t = p.worldTransform();
    QSize s      = QSizeF(sz.width() * t.m11(), sz.height() * t.m22()).toSize();
    t.setMatrix(1.0, t.m12(), t.m13(), t.m21(), 1.0, t.m23(), t.m31(), t.m32(), t.m33());
    p.setWorldTransform(t);
    if (buffer.size() != s || _dirty) {
        buffer = QPixmap::fromImage(doc.scaled(s, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
        _dirty = false;
    }
    Image::draw(p, v);
#endif
}
Exemple #5
0
//-------------------------------------------------------------
void GDeviceQt::SetScale( float x, float y )
{
    mScaleX = x;
    mScaleY = y;

#if absoluteTransform1
	QTransform m = mQPainter->worldTransform();
	m.setMatrix (x, m.m12(), m.m13(), m.m21(), y, m.m23(), m.m31(), m.m32(), m.m33()),
	mQPainter->setWorldTransform (m);
#elif absoluteTransform2
	float curxs = GetXScale();
	float curys = GetYScale();
	mQPainter->scale( x/curxs, y/curys);
#else
	mQPainter->scale(x, y);
#endif
}
Exemple #6
0
QTransform QOrientationHandler::getTransform( const ViewPortType &viewPort, const boost::shared_ptr< ImageHolder > image, PlaneOrientation orientation )
{
	const util::ivector4 mappedSize = QOrientationHandler::mapCoordsToOrientation( image->getImageSize(), image, orientation );
	const util::fvector4 flipVec = QOrientationHandler::mapCoordsToOrientation( util::fvector4( 1, 1, 1 ), image, orientation, false, false );
	const util::ivector4 mappedVoxelCoords = QOrientationHandler::mapCoordsToOrientation( image->voxelCoords, image, orientation );
	QTransform retTransform;
	retTransform.setMatrix( flipVec[0], 0, 0,
							0, flipVec[1], 0,
							0, 0, 1 );

	//calculate crosshair dependent translation
	retTransform.translate( flipVec[0] * viewPort[2], flipVec[1] * viewPort[3] );
	retTransform.scale( viewPort[0], viewPort[1] );
	retTransform.translate(  flipVec[0] < 0 ? -mappedSize[0] : 0, flipVec[1] < 0 ? -mappedSize[1] : 0 );

	return retTransform;

}
bool GraphicsUtils::loadTransform(const QDomElement & transformElement, QTransform & transform)
{
	if (transformElement.isNull()) return false;

	double m11 = transform.m11();
	double m12 = transform.m12();
	double m13 = transform.m13();
	double m21 = transform.m21();
	double m22 = transform.m22();
	double m23 = transform.m23();
	double m31 = transform.m31();
	double m32 = transform.m32();
	double m33 = transform.m33();
	bool ok;
	double temp;

	temp = transformElement.attribute("m11").toDouble(&ok);
	if (ok) m11 = temp;
	temp = transformElement.attribute("m12").toDouble(&ok);
	if (ok) m12 = temp;
	temp = transformElement.attribute("m13").toDouble(&ok);
	if (ok) m13 = temp;
	temp = transformElement.attribute("m21").toDouble(&ok);
	if (ok) m21 = temp;
	temp = transformElement.attribute("m22").toDouble(&ok);
	if (ok) m22 = temp;
	temp = transformElement.attribute("m23").toDouble(&ok);
	if (ok) m23 = temp;
	temp = transformElement.attribute("m31").toDouble(&ok);
	if (ok) m31 = temp;
	temp = transformElement.attribute("m32").toDouble(&ok);
	if (ok) m32 = temp;
	temp = transformElement.attribute("m33").toDouble(&ok);
	if (ok) m33 = temp;

	transform.setMatrix(m11, m12, m13, m21, m22, m23, m31, m32, m33);
	return true;
}
Exemple #8
0
void CWhiteBoardView::updateSize(const QSize &size)
{
    if(size.width() <= 0 && size.height() <= 0)
    {
        return;
    }
    QSize adjustSize = size;
    if(m_data->m_needScale)
    {
        QRectF sceneRect = m_data->m_baseRect;
        if(sceneRect.width() < 0.001 && sceneRect.height() < 0.001)
        {
            return;
        }

        qreal sx = size.width() /  sceneRect.width();
        qreal sy = size.height() /  sceneRect.height();
        QTransform form = this->transform();
        form.setMatrix(sx,form.m12(),form.m13(),form.m21(),sy,form.m23(),form.m31(),form.m32(),form.m33());
        this->setTransform(form);
        adjustSize = sceneRect.size().toSize();
    }
    else
    {
        QTransform form = this->transform();
        form.reset();
        this->setTransform(form);

        m_data->m_scene->setSceneRect(QRect(0,0,adjustSize.width(),adjustSize.height()));
    }
    if(m_data->m_backgroundColor.alpha() == 0)
    {
        m_data->m_backgroundColor.setAlpha(1);
    }
    QPixmap pixmap(adjustSize);
    pixmap.fill(m_data->m_backgroundColor);
    m_data->m_whiteBoardItem->setPixmap(pixmap);
}
bool PropertyMatrixModel::setData(const QModelIndex &index, const QVariant &data, int role)
{
  if (!index.isValid())
    return false;

  if (role != Qt::EditRole)
    return false;

  bool ok = false;
  float floatData = data.toFloat(&ok);

  if (!ok)
    return false;

  switch (m_matrix.type()) {
    case QVariant::Vector2D: {
      QVector2D value = m_matrix.value<QVector2D>();
      switch (index.row()) {
        case 0: value.setX(floatData); break;
        case 1: value.setY(floatData); break;
      }

      m_matrix = value;
      break;
    }

    case QVariant::Vector3D: {
      QVector3D value = m_matrix.value<QVector3D>();
      switch (index.row()) {
        case 0: value.setX(floatData); break;
        case 1: value.setY(floatData); break;
        case 2: value.setZ(floatData); break;
      }

      m_matrix = value;
      break;
    }

    case QVariant::Vector4D: {
      QVector4D value = m_matrix.value<QVector4D>();
      switch (index.row()) {
        case 0: value.setX(floatData); break;
        case 1: value.setY(floatData); break;
        case 2: value.setZ(floatData); break;
        case 3: value.setW(floatData); break;
      }

      m_matrix = value;
      break;
    }

#if QT_VERSION >= QT_VERSION_CHECK(5, 5, 0)
    case QVariant::Quaternion: {
      float pitch, yaw, roll;

      const QQuaternion value = m_matrix.value<QQuaternion>();
      value.getEulerAngles(&pitch, &yaw, &roll);
      switch (index.row()) {
        case 0: pitch = floatData; break;
        case 1: yaw = floatData; break;
        case 2: roll = floatData; break;
      }

      m_matrix = QQuaternion::fromEulerAngles(pitch, yaw, roll);
      break;
    }
#endif

    case QVariant::Matrix: {
      QMatrix value = m_matrix.value<QMatrix>();

      switch (index.row() << 4 | index.column()) {
        case 0x00: value.setMatrix(floatData, value.m12(), value.m21(), value.m22(), value.dx(), value.dy()); break;
        case 0x01: value.setMatrix(value.m11(), floatData, value.m21(), value.m22(), value.dx(), value.dy()); break;
        case 0x10: value.setMatrix(value.m11(), value.m12(), floatData, value.m22(), value.dx(), value.dy()); break;
        case 0x11: value.setMatrix(value.m11(), value.m12(), value.m21(), floatData, value.dx(), value.dy()); break;
        case 0x20: value.setMatrix(value.m11(), value.m12(), value.m21(), value.m22(), floatData, value.dy()); break;
        case 0x21: value.setMatrix(value.m11(), value.m12(), value.m21(), value.m22(), value.dx(), floatData); break;
      }

      m_matrix = value;
      break;
    }

    case QVariant::Transform: {
      QTransform value = m_matrix.value<QTransform>();

      switch (index.row() << 4 | index.column()) {
        case 0x00: value.setMatrix(floatData, value.m12(), value.m13(), value.m21(), value.m22(), value.m23(), value.m31(), value.m32(), value.m33()); break;
        case 0x01: value.setMatrix(value.m11(), floatData, value.m13(), value.m21(), value.m22(), value.m23(), value.m31(), value.m32(), value.m33()); break;
        case 0x02: value.setMatrix(value.m11(), value.m12(), floatData, value.m21(), value.m22(), value.m23(), value.m31(), value.m32(), value.m33()); break;
        case 0x10: value.setMatrix(value.m11(), value.m12(), value.m13(), floatData, value.m22(), value.m23(), value.m31(), value.m32(), value.m33()); break;
        case 0x11: value.setMatrix(value.m11(), value.m12(), value.m13(), value.m21(), floatData, value.m23(), value.m31(), value.m32(), value.m33()); break;
        case 0x12: value.setMatrix(value.m11(), value.m12(), value.m13(), value.m21(), value.m22(), floatData, value.m31(), value.m32(), value.m33()); break;
        case 0x20: value.setMatrix(value.m11(), value.m12(), value.m13(), value.m21(), value.m22(), value.m23(), floatData, value.m32(), value.m33()); break;
        case 0x21: value.setMatrix(value.m11(), value.m12(), value.m13(), value.m21(), value.m22(), value.m23(), value.m31(), floatData, value.m33()); break;
        case 0x22: value.setMatrix(value.m11(), value.m12(), value.m13(), value.m21(), value.m22(), value.m23(), value.m31(), value.m32(), floatData); break;
      }

      m_matrix = value;
      break;
    }

    case QVariant::Matrix4x4: {
      QMatrix4x4 value = m_matrix.value<QMatrix4x4>();

      value(index.row(), index.column()) = floatData;

      m_matrix = value;
      break;
    }
  }

  emit dataChanged(index, index);

  return true;
}
Exemple #10
0
void FieldPanel::updateScene() {
    if (refresh) {
        dash->ui->gView_field->hide();
        dash->ui->gView_field->show();
        refresh = false;
    }

    // Grid
    if (dash->ui->check_fieldGrid->isChecked()) {
        field->grid = true;
    }else{ field->grid = false; };
    if (dash->ui->combo_gridScale->currentText() == "200²") {
        field->gridScale = 100;
    } else if (dash->ui->combo_gridScale->currentText() == "500²") {
        field->gridScale = 250;
    } else if (dash->ui->combo_gridScale->currentText() == "1000²") {
        field->gridScale = 500; // 1000x1000 unit sectors
    }
    // Colored Goals
    if (dash->ui->check_coloredGoals->isChecked()) {
        field->coloredGoals = true;
    }else{ field->coloredGoals = false;};

    // Updating field/sideline colors
    sidelines->colorScheme = dash->ui->combo_fieldColor->currentText();
    field->colorScheme = dash->ui->combo_fieldColor->currentText();

    // updating the ball
        ball->setX(dash->objectPos->getBallCoordX());
        ball->setY(dash->objectPos->getBallCoordY());
        ball->setZValue(2);
        // Ball Scale
        if (dash->ui->combo_ballScale->currentText() == "100%"){
            ball->setScale(.3);
        } else if (dash->ui->combo_ballScale->currentText() == "120%"){
            ball->setScale(.5);
        } else if (dash->ui->combo_ballScale->currentText() == "150%"){
            ball->setScale(.8);
        }
        ball->color = dash->ui->combo_ballColor->currentText();

        // Tranformation matrix for robot ID labels
        QTransform flipLabel;
        flipLabel.setMatrix(1,0,0,0,-1,0,0,200,1);

        // Updating objects in scene
        for (int i=0; i<dash->teamSize; i++) {
            // Blue Team
            if (dash->gamemodel->find(i, dash->gamemodel->getMyTeam()) != NULL) {
                guiTeam[i]->setX(dash->objectPos->getBotCoordX(true, i));
                guiTeam[i]->setY(dash->objectPos->getBotCoordY(true, i));
                guiTeam[i]->setZValue(3);
                double angle = dash->objectPos->getBotOrientDouble(true, i) ;
                guiTeam[i]->setRotation(angle);
                // Action colors (may be better in the button slots)
                if (i != selectedBot) {
                    if (dash->gamemodel->find(i, dash->gamemodel->getMyTeam())->getDrible() ) {
                        guiTeam[i]->dribling = true;
                    } else { guiTeam[i]->dribling = false; }
                    if (dash->gamemodel->find(i, dash->gamemodel->getMyTeam())->getKick() == 1) {
                        guiTeam[i]->kicking = true;
                    } else { guiTeam[i]->kicking = false; }
                }
                // Robot Scale
                if (dash->ui->combo_botScale->currentText() == "100%") {
                    guiTeam[i]->setScale(1);
                } else if (dash->ui->combo_botScale->currentText() == "120%") {
                    guiTeam[i]->setScale(1.2);
                } else if (dash->ui->combo_botScale->currentText() == "150%") {
                    guiTeam[i]->setScale(1.5);
                }
                // labels
                guiLabels[i]->setTransform(flipLabel, false);
                guiLabels[i]->setRotation(currentFieldAngle);
                guiLabels[i]->setZValue(4);
                guiLabels[i]->setX(dash->objectPos->getBotCoordX(true,i));
                guiLabels[i]->setY(dash->objectPos->getBotCoordY(true,i));
                if (dash->ui->check_showIDs->isChecked()) {
                    guiLabels[i]->hidden = false;
                }else{
                    guiLabels[i]->hidden = true;
                }
                // drawLine TEST
//                drawLine(dash->getBotCoordX(true, 0),dash->getBotCoordY(true, 0), Movement::Move.pathQueue[i].x, Movement::Move.pathQueue[i].y );
//                dash->ui->gView_field->update();

            }
            // Yellow Team
            if (dash->gamemodel->find(i, dash->gamemodel->getOponentTeam()) != NULL) {
                guiTeamY[i]->setX(dash->objectPos->getBotCoordX(false, i));
                guiTeamY[i]->setY(dash->objectPos->getBotCoordY(false, i));
                guiTeamY[i]->setZValue(3);
                double angleY = dash->objectPos->getBotOrientDouble(false, i) ;
                guiTeamY[i]->setRotation(angleY);
                // Robot Scale
                if (dash->ui->combo_botScale->currentText() == "100%") {
                    guiTeamY[i]->setScale(1);
                } else if (dash->ui->combo_botScale->currentText() == "120%") {
                    guiTeamY[i]->setScale(1.2);
                } else if (dash->ui->combo_botScale->currentText() == "150%") {
                    guiTeamY[i]->setScale(1.5);
                }
                // labels
                guiLabelsY[i]->setTransform(flipLabel,false);
                guiLabelsY[i]->setRotation(currentFieldAngle);
                guiLabelsY[i]->setZValue(4);
                guiLabelsY[i]->setX(dash->objectPos->getBotCoordX(false,i));
                guiLabelsY[i]->setY(dash->objectPos->getBotCoordY(false,i));
                if (dash->ui->check_showIDs->isChecked()) {
                    guiLabelsY[i]->hidden = false;
                }else{
                    guiLabelsY[i]->hidden = true;
                }
            }
        }

    // Keeping camera centered
    centerViewOnBot();
    dash->ui->gView_field->update();

}
Exemple #11
0
void File_v2::loadCell(CrochetTab *tab, QXmlStreamReader *stream)
{

    Cell *c = new Cell();
    Stitch *s = 0;
    int row = -1, column = -1;
    int group = -1;
    QString bgColor, color;
    QPointF position(0.0,0.0);
    QPointF pivotPoint;
	unsigned int layer = 0;
	QPointF pivotScale, pivotRotation;
	qreal rotation = 0, scaleX = 1, scaleY = 1;
	qreal angle = 0.0;
    QPointF scale = QPointF(1.0,1.0);
    QTransform transform;
    qreal   m11 = 1, m12 = 0, m13 = 0,
            m21 = 0, m22 = 1, m23 = 0,
            m31 = 0, m32 = 0, m33 = 1;
			
    while(!(stream->isEndElement() && stream->name() == "cell")) {
        stream->readNext();
        QString tag = stream->name().toString();

        if(tag == "stitch") {
            QString st = stream->readElementText();
            s = StitchLibrary::inst()->findStitch(st, true);

        } else if(tag == "grid") {
            row = stream->attributes().value("row").toString().toDouble();
            column = stream->attributes().value("column").toString().toDouble();
            stream->readElementText();

        } else if(tag == "color") {
            color = stream->readElementText();

        } else if(tag == "bgColor") {
            bgColor = stream->readElementText();

        } else if(tag == "position") {
            position.rx() = stream->attributes().value("x").toString().toDouble();
            position.ry() = stream->attributes().value("y").toString().toDouble();
            stream->readElementText();

		} else if(tag == "angle") {
            angle = stream->readElementText().toDouble();

        } else if(tag == "scale") {
            scale.rx() = stream->attributes().value("x").toString().toDouble();
            scale.ry() = stream->attributes().value("y").toString().toDouble();
            stream->readElementText();


        } else if(tag == "pivotPoint") {
            pivotPoint.rx() = stream->attributes().value("x").toString().toDouble();
            pivotPoint.ry() = stream->attributes().value("y").toString().toDouble();
            stream->readElementText();

        } else if(tag == "group") {
            group = stream->readElementText().toInt();

        } else if (tag == "layer") {
			layer = stream->readElementText().toUInt();
			
		} else if(tag == "group") {
            group = stream->readElementText().toInt();

        } else if (tag == "newscale") {
			scaleX = stream->attributes().value("scaleX").toString().toDouble();
			scaleY = stream->attributes().value("scaleY").toString().toDouble();
			pivotScale.rx() = stream->attributes().value("pivotX").toString().toDouble();
			pivotScale.ry() = stream->attributes().value("pivotY").toString().toDouble();
			stream->readElementText();
			
		} else if (tag == "rotation") {
			rotation = stream->attributes().value("rotation").toString().toDouble();
			pivotRotation.rx() = stream->attributes().value("pivotX").toString().toDouble();
			pivotRotation.ry() = stream->attributes().value("pivotY").toString().toDouble();
			stream->readElementText();
		} else if(tag == "transformation") {
            m11 = stream->attributes().value("m11").toString().toDouble();
            m12 = stream->attributes().value("m12").toString().toDouble();
            m13 = stream->attributes().value("m13").toString().toDouble();
            m21 = stream->attributes().value("m21").toString().toDouble();
            m22 = stream->attributes().value("m22").toString().toDouble();
            m23 = stream->attributes().value("m23").toString().toDouble();
            m31 = stream->attributes().value("m31").toString().toDouble();
            m32 = stream->attributes().value("m32").toString().toDouble();
            m33 = stream->attributes().value("m33").toString().toDouble();
            stream->readElementText();
        } 
    }
	
	transform.setMatrix(m11, m12, m13, m21, m22, m23, m31, m32, m33);
	c->setLayer(layer);

    tab->scene()->addItem(c);

    if(row > -1 && column > -1) {
        c->setStitch(s);
        tab->scene()->grid[row].replace(column, c);
        c->setZValue(100);
    } else {
        c->setStitch(s);
        c->setZValue(10);
    }

    c->setTransform(transform);
    c->setRotation(angle);
    c->setPos(position);
    c->setBgColor(QColor(bgColor));
    c->setColor(QColor(color));
    c->setTransformOriginPoint(pivotPoint);
	
	ChartItemTools::setRotation(c, rotation);
	ChartItemTools::setScaleX(c, scaleX);
	ChartItemTools::setScaleY(c, scaleY);
	ChartItemTools::setRotationPivot(c, pivotRotation, false);
	ChartItemTools::setScalePivot(c, pivotScale, false);
	ChartItemTools::recalculateTransformations(c);
    if(group != -1) {
        tab->scene()->addToGroup(group, c);
		tab->scene()->getGroup(group)->setLayer(layer);
	}
}
Exemple #12
0
void File_v2::loadChartImage(CrochetTab* tab, QXmlStreamReader* stream)
{
    int group = -1;
    QPointF position(0.0,0.0);
    QPointF pivotPoint;
	QPointF pivotScale, pivotRotation;
	qreal rotation = 0, scaleX = 1, scaleY = 1;
	 QPointF scale = QPointF(1.0,1.0);
	unsigned int layer = 0;
    QTransform transform;
	qreal angle = 0.0;
    qreal   m11 = 1, m12 = 0, m13 = 0,
            m21 = 0, m22 = 1, m23 = 0,
            m31 = 0, m32 = 0, m33 = 1;
	QString filename;

    while(!(stream->isEndElement() && stream->name() == "chartimage")) {
        stream->readNext();
        QString tag = stream->name().toString();
		
		if(tag == "position") {
            position.rx() = stream->attributes().value("x").toString().toDouble();
            position.ry() = stream->attributes().value("y").toString().toDouble();
            stream->readElementText();

        } else if(tag == "angle") {
            angle = stream->readElementText().toDouble();
			
		} else if(tag == "scale") {
            scale.rx() = stream->attributes().value("x").toString().toDouble();
            scale.ry() = stream->attributes().value("y").toString().toDouble();
            stream->readElementText();
			
        } else if (tag == "newscale") {
			scaleX = stream->attributes().value("scaleX").toString().toDouble();
			scaleY = stream->attributes().value("scaleY").toString().toDouble();
			pivotScale.rx() = stream->attributes().value("pivotX").toString().toDouble();
			pivotScale.ry() = stream->attributes().value("pivotY").toString().toDouble();
			stream->readElementText();
			
		} else if (tag == "rotation") {
			rotation = stream->attributes().value("rotation").toString().toDouble();
			pivotRotation.rx() = stream->attributes().value("pivotX").toString().toDouble();
			pivotRotation.ry() = stream->attributes().value("pivotY").toString().toDouble();
			stream->readElementText();
			
		} else if(tag == "pivotPoint") {
            pivotPoint.rx() = stream->attributes().value("x").toString().toDouble();
            pivotPoint.ry() = stream->attributes().value("y").toString().toDouble();
            stream->readElementText();

        } else if(tag == "group") {
            group = stream->readElementText().toInt();

        } else if (tag == "layer") {
			layer = stream->readElementText().toUInt();
		} else if (tag == "filename") {
			filename = stream->readElementText();
		}  else if(tag == "transformation") {
            m11 = stream->attributes().value("m11").toString().toDouble();
            m12 = stream->attributes().value("m12").toString().toDouble();
            m13 = stream->attributes().value("m13").toString().toDouble();
            m21 = stream->attributes().value("m21").toString().toDouble();
            m22 = stream->attributes().value("m22").toString().toDouble();
            m23 = stream->attributes().value("m23").toString().toDouble();
            m31 = stream->attributes().value("m31").toString().toDouble();
            m32 = stream->attributes().value("m32").toString().toDouble();
            m33 = stream->attributes().value("m33").toString().toDouble();
            stream->readElementText();
		}
    }
    ChartImage *c = new ChartImage(filename);
	

    tab->scene()->addItem(c);

	transform.setMatrix(m11, m12, m13, m21, m22, m23, m31, m32, m33);
	c->setTransform(transform);
	c->setLayer(layer);
    c->setZValue(10);
	c->setPos(position);
    c->setTransformOriginPoint(pivotPoint);
    c->setRotation(angle);
	
	ChartItemTools::setRotation(c, rotation);
	ChartItemTools::setScaleX(c, scaleX);
	ChartItemTools::setScaleY(c, scaleY);
	ChartItemTools::setRotationPivot(c, pivotRotation, false);
	ChartItemTools::setScalePivot(c, pivotScale, false);
	ChartItemTools::recalculateTransformations(c);
    if(group != -1) {
        tab->scene()->addToGroup(group, c);
		tab->scene()->getGroup(group)->setLayer(layer);
	}
}
Exemple #13
0
void File_v2::loadIndicator(CrochetTab *tab, QXmlStreamReader *stream)
{
    Indicator *i = new Indicator();

    qreal x = 0, y = 0;
	bool fontused = false;
	int fontsize;
    QString textColor, bgColor, fontname;
    QString text, style;
	QPointF pivotScale, pivotRotation;
	QTransform transform;
    qreal   m11 = 1, m12 = 0, m13 = 0,
            m21 = 0, m22 = 1, m23 = 0,
            m31 = 0, m32 = 0, m33 = 1;
			
	qreal rotation = 0, scaleX = 1, scaleY = 1;
    int group = -1;
	unsigned int layer = 0;
    while(!(stream->isEndElement() && stream->name() == "indicator")) {
        stream->readNext();
        QString tag = stream->name().toString();

        if(tag == "x") {
            x = stream->readElementText().toDouble();
        } else if(tag == "y") {
            y = stream->readElementText().toDouble();
        } else if(tag == "text") {
            text = stream->readElementText();
			//the text might be html formatted in old saves, so we need to strip it. A regex could work,
			//but is hard to make performant with inline css, and wouldn't work well with text that has
			//brackets in it.
			QTextDocument doc;
			doc.setHtml( text );
			text = doc.toPlainText();
        } else if(tag == "textColor") {
            textColor = stream->readElementText();
        } else if(tag == "bgColor") {
            bgColor = stream->readElementText();
        } else if(tag == "style") {
            style = stream->readElementText();
        } else if(tag == "group") {
            group = stream->readElementText().toInt();
        } else if (tag == "fontname") {
			fontname = stream->readElementText();
			fontused = true;
		} else if (tag == "fontsize") {
			fontsize = stream->readElementText().toInt();
			fontused = true;
		} else if (tag == "layer") {
			layer = stream->readElementText().toUInt();
			
		} else if (tag == "newscale") {
			scaleX = stream->attributes().value("scaleX").toString().toDouble();
			scaleY = stream->attributes().value("scaleY").toString().toDouble();
			pivotScale.rx() = stream->attributes().value("pivotX").toString().toDouble();
			pivotScale.ry() = stream->attributes().value("pivotY").toString().toDouble();
			stream->readElementText();
			
		} else if (tag == "rotation") {
			rotation = stream->attributes().value("rotation").toString().toDouble();
			pivotRotation.rx() = stream->attributes().value("pivotX").toString().toDouble();
			pivotRotation.ry() = stream->attributes().value("pivotY").toString().toDouble();
			stream->readElementText();
			
		}  else if(tag == "transformation") {
            m11 = stream->attributes().value("m11").toString().toDouble();
            m12 = stream->attributes().value("m12").toString().toDouble();
            m13 = stream->attributes().value("m13").toString().toDouble();
            m21 = stream->attributes().value("m21").toString().toDouble();
            m22 = stream->attributes().value("m22").toString().toDouble();
            m23 = stream->attributes().value("m23").toString().toDouble();
            m31 = stream->attributes().value("m31").toString().toDouble();
            m32 = stream->attributes().value("m32").toString().toDouble();
            m33 = stream->attributes().value("m33").toString().toDouble();
            stream->readElementText();
        } 
    }
	DEBUG("Style is: ");
	DEBUG(style);
	transform.setMatrix(m11, m12, m13, m21, m22, m23, m31, m32, m33);
    tab->scene()->addItem(i);
    i->setTransform(transform);
	ChartItemTools::setRotation(i, rotation);
	ChartItemTools::setScaleX(i, scaleX);
	ChartItemTools::setScaleY(i, scaleY);
	ChartItemTools::setRotationPivot(i, pivotRotation, false);
	ChartItemTools::setScalePivot(i, pivotScale, false);
    i->setPos(x,y);
	i->setText(text);
	qDebug() << "loading text " << text;
    i->setTextColor(textColor);
    i->setBgColor(bgColor);
	i->setLayer(layer);
	if (fontused)
		i->setFont(QFont(fontname, fontsize));
	
	ChartItemTools::recalculateTransformations(i);
	
    //i->setTextInteractionFlags(Qt::TextEditorInteraction);

    if(style.isEmpty())
        style = Settings::inst()->value("chartRowIndicator").toString();
    i->setStyle(style);

    if(group != -1) {
        tab->scene()->addToGroup(group, i);
		tab->scene()->getGroup(group)->setLayer(layer);
	}
}
void
ImageViewController::imageAndGridDoneSlot(
    QImage image,
    Carta::Lib::VectorGraphics::VGList gridVG,
    Carta::Lib::VectorGraphics::VGList contourVG,
    ServiceSync::JobId /*jobId*/ )
{
    /// \todo we should make sure the jobId matches the last submitted job, otherwise
    /// we are wasting CPU rendering old job...

//    qDebug() << "imageAndGridDoneSlot" << jobId << "xyz";
    m_renderBuffer = image;

    // draw the grid over top
    QTime t;
    t.restart();
    QPainter painter( & m_renderBuffer );
    painter.setRenderHint( QPainter::Antialiasing, true );
    Carta::Lib::VectorGraphics::VGListQPainterRenderer vgRenderer;
    if ( ! vgRenderer.render( gridVG, painter ) ) {
        qWarning() << "could not render grid vector graphics";
    }
    qDebug() << "Grid VG rendered in" << t.elapsed() / 1000.0 << "sec" << "xyz";

    t.restart();
    {
        QPen lineColor( QColor( "red" ), 1 );
        lineColor.setCosmetic( true );
        painter.setPen( lineColor );

        // where does 0.5, 0.5 map to?
        QPointF p1 = m_renderService-> img2screen( { 0.5, 0.5 }
                                                   );

        // where does 1.5, 1.5 map to?
        QPointF p2 = m_renderService-> img2screen( { 1.5, 1.5 }
                                                   );
        QTransform tf;
        double m11 = p2.x() - p1.x();
        double m22 = p2.y() - p1.y();
        double m33 = 1; // no projection
        double m13 = 0; // no projection
        double m23 = 0; // no projection
        double m12 = 0; // no shearing
        double m21 = 0; // no shearing
        double m31 = p1.x() - m11 * 0.5;
        double m32 = p1.y() - m22 * 0.5;
        tf.setMatrix( m11, m12, m13, m21, m22, m23, m31, m32, m33 );
        painter.setTransform( tf );
    }
    if ( ! vgRenderer.render( contourVG, painter ) ) {
        qWarning() << "could not render contour vector graphics";
    }
    qDebug() << "Contour VG rendered in" << t.elapsed() / 1000.0 << "sec" << "xyz";

//    // paint contours
//    QPen lineColor( QColor( "red" ), 1 );
//    lineColor.setCosmetic( true );
//    painter.setPen( lineColor );

//    // where does 0.5, 0.5 map to?
//    QPointF p1 = m_renderService-> img2screen( { 0.5, 0.5 }
//                                               );

//    // where does 1.5, 1.5 map to?
//    QPointF p2 = m_renderService-> img2screen( { 1.5, 1.5 }
//                                               );
//    QTransform tf;
//    double m11 = p2.x() - p1.x();
//    double m22 = p2.y() - p1.y();
//    double m33 = 1; // no projection
//    double m13 = 0; // no projection
//    double m23 = 0; // no projection
//    double m12 = 0; // no shearing
//    double m21 = 0; // no shearing
//    double m31 = p1.x() - m11 * 0.5;
//    double m32 = p1.y() - m22 * 0.5;
//    tf.setMatrix( m11, m12, m13, m21, m22, m23, m31, m32, m33 );
//    painter.setTransform( tf );

//    for ( size_t k = 0 ; k < m_contours.size() ; ++k ) {
//        std::vector < QPolygonF > con = m_contours[k];
//        for ( size_t i = 0 ; i < con.size() ; ++i ) {
//            QPolygonF & poly = con[i];
//            painter.drawPolyline( poly );
//        }
//    }

    // schedule a repaint with the connector
    m_connector-> refreshView( this );
} // imageAndGridDoneSlot