diff --git a/src/kicad/model/component.cpp b/src/kicad/model/component.cpp index aaf45e2..603e433 100644 --- a/src/kicad/model/component.cpp +++ b/src/kicad/model/component.cpp @@ -585,8 +585,9 @@ void Component::reorganizeToPackageStyle() // set position of ref and name text _nameText->setPos(QPoint(rect.right(), rect.top() - 50)); _nameText->setTextHJustify(DrawText::TextHRight); - _nameText->setDirection(DrawText::DirectionHorizontal); + _nameText->setAngle(0.0); _refText->setPos(QPoint(rect.left(), rect.bottom() + 50)); _refText->setTextHJustify(DrawText::TextHLeft); - _refText->setDirection(DrawText::DirectionHorizontal); + _refText->setAngle(0.0); + ; } diff --git a/src/kicad/model/drawtext.cpp b/src/kicad/model/drawtext.cpp index cea6d61..cb3cd10 100644 --- a/src/kicad/model/drawtext.cpp +++ b/src/kicad/model/drawtext.cpp @@ -20,7 +20,7 @@ DrawText::DrawText(const QString &text, const QPoint &pos) { - _direction = DirectionHorizontal; + _angle = 0.0; _textSize = 50; _textStyle = TextNormal; _visible = true; @@ -50,14 +50,14 @@ void DrawText::setText(const QString &text) _text = text; } -DrawText::Direction DrawText::direction() const +qreal DrawText::angle(void) const { - return _direction; + return _angle; } -void DrawText::setDirection(Direction direction) +void DrawText::setAngle(qreal angle) { - _direction = direction; + _angle = angle; } uint DrawText::textSize() const diff --git a/src/kicad/model/drawtext.h b/src/kicad/model/drawtext.h index 2da8ef2..1ebe97d 100644 --- a/src/kicad/model/drawtext.h +++ b/src/kicad/model/drawtext.h @@ -20,6 +20,7 @@ #define DRAWTEXT_H #include +#include #include #include "draw.h" @@ -35,13 +36,8 @@ class KICAD_EXPORT DrawText : public Draw const QString &text() const; void setText(const QString &text); - enum Direction - { - DirectionHorizontal, - DirectionVertital - }; - Direction direction() const; - void setDirection(Direction direction); + qreal angle(void) const; + void setAngle(qreal angle); uint textSize() const; void setTextSize(uint textSize); @@ -79,7 +75,7 @@ class KICAD_EXPORT DrawText : public Draw protected: QString _text; - Direction _direction; + qreal _angle; uint _textSize; TextStyles _textStyle; bool _visible; diff --git a/src/kicad/parser/kicadlibparser.cpp b/src/kicad/parser/kicadlibparser.cpp index 19d2160..318c4f3 100644 --- a/src/kicad/parser/kicadlibparser.cpp +++ b/src/kicad/parser/kicadlibparser.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include "model/drawcircle.h" #include "model/drawpoly.h" @@ -225,7 +226,7 @@ void KicadLibParser::writePin(Pin *pin) _stream << " " << pin->padName() << " " // pad name << pin->pos().x() << " " << -pin->pos().y() << " " // x y position << pin->length() << " " // lenght - << pinDirectionString(pin->angle()) << " " // pin direction (up/down/left/right) + << pinDirectionString(pin->angle()) << " " // pin direction (up/down/left/right) << "50" << " " // name text size << "50" @@ -275,14 +276,8 @@ void KicadLibParser::writeDraw(Draw *draw) // T direction posx posy text_size text_type unit convert text text_italic text_bold text_hjustify text_vjustify drawText = dynamic_cast(draw); _stream << "T "; - if (drawText->direction() == DrawText::DirectionHorizontal) - { - _stream << "0 "; - } - else - { - _stream << "900 "; - } + + _stream << uint(qFloor((drawText->angle() * 10) + 0.5)) << " "; _stream << drawText->pos().x() << " " << -drawText->pos().y() << " " << drawText->textSize() << " " << "0 " << drawText->unit() << " " << drawText->convert() << " " @@ -345,7 +340,7 @@ void KicadLibParser::writeLabel(DrawText *draw) _stream << draw->pos().x() << " " << -draw->pos().y() << " " << draw->textSize() << " "; - if (draw->direction() == DrawText::DirectionHorizontal) + if (draw->angle() < 45.0) { _stream << "H "; } @@ -708,14 +703,7 @@ Draw *KicadLibParser::readDraw(char c) { DrawText *draw = new DrawText(); _stream >> n; - if (n == 0) - { - draw->setDirection(DrawText::DirectionHorizontal); - } - else - { - draw->setDirection(DrawText::DirectionVertital); - } + draw->setAngle(qreal(n) / 10); _stream >> n; draw->pos().setX(n); @@ -881,11 +869,11 @@ DrawText *KicadLibParser::readLabel() _stream >> nc; if (nc == 'H') { - draw->setDirection(DrawText::DirectionHorizontal); + draw->setAngle(0.0); } else { - draw->setDirection(DrawText::DirectionVertital); + draw->setAngle(90.0); } _stream.skipWhiteSpace(); diff --git a/src/kicad/pinruler/pinclass.cpp b/src/kicad/pinruler/pinclass.cpp index d37bcdb..b704988 100644 --- a/src/kicad/pinruler/pinclass.cpp +++ b/src/kicad/pinruler/pinclass.cpp @@ -313,22 +313,22 @@ DrawText *PinClass::getDrawText() const case ClassRule::PositionTop: height = qCeil(boundingRect().height() / 100.0) * 100 - 100; drawClassLabel->setPos(QPoint(_pos.x() + boundingRect().width() / 2 - 50, _pos.y() + 50 + height)); - drawClassLabel->setDirection(DrawText::DirectionHorizontal); + drawClassLabel->setAngle(0.0); break; case ClassRule::PositionBottom: height = qCeil(boundingRect().height() / 100.0) * 100 - 100; drawClassLabel->setPos(QPoint(_pos.x() + boundingRect().width() / 2 - 50, _pos.y() - 50 - height)); - drawClassLabel->setDirection(DrawText::DirectionHorizontal); + drawClassLabel->setAngle(0.0); break; case ClassRule::PositionLeft: width = qCeil(boundingRect().width() / 100.0) * 100 - 100; drawClassLabel->setPos(QPoint(_pos.x() + width + 50, _pos.y() - 50 + boundingRect().height() / 2)); - drawClassLabel->setDirection(DrawText::DirectionVertital); + drawClassLabel->setAngle(90.0); break; case ClassRule::PositionRight: width = qCeil(boundingRect().width() / 100.0) * 100 - 100; drawClassLabel->setPos(QPoint(_pos.x() - width - 50, _pos.y() - 50 + boundingRect().height() / 2)); - drawClassLabel->setDirection(DrawText::DirectionVertital); + drawClassLabel->setAngle(90.0); break; case ClassRule::PositionASide: break; diff --git a/src/kicad/pinruler/pinruler.cpp b/src/kicad/pinruler/pinruler.cpp index af7f388..2d9ca89 100644 --- a/src/kicad/pinruler/pinruler.cpp +++ b/src/kicad/pinruler/pinruler.cpp @@ -332,10 +332,10 @@ void PinRuler::organize(Component *component) component->prependDraw(rectDraw); component->nameText()->setPos(QPoint(rect.right(), rect.bottom() + 50)); component->nameText()->setTextHJustify(DrawText::TextHRight); - component->nameText()->setDirection(DrawText::DirectionHorizontal); + component->nameText()->setAngle(0.0); component->refText()->setPos(QPoint(rect.left(), rect.bottom() + 50)); component->refText()->setTextHJustify(DrawText::TextHLeft); - component->refText()->setDirection(DrawText::DirectionHorizontal); + component->refText()->setAngle(0.0); for (PinClass *mpinClass : _pinClasses) { diff --git a/src/kicad/viewer/drawtextitem.cpp b/src/kicad/viewer/drawtextitem.cpp index 60ce0f2..5c02d86 100644 --- a/src/kicad/viewer/drawtextitem.cpp +++ b/src/kicad/viewer/drawtextitem.cpp @@ -41,6 +41,7 @@ void DrawTextItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *opti { Q_UNUSED(option) Q_UNUSED(widget) + Q_ASSERT(_fontText != nullptr); painter->setRenderHint(QPainter::Antialiasing); painter->setRenderHint(QPainter::TextAntialiasing); @@ -64,17 +65,14 @@ void DrawTextItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *opti } painter->setFont(font); - if (_drawText->direction() == DrawText::DirectionVertital) - { - painter->rotate(-90); - } + painter->rotate(_drawText->angle()); _fontText->drawText(painter, _textRect, Qt::AlignLeft, _drawText->text()); } QRectF DrawTextItem::boundingRect() const { - return _rect.adjusted(-20, -20, 20, 20); + return QTransform().rotate(_drawText->angle()).mapRect(_rect).adjusted(-20, -20, 20, 20); } void DrawTextItem::setDraw(DrawText *draw) @@ -126,12 +124,6 @@ void DrawTextItem::setDraw(DrawText *draw) } _textRect = _rect; - if (_drawText->direction() == DrawText::DirectionVertital) - { - int swap = _rect.size().width(); - _rect.setWidth(_rect.height()); - _rect.setHeight(swap); - } setPos(draw->pos() / ComponentItem::ratio); update(); diff --git a/src/kicad/viewer/kicadfont.cpp b/src/kicad/viewer/kicadfont.cpp index 420e450..9f3a8ad 100644 --- a/src/kicad/viewer/kicadfont.cpp +++ b/src/kicad/viewer/kicadfont.cpp @@ -53,7 +53,7 @@ double KicadFont::textWidth(const QString &text) const return width; } -QFont KicadFont::font() +QFont KicadFont::font() const { return _font; } diff --git a/src/kicad/viewer/kicadfont.h b/src/kicad/viewer/kicadfont.h index 9870566..1b91c15 100644 --- a/src/kicad/viewer/kicadfont.h +++ b/src/kicad/viewer/kicadfont.h @@ -35,7 +35,7 @@ class KICAD_EXPORT KicadFont double charWidth(QChar c) const; double textWidth(const QString &text) const; - QFont font(); + QFont font() const; static QFont font(double size); void drawText(QPainter *painter, const QRectF &rect, int flags, const QString &text) const;