Brush detail.
--HG-- branch : develop
This commit is contained in:
parent
a97ce04ca5
commit
3d6f8e0caa
|
@ -446,9 +446,7 @@ QVector<QPointF> VDetail::SeamAllowancePoints(const VContainer *data) const
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
QPainterPath VDetail::ContourPath(const VContainer *data) const
|
QPainterPath VDetail::ContourPath(const VContainer *data) const
|
||||||
{
|
{
|
||||||
QVector<QPointF> points = ContourPoints(data);
|
const QVector<QPointF> points = ContourPoints(data);
|
||||||
QVector<QPointF> pointsEkv = SeamAllowancePoints(data);
|
|
||||||
|
|
||||||
QPainterPath path;
|
QPainterPath path;
|
||||||
|
|
||||||
// contour
|
// contour
|
||||||
|
@ -458,25 +456,33 @@ QPainterPath VDetail::ContourPath(const VContainer *data) const
|
||||||
path.lineTo(points.at(i));
|
path.lineTo(points.at(i));
|
||||||
}
|
}
|
||||||
path.lineTo(points.at(0));
|
path.lineTo(points.at(0));
|
||||||
|
path.setFillRule(Qt::WindingFill);
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
QPainterPath VDetail::SeamAllowancePath(const VContainer *data) const
|
||||||
|
{
|
||||||
|
const QVector<QPointF> pointsEkv = SeamAllowancePoints(data);
|
||||||
|
QPainterPath ekv;
|
||||||
|
|
||||||
// seam allowence
|
// seam allowence
|
||||||
if (getSeamAllowance() == true)
|
if (getSeamAllowance())
|
||||||
{
|
{
|
||||||
if (not pointsEkv.isEmpty())
|
if (not pointsEkv.isEmpty())
|
||||||
{
|
{
|
||||||
QPainterPath ekv;
|
|
||||||
ekv.moveTo(pointsEkv.at(0));
|
ekv.moveTo(pointsEkv.at(0));
|
||||||
for (qint32 i = 1; i < pointsEkv.count(); ++i)
|
for (qint32 i = 1; i < pointsEkv.count(); ++i)
|
||||||
{
|
{
|
||||||
ekv.lineTo(pointsEkv.at(i));
|
ekv.lineTo(pointsEkv.at(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
path.addPath(ekv);
|
ekv.setFillRule(Qt::WindingFill);
|
||||||
path.setFillRule(Qt::WindingFill);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return path;
|
return ekv;
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -82,6 +82,7 @@ public:
|
||||||
QVector<QPointF> SeamAllowancePoints(const VContainer *data) const;
|
QVector<QPointF> SeamAllowancePoints(const VContainer *data) const;
|
||||||
|
|
||||||
QPainterPath ContourPath(const VContainer *data) const;
|
QPainterPath ContourPath(const VContainer *data) const;
|
||||||
|
QPainterPath SeamAllowancePath(const VContainer *data) const;
|
||||||
QVector<VNodeDetail> listNodePoint()const;
|
QVector<VNodeDetail> listNodePoint()const;
|
||||||
private:
|
private:
|
||||||
QSharedDataPointer<VDetailData> d;
|
QSharedDataPointer<VDetailData> d;
|
||||||
|
|
|
@ -28,9 +28,9 @@
|
||||||
|
|
||||||
#include "vtooldetail.h"
|
#include "vtooldetail.h"
|
||||||
#include "nodeDetails/nodedetails.h"
|
#include "nodeDetails/nodedetails.h"
|
||||||
#include "../../vgeometry/varc.h"
|
#include "../vgeometry/varc.h"
|
||||||
#include "../../vgeometry/vsplinepath.h"
|
#include "../vgeometry/vsplinepath.h"
|
||||||
#include "../../vwidgets/vmaingraphicsscene.h"
|
#include "../vwidgets/vmaingraphicsscene.h"
|
||||||
#include "../dialogs/tools/dialogtool.h"
|
#include "../dialogs/tools/dialogtool.h"
|
||||||
#include "../dialogs/tools/dialogdetail.h"
|
#include "../dialogs/tools/dialogdetail.h"
|
||||||
#include "../undocommands/savedetailoptions.h"
|
#include "../undocommands/savedetailoptions.h"
|
||||||
|
@ -75,7 +75,8 @@ const QString VToolDetail::NodeSplinePath = QStringLiteral("NodeSplinePath");
|
||||||
*/
|
*/
|
||||||
VToolDetail::VToolDetail(VAbstractPattern *doc, VContainer *data, const quint32 &id, const Source &typeCreation,
|
VToolDetail::VToolDetail(VAbstractPattern *doc, VContainer *data, const quint32 &id, const Source &typeCreation,
|
||||||
VMainGraphicsScene *scene, const QString &drawName, QGraphicsItem *parent)
|
VMainGraphicsScene *scene, const QString &drawName, QGraphicsItem *parent)
|
||||||
:VAbstractTool(doc, data, id), QGraphicsPathItem(parent), dialog(nullptr), sceneDetails(scene), drawName(drawName)
|
:VAbstractTool(doc, data, id), VNoBrushScalePathItem(parent), dialog(nullptr), sceneDetails(scene),
|
||||||
|
drawName(drawName), seamAllowance(new VNoBrushScalePathItem(this))
|
||||||
{
|
{
|
||||||
VDetail detail = data->GetDetail(id);
|
VDetail detail = data->GetDetail(id);
|
||||||
for (int i = 0; i< detail.CountNode(); ++i)
|
for (int i = 0; i< detail.CountNode(); ++i)
|
||||||
|
@ -102,6 +103,10 @@ VToolDetail::VToolDetail(VAbstractPattern *doc, VContainer *data, const quint32
|
||||||
this->setFlag(QGraphicsItem::ItemIsMovable, true);
|
this->setFlag(QGraphicsItem::ItemIsMovable, true);
|
||||||
this->setFlag(QGraphicsItem::ItemIsSelectable, true);
|
this->setFlag(QGraphicsItem::ItemIsSelectable, true);
|
||||||
RefreshGeometry();
|
RefreshGeometry();
|
||||||
|
|
||||||
|
this->setBrush(QBrush(Qt::Dense7Pattern));
|
||||||
|
seamAllowance->setBrush(QBrush(Qt::FDiagPattern));
|
||||||
|
|
||||||
this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
|
this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
|
||||||
this->setFlag(QGraphicsItem::ItemIsFocusable, true);
|
this->setFlag(QGraphicsItem::ItemIsFocusable, true);
|
||||||
|
|
||||||
|
@ -404,7 +409,7 @@ void VToolDetail::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
||||||
event->accept();
|
event->accept();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
QGraphicsPathItem::mousePressEvent(event);
|
VNoBrushScalePathItem::mousePressEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -565,9 +570,23 @@ void VToolDetail::ShowVisualization(bool show)
|
||||||
void VToolDetail::RefreshGeometry()
|
void VToolDetail::RefreshGeometry()
|
||||||
{
|
{
|
||||||
this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, false);
|
this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, false);
|
||||||
VDetail detail = VAbstractTool::data.GetDetail(id);
|
|
||||||
this->setPath(detail.ContourPath(this->getData()));
|
const VDetail detail = VAbstractTool::data.GetDetail(id);
|
||||||
|
QPainterPath mainPath = detail.ContourPath(this->getData());
|
||||||
|
this->setPath(mainPath);
|
||||||
this->setPos(detail.getMx(), detail.getMy());
|
this->setPos(detail.getMx(), detail.getMy());
|
||||||
|
|
||||||
|
if (detail.getSeamAllowance())
|
||||||
|
{
|
||||||
|
mainPath.addPath(detail.SeamAllowancePath(this->getData()));
|
||||||
|
mainPath.setFillRule(Qt::OddEvenFill);
|
||||||
|
seamAllowance->setPath(mainPath);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
seamAllowance->setPath(QPainterPath());
|
||||||
|
}
|
||||||
|
|
||||||
this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
|
this->setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
#define VTOOLDETAIL_H
|
#define VTOOLDETAIL_H
|
||||||
|
|
||||||
#include "vabstracttool.h"
|
#include "vabstracttool.h"
|
||||||
#include <QGraphicsPathItem>
|
#include "../vwidgets/vnobrushscalepathitem.h"
|
||||||
|
|
||||||
class VMainGraphicsScene;
|
class VMainGraphicsScene;
|
||||||
class DialogTool;
|
class DialogTool;
|
||||||
|
@ -38,7 +38,7 @@ class DialogTool;
|
||||||
/**
|
/**
|
||||||
* @brief The VToolDetail class for working with detail.
|
* @brief The VToolDetail class for working with detail.
|
||||||
*/
|
*/
|
||||||
class VToolDetail: public VAbstractTool, public QGraphicsPathItem
|
class VToolDetail: public VAbstractTool, public VNoBrushScalePathItem
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
|
@ -111,6 +111,8 @@ private:
|
||||||
VMainGraphicsScene *sceneDetails;
|
VMainGraphicsScene *sceneDetails;
|
||||||
QString drawName;
|
QString drawName;
|
||||||
|
|
||||||
|
VNoBrushScalePathItem *seamAllowance;
|
||||||
|
|
||||||
void RefreshGeometry ();
|
void RefreshGeometry ();
|
||||||
template <typename Tool>
|
template <typename Tool>
|
||||||
/**
|
/**
|
||||||
|
|
59
src/libs/vwidgets/vnobrushscalepathitem.cpp
Normal file
59
src/libs/vwidgets/vnobrushscalepathitem.cpp
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
/************************************************************************
|
||||||
|
**
|
||||||
|
** @file vnobrushscalepathitem.cpp
|
||||||
|
** @author Roman Telezhynskyi <dismine(at)gmail.com>
|
||||||
|
** @date 10 1, 2016
|
||||||
|
**
|
||||||
|
** @brief
|
||||||
|
** @copyright
|
||||||
|
** This source code is part of the Valentine project, a pattern making
|
||||||
|
** program, whose allow create and modeling patterns of clothing.
|
||||||
|
** Copyright (C) 2016 Valentina project
|
||||||
|
** <https://bitbucket.org/dismine/valentina> All Rights Reserved.
|
||||||
|
**
|
||||||
|
** Valentina is free software: you can redistribute it and/or modify
|
||||||
|
** it under the terms of the GNU General Public License as published by
|
||||||
|
** the Free Software Foundation, either version 3 of the License, or
|
||||||
|
** (at your option) any later version.
|
||||||
|
**
|
||||||
|
** Valentina is distributed in the hope that it will be useful,
|
||||||
|
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
** GNU General Public License for more details.
|
||||||
|
**
|
||||||
|
** You should have received a copy of the GNU General Public License
|
||||||
|
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
**
|
||||||
|
*************************************************************************/
|
||||||
|
|
||||||
|
#include "vnobrushscalepathitem.h"
|
||||||
|
|
||||||
|
#include <QBrush>
|
||||||
|
#include <QPainter>
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
VNoBrushScalePathItem::VNoBrushScalePathItem(QGraphicsItem *parent) :
|
||||||
|
QGraphicsPathItem(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------------------------------------------------
|
||||||
|
void VNoBrushScalePathItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* how to avoid transformation of QBrush
|
||||||
|
* http://www.qtforum.org/article/23942/how-to-avoid-transformation-of-qbrush-texture.html
|
||||||
|
* ?s=b4ba78dd6758da78fe395d8f6bb7512511a0833e#post84983
|
||||||
|
*
|
||||||
|
* Not Scaling QBrush style fro qgraphics view item
|
||||||
|
* http://www.qtcentre.org/archive/index.php/t-13950.html
|
||||||
|
*
|
||||||
|
* You'll have to scale the brush down. The QStyleOptionGraphicsItem option passed in paint() will give you the
|
||||||
|
* transform being used, and you can set a matrix on a QBrush. Put the two together and you can scale the brush
|
||||||
|
* opposite of the item.
|
||||||
|
*/
|
||||||
|
QBrush brush = this->brush();
|
||||||
|
brush.setMatrix(painter->combinedMatrix().inverted());
|
||||||
|
this->setBrush(brush);
|
||||||
|
QGraphicsPathItem::paint(painter, option, widget);
|
||||||
|
}
|
47
src/libs/vwidgets/vnobrushscalepathitem.h
Normal file
47
src/libs/vwidgets/vnobrushscalepathitem.h
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
/************************************************************************
|
||||||
|
**
|
||||||
|
** @file vnobrushscalepathitem.h
|
||||||
|
** @author Roman Telezhynskyi <dismine(at)gmail.com>
|
||||||
|
** @date 10 1, 2016
|
||||||
|
**
|
||||||
|
** @brief
|
||||||
|
** @copyright
|
||||||
|
** This source code is part of the Valentine project, a pattern making
|
||||||
|
** program, whose allow create and modeling patterns of clothing.
|
||||||
|
** Copyright (C) 2016 Valentina project
|
||||||
|
** <https://bitbucket.org/dismine/valentina> All Rights Reserved.
|
||||||
|
**
|
||||||
|
** Valentina is free software: you can redistribute it and/or modify
|
||||||
|
** it under the terms of the GNU General Public License as published by
|
||||||
|
** the Free Software Foundation, either version 3 of the License, or
|
||||||
|
** (at your option) any later version.
|
||||||
|
**
|
||||||
|
** Valentina is distributed in the hope that it will be useful,
|
||||||
|
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
** GNU General Public License for more details.
|
||||||
|
**
|
||||||
|
** You should have received a copy of the GNU General Public License
|
||||||
|
** along with Valentina. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
**
|
||||||
|
*************************************************************************/
|
||||||
|
|
||||||
|
#ifndef VNOBRUSHSCALEPATHITEM_H
|
||||||
|
#define VNOBRUSHSCALEPATHITEM_H
|
||||||
|
|
||||||
|
#include <QGraphicsPathItem>
|
||||||
|
|
||||||
|
class VNoBrushScalePathItem : public QGraphicsPathItem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit VNoBrushScalePathItem(QGraphicsItem *parent = 0);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void paint(QPainter * painter, const QStyleOptionGraphicsItem * option,
|
||||||
|
QWidget * widget = nullptr) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Q_DISABLE_COPY(VNoBrushScalePathItem)
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // VNOBRUSHSCALEPATHITEM_H
|
|
@ -8,7 +8,8 @@ SOURCES += \
|
||||||
$$PWD/vcontrolpointspline.cpp \
|
$$PWD/vcontrolpointspline.cpp \
|
||||||
$$PWD/vgraphicssimpletextitem.cpp \
|
$$PWD/vgraphicssimpletextitem.cpp \
|
||||||
$$PWD/vsimplepoint.cpp \
|
$$PWD/vsimplepoint.cpp \
|
||||||
$$PWD/vabstractsimple.cpp
|
$$PWD/vabstractsimple.cpp \
|
||||||
|
$$PWD/vnobrushscalepathitem.cpp
|
||||||
|
|
||||||
win32-msvc*:SOURCES += $$PWD/stable.cpp
|
win32-msvc*:SOURCES += $$PWD/stable.cpp
|
||||||
|
|
||||||
|
@ -20,4 +21,5 @@ HEADERS += \
|
||||||
$$PWD/vcontrolpointspline.h \
|
$$PWD/vcontrolpointspline.h \
|
||||||
$$PWD/vgraphicssimpletextitem.h \
|
$$PWD/vgraphicssimpletextitem.h \
|
||||||
$$PWD/vsimplepoint.h \
|
$$PWD/vsimplepoint.h \
|
||||||
$$PWD/vabstractsimple.h
|
$$PWD/vabstractsimple.h \
|
||||||
|
$$PWD/vnobrushscalepathitem.h
|
||||||
|
|
Loading…
Reference in New Issue
Block a user