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