From 6b011c8e665b75d636d13d99d73edd618b089bc2 Mon Sep 17 00:00:00 2001 From: rettinghaus Date: Tue, 18 Feb 2025 11:58:27 +0100 Subject: [PATCH] write bezier points --- .../musicxml/export/exportmusicxml.cpp | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/importexport/musicxml/internal/musicxml/export/exportmusicxml.cpp b/src/importexport/musicxml/internal/musicxml/export/exportmusicxml.cpp index 406036abe863b..47a02b0e3d5e3 100644 --- a/src/importexport/musicxml/internal/musicxml/export/exportmusicxml.cpp +++ b/src/importexport/musicxml/internal/musicxml/export/exportmusicxml.cpp @@ -919,7 +919,15 @@ void SlurHandler::doSlurStart(const Slur* s, Notations& notations, XmlWriter& xm String tagName = u"slur"; tagName += u" type=\"start\""; tagName += slurTieLineStyle(s); - tagName += ExportMusicXml::positioningAttributes(s, true); + + const SlurSegment* front = s->frontSegment(); + const int spatium = s->spatium(); + if (front && ExportMusicXml::configuration()->exportLayout()) { + const PointF start = front->ups(Grip::START).pos(); + const PointF bezier = front->ups(Grip::BEZIER1).pos(); + tagName += String(u" bezier-x=\"%1\"").arg(10 * (bezier.x() - start.x()) / spatium); + tagName += String(u" bezier-y=\"%1\"").arg(-10 * bezier.y() / spatium); + } if (i >= 0) { // remove from list and print start @@ -965,7 +973,16 @@ void SlurHandler::doSlurStop(const Slur* s, Notations& notations, XmlWriter& xml m_started[i] = false; notations.tag(xml, s); String tagName = String(u"slur type=\"stop\" number=\"%1\"").arg(i + 1); - tagName += ExportMusicXml::positioningAttributes(s, false); + + const SlurSegment* back = s->backSegment(); + const int spatium = s->spatium(); + if (back && ExportMusicXml::configuration()->exportLayout()) { + const PointF end = back->ups(Grip::END).pos(); + const PointF bezier = back->ups(Grip::BEZIER2).pos(); + tagName += String(u" bezier-x=\"%1\"").arg(10 * (bezier.x() - end.x()) / spatium); + tagName += String(u" bezier-y=\"%1\"").arg(-10 * bezier.y() / spatium); + } + xml.tagRaw(tagName); } else { LOGD("no free slur slot"); @@ -976,7 +993,16 @@ void SlurHandler::doSlurStop(const Slur* s, Notations& notations, XmlWriter& xml m_started[i] = false; notations.tag(xml, s); String tagName = String(u"slur type=\"stop\" number=\"%1\"").arg(i + 1); - tagName += ExportMusicXml::positioningAttributes(s, false); + + const SlurSegment* back = s->backSegment(); + const int spatium = s->spatium(); + if (back && ExportMusicXml::configuration()->exportLayout()) { + const PointF end = back->ups(Grip::END).pos(); + const PointF bezier = back->ups(Grip::BEZIER2).pos(); + tagName += String(u" bezier-x=\"%1\"").arg(10 * (bezier.x() - end.x()) / spatium); + tagName += String(u" bezier-y=\"%1\"").arg(-10 * bezier.y() / spatium); + } + xml.tagRaw(tagName); } }