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);
    }
  }
}
Exemplo n.º 2
0
void Scene::contextMenuEvent(QGraphicsSceneContextMenuEvent *sEvent)
{
	if (isActive())
	{
		int x = (int) gem::round(sEvent->scenePos().x());
		int y = (int) gem::round(sEvent->scenePos().y());
		Point *point = dynamic_cast<Point*>(itemAt(x, y));
		QGraphicsEllipseItem *ellipse = dynamic_cast<QGraphicsEllipseItem*>(itemAt(x, y));
		if (point == 0 && ellipse == 0)
			return;
		else if (point != 0)
		{
			if (point->flags() & QGraphicsItem::ItemIsSelectable)
			{
				QMenu menu;
				QAction *deleteAction = menu.addAction("Delete Point");
				if (menu.exec(sEvent->screenPos()) == deleteAction)
				{
					removeItem(point);
					polygonVector.remove(polygonVector.indexOf(point));
					delete point;
					if (polygonVector.empty())
						emit vectorNotEmpty(false);
				}
			}
		}
		else if (ellipse != 0)
		{
			if (ellipse->flags() & QGraphicsItem::ItemIsSelectable)
			{
				QMenu menu;
				QAction *deleteAction = menu.addAction("Delete Ellipse");
				if (menu.exec(sEvent->screenPos()) == deleteAction)
				{
					removeItem(ellipse);
					ellipseVector.remove(ellipseVector.indexOf(ellipse));
					delete ellipse;
				}
			}
		}
	}
}