void Buoy::render(QGraphicsItemGroup *layer) { QPointF origo(0,0); QGraphicsPixmapItem *buoyItem = new QGraphicsPixmapItem(buoy); buoyItem->setPos(origo); QRectF bb = buoyItem->boundingRect(); //buoyItem->rotate(90.0f); //buoyItem->translate(-bb.width()/2.0f, -bb.height()); buoyItem->setOffset(-bb.width()/2, -bb.height()*0.8); QGraphicsPixmapItem *coneItem = new QGraphicsPixmapItem(lightCone); coneItem->setPos(origo); coneItem->rotate(180 + lightConeRotation); //coneItem->rotate(lightConeRotation); bb = coneItem->boundingRect(); //coneItem->translate(-bb.width()/2.0f, -bb.height()); coneItem->setOffset(-bb.width()/2, -bb.height()*0.8); QGraphicsItemGroup* group = new QGraphicsItemGroup(); group->addToGroup(buoyItem); group->addToGroup(coneItem); //group->scale(0.000025, 0.000025); group->scale(0.25, 0.25); group->setZValue(6.5); group->setPos(position); group->setFlag(QGraphicsItem::ItemIgnoresTransformations, true); //TODO: check if i should give and offset to the pixmaps layer->addToGroup(group); }
QGraphicsItemGroup *ProfileGraphicsView::plot_text(text_render_options_t *tro,const QPointF& pos, const QString& text, QGraphicsItem *parent) { QFont fnt(font()); QFontMetrics fm(fnt); if (printMode) fnt.setPixelSize(tro->size); QPointF point(SCALEGC(pos.x(), pos.y())); // This is neded because of the SCALE macro. double dx = tro->hpos * (fm.width(text)); double dy = tro->vpos * (fm.height()); QGraphicsItemGroup *group = new QGraphicsItemGroup(parent); QPainterPath textPath; /* addText() uses bottom-left text baseline and the -3 offset is probably slightly off * for different font sizes. */ textPath.addText(0, fm.height() - 3, fnt, text); QPainterPathStroker stroker; stroker.setWidth(3); QGraphicsPathItem *strokedItem = new QGraphicsPathItem(stroker.createStroke(textPath), group); strokedItem->setBrush(QBrush(getColor(TEXT_BACKGROUND))); strokedItem->setPen(Qt::NoPen); QGraphicsPathItem *textItem = new QGraphicsPathItem(textPath, group); textItem->setBrush(QBrush(getColor(tro->color))); textItem->setPen(Qt::NoPen); group->setPos(point.x() + dx, point.y() + dy); if (!printMode) group->setFlag(QGraphicsItem::ItemIgnoresTransformations); if (!parent) scene()->addItem(group); return group; }
/// Adds a caption for a graph beneath the actual diagram. void DiagramScene::addCaption(const QString &name, QPen &pen) { QGraphicsItemGroup* caption = new QGraphicsItemGroup(NULL); QGraphicsLineItem* l = addLine(0,0,100,0,pen); QGraphicsTextItem* t = addText(name); l->setPos(0,0); t->setPos(110, -(t->boundingRect()).height() / 2); caption->addToGroup(l); caption->addToGroup(t); caption->setFlag(QGraphicsItem::ItemIgnoresTransformations, true); _graphCaptions.push_back(caption); addItem(_graphCaptions[_graphCaptions.size() - 1]); }