FreeCAD

Форк
0
/
QGIViewImage.cpp 
148 строк · 4.8 Кб
1
/***************************************************************************
2
 *   Copyright (c) 2016 WandererFan <wandererfan@gmail.com>                *
3
 *                                                                         *
4
 *   This file is part of the FreeCAD CAx development system.              *
5
 *                                                                         *
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.      *
10
 *                                                                         *
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.                  *
15
 *                                                                         *
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                                *
20
 *                                                                         *
21
 ***************************************************************************/
22

23
#include "PreCompiled.h"
24
#ifndef _PreComp_
25
# include <cmath>
26
# include <sstream>
27

28
# include <QGraphicsItem>
29
# include <QRectF>
30
# include <QString>
31
#endif
32

33
#include <Mod/TechDraw/App/DrawViewImage.h>
34

35
#include "QGIViewImage.h"
36
#include "QGCustomClip.h"
37
#include "QGCustomImage.h"
38
#include "Rez.h"
39
#include "ViewProviderImage.h"
40

41

42
using namespace TechDrawGui;
43

44
QGIViewImage::QGIViewImage()
45
{
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);
53

54
    m_cliparea = new QGCustomClip();
55
    addToGroup(m_cliparea);
56
    m_cliparea->setRect(0., 0., 5., 5.);
57
    m_cliparea->centerAt(0., 0.);
58

59
    m_imageItem = new QGCustomImage();
60
    m_imageItem->setTransformationMode(Qt::SmoothTransformation);
61
    m_cliparea->addToGroup(m_imageItem);
62
    m_imageItem->centerAt(0., 0.);
63
}
64

65
QGIViewImage::~QGIViewImage()
66
{
67
    // m_imageItem belongs to this group and will be deleted by Qt
68
}
69

70
void QGIViewImage::setViewImageFeature(TechDraw::DrawViewImage *obj)
71
{
72
    setViewFeature(static_cast<TechDraw::DrawView *>(obj));
73
}
74

75
void QGIViewImage::updateView(bool update)
76
{
77
    auto viewImage( dynamic_cast<TechDraw::DrawViewImage *>(getViewObject()) );
78
    if (!viewImage)
79
        return;
80

81
    if (update ||
82
        viewImage->isTouched() ||
83
        viewImage->Width.isTouched() ||
84
        viewImage->Height.isTouched() ||
85
        viewImage->ImageFile.isTouched()) {
86
        draw();
87
    }
88

89
    if (viewImage->Scale.isTouched()) {
90
        draw();
91
    }
92

93
    QGIView::updateView(update);
94
}
95

96
void QGIViewImage::draw()
97
{
98
    if (!isVisible()) {
99
        return;
100
    }
101

102
    auto viewImage( dynamic_cast<TechDraw::DrawViewImage*>(getViewObject()) );
103
    if (!viewImage)
104
        return;
105

106
    auto vp = static_cast<ViewProviderImage*>(getViewProvider(getViewObject()));
107
    if (!vp)
108
        return;
109
    bool crop = vp->Crop.getValue();
110

111
    drawImage();
112
    if (crop) {
113
        QRectF cropRect(0.0, 0.0, Rez::guiX(viewImage->Width.getValue()), Rez::guiX(viewImage->Height.getValue()));
114
        m_cliparea->setRect(cropRect);
115
    } else {
116
        QRectF cropRect(0.0, 0.0, m_imageItem->imageSize().width(), m_imageItem->imageSize().height());
117
        m_cliparea->setRect(cropRect);
118
    }
119
    m_cliparea->centerAt(0.0, 0.0);
120

121
    drawImage();
122
}
123

124
void QGIViewImage::drawImage()
125
{
126
    auto viewImage( dynamic_cast<TechDraw::DrawViewImage *>(getViewObject()) );
127
    if (!viewImage)
128
        return;
129

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);
138
        m_imageItem->show();
139
    }
140
}
141

142
void QGIViewImage::rotateView()
143
{
144
    QRectF r = m_cliparea->boundingRect();
145
    m_cliparea->setTransformOriginPoint(r.center());
146
    double rot = getViewObject()->Rotation.getValue();
147
    m_cliparea->setRotation(-rot);
148
}
149

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.