From 9be2af54d322168a1c482a1a9cd16dc40ef40656 Mon Sep 17 00:00:00 2001 From: wandererfan Date: Sun, 15 Dec 2019 16:14:25 -0500 Subject: [PATCH] [TD]improve presentation of tolerance text --- src/Mod/TechDraw/App/DrawViewDimension.cpp | 2 +- src/Mod/TechDraw/Gui/QGIViewDimension.cpp | 105 ++++++++++++++++----- src/Mod/TechDraw/Gui/QGIViewDimension.h | 9 +- 3 files changed, 88 insertions(+), 28 deletions(-) diff --git a/src/Mod/TechDraw/App/DrawViewDimension.cpp b/src/Mod/TechDraw/App/DrawViewDimension.cpp index e7cc83efcb..d8b6f26776 100644 --- a/src/Mod/TechDraw/App/DrawViewDimension.cpp +++ b/src/Mod/TechDraw/App/DrawViewDimension.cpp @@ -178,7 +178,7 @@ void DrawViewDimension::onChanged(const App::Property* prop) (prop == &OverTolerance) || (prop == &UnderTolerance) || (prop == &Inverted) ) { -// nothing in particular + requestPaint(); } } diff --git a/src/Mod/TechDraw/Gui/QGIViewDimension.cpp b/src/Mod/TechDraw/Gui/QGIViewDimension.cpp index 2e6c2fca8a..56ab3a1a0d 100644 --- a/src/Mod/TechDraw/Gui/QGIViewDimension.cpp +++ b/src/Mod/TechDraw/Gui/QGIViewDimension.cpp @@ -94,8 +94,10 @@ QGIDatumLabel::QGIDatumLabel() m_dimText = new QGCustomText(); m_dimText->setParentItem(this); - m_tolText = new QGCustomText(); - m_tolText->setParentItem(this); + m_tolTextOver = new QGCustomText(); + m_tolTextOver->setParentItem(this); + m_tolTextUnder = new QGCustomText(); + m_tolTextUnder->setParentItem(this); m_unitText = new QGCustomText(); m_unitText->setParentItem(this); @@ -210,6 +212,15 @@ void QGIDatumLabel::paint(QPainter *painter, const QStyleOptionGraphicsItem *opt void QGIDatumLabel::setPosFromCenter(const double &xCenter, const double &yCenter) { + QGIViewDimension* qgivd = dynamic_cast(parentItem()); + if( qgivd == nullptr ) { + return; //tarfu + } + const auto dim( dynamic_cast(qgivd->getViewObject()) ); + if( dim == nullptr ) { + return; + } + //set label's Qt position(top,left) given boundingRect center point setPos(xCenter - m_dimText->boundingRect().width() / 2., yCenter - m_dimText->boundingRect().height() / 2.); @@ -217,12 +228,28 @@ void QGIDatumLabel::setPosFromCenter(const double &xCenter, const double &yCente QRectF labelBox = m_dimText->boundingRect(); double right = labelBox.right(); double top = labelBox.top(); - m_tolText->setPos(right,top); + double bottom = labelBox.bottom(); + double middle = (top + bottom) / 2.0; + + QRectF overBox = m_tolTextOver->boundingRect(); + double overWidth = overBox.width(); + QRectF underBox = m_tolTextUnder->boundingRect(); + double underWidth = underBox.width(); + double width = underWidth; + if (overWidth > underWidth) { + width = overWidth; + } + double tolRight = right + width; + + m_tolTextOver->justifyRightAt(tolRight, middle, false); + m_tolTextUnder->justifyRightAt(tolRight, middle + underBox.height(), false); //set unit position - QRectF tolBox = m_tolText->boundingRect(); - right = right + tolBox.right(); - m_unitText->setPos(right,top); + if (dim->hasTolerance()) { + m_unitText->setPos(tolRight,top); + } else { + m_unitText->setPos(right, top); + } } void QGIDatumLabel::setLabelCenter() @@ -240,7 +267,8 @@ void QGIDatumLabel::setFont(QFont f) double fontSize = f.pixelSize(); double tolAdj = getTolAdjust(); tFont.setPixelSize((int) (fontSize * tolAdj)); - m_tolText->setFont(tFont); + m_tolTextOver->setFont(tFont); + m_tolTextUnder->setFont(tFont); } void QGIDatumLabel::setDimString(QString t) @@ -267,32 +295,49 @@ void QGIDatumLabel::setTolString() if( dim == nullptr ) { return; } else if (!dim->hasTolerance()) { + m_tolTextOver->hide(); + m_tolTextUnder->hide(); // don't show if both zero return; } - + m_tolTextOver->show(); + m_tolTextUnder->show(); + double overTol = dim->OverTolerance.getValue(); double underTol = dim->UnderTolerance.getValue(); int precision = getPrecision(); QString qsPrecision = QString::number(precision); - QString qsFormat = QString::fromUtf8("%+.") + //show sign - qsPrecision + - QString::fromUtf8("g"); //trim trailing zeroes + QString qsFormatOver = QString::fromUtf8("%+.") + //show sign + qsPrecision + + QString::fromUtf8("g"); //trim trailing zeroes + if (DrawUtil::fpCompare(overTol, 0.0, pow(10.0, -precision))) { + qsFormatOver = QString::fromUtf8("%.") + //no sign + qsPrecision + + QString::fromUtf8("g"); + } + + QString qsFormatUnder = QString::fromUtf8("%+.") + //show sign + qsPrecision + + QString::fromUtf8("g"); //trim trailing zeroes + if (DrawUtil::fpCompare(underTol, 0.0, pow(10.0, -precision))) { + qsFormatUnder = QString::fromUtf8("%.") + //no sign + qsPrecision + + QString::fromUtf8("g"); //trim trailing zeroes + } QString overFormat; QString underFormat; #if QT_VERSION >= 0x050000 - overFormat = QString::asprintf(qsFormat.toStdString().c_str(), overTol); - underFormat = QString::asprintf(qsFormat.toStdString().c_str(), underTol); + overFormat = QString::asprintf(qsFormatOver.toStdString().c_str(), overTol); + underFormat = QString::asprintf(qsFormatUnder.toStdString().c_str(), underTol); #else QString qs2; - overFormat = qs2.sprintf(qsFormat.toStdString().c_str(), overTol); - underFormat = qs2.sprintf(qsFormat.toStdString().c_str(), underTol); + overFormat = qs2.sprintf(qsFormatOver.toStdString().c_str(), overTol); + underFormat = qs2.sprintf(qsFormatUnder.toStdString().c_str(), underTol); #endif - QString html = QString::fromUtf8("
%1
%2
"); - html = html.arg(overFormat).arg(underFormat); - m_tolText->setHtml(html); + m_tolTextOver->setHtml(overFormat); + m_tolTextUnder->setHtml(underFormat); return; } @@ -332,21 +377,24 @@ double QGIDatumLabel::getTolAdjust(void) void QGIDatumLabel::setPrettySel(void) { m_dimText->setPrettySel(); - m_tolText->setPrettySel(); + m_tolTextOver->setPrettySel(); + m_tolTextUnder->setPrettySel(); m_unitText->setPrettySel(); } void QGIDatumLabel::setPrettyPre(void) { m_dimText->setPrettyPre(); - m_tolText->setPrettyPre(); + m_tolTextOver->setPrettyPre(); + m_tolTextUnder->setPrettyPre(); m_unitText->setPrettyPre(); } void QGIDatumLabel::setPrettyNormal(void) { m_dimText->setPrettyNormal(); - m_tolText->setPrettyNormal(); + m_tolTextOver->setPrettyNormal(); + m_tolTextUnder->setPrettyNormal(); m_unitText->setPrettyNormal(); } @@ -354,7 +402,8 @@ void QGIDatumLabel::setColor(QColor c) { m_colNormal = c; m_dimText->setColor(m_colNormal); - m_tolText->setColor(m_colNormal); + m_tolTextOver->setColor(m_colNormal); + m_tolTextUnder->setColor(m_colNormal); m_unitText->setColor(m_colNormal); } @@ -574,8 +623,16 @@ QString QGIViewDimension::getLabelText(void) { QString result; QString first = datumLabel->getDimText()->toPlainText(); - QString second = datumLabel->getTolText()->toPlainText(); - result = first + second; +// QString second = datumLabel->getTolText()->toPlainText(); + QString second = datumLabel->getTolTextOver()->toPlainText(); + QString third = datumLabel->getTolTextUnder()->toPlainText(); + if (second.length() > third.length()) { + result = first + second; + } else { + result = first + third; + } + +// result = first + second; return result; } diff --git a/src/Mod/TechDraw/Gui/QGIViewDimension.h b/src/Mod/TechDraw/Gui/QGIViewDimension.h index 8daa252e5b..70e8776825 100644 --- a/src/Mod/TechDraw/Gui/QGIViewDimension.h +++ b/src/Mod/TechDraw/Gui/QGIViewDimension.h @@ -88,8 +88,10 @@ public: QGCustomText* getDimText(void) { return m_dimText; } void setDimText(QGCustomText* newText) { m_dimText = newText; } - QGCustomText* getTolText(void) { return m_tolText; } - void setTolText(QGCustomText* newTol) { m_tolText = newTol; } + QGCustomText* getTolTextOver(void) { return m_tolTextOver; } + void setTolTextOver(QGCustomText* newTol) { m_tolTextOver = newTol; } + QGCustomText* getTolTextUnder(void) { return m_tolTextUnder; } + void setTolTextUnder(QGCustomText* newTol) { m_tolTextOver = newTol; } double getTolAdjust(void); bool hasHover; @@ -115,7 +117,8 @@ protected: // virtual void mouseReleaseEvent( QGraphicsSceneMouseEvent * event) override; QGCustomText* m_dimText; - QGCustomText* m_tolText; + QGCustomText* m_tolTextOver; + QGCustomText* m_tolTextUnder; QGCustomText* m_unitText; int getPrecision(void); QColor m_colNormal;