Exemplo n.º 1
0
void StitcherView::drawConstraintFit(geometrically_constrained_system *gc){
  for(int i = 0;i<gc->n_constraints;i++){
    GeometryConstraintType type = gc->constraints[i].type;
    double fit = gc->constraints[i].best_fit;    
    if(type == RadialLineConstraint){
      qreal x1,x2,y1,y2;
      qreal scale = 10000;
      x1 = cos(fit)*scale;

      y1 = sin(fit)*scale;
      x2 = -x1;
      y2 = -y1;
      QGraphicsLineItem * item = new QGraphicsLineItem(x1,y1,x2,y2);
      QPen p = item->pen();
      p.setStyle(Qt::DashLine);
      QVector<qreal> dashes;
      dashes << 25 << 15;
      p.setDashPattern(dashes);
      p.setColor(Qt::white);
      item->setPen(p);
      item->setZValue(10000);
      scene()->addItem(item);
      constraintFit.append(item);
    }else if(type == CircleConstraint){
      double radius = fit;
      QGraphicsEllipseItem * item = new QGraphicsEllipseItem(-radius,-radius,2*radius,2*radius);
      QPen p = item->pen();
      p.setStyle(Qt::DashLine);
      QVector<qreal> dashes;
      dashes << 25 << 15;
      p.setDashPattern(dashes);
      p.setColor(Qt::white);
      item->setPen(p);
      item->setZValue(10000);
      scene()->addItem(item);
      constraintFit.append(item);
    }
    sp_vector ** cp_g = control_point_list_to_global(gc->constraints[i].points,gc->constraints[i].n_points);
    QColor color = QColor::fromHsvF(1.0/3+(double)i/gc->n_constraints,1,1,1);
    for(int j = 0;j<gc->constraints[i].n_points;j++){
      QGraphicsEllipseItem * point = new QGraphicsEllipseItem(-4,-4,8,8);
      point->setZValue(10001);
      point->setPos(sp_vector_get(cp_g[j],0),sp_vector_get(cp_g[j],1));
      point->setPen(QPen(color, 2));
      point->setFlags(point->flags() | QGraphicsItem::ItemIgnoresTransformations);
      scene()->addItem(point);
      constraintFit.append(point);
    }
  }
}
static QGraphicsEllipseItem* createPointItem() {
    QGraphicsEllipseItem* item = new QGraphicsEllipseItem(-pointRadius, -pointRadius, 2.0 * pointRadius, 2.0 * pointRadius);
    item->setBrush(pointBrush);
    item->setPen(pointPen);
    item->setZValue(1);
    return item;
}
void PSV_CircularIndicatorItem::drawColorPie(int zValue)
{
    double colorCircleRadius = m_colorCircleRadiusRatio * m_outerRadius;
    QPointF topLeftPot(m_rect.center().x()-colorCircleRadius, m_rect.center().y()-colorCircleRadius);
    QPointF bottomRightPot(m_rect.center().x()+colorCircleRadius, m_rect.center().y()+colorCircleRadius);
    QRectF colorCircleRect=QRectF(topLeftPot, bottomRightPot);


    QMapIterator<double,QColor> iter(m_levelInfos);

    int startAngle = 225 * 16;
    double dValue = m_max -m_min;
    if(qAbs(dValue) < PSV_ZEOR)
    {
        dValue = 100;
        m_max = 100;
        m_min = 0;
    }
    int spanAngle = 0;
    int topAngle = 0;
    while(iter.hasNext())
    {
        iter.next();
        spanAngle = (int)(16 * 270 * iter.key()) - topAngle;
        topAngle += spanAngle;
        QGraphicsEllipseItem* item = new QGraphicsEllipseItem(this);
        item->setRect(colorCircleRect);
        item->setStartAngle(startAngle - spanAngle);
        item->setSpanAngle(spanAngle);
        item->setPen(QPen(Qt::NoPen));
        item->setBrush(QBrush(iter.value()));
        item->setZValue(zValue);
        startAngle = startAngle - spanAngle;
    }
}
Exemplo n.º 4
0
void QGraphicsGuideView::pathEndEvent(QMouseEvent *event) {
    cout << "Drawing Path (Before Simplification): " << _drawingPath.elementCount() << endl;
//    simplifyPainterPath();
    if (_pathMode == FillMode) {
        QPainter painter(&_userDrawingCanvas);
        painter.setRenderHints(0);
        painter.setBrush(QBrush(Qt::yellow,Qt::SolidPattern));
        painter.setPen(Qt::NoPen);
        painter.drawPath(_drawingPath);
        painter.end();

        this->scene()->removeItem(_drawingPathItem);
        _drawingPathItem = NULL;
        _updateRect = _drawingPath.boundingRect();
        userDrawingToSlice();
        sliceToLabelImage(true);
        updateLabelItem();
        sliceToVolume(true);
    } else {
        simplifyPainterPath();
        cout << "Drawing Path (After Simplification): " << _drawingPath.elementCount() << endl;
        for (int i = 0; i < _drawingPath.elementCount(); i++) {
            QPainterPath::Element e = _drawingPath.elementAt(i);
            QGraphicsEllipseItem* el = new QGraphicsEllipseItem(e.x-2,e.y-2,5,5,_drawingPathItem);
            el->setBrush(QBrush(0xFFFFBBDD, Qt::SolidPattern));
            el->setOpacity(1);
            el->setZValue(2);
        }
    }
}
Exemplo n.º 5
0
TmoodView::TmoodView(QWidget *parent) :
  QGraphicsView(parent)
{
  setScene(new QGraphicsScene(this));
  setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
	setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
  setFrameShape(QFrame::NoFrame);
  setStyleSheet("background-color: transparent");
  
  QPen commonPen(Qt::darkRed, 5, Qt::SolidLine, Qt::RoundCap);
  
  QGraphicsEllipseItem *face = scene()->addEllipse(0, 0, 400, 400, commonPen, QBrush(Qt::yellow));
  face->setZValue(1);
  face->setGraphicsEffect(new QGraphicsDropShadowEffect);
  
  QGraphicsEllipseItem *eye1 = scene()->addEllipse(100, 100, 20, 20, commonPen);
  eye1->setZValue(2);
  
  QGraphicsEllipseItem *eye2 = scene()->addEllipse(280, 100, 20, 20, commonPen);
  eye2->setZValue(2);
  
  QPainterPath path;
  path.moveTo(200, 150);
  path.cubicTo(180, 250, 200, 250, 200, 200);
  QGraphicsPathItem *nose = scene()->addPath(path, commonPen);
  nose->setZValue(2);
  
  
  m_mood = new QGraphicsPathItem();
  scene()->addItem(m_mood);
  m_mood->setPen(commonPen);
  m_mood->setZValue(3);
  setMood(1.0);
}
Exemplo n.º 6
0
void QGraphicsVolumeView::addWorkingSetItem(QGraphicsItem *sliceItem) {
    const static int markerSize = 9;
    QRectF rect = sliceItem->boundingRect();
    QRectF ellipse = QRectF(rect.width() - markerSize - 3, 3, markerSize, markerSize);
    QGraphicsEllipseItem* rectItem = new QGraphicsEllipseItem(ellipse, sliceItem);
    rectItem->setZValue(1);
    rectItem->setPen(QPen(Qt::green, 3));
    rectItem->setData(AnnotationType, QVariant(WorkingSet));
}
void PSV_CircularIndicatorItem::drawCoverCircle(int zValue)
{
    double coverCircleRadius = m_coverCircleRadiusRatio * m_outerRadius;
    QRectF rect(m_rect.center().x()-coverCircleRadius, m_rect.center().y()-coverCircleRadius, coverCircleRadius*2, coverCircleRadius*2);
    QGraphicsEllipseItem* item = new QGraphicsEllipseItem(rect, this);
    item->setPen(QPen(Qt::NoPen));
    item->setBrush(QBrush(QColor(130, 130, 130)));
    item->setZValue(zValue);
}
Exemplo n.º 8
0
GameBoardScene::GameBoardScene(int newWidth, int newHeight, QObject *parent) : QGraphicsScene(parent), width(newWidth), height(newHeight), acceptEvents(true)
{
	//kDebug() << "GameBoardScene::GameBoardScene()";
	
	for(int i = 0; i < (2*width*height + width + height); i++)
	{
		lineList.append(false);	//simply fill array with 'false's
	}
	
	spacing = 40;	//this hard coding doesn't matter since auto-resizing exists :)
	for(int iWidth = 0; iWidth <= width; iWidth++)
	{
		for(int iHeight = 0; iHeight <= height; iHeight++)
		{
			int x = iWidth*spacing;
			int y = iHeight*spacing;
			QGraphicsEllipseItem *dot = new QGraphicsEllipseItem(QRectF(-2,-2,4,4));
			dot->moveBy(x,y);
			dot->setBrush(Qt::SolidPattern);
			dot->setZValue(20);	// set the elevation, the dot's are on top
			addItem(dot);
		}
	}
	QPen feintPen(Qt::DotLine);	//for the guidelines between dots
	feintPen.setWidth(1);
	feintPen.setColor(Qt::lightGray);
	for(int iWidth = 0; iWidth <= width; iWidth++)
	{
		addLine(QLineF(spacing*iWidth, 0, spacing*iWidth, spacing*height), feintPen);
	}
	for(int iHeight = 0; iHeight <= height; iHeight++)
	{
		addLine(QLineF(0, spacing*iHeight, spacing*width, spacing*iHeight), feintPen);
	}
	
	setBackgroundBrush(QBrush(Qt::white));
	
	indicatorLine = new QGraphicsLineItem(1,1,1,1);
	indicatorLine->setZValue(10);
	indicatorLine->setPen(QPen(Qt::yellow, 2.5));
	indicatorLine->hide();
	addItem(indicatorLine);
	
	QGraphicsEllipseItem tempItem;
	QGraphicsEllipseItemType = tempItem.type();
	
	qreal border = 10;
	QRectF rect = sceneRect();
	rect.setLeft(rect.left() - border);
	rect.setRight(rect.right() + border);
	rect.setTop(rect.top() - border);
	rect.setBottom(rect.bottom() + border);
	setSceneRect(rect);
}
void CSharedPainterScene::drawLineStart( const QPointF &pt, const QColor &clr, int width )
{
	double x = pt.x() - (double(width) / 2.f);
	double y = pt.y() - (double(width) / 2.f);
	QRectF rect( x, y, width, width);

	QGraphicsEllipseItem *item = addEllipse( rect, QPen(clr, 1), QBrush(clr) );
	item->setZValue( currentZValue() );

	tempLineItemList_.push_back( item );
}
Exemplo n.º 10
0
void PSV_CircularIndicatorItem::drawCoverBall(int zValue)
{
    qreal ballRadius=m_outerRadius * m_coverBallRadiusRatio;
    QRadialGradient ballGradient(m_rect.center(), ballRadius, m_rect.center());
    ballGradient.setColorAt(0.0, QColor(140, 140, 140));
    ballGradient.setColorAt(0.7, QColor(140, 140, 140));
    ballGradient.setColorAt(1.0, QColor(60, 60, 60));
    //==================
    QRectF rect(m_rect.center().x()-ballRadius, m_rect.center().y()-ballRadius, ballRadius*2, ballRadius*2);
    QGraphicsEllipseItem* item = new QGraphicsEllipseItem(rect, this);
    item->setPen(QPen(Qt::NoPen));
    item->setBrush(ballGradient);
    item->setZValue(zValue);
}
Exemplo n.º 11
0
void HostItem::createJobHalo(const Job &job)
{
    QGraphicsEllipseItem *halo = new QGraphicsEllipseItem(
        centerPosX(), centerPosY(), m_baseWidth, m_baseHeight,
        this, scene());

    halo->setZValue(70 - m_jobHalos.size());
    halo->setPen(QPen(Qt::NoPen));
    halo->show();

    m_jobHalos.insert(job, halo);

    updateHalos();
}
Exemplo n.º 12
0
void PSV_CircularIndicatorItem::drawInnerCircle(int zValue)
{
    qreal innerRadius = m_innerRadiusRatio * m_outerRadius;
    QRadialGradient innerGradient(m_rect.center(), innerRadius, m_rect.center());
    innerGradient.setColorAt(0.0, QColor(130, 130, 130));
    innerGradient.setColorAt(0.7, QColor(130, 130, 130));
    innerGradient.setColorAt(1.0, QColor(80, 80, 80));
    //==
    QPen pen(Qt::NoPen);
    QRectF rect(m_rect.center().x()-innerRadius, m_rect.center().y()-innerRadius, innerRadius*2, innerRadius*2);
    QGraphicsEllipseItem* item = new QGraphicsEllipseItem(rect, this);
    item->setPen(pen);
    item->setBrush(innerGradient);
    item->setZValue(zValue);
}
Exemplo n.º 13
0
// draws the cv points
void CCurveScene::drawPoints()
{
    while (_circleObjects.size()) {
        delete _circleObjects[0];
        _circleObjects.erase(_circleObjects.begin());
    }
    const int numCV = _cvs.size();
    for (int i = 0; i < numCV; i++) {
        const T_CURVE::CV& pt = _cvs[i];
        QPen pen;
        if (i == _selectedItem) {
            pen = QPen(QColor(255,170,0),1.0);
        } else {
            pen = QPen(Qt::black,1.0);
        }
        _circleObjects.push_back(addEllipse(pt._pos*_width-4, _height+3, 8, 8, pen, QBrush(QColor(int(255 * pt._val[0] +0.5), int(255 * pt._val[1] + 0.5), int(255 * pt._val[2] + 0.5)))));
        QGraphicsEllipseItem *circle = _circleObjects.back();
        circle->setFlag(QGraphicsItem::ItemIsMovable, true);
        circle->setZValue(2);
    }
}
Exemplo n.º 14
0
void PSV_CircularIndicatorItem::drawOuterCircle(int zValue)
{
    QRadialGradient outerGradient(m_rect.center(), m_outerRadius, m_rect.center());
    outerGradient.setColorAt(0.0, QColor(200, 200, 200));
    outerGradient.setColorAt(0.9, QColor(80, 80, 80));
    outerGradient.setColorAt(0.95, QColor(180, 180, 180));
    outerGradient.setColorAt(1.0, QColor(80, 80, 80));
    //==========================
    QPen pen(Qt::NoPen);
    QGraphicsEllipseItem* item = new QGraphicsEllipseItem(this);
    item->setRect(m_rect.center().x() - m_outerRadius, m_rect.center().y() - m_outerRadius, m_outerRadius*2, m_outerRadius*2);
    item->setPen(pen);
    item->setBrush(outerGradient);
    item->setZValue(zValue);
    {//TEST

        QGraphicsRectItem *item = new QGraphicsRectItem(m_rect, this);
        item->setPen(QPen(Qt::blue));
        //        item->setPen();
    }
}
Exemplo n.º 15
0
void GalaGV::setMomentPos(QString index)
{
    qDebug() << Q_FUNC_INFO ;
    mData->momentPos.first =index;

    QGraphicsEllipseItem *item = mData->systeme.value(mData->gala).value(mData->momentPos.first);

    if(item != NULL){
        QGraphicsEllipseItem *newItem = makeMarkerItem(item->data(Cords).toString(),mData->momentPos.first,Moment,QColor("#00D0F0"),Mark);
        qDebug() << mData->momentPos.second;
        newItem->setZValue(2);
        scene()->addItem(newItem);
        ensureVisible(newItem);
        mSecondView->ensureVisible(newItem);

        if(mData->momentPos.second != NULL)
            delete mData->momentPos.second;
        mData->momentPos.second = newItem;

        calcNearSys(newItem->data(Cords).toString());
    }


}
Exemplo n.º 16
0
void GraphViewer::onSceneMousePress(QGraphicsSceneMouseEvent *mouseEvent)
{
    if (_vertices.isEmpty())
        _initialText->setVisible(false);

    if (_scene.items(QRectF(
                mouseEvent->scenePos().x() - VERTEX_SIZE*0.5,
                mouseEvent->scenePos().y() - VERTEX_SIZE*0.5,
                VERTEX_SIZE,
                VERTEX_SIZE)
                ).isEmpty())
    {
        // Create new vertex
        QGraphicsEllipseItem * vertex = _scene.addEllipse(
                    QRectF(-VERTEX_SIZE*0.5, -VERTEX_SIZE*0.5, VERTEX_SIZE, VERTEX_SIZE),
                    QPen(Qt::black, 0),
                    QBrush(Qt::white)
                    );
        vertex->setTransform(
                    QTransform::fromTranslate(mouseEvent->scenePos().x(), mouseEvent->scenePos().y())
                    );
        vertex->setZValue(VERTEX_CIRCLE_Z);
        _vertices << vertex;
        int id = _vertices.size()-1;
        vertex->setData(KEY_VERTEX_ID, id);
        QGraphicsSimpleTextItem * vertexId = _scene.addSimpleText(QString("%1").arg(id+1));
        vertexId->setParentItem(vertex);
        vertexId->setTransform(
                    QTransform::fromScale(0.005, 0.005)
                    * QTransform::fromTranslate(-VERTEX_SIZE*( (id < 9) ? 0.18 : 0.28 ), -VERTEX_SIZE*0.35)
                    );
        vertexId->setZValue(VERTEX_TEXT_Z);

    }
    else
    {
        // Propose to draw new edge
        QGraphicsItem * item = _scene.itemAt(mouseEvent->scenePos(), QTransform());
        if (qgraphicsitem_cast<QGraphicsEllipseItem*>(item)
                || qgraphicsitem_cast<QGraphicsSimpleTextItem*>(item))
        {
            QGraphicsEllipseItem* vertex = qgraphicsitem_cast<QGraphicsEllipseItem*>(item->parentItem());
            if (!vertex)
                vertex = qgraphicsitem_cast<QGraphicsEllipseItem*>(item);

            if (vertex)
            {
                _isDrawingEdge=true;
                _drawingEdge = _scene.addLine(0.0,
                                              0.0,
                                              mouseEvent->scenePos().x()-vertex->scenePos().x(),
                                              mouseEvent->scenePos().y()-vertex->scenePos().y(),
                                              QPen(Qt::black, 0));
                _drawingEdge->setTransform(QTransform::fromTranslate(vertex->scenePos().x(), vertex->scenePos().y()));
                _drawingEdge->setZValue(VERTEX_CIRCLE_Z);
                _drawingEdge->setData(KEY_EDGE_VERTEX1, vertex->data(KEY_VERTEX_ID));
            }

        }
    }
}
Exemplo n.º 17
0
void GameWidget::setController(GameController *gc)
{
    _gameController = gc;

    QBrush brush(QColor("red"));
    QPen pen(brush, 2);
    QPen pacmanPen(QBrush(QColor("yellow")), 2);
    QPen ghostPen(QBrush(QColor("cyan")), 2);

    // creation de la map
    unsigned int vertexNumber = _gameController->getVertexNumber();
    for(unsigned int i = 0; i < vertexNumber; ++i)
    {
        QGraphicsEllipseItem * ell = new QGraphicsEllipseItem( -GameWidget::RADIUS,
                                                               -GameWidget::RADIUS,
                                                               GameWidget::RADIUS * 2,
                                                               GameWidget::RADIUS * 2 );
        ell->setPen( pen );
        ell->setZValue(1);

        _vertex.push_back( ell );
        _scene->addItem( _vertex.back() );
    }

    positionVertex(_vertex.begin(), _vertex.end());

    linkVertex(_scene, _vertex);

    // creation du pacman et des ghosts
    _pacman = new QGraphicsEllipseItem( -GameWidget::RADIUS + GameWidget::THICK * 2,
                                        -GameWidget::RADIUS + GameWidget::THICK * 2,
                                        GameWidget::RADIUS * 2 - GameWidget::THICK * 4,
                                        GameWidget::RADIUS * 2 - GameWidget::THICK * 4
                                        );
    _pacman->setPen(pacmanPen);
    _scene->addItem(_pacman);
    this->updatePacman();

    std::vector<unsigned int> ghostsPos = _gameController->getGhost();
    unsigned int ghostNumber = ghostsPos.size();
    for( unsigned int i = 0; i < ghostNumber; ++i )
    {
        QGraphicsEllipseItem * ghost = new QGraphicsEllipseItem( -GameWidget::RADIUS + GameWidget::THICK,
                                                                 -GameWidget::RADIUS + GameWidget::THICK,
                                                                 GameWidget::RADIUS * 2 - GameWidget::THICK * 2,
                                                                 GameWidget::RADIUS * 2 - GameWidget::THICK * 2
                                                                 );
        ghost->setPen(ghostPen);
        _scene->addItem(ghost);
        _ghosts.push_back(ghost);
    }
    this->updateGhost();

    QObject::connect(_btnNextMove, SIGNAL(clicked()), this, SLOT(nextMove()));


    _gameController->setPacmanAI(_option.getPacmanAI());
    //_gameController->benchmark(1000);
    //_gameController->reset();

    _view->setFocus();
}
Exemplo n.º 18
0
void StitcherView::mouseReleaseEvent( QMouseEvent *  event){
  ImageView::mouseReleaseEvent(event);
  if(mode == Line && event->button() & Qt::LeftButton){
    setMode(Default);
    QGraphicsLineItem * line = new QGraphicsLineItem(QLineF(mapToScene(lineOrigin),mapToScene(lineEnd)));
    line->setData(0,QString("Helper"));
    line->setZValue(11);    
    QPen pen = line->pen();  
    pen.setColor(Qt::white);
    pen.setStyle(Qt::SolidLine);
    line->setPen(pen);
    graphicsScene->addItem(line);    
  }else if(mode == Circle && event->button() & Qt::LeftButton){
    setMode(Default);
    QPointF lineOriginF = mapToScene(lineOrigin);
    QPointF lineEndF = mapToScene(lineEnd);
    QPointF circleCenter = (lineOriginF+lineEndF)/2;    
    qreal circleRadius = sqrt((lineOriginF-lineEndF).x()* (lineOriginF-lineEndF).x()+
			      (lineOriginF-lineEndF).y()* (lineOriginF-lineEndF).y())/2;
    if(QApplication::keyboardModifiers() & Qt::ShiftModifier){
      circleCenter =  mapFromScene(QPointF(0,0));
      circleRadius = sqrt((circleCenter-lineEnd).x()* (circleCenter-lineEnd).x()+
			      (circleCenter-lineEnd).y()* (circleCenter-lineEnd).y());
      circleCenter =  QPointF(0,0);

    }
    QGraphicsEllipseItem * circle = new QGraphicsEllipseItem(QRect(circleCenter.x()-circleRadius,circleCenter.y()-circleRadius,circleRadius*2,circleRadius*2));
    circle->setData(0,QString("Helper"));
    circle->setZValue(11);    
    QPen pen = circle->pen();  
    pen.setColor(Qt::white);
    pen.setStyle(Qt::SolidLine);
    circle->setPen(pen);
    graphicsScene->addItem(circle);    
  }else if(mode == AddPoint && event->button() & Qt::LeftButton){
    QList<QGraphicsItem *> it = items(event->pos());
    for(int i = 0; i < it.size(); i++){
      if(ImageItem * item = qgraphicsitem_cast<ImageItem *>(it.at(i))){
	item->addControlPoint(item->mapFromScene(mapToScene(event->pos())));
      }
    }
  }else if(mode == DeletePoint && event->button() & Qt::LeftButton){
    QList<QGraphicsItem *> it = items(event->pos());
    for(int i = 0; i < it.size(); i++){
      if(ImageItem * item = qgraphicsitem_cast<ImageItem *>(it.at(i))){
	item->deleteControlPoint(item->mapFromScene(mapToScene(event->pos())));
      }
    }
  }else if(mode == DeleteGuide && event->button() & Qt::LeftButton){
    QList<QGraphicsItem *> it = items(event->pos());
    QPointF pos = mapToScene(event->pos());
    /* 10 px tolerance radius, delete the closest */
    for(int i = 0; i < it.size(); i++){
      if(QString("Helper") == it[i]->data(0)){
	QGraphicsEllipseItem * elipse = qgraphicsitem_cast<QGraphicsEllipseItem *>(it[i]);
	if(elipse){
	  // Check if click position close to the line
	  QPointF origin = elipse->rect().center();
	  qreal radius = elipse->rect().height()/2;
	  QPointF d = origin-pos;	  
	  if(abs(sqrt(d.x()*d.x()+d.y()*d.y())-radius) < 10){
	    delete elipse;
	  }
	}
	QGraphicsLineItem * line = qgraphicsitem_cast<QGraphicsLineItem *>(it[i]);
	if(line){
	  delete line;
	}

      }
    }
  }
}
Exemplo n.º 19
0
/**
 * Evento chamado quando o mouse é clicado
 */
void GraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
  if(!running)
  {
    QPointF pos = mouseEvent->scenePos(); //posição do mouse na hora do clique
    //qDebug() << "x: " << pos.x() << " y: " << pos.y();
    bool colidiu = false;
    QList<QGraphicsItem *> cidades = this->items(); //lista de cidades na tela

    if(mouseEvent->button() == Qt::LeftButton) //adicionar uma cidade
    {
        QRectF bboxCidade(pos.x(),pos.y(), cidadeWidth, cidadeHeigth); //bouding box da elipse da cidade

        //gradiente de cores de cada cidade
        QRadialGradient gradient(10, 10, 10, 10, 10);
        gradient.setColorAt(0, QColor::fromRgbF(0.5, 0.8, 0.7, 1));
        gradient.setColorAt(1, QColor::fromRgbF(0, 0, 0, 0));
        gradient.setSpread(QGradient::ReflectSpread);
        QBrush brush(gradient);

        QGraphicsEllipseItem *cidade = new QGraphicsEllipseItem(bboxCidade);
        cidade->setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
        cidade->setBrush(brush);
        cidade->setZValue(1.0);

        for(int i = 0; i < cidades.size(); i++) //percorrendo a lista de cidades
        {
            if(cidades.at(i)->collidesWithItem(cidade) && cidades.at(i)->data(1).toBool())
            {
                colidiu = true;
                break;
            }
        }

        if(!colidiu) //se não houve colisão
        {
           cidade->setData(0, Cidade::getLastId() + 1);
           cidade->setData(1, 1);
           cidade->setData(4, pos);
           this->addItem(cidade);

           if(lastPos.x() != -10.0 && lastPos.y() != -10.0)
           {
               QPoint cids(Cidade::getLastId(),Cidade::getLastId() + 1);
               //this->drawEdge(lastPos, pos, cids);
           }

           lastPos = pos;
           emit cidadeCriada(pos); //sinal emitido quando uma cidade é criada
        }
    }
    else if(mouseEvent->button() == Qt::RightButton) //remover uma cidade
    {
        for(int i = 0; i < cidades.size(); i++) //percorrendo a lista de cidades
        {
            if(cidades.at(i)->contains(pos) && cidades.at(i)->data(1).toInt() == 1) //o mouse foi clicado em cima de uma cidade
            {
                int chave = cidades.at(i)->data(0).toInt();
                this->removeItem(cidades.at(i));
                //this->removeEdge(chave);

                if(items().size() == 0) lastPos = QPointF(-10,-10);
                emit cidadeRemovida(chave); //sinal emitido quando uma cidade removida
            }
        }
    }
  }
}
Exemplo n.º 20
0
void Gui::createLaserDistanceObjects()
{
	// set colors
	colorHelpLine = Qt::gray;
	colorHelpLineText = Qt::gray;


	//--------------------------------------------------------------
	// create the FRONT laser line distances with text
	//--------------------------------------------------------------
	laserDistanceLineListFront = new QList <QGraphicsEllipseItem*>();
	laserDistanceTextFront = new QList <QGraphicsSimpleTextItem*>();

	// create and add twelve semi circles and text
	for (int i=0; i<LASERDISTANCECIRCLES; i++)
	{
		// create semi circles
		// position doesn't matter, because of moving circles in setLaserDistancePosition()! So we just take 0,0 here.
		QGraphicsEllipseItem *semiCircle = new QGraphicsEllipseItem(0, 0, LASERDISTANCEFIRSTCIRCLE + (i*LASERDISTANCEDISTANCE), LASERDISTANCEFIRSTCIRCLE + (i*LASERDISTANCEDISTANCE));

		// create an (empty) text
		QGraphicsSimpleTextItem *text = new QGraphicsSimpleTextItem();

		// set the start angle of the circle
		semiCircle->setStartAngle(180*16);
		// set the span angle of the circle
		semiCircle->setSpanAngle(180*16);

		// set semiCircle color
		semiCircle->setPen(QPen(colorHelpLine));

		// set text color
		text->setBrush(QBrush(colorHelpLine));

		// setting to the highest layer level
		semiCircle->setZValue(4);
		text->setZValue(4);

		// add semiCircle to QList
		laserDistanceLineListFront->append(semiCircle);
		laserDistanceTextFront->append(text);

		// add semiCircle to scene
		scene->addItem(semiCircle);

		// add text to scene
		scene->addItem(text);
	}


	//--------------------------------------------------------------
	// create the REAR laser line distances with text
	//--------------------------------------------------------------
	laserDistanceLineListRear = new QList <QGraphicsEllipseItem*>();
	laserDistanceTextRear = new QList <QGraphicsSimpleTextItem*>();

	// create and add twelve semi circles and text
	for (int i=0; i<LASERDISTANCECIRCLES; i++)
	{
		// create semi circles
		// position doesn't matter, because of moving circles in setLaserDistancePosition()! So we just take 0,0 here.
		QGraphicsEllipseItem *semiCircle = new QGraphicsEllipseItem(0, 0, LASERDISTANCEFIRSTCIRCLE + (i*LASERDISTANCEDISTANCE), LASERDISTANCEFIRSTCIRCLE + (i*LASERDISTANCEDISTANCE));

		// create an (empty) text
		QGraphicsSimpleTextItem *text = new QGraphicsSimpleTextItem();

		// set the start angle of the circle
		semiCircle->setStartAngle(0);
		// set the span angle of the circle
		semiCircle->setSpanAngle(180*16);

		// set semiCircle color
		semiCircle->setPen(QPen(colorHelpLine));

		// set text color
		text->setBrush(QBrush(colorHelpLine));

		// setting to the highest layer level
		semiCircle->setZValue(4);
		text->setZValue(4);

		// add semiCircle to QList
		laserDistanceLineListRear->append(semiCircle);
		laserDistanceTextRear->append(text);

		// add semiCircle to scene
		scene->addItem(semiCircle);

		// add text to scene
		scene->addItem(text);
	}
}
Exemplo n.º 21
0
QGraphicsEllipseItem *GraphRenderer::addNode(repo::core::model::RepoNode *node, float row, float column)
{
    float spacing = nodeDiameter / 4.0f;

    QPen pen;
    pen.setWidthF(penWidth);
    QBrush brush(Qt::SolidPattern);

    QColor dark;
    QColor light;

    switch (node->getTypeAsEnum())
    {
    case repo::core::model::NodeType::CAMERA :
        dark = Qt::darkMagenta;
        light = Qt::magenta;
        break;
    case repo::core::model::NodeType::MATERIAL :
        dark = Qt::darkRed;
        light = Qt::red;
        break;
    case repo::core::model::NodeType::MESH :
        dark = Qt::darkBlue;
        light = Qt::blue;
        break;
    case repo::core::model::NodeType::METADATA :
        dark = Qt::darkCyan;
        light = Qt::cyan;
        break;
    case repo::core::model::NodeType::REFERENCE :
        dark = repo::gui::primitive::RepoColor::fromHex("#6e8b3d"); // DarkOliveGreen4
        light = repo::gui::primitive::RepoColor::fromHex("#caff70"); // DarkOliveGreen1
        break;
    case repo::core::model::NodeType::REVISION :
        dark = repo::gui::primitive::RepoColor::fromHex("#68228b"); // DarkOrchid4
        light = repo::gui::primitive::RepoColor::fromHex("#bf3eff"); // DarkOrchid1
        break;
    case repo::core::model::NodeType::TEXTURE :
        dark = Qt::darkYellow;
        light = Qt::yellow;
        break;
    case repo::core::model::NodeType::TRANSFORMATION :
        dark = Qt::darkGreen;
        light = Qt::green;
        break;
    case repo::core::model::NodeType::UNKNOWN :
    default :
        dark = Qt::darkGray;
        light = Qt::gray;
    }
    pen.setColor(dark);
    brush.setColor(light);

    qreal x = column * (nodeDiameter + spacing);
    qreal y = row * (nodeDiameter + spacing) * 4;
    QGraphicsEllipseItem *ellipse = addEllipse(
                0, 0, nodeDiameter, nodeDiameter, pen, brush);
    ellipse->setPos(x, y);
    ellipse->setZValue(1.0f);

    //--------------------------------------------------------------------------
    QString toolTip;
    toolTip += tr("_id") + "\t: '" + uuidToQString(node->getUniqueID()) + "',\n";
    toolTip += tr("sid") + "\t: '" + uuidToQString(node->getSharedID()) + "',\n";
    if (!node->getName().empty())
        toolTip += tr("name") + "\t: '" + QString::fromStdString(node->getName()) + "',\n";
    toolTip += tr("type") + "\t: '" + QString::fromStdString(node->getType()) + "'";
    ellipse->setToolTip(toolTip);
    //--------------------------------------------------------------------------
    QVariant var;
    var.setValue(node);
    ellipse->setData(0, var);
    //--------------------------------------------------------------------------
    return ellipse;
}