diff --git a/src/libs/vlayout/vlayoutpiece.cpp b/src/libs/vlayout/vlayoutpiece.cpp index aecf4c2ce..000fd2151 100644 --- a/src/libs/vlayout/vlayoutpiece.cpp +++ b/src/libs/vlayout/vlayoutpiece.cpp @@ -32,6 +32,8 @@ #include #include #include +#include +#include #include #include #include @@ -388,20 +390,30 @@ VLayoutPiece::~VLayoutPiece() //--------------------------------------------------------------------------------------------------------------------- VLayoutPiece VLayoutPiece::Create(const VPiece &piece, const VContainer *pattern) { + QFuture > futureSeamAllowance = QtConcurrent::run(piece, &VPiece::SeamAllowancePoints, pattern); + QFuture > futureMainPath = QtConcurrent::run(piece, &VPiece::MainPathPoints, pattern); + QFuture > futureInternalPaths = QtConcurrent::run(ConvertInternalPaths, piece, pattern); + QFuture > futurePassmarksLines = QtConcurrent::run(piece, &VPiece::PassmarksLines, pattern, + QVector()); + QFuture > futurePlaceLabels = QtConcurrent::run(ConvertPlaceLabels, piece, pattern); + VLayoutPiece det; det.SetMx(piece.GetMx()); det.SetMy(piece.GetMy()); - det.SetCountourPoints(piece.MainPathPoints(pattern), piece.IsHideMainPath()); - det.SetSeamAllowancePoints(piece.SeamAllowancePoints(pattern), piece.IsSeamAllowance(), - piece.IsSeamAllowanceBuiltIn()); - det.SetInternalPaths(ConvertInternalPaths(piece, pattern)); - det.SetPassmarks(piece.PassmarksLines(pattern)); - det.SetPlaceLabels(ConvertPlaceLabels(piece, pattern)); - det.SetName(piece.GetName()); + det.SetSAWidth(qApp->toPixel(piece.GetSAWidth())); + det.SetForbidFlipping(piece.IsForbidFlipping()); + det.SetForceFlipping(piece.IsForceFlipping()); + + det.SetCountourPoints(futureMainPath.result(), piece.IsHideMainPath()); + det.SetSeamAllowancePoints(futureSeamAllowance.result(), piece.IsSeamAllowance(), piece.IsSeamAllowanceBuiltIn()); + det.SetInternalPaths(futureInternalPaths.result()); + det.SetPassmarks(futurePassmarksLines.result()); + det.SetPlaceLabels(futurePlaceLabels.result()); + // Very important to set main path first! if (det.ContourPath().isEmpty()) { @@ -427,10 +439,6 @@ VLayoutPiece VLayoutPiece::Create(const VPiece &piece, const VContainer *pattern det.SetGrainline(grainlineGeom, pattern); } - det.SetSAWidth(qApp->toPixel(piece.GetSAWidth())); - det.SetForbidFlipping(piece.IsForbidFlipping()); - det.SetForceFlipping(piece.IsForceFlipping()); - return det; }