Fix scaling for ViewSymbol
This commit is contained in:
parent
4de1b39b4f
commit
78924d3a22
|
@ -26,6 +26,8 @@
|
|||
#include <QStyleOptionGraphicsItem>
|
||||
#endif
|
||||
|
||||
#include <Base/Console.h>
|
||||
|
||||
#include <QRectF>
|
||||
#include "QGCustomSvg.h"
|
||||
|
||||
|
@ -37,6 +39,7 @@ QGCustomSvg::QGCustomSvg()
|
|||
setAcceptHoverEvents(false);
|
||||
setFlag(QGraphicsItem::ItemIsSelectable, false);
|
||||
setFlag(QGraphicsItem::ItemIsMovable, false);
|
||||
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
|
||||
|
||||
m_svgRender = new QSvgRenderer();
|
||||
}
|
||||
|
@ -69,10 +72,20 @@ void QGCustomSvg::centerAt(double cX, double cY)
|
|||
bool QGCustomSvg::load(QByteArray *svgBytes)
|
||||
{
|
||||
bool success = m_svgRender->load(*svgBytes);
|
||||
prepareGeometryChange();
|
||||
setSharedRenderer(m_svgRender);
|
||||
return(success);
|
||||
}
|
||||
|
||||
QRectF QGCustomSvg::boundingRect() const
|
||||
{
|
||||
QRectF box = m_svgRender->viewBoxF();
|
||||
double w = box.width();
|
||||
double h = box.height();
|
||||
QRectF newRect(0,0,w*scale(),h*scale());
|
||||
return newRect.adjusted(-1.,-1.,1.,1.);
|
||||
}
|
||||
|
||||
void QGCustomSvg::paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget) {
|
||||
QStyleOptionGraphicsItem myOption(*option);
|
||||
myOption.state &= ~QStyle::State_Selected;
|
||||
|
|
|
@ -50,6 +50,7 @@ public:
|
|||
virtual void centerAt(QPointF centerPos);
|
||||
virtual void centerAt(double cX, double cY);
|
||||
virtual bool load(QByteArray *svgString);
|
||||
virtual QRectF boundingRect(void) const override;
|
||||
|
||||
protected:
|
||||
QSvgRenderer *m_svgRender;
|
||||
|
|
|
@ -290,7 +290,6 @@ void QGIView::draw()
|
|||
|
||||
void QGIView::drawBorder()
|
||||
{
|
||||
prepareGeometryChange();
|
||||
if (!borderVisible) {
|
||||
m_label.hide();
|
||||
m_border.hide();
|
||||
|
@ -332,6 +331,7 @@ void QGIView::drawBorder()
|
|||
displayArea.top(),
|
||||
frameWidth,
|
||||
frameHeight);
|
||||
prepareGeometryChange();
|
||||
m_border.setRect(frameArea);
|
||||
m_border.setPos(0.,0.);
|
||||
|
||||
|
|
|
@ -31,9 +31,10 @@
|
|||
#include <QMouseEvent>
|
||||
#include <QString>
|
||||
#include <sstream>
|
||||
#include <QRectF>
|
||||
#endif
|
||||
|
||||
#include <qmath.h>
|
||||
//#include <qmath.h>
|
||||
|
||||
#include <App/Application.h>
|
||||
#include <App/Material.h>
|
||||
|
@ -54,6 +55,7 @@ QGIViewSymbol::QGIViewSymbol()
|
|||
setAcceptHoverEvents(true);
|
||||
setFlag(QGraphicsItem::ItemIsMovable, true);
|
||||
setFlag(QGraphicsItem::ItemIsSelectable, true);
|
||||
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
|
||||
|
||||
m_svgItem = new QGCustomSvg();
|
||||
addToGroup(m_svgItem);
|
||||
|
@ -103,10 +105,6 @@ void QGIViewSymbol::draw()
|
|||
return;
|
||||
}
|
||||
|
||||
//note: svg's are overscaled by (72 pixels(pts actually) /in)*(1 in/25.4 mm) = 2.834645669 (could be 96/25.4(CSS)? 110/25.4?)
|
||||
//due to 1 sceneUnit (1mm) = 1 pixel for some QtSvg functions
|
||||
TechDraw::DrawViewSymbol *viewSymbol = dynamic_cast<TechDraw::DrawViewSymbol *>(getViewObject());
|
||||
setScale(viewSymbol->Scale.getValue());
|
||||
drawSvg();
|
||||
if (borderVisible) {
|
||||
drawBorder();
|
||||
|
@ -119,9 +117,12 @@ void QGIViewSymbol::drawSvg()
|
|||
return;
|
||||
|
||||
TechDraw::DrawViewSymbol *viewSymbol = dynamic_cast<TechDraw::DrawViewSymbol *>(getViewObject());
|
||||
//note: svg's are overscaled by (72 pixels(pts actually) /in)*(1 in/25.4 mm) = 2.834645669 (could be 96/25.4(CSS)? 110/25.4?)
|
||||
//due to 1 sceneUnit (1mm) = 1 pixel for some QtSvg functions
|
||||
|
||||
m_svgItem->setScale(viewSymbol->Scale.getValue());
|
||||
|
||||
QString qs(QString::fromUtf8(viewSymbol->Symbol.getValue()));
|
||||
|
||||
symbolToSvg(qs);
|
||||
}
|
||||
|
||||
|
@ -133,9 +134,9 @@ void QGIViewSymbol::symbolToSvg(QString qs)
|
|||
|
||||
QByteArray qba;
|
||||
qba.append(qs);
|
||||
prepareGeometryChange();
|
||||
if (!m_svgItem->load(&qba)) {
|
||||
Base::Console().Error("Error - Could not load Symbol into SVG renderer for %s\n", getViewObject()->getNameInDocument());
|
||||
}
|
||||
m_svgItem->setPos(0.,0.);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user