From 3ed87757c4f9aebbb01724219108c30d7fc807ba Mon Sep 17 00:00:00 2001 From: dismine Date: Tue, 13 Jan 2015 12:38:51 +0200 Subject: [PATCH] Return QGraphicsItems with sheet and all details for show on scene. --HG-- branch : feature --- src/libs/vlayout/vlayout.pro | 2 ++ src/libs/vlayout/vlayoutdetail.cpp | 23 +++++++++++++++++------ src/libs/vlayout/vlayoutdetail.h | 2 ++ src/libs/vlayout/vlayoutgenerator.cpp | 12 ++++++++++++ src/libs/vlayout/vlayoutgenerator.h | 4 ++++ src/libs/vlayout/vlayoutpaper.cpp | 15 +++++++++++++++ src/libs/vlayout/vlayoutpaper.h | 3 +++ 7 files changed, 55 insertions(+), 6 deletions(-) diff --git a/src/libs/vlayout/vlayout.pro b/src/libs/vlayout/vlayout.pro index 7cee445cc..4744dd938 100644 --- a/src/libs/vlayout/vlayout.pro +++ b/src/libs/vlayout/vlayout.pro @@ -7,6 +7,8 @@ # File with common stuff for whole project include(../../../Valentina.pri) +QT += core gui widgets + # Name of library TARGET = vlayout diff --git a/src/libs/vlayout/vlayoutdetail.cpp b/src/libs/vlayout/vlayoutdetail.cpp index 4d427d6ba..bbdc0e38c 100644 --- a/src/libs/vlayout/vlayoutdetail.cpp +++ b/src/libs/vlayout/vlayoutdetail.cpp @@ -29,6 +29,7 @@ #include "vlayoutdetail.h" #include "vlayoutdetail_p.h" +#include #include #include @@ -324,25 +325,27 @@ QPainterPath VLayoutDetail::ContourPath() const QPainterPath path; // contour - path.moveTo(d->contour[0]); - for (qint32 i = 1; i < d->contour.count(); ++i) + QVector points = Map(d->contour); + path.moveTo(points.at(0)); + for (qint32 i = 1; i < points.count(); ++i) { - path.lineTo(d->contour.at(i)); + path.lineTo(points.at(i)); } - path.lineTo(d->contour.at(0)); + path.lineTo(points.at(0)); // seam allowence if (getSeamAllowance() == true) { QPainterPath ekv; QVector p; + points = Map(d->seamAllowence); if (getClosed() == true) { - p = Equidistant(d->seamAllowence, EquidistantType::CloseEquidistant, getWidth()); + p = Equidistant(points, EquidistantType::CloseEquidistant, getWidth()); } else { - p = Equidistant(d->seamAllowence, EquidistantType::OpenEquidistant, getWidth()); + p = Equidistant(points, EquidistantType::OpenEquidistant, getWidth()); } ekv.moveTo(p.at(0)); @@ -357,3 +360,11 @@ QPainterPath VLayoutDetail::ContourPath() const return path; } + +//--------------------------------------------------------------------------------------------------------------------- +QGraphicsItem *VLayoutDetail::GetItem() const +{ + QGraphicsPathItem *item = new QGraphicsPathItem(); + item->setPath(ContourPath()); + return item; +} diff --git a/src/libs/vlayout/vlayoutdetail.h b/src/libs/vlayout/vlayoutdetail.h index 922f3abfa..40b7c9632 100644 --- a/src/libs/vlayout/vlayoutdetail.h +++ b/src/libs/vlayout/vlayoutdetail.h @@ -35,6 +35,7 @@ #include class VLayoutDetailData; +class QGraphicsItem; class VLayoutDetail :public VAbstractDetail { @@ -72,6 +73,7 @@ public: bool isNull() const; qint64 Square() const; QPainterPath ContourPath() const; + QGraphicsItem *GetItem() const; private: QSharedDataPointer d; diff --git a/src/libs/vlayout/vlayoutgenerator.cpp b/src/libs/vlayout/vlayoutgenerator.cpp index d494a09e0..f9f20712a 100644 --- a/src/libs/vlayout/vlayoutgenerator.cpp +++ b/src/libs/vlayout/vlayoutgenerator.cpp @@ -33,6 +33,7 @@ #include #include #include +#include //--------------------------------------------------------------------------------------------------------------------- VLayoutGenerator::VLayoutGenerator(QObject *parent) @@ -142,6 +143,17 @@ LayoutErrors VLayoutGenerator::State() const return state; } +//--------------------------------------------------------------------------------------------------------------------- +QList VLayoutGenerator::GetItems() const +{ + QList list; + for (int i=0; i < papers.count(); ++i) + { + list.append(papers.at(i).GetItem()); + } + return list; +} + //--------------------------------------------------------------------------------------------------------------------- void VLayoutGenerator::Abort() { diff --git a/src/libs/vlayout/vlayoutgenerator.h b/src/libs/vlayout/vlayoutgenerator.h index 8ebfc8d89..5146a19ff 100644 --- a/src/libs/vlayout/vlayoutgenerator.h +++ b/src/libs/vlayout/vlayoutgenerator.h @@ -30,12 +30,14 @@ #define VLAYOUTGENERATOR_H #include +#include #include "vlayoutdef.h" #include "vbank.h" class VLayoutPaper; class VLayoutDetail; +class QGraphicsItem; class VLayoutGenerator :public QObject { @@ -62,6 +64,8 @@ public: LayoutErrors State() const; + QList GetItems() const; + signals: void Start(); void Arranged(int count); diff --git a/src/libs/vlayout/vlayoutpaper.cpp b/src/libs/vlayout/vlayoutpaper.cpp index 6c3b475f0..bb6621b41 100644 --- a/src/libs/vlayout/vlayoutpaper.cpp +++ b/src/libs/vlayout/vlayoutpaper.cpp @@ -35,6 +35,7 @@ #include #include #include +#include class BestResult { @@ -857,3 +858,17 @@ QPainterPath VLayoutPaper::DrawDetails() const } return path; } + +//--------------------------------------------------------------------------------------------------------------------- +QGraphicsItem *VLayoutPaper::GetItem() const +{ + QGraphicsRectItem *paper = new QGraphicsRectItem(QRectF(0, 0, d->paperWidth, d->paperHeight)); + paper->setPen(QPen(Qt::black, 1)); + paper->setBrush(QBrush(Qt::white)); + for (int i=0; i < d->details.count(); ++i) + { + QGraphicsItem *item = d->details.at(i).GetItem(); + item->setParentItem(paper); + } + return paper; +} diff --git a/src/libs/vlayout/vlayoutpaper.h b/src/libs/vlayout/vlayoutpaper.h index 2317839eb..81f2b8d39 100644 --- a/src/libs/vlayout/vlayoutpaper.h +++ b/src/libs/vlayout/vlayoutpaper.h @@ -38,6 +38,7 @@ class QLineF; class QPolygonF; class BestResult; class QPainterPath; +class QGraphicsItem; class VLayoutPaper { @@ -61,6 +62,8 @@ public: bool ArrangeDetail(const VLayoutDetail &detail); int Count() const; + QGraphicsItem *GetItem() const; + private: QSharedDataPointer d;