1
/***************************************************************************
2
* Copyright (c) 2016 WandererFan <wandererfan@gmail.com> *
4
* This file is part of the FreeCAD CAx development system. *
6
* This library is free software; you can redistribute it and/or *
7
* modify it under the terms of the GNU Library General Public *
8
* License as published by the Free Software Foundation; either *
9
* version 2 of the License, or (at your option) any later version. *
11
* This library is distributed in the hope that it will be useful, *
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14
* GNU Library General Public License for more details. *
16
* You should have received a copy of the GNU Library General Public *
17
* License along with this library; see the file COPYING.LIB. If not, *
18
* write to the Free Software Foundation, Inc., 59 Temple Place, *
19
* Suite 330, Boston, MA 02111-1307, USA *
21
***************************************************************************/
23
#include "PreCompiled.h"
28
# include <QGraphicsItem>
33
#include <Mod/TechDraw/App/DrawViewImage.h>
35
#include "QGIViewImage.h"
36
#include "QGCustomClip.h"
37
#include "QGCustomImage.h"
39
#include "ViewProviderImage.h"
42
using namespace TechDrawGui;
44
QGIViewImage::QGIViewImage()
46
setHandlesChildEvents(false);
47
setFlag(QGraphicsItem::ItemClipsChildrenToShape, false);
48
setCacheMode(QGraphicsItem::NoCache);
49
setAcceptHoverEvents(true);
50
setFlag(QGraphicsItem::ItemIsMovable, true);
51
setFlag(QGraphicsItem::ItemIsSelectable, true);
52
setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
54
m_cliparea = new QGCustomClip();
55
addToGroup(m_cliparea);
56
m_cliparea->setRect(0., 0., 5., 5.);
57
m_cliparea->centerAt(0., 0.);
59
m_imageItem = new QGCustomImage();
60
m_imageItem->setTransformationMode(Qt::SmoothTransformation);
61
m_cliparea->addToGroup(m_imageItem);
62
m_imageItem->centerAt(0., 0.);
65
QGIViewImage::~QGIViewImage()
67
// m_imageItem belongs to this group and will be deleted by Qt
70
void QGIViewImage::setViewImageFeature(TechDraw::DrawViewImage *obj)
72
setViewFeature(static_cast<TechDraw::DrawView *>(obj));
75
void QGIViewImage::updateView(bool update)
77
auto viewImage( dynamic_cast<TechDraw::DrawViewImage *>(getViewObject()) );
82
viewImage->isTouched() ||
83
viewImage->Width.isTouched() ||
84
viewImage->Height.isTouched() ||
85
viewImage->ImageFile.isTouched()) {
89
if (viewImage->Scale.isTouched()) {
93
QGIView::updateView(update);
96
void QGIViewImage::draw()
102
auto viewImage( dynamic_cast<TechDraw::DrawViewImage*>(getViewObject()) );
106
auto vp = static_cast<ViewProviderImage*>(getViewProvider(getViewObject()));
109
bool crop = vp->Crop.getValue();
113
QRectF cropRect(0.0, 0.0, Rez::guiX(viewImage->Width.getValue()), Rez::guiX(viewImage->Height.getValue()));
114
m_cliparea->setRect(cropRect);
116
QRectF cropRect(0.0, 0.0, m_imageItem->imageSize().width(), m_imageItem->imageSize().height());
117
m_cliparea->setRect(cropRect);
119
m_cliparea->centerAt(0.0, 0.0);
124
void QGIViewImage::drawImage()
126
auto viewImage( dynamic_cast<TechDraw::DrawViewImage *>(getViewObject()) );
130
if (!viewImage->ImageIncluded.isEmpty()) {
131
QString fileSpec = QString::fromUtf8(viewImage->ImageIncluded.getValue(), strlen(viewImage->ImageIncluded.getValue()));
132
m_imageItem->load(fileSpec);
133
m_imageItem->setScale(viewImage->getScale());
134
QRectF br = m_cliparea->rect();
135
double midX = br.width()/2.0;
136
double midY = br.height()/2.0;
137
m_imageItem->centerAt(midX, midY);
142
void QGIViewImage::rotateView()
144
QRectF r = m_cliparea->boundingRect();
145
m_cliparea->setTransformOriginPoint(r.center());
146
double rot = getViewObject()->Rotation.getValue();
147
m_cliparea->setRotation(-rot);