void NoteSymbol::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { painter->setPen(QPen(Qt::white, 0)); painter->setBrush(Qt::gray); painter->drawPath(painterPath()); }
RectangleSymbol::RectangleSymbol(const QString& def, const Polarity& polarity, const AttribData& attrib): Symbol(def, "rect([0-9.]+)x([0-9.]+)(?:(x[cr])([0-9.]+)(?:x([1-4]+))?)?", polarity, attrib), m_def(def) { QRegExp rx(m_pattern); if (!rx.exactMatch(def)) throw InvalidSymbolException(def.toAscii()); QStringList caps = rx.capturedTexts(); m_w = caps[1].toDouble() / 1000.0; m_h = caps[2].toDouble() / 1000.0; if (caps[3] == "xr") { m_rad = caps[4].toDouble() / 1000.0; m_type = ROUNDED; } else if (caps[3] == "xc") { m_rad = caps[4].toDouble() / 1000.0; m_type = CHAMFERED; } else { m_rad = 0; m_type = NORMAL; } if (caps[5].length()) { m_corners = 0; QByteArray cors = caps[5].toAscii(); for (int i = 0; i < cors.count(); ++i) { m_corners |= (1 << (cors[i] - '1')); } } else { m_corners = 15; } m_bounding = painterPath().boundingRect(); }
SquareSymbol::SquareSymbol(const QString& def, const Polarity& polarity, const AttribData& attrib): Symbol(def, "s([0-9.]+)", polarity, attrib), m_def(def) { QRegExp rx(m_pattern); if (!rx.exactMatch(def)) throw InvalidSymbolException(def.toAscii()); QStringList caps = rx.capturedTexts(); m_s = caps[1].toDouble() / 1000.0; m_bounding = painterPath().boundingRect(); }
void SVGPaintServer::renderPath(GraphicsContext*& context, const RenderObject* path, SVGPaintTargetType type) const { RenderStyle* renderStyle = path->style(); QPainter* painter(context ? context->platformContext() : 0); Q_ASSERT(painter); QPainterPath* painterPath(context ? context->currentPath() : 0); Q_ASSERT(painterPath); if ((type & ApplyToFillTargetType) && renderStyle->svgStyle()->hasFill()) painter->fillPath(*painterPath, painter->brush()); if ((type & ApplyToStrokeTargetType) && renderStyle->svgStyle()->hasStroke()) painter->strokePath(*painterPath, painter->pen()); }
NoteSymbol::NoteSymbol(const NoteRecord* rec): Symbol("note") { setFlag(ItemIgnoresTransformations); m_timestamp = rec->timestamp; m_user = rec->user; m_x = rec->x; m_y = rec->y; m_text = rec->text; QDateTime t = QDateTime::fromTime_t(m_timestamp); QString noteTmpl("Time: %1\nUser: %2\nNote: %3"); setToolTip(noteTmpl.arg(t.toString(), m_user, m_text)); m_bounding = painterPath().boundingRect(); }
SquareThermalOpenCornersSymbol::SquareThermalOpenCornersSymbol(const QString& def, const Polarity& polarity, const AttribData& attrib): Symbol(def, "s_tho([0-9.]+)x([0-9.]+)x([0-9.]+)x([0-9.]+)x([0-9.]+)", polarity, attrib), m_def(def) { QRegExp rx(m_pattern); if (!rx.exactMatch(def)) throw InvalidSymbolException(def.toAscii()); QStringList caps = rx.capturedTexts(); m_od = caps[1].toDouble() / 1000.0; m_id = caps[2].toDouble() / 1000.0; m_angle = caps[3].toDouble(); m_num_spokes = caps[4].toInt(); m_gap = caps[5].toDouble() / 1000.0; m_bounding = painterPath().boundingRect(); }
TextSymbol::TextSymbol(const TextRecord* rec): Symbol("Text", "Text") { if (rec == NULL) { return; } m_polarity = rec->polarity; m_x = rec->x; m_y = rec->y; m_font = rec->font; m_orient = rec->orient; m_xsize = rec->xsize; m_ysize = rec->ysize; m_width_factor = rec->width_factor; m_text = rec->text; m_version = rec->version; m_attrib = rec->attrib; m_bounding = painterPath().boundingRect(); }
QPolygonF UBGeometryUtils::arcToPolygon(const QLineF& startRadius, qreal spanAngleInDegrees, qreal width) { qreal startAngleInDegrees = - startRadius.angle(); if (startAngleInDegrees > 180) startAngleInDegrees -= 360; else if (startAngleInDegrees < -180) startAngleInDegrees += 360; qreal radiusLength = startRadius.length(); qreal angle = 2 * asin(width / (2 * radiusLength)) * 180 / PI; bool overlap = abs(spanAngleInDegrees) > 360 - angle; if (overlap) spanAngleInDegrees = spanAngleInDegrees < 0 ? -360 : 360; qreal endAngleInDegrees = startAngleInDegrees + spanAngleInDegrees; qreal innerRadius = radiusLength - width / 2; QRectF innerSquare( startRadius.p1().x() - innerRadius, startRadius.p1().y() - innerRadius, 2 * innerRadius, 2 * innerRadius); qreal outerRadius = radiusLength + width / 2; QRectF outerSquare( startRadius.p1().x() - outerRadius, startRadius.p1().y() - outerRadius, 2 * outerRadius, 2 * outerRadius); QRectF startSquare( startRadius.p2().x() - width / 2, startRadius.p2().y() - width / 2, width, width); QRectF endSquare( startRadius.p1().x() + radiusLength * cos(endAngleInDegrees * PI / 180.0) - width / 2, startRadius.p1().y() + radiusLength * sin(endAngleInDegrees * PI / 180.0) - width / 2, width, width); QPainterPath painterPath( QPointF( startRadius.p1().x() + innerRadius * cos(startAngleInDegrees * PI / 180.0), startRadius.p1().y() + innerRadius * sin(startAngleInDegrees * PI / 180.0))); startAngleInDegrees = - startAngleInDegrees; endAngleInDegrees = - endAngleInDegrees; spanAngleInDegrees = - spanAngleInDegrees; if (overlap) { painterPath.addEllipse(outerSquare); QPainterPath innerPainterPath; innerPainterPath.addEllipse(innerSquare); painterPath = painterPath.subtracted(innerPainterPath); } else { painterPath.arcTo(innerSquare, startAngleInDegrees, spanAngleInDegrees); painterPath.arcTo(endSquare, 180.0 + endAngleInDegrees, spanAngleInDegrees > 0 ? -180.0 : 180.0); painterPath.arcTo(outerSquare, endAngleInDegrees, - spanAngleInDegrees); painterPath.arcTo(startSquare, startAngleInDegrees, spanAngleInDegrees > 0 ? -180.0 : 180.0); painterPath.closeSubpath(); } return painterPath.toFillPolygon(); }