diff --git a/dist/OBS_debian/debian.valentina.1 b/dist/OBS_debian/debian.valentina.1 index 7a1354277..0e480b1f5 100644 --- a/dist/OBS_debian/debian.valentina.1 +++ b/dist/OBS_debian/debian.valentina.1 @@ -72,6 +72,8 @@ The path to output destination folder. By default the directory at which the app .RE .IP "--bdxf" .RB "Export dxf in binary form." +.IP "--text2paths" +.RB "Export text as paths." .IP "-x, --gsize " .RB "Set size value a pattern file, that was opened with standard measurements " "(export mode)" ". Valid values: 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56cm." .IP "-e, --gheight " diff --git a/dist/debian/valentina.1 b/dist/debian/valentina.1 index 7a1354277..0e480b1f5 100644 --- a/dist/debian/valentina.1 +++ b/dist/debian/valentina.1 @@ -72,6 +72,8 @@ The path to output destination folder. By default the directory at which the app .RE .IP "--bdxf" .RB "Export dxf in binary form." +.IP "--text2paths" +.RB "Export text as paths." .IP "-x, --gsize " .RB "Set size value a pattern file, that was opened with standard measurements " "(export mode)" ". Valid values: 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56cm." .IP "-e, --gheight " diff --git a/src/app/valentina/core/vcmdexport.cpp b/src/app/valentina/core/vcmdexport.cpp index d97f19a54..73ab2f0fb 100644 --- a/src/app/valentina/core/vcmdexport.cpp +++ b/src/app/valentina/core/vcmdexport.cpp @@ -104,6 +104,10 @@ void VCommandLine::InitOptions(VCommandLineOptions &options, QMap options.append(new QCommandLineOption(QStringList() << LONG_OPTION_BINARYDXF, translate("VCommandLine", "Export dxf in binary form."))); + optionsIndex.insert(LONG_OPTION_TEXT2PATHS, index++); + options.append(new QCommandLineOption(QStringList() << LONG_OPTION_TEXT2PATHS, + translate("VCommandLine", "Export text as paths."))); + optionsIndex.insert(LONG_OPTION_GRADATIONSIZE, index++); options.append(new QCommandLineOption(QStringList() << SINGLE_OPTION_GRADATIONSIZE << LONG_OPTION_GRADATIONSIZE, translate("VCommandLine", "Set size value a pattern file, that was opened " @@ -624,10 +628,13 @@ int VCommandLine::OptExportType() const //--------------------------------------------------------------------------------------------------------------------- int VCommandLine::IsBinaryDXF() const { - if (parser.isSet(*optionsUsed.value(optionsIndex.value(LONG_OPTION_BINARYDXF)))) - { - return true; - } + return parser.isSet(*optionsUsed.value(optionsIndex.value(LONG_OPTION_BINARYDXF))); +} + +//--------------------------------------------------------------------------------------------------------------------- +int VCommandLine::IsTextAsPaths() const +{ + return parser.isSet(*optionsUsed.value(optionsIndex.value(LONG_OPTION_TEXT2PATHS))); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/app/valentina/core/vcmdexport.h b/src/app/valentina/core/vcmdexport.h index cf9d60a11..a27e60333 100644 --- a/src/app/valentina/core/vcmdexport.h +++ b/src/app/valentina/core/vcmdexport.h @@ -76,6 +76,7 @@ public: int OptExportType() const; int IsBinaryDXF() const; + int IsTextAsPaths() const; //generator creation is moved here ... because most options are for it only, so no need to create extra getters... //@brief creates VLayoutGenerator diff --git a/src/app/valentina/dialogs/dialoglayoutsettings.cpp b/src/app/valentina/dialogs/dialoglayoutsettings.cpp index 0776d6410..b80fbf3f0 100644 --- a/src/app/valentina/dialogs/dialoglayoutsettings.cpp +++ b/src/app/valentina/dialogs/dialoglayoutsettings.cpp @@ -337,6 +337,18 @@ void DialogLayoutSettings::SetIgnoreAllFields(bool value) ui->checkBoxIgnoreFileds->setChecked(value); } +//--------------------------------------------------------------------------------------------------------------------- +bool DialogLayoutSettings::IsTextAsPaths() const +{ + return ui->checkBoxTextAsPaths->isChecked(); +} + +//--------------------------------------------------------------------------------------------------------------------- +void DialogLayoutSettings::SetTextAsPaths(bool value) +{ + ui->checkBoxTextAsPaths->setChecked(value); +} + //--------------------------------------------------------------------------------------------------------------------- QString DialogLayoutSettings::SelectedPrinter() const { @@ -568,6 +580,7 @@ void DialogLayoutSettings::DialogAccepted() generator->SetUnitePages(IsUnitePages()); generator->SetStripOptimization(IsStripOptimization()); generator->SetMultiplier(GetMultiplier()); + generator->SetTestAsPaths(IsTextAsPaths()); if (IsIgnoreAllFields()) { @@ -659,6 +672,8 @@ void DialogLayoutSettings::RestoreDefaults() CorrectMaxFileds(); IgnoreAllFields(ui->checkBoxIgnoreFileds->isChecked()); + + ui->checkBoxTextAsPaths->setChecked(false); } //--------------------------------------------------------------------------------------------------------------------- @@ -1070,6 +1085,7 @@ void DialogLayoutSettings::ReadSettings() SetIgnoreAllFields(settings->GetIgnoreAllFields()); SetStripOptimization(settings->GetStripOptimization()); SetMultiplier(settings->GetMultiplier()); + SetTextAsPaths(settings->GetTextAsPaths()); FindTemplate(); @@ -1095,6 +1111,7 @@ void DialogLayoutSettings::WriteSettings() const settings->SetIgnoreAllFields(IsIgnoreAllFields()); settings->SetStripOptimization(IsStripOptimization()); settings->SetMultiplier(GetMultiplier()); + settings->SetTextAsPaths(IsTextAsPaths()); } //--------------------------------------------------------------------------------------------------------------------- diff --git a/src/app/valentina/dialogs/dialoglayoutsettings.h b/src/app/valentina/dialogs/dialoglayoutsettings.h index 39f46b950..ffecc2385 100644 --- a/src/app/valentina/dialogs/dialoglayoutsettings.h +++ b/src/app/valentina/dialogs/dialoglayoutsettings.h @@ -110,6 +110,9 @@ public: bool IsIgnoreAllFields() const; void SetIgnoreAllFields(bool value); + bool IsTextAsPaths() const; + void SetTextAsPaths(bool value); + QString SelectedPrinter() const; //support functions for the command line parser which uses invisible dialog to properly build layout generator diff --git a/src/app/valentina/dialogs/dialoglayoutsettings.ui b/src/app/valentina/dialogs/dialoglayoutsettings.ui index 83e9efd8b..2dccdf585 100644 --- a/src/app/valentina/dialogs/dialoglayoutsettings.ui +++ b/src/app/valentina/dialogs/dialoglayoutsettings.ui @@ -7,7 +7,7 @@ 0 0 600 - 531 + 533 @@ -17,7 +17,7 @@ :/icon/64x64/icon64x64.png:/icon/64x64/icon64x64.png - + @@ -308,6 +308,29 @@ + + + + + + Text + + + + + + Text will be converted to paths + + + Export text as paths + + + + + + + + @@ -732,7 +755,7 @@ - + diff --git a/src/app/valentina/mainwindow.cpp b/src/app/valentina/mainwindow.cpp index 7f1d2b2b7..e07bc33b9 100644 --- a/src/app/valentina/mainwindow.cpp +++ b/src/app/valentina/mainwindow.cpp @@ -4678,8 +4678,6 @@ void MainWindow::ZoomFirstShow() //--------------------------------------------------------------------------------------------------------------------- void MainWindow::DoExport(const VCommandLinePtr &expParams) { - auto settings = expParams->DefaultGenerator(); - const QHash *details = pattern->DataPieces(); if(not qApp->getOpeningPattern()) { @@ -4691,6 +4689,10 @@ void MainWindow::DoExport(const VCommandLinePtr &expParams) } } PrepareDetailsForLayout(details); + + auto settings = expParams->DefaultGenerator(); + settings->SetTestAsPaths(expParams->IsTextAsPaths()); + if (LayoutSettings(*settings.get())) { try diff --git a/src/libs/vlayout/vlayoutgenerator.cpp b/src/libs/vlayout/vlayoutgenerator.cpp index 5813ec678..914c4c717 100644 --- a/src/libs/vlayout/vlayoutgenerator.cpp +++ b/src/libs/vlayout/vlayoutgenerator.cpp @@ -61,7 +61,8 @@ VLayoutGenerator::VLayoutGenerator(QObject *parent) unitePages(false), stripOptimizationEnabled(false), multiplier(1), - stripOptimization(false) + stripOptimization(false), + textAsPaths(false) {} //--------------------------------------------------------------------------------------------------------------------- @@ -209,7 +210,7 @@ QList VLayoutGenerator::GetPapersItems() const QList list; for (int i=0; i < papers.count(); ++i) { - list.append(papers.at(i).GetPaperItem(autoCrop)); + list.append(papers.at(i).GetPaperItem(autoCrop, IsTestAsPaths())); } return list; } @@ -220,7 +221,7 @@ QList > VLayoutGenerator::GetAllDetails() const QList > list; for (int i=0; i < papers.count(); ++i) { - list.append(papers.at(i).GetItemDetails()); + list.append(papers.at(i).GetItemDetails(IsTestAsPaths())); } return list; } @@ -245,6 +246,18 @@ void VLayoutGenerator::SetStripOptimization(bool value) stripOptimization = value; } +//--------------------------------------------------------------------------------------------------------------------- +bool VLayoutGenerator::IsTestAsPaths() const +{ + return textAsPaths; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VLayoutGenerator::SetTestAsPaths(bool value) +{ + textAsPaths = value; +} + //--------------------------------------------------------------------------------------------------------------------- quint8 VLayoutGenerator::GetMultiplier() const { diff --git a/src/libs/vlayout/vlayoutgenerator.h b/src/libs/vlayout/vlayoutgenerator.h index f8fa58d42..137986bce 100644 --- a/src/libs/vlayout/vlayoutgenerator.h +++ b/src/libs/vlayout/vlayoutgenerator.h @@ -106,6 +106,9 @@ public: bool IsStripOptimization() const; void SetStripOptimization(bool value); + bool IsTestAsPaths() const; + void SetTestAsPaths(bool value); + signals: void Start(); void Arranged(int count); @@ -134,6 +137,7 @@ private: bool stripOptimizationEnabled; quint8 multiplier; bool stripOptimization; + bool textAsPaths; int PageHeight() const; int PageWidth() const; diff --git a/src/libs/vlayout/vlayoutpaper.cpp b/src/libs/vlayout/vlayoutpaper.cpp index 82379571d..911f8d884 100644 --- a/src/libs/vlayout/vlayoutpaper.cpp +++ b/src/libs/vlayout/vlayoutpaper.cpp @@ -315,13 +315,13 @@ bool VLayoutPaper::SaveResult(const VBestSquare &bestResult, const VLayoutPiece } //--------------------------------------------------------------------------------------------------------------------- -QGraphicsRectItem *VLayoutPaper::GetPaperItem(bool autoCrop) const +QGraphicsRectItem *VLayoutPaper::GetPaperItem(bool autoCrop, bool textAsPaths) const { QGraphicsRectItem *paper; if (autoCrop) { QScopedPointer scene(new QGraphicsScene()); - QList list = GetItemDetails(); + QList list = GetItemDetails(textAsPaths); for (int i=0; i < list.size(); ++i) { scene->addItem(list.at(i)); @@ -346,12 +346,12 @@ QGraphicsRectItem *VLayoutPaper::GetPaperItem(bool autoCrop) const } //--------------------------------------------------------------------------------------------------------------------- -QList VLayoutPaper::GetItemDetails() const +QList VLayoutPaper::GetItemDetails(bool textAsPaths) const { QList list; for (int i=0; i < d->details.count(); ++i) { - list.append(d->details.at(i).GetItem()); + list.append(d->details.at(i).GetItem(textAsPaths)); } return list; } diff --git a/src/libs/vlayout/vlayoutpaper.h b/src/libs/vlayout/vlayoutpaper.h index 37c95291a..653927d4a 100644 --- a/src/libs/vlayout/vlayoutpaper.h +++ b/src/libs/vlayout/vlayoutpaper.h @@ -88,8 +88,8 @@ public: bool ArrangeDetail(const VLayoutPiece &detail, std::atomic_bool &stop); int Count() const; - QGraphicsRectItem *GetPaperItem(bool autoCrop) const Q_REQUIRED_RESULT; - QList GetItemDetails() const Q_REQUIRED_RESULT; + QGraphicsRectItem *GetPaperItem(bool autoCrop, bool textAsPaths) const Q_REQUIRED_RESULT; + QList GetItemDetails(bool textAsPaths) const Q_REQUIRED_RESULT; QVector GetDetails() const; void SetDetails(const QList& details); diff --git a/src/libs/vlayout/vlayoutpiece.cpp b/src/libs/vlayout/vlayoutpiece.cpp index fc5260f59..6f6c704c7 100644 --- a/src/libs/vlayout/vlayoutpiece.cpp +++ b/src/libs/vlayout/vlayoutpiece.cpp @@ -923,7 +923,7 @@ QPainterPath VLayoutPiece::LayoutAllowancePath() const } //--------------------------------------------------------------------------------------------------------------------- -QGraphicsItem *VLayoutPiece::GetItem() const +QGraphicsItem *VLayoutPiece::GetItem(bool textAsPaths) const { QGraphicsPathItem *item = GetMainItem(); @@ -932,8 +932,8 @@ QGraphicsItem *VLayoutPiece::GetItem() const CreateInternalPathItem(i, item); } - CreateLabelStrings(item, d->detailLabel, d->m_tmDetail); - CreateLabelStrings(item, d->patternInfo, d->m_tmPattern); + CreateLabelStrings(item, d->detailLabel, d->m_tmDetail, textAsPaths); + CreateLabelStrings(item, d->patternInfo, d->m_tmPattern, textAsPaths); CreateGrainlineItem(item); return item; @@ -941,7 +941,7 @@ QGraphicsItem *VLayoutPiece::GetItem() const //--------------------------------------------------------------------------------------------------------------------- void VLayoutPiece::CreateLabelStrings(QGraphicsItem *parent, const QVector &labelShape, - const VTextManager &tm) const + const VTextManager &tm, bool textAsPaths) const { SCASSERT(parent != nullptr) @@ -963,6 +963,11 @@ void VLayoutPiece::CreateLabelStrings(QGraphicsItem *parent, const QVector dH) { break; @@ -1004,12 +1009,27 @@ void VLayoutPiece::CreateLabelStrings(QGraphicsItem *parent, const QVectormatrix; - QGraphicsSimpleTextItem* item = new QGraphicsSimpleTextItem(parent); - item->setFont(fnt); - item->setText(qsText); - item->setTransform(labelMatrix); + if (textAsPaths) + { + QPainterPath path; + path.addText(0, - static_cast(fm.ascent())/6., fnt, qsText); - dY += (fm.height() + tm.GetSpacing()); + QGraphicsPathItem* item = new QGraphicsPathItem(parent); + item->setPath(path); + item->setBrush(QBrush(Qt::black)); + item->setTransform(labelMatrix); + + dY += tm.GetSpacing(); + } + else + { + QGraphicsSimpleTextItem* item = new QGraphicsSimpleTextItem(parent); + item->setFont(fnt); + item->setText(qsText); + item->setTransform(labelMatrix); + + dY += (fm.height() + tm.GetSpacing()); + } } } } diff --git a/src/libs/vlayout/vlayoutpiece.h b/src/libs/vlayout/vlayoutpiece.h index 83336a0a3..aa35be6e6 100644 --- a/src/libs/vlayout/vlayoutpiece.h +++ b/src/libs/vlayout/vlayoutpiece.h @@ -126,7 +126,7 @@ public: QPainterPath ContourPath() const; QPainterPath LayoutAllowancePath() const; - QGraphicsItem *GetItem() const Q_REQUIRED_RESULT; + QGraphicsItem *GetItem(bool textAsPaths) const Q_REQUIRED_RESULT; private: QSharedDataPointer d; @@ -136,7 +136,8 @@ private: QGraphicsPathItem *GetMainItem() const Q_REQUIRED_RESULT; void CreateInternalPathItem(int i, QGraphicsItem *parent) const; - void CreateLabelStrings(QGraphicsItem *parent, const QVector &labelShape, const VTextManager &tm) const; + void CreateLabelStrings(QGraphicsItem *parent, const QVector &labelShape, const VTextManager &tm, + bool textAsPaths) const; void CreateGrainlineItem(QGraphicsItem *parent) const; template diff --git a/src/libs/vmisc/commandoptions.cpp b/src/libs/vmisc/commandoptions.cpp index 85f2ff3a7..5f3e072d2 100644 --- a/src/libs/vmisc/commandoptions.cpp +++ b/src/libs/vmisc/commandoptions.cpp @@ -50,6 +50,7 @@ const QString LONG_OPTION_EXP2FORMAT = QStringLiteral("format"); const QString SINGLE_OPTION_EXP2FORMAT = QStringLiteral("f"); const QString LONG_OPTION_BINARYDXF = QStringLiteral("bdxf"); +const QString LONG_OPTION_TEXT2PATHS = QStringLiteral("text2paths"); const QString LONG_OPTION_ROTATE = QStringLiteral("rotate"); const QString SINGLE_OPTION_ROTATE = QStringLiteral("r"); diff --git a/src/libs/vmisc/commandoptions.h b/src/libs/vmisc/commandoptions.h index 0848c20c1..fb7888dc9 100644 --- a/src/libs/vmisc/commandoptions.h +++ b/src/libs/vmisc/commandoptions.h @@ -47,6 +47,7 @@ extern const QString LONG_OPTION_EXP2FORMAT; extern const QString SINGLE_OPTION_EXP2FORMAT; extern const QString LONG_OPTION_BINARYDXF; +extern const QString LONG_OPTION_TEXT2PATHS; extern const QString LONG_OPTION_ROTATE; extern const QString SINGLE_OPTION_ROTATE; diff --git a/src/libs/vmisc/vsettings.cpp b/src/libs/vmisc/vsettings.cpp index 10f4fbee1..5cab4a234 100644 --- a/src/libs/vmisc/vsettings.cpp +++ b/src/libs/vmisc/vsettings.cpp @@ -44,6 +44,8 @@ Q_DECLARE_METATYPE(QMarginsF) +namespace +{ const QString settingConfigurationLabelLanguage = QStringLiteral("configuration/label_language"); const QString settingPathsPattern = QStringLiteral("paths/pattern"); @@ -76,6 +78,8 @@ const QString settingFields = QStringLiteral("layout/fields"); const QString settingIgnoreFields = QStringLiteral("layout/ignoreFields"); const QString settingStripOptimization = QStringLiteral("layout/stripOptimization"); const QString settingMultiplier = QStringLiteral("layout/multiplier"); +const QString settingTextAsPaths = QStringLiteral("layout/textAsPaths"); +} //--------------------------------------------------------------------------------------------------------------------- VSettings::VSettings(Format format, Scope scope, const QString &organization, const QString &application, @@ -584,3 +588,21 @@ void VSettings::SetMultiplier(quint8 value) setValue(settingMultiplier, value); } +//--------------------------------------------------------------------------------------------------------------------- +bool VSettings::GetTextAsPaths() const +{ + return value(settingTextAsPaths, GetDefTextAsPaths()).toBool(); +} + +//--------------------------------------------------------------------------------------------------------------------- +bool VSettings::GetDefTextAsPaths() +{ + return false; +} + +//--------------------------------------------------------------------------------------------------------------------- +void VSettings::SetTextAsPaths(bool value) +{ + setValue(settingTextAsPaths, value); +} + diff --git a/src/libs/vmisc/vsettings.h b/src/libs/vmisc/vsettings.h index 5e2a4b966..bd3d37f7e 100644 --- a/src/libs/vmisc/vsettings.h +++ b/src/libs/vmisc/vsettings.h @@ -151,6 +151,10 @@ public: static quint8 GetDefMultiplier(); void SetMultiplier(quint8 value); + bool GetTextAsPaths() const; + static bool GetDefTextAsPaths(); + void SetTextAsPaths(bool value); + private: Q_DISABLE_COPY(VSettings) };