diff --git a/src/adaptors/UBSvgSubsetAdaptor.cpp b/src/adaptors/UBSvgSubsetAdaptor.cpp index 2e9c417f..85f2d2ba 100644 --- a/src/adaptors/UBSvgSubsetAdaptor.cpp +++ b/src/adaptors/UBSvgSubsetAdaptor.cpp @@ -654,7 +654,7 @@ UBGraphicsScene* UBSvgSubsetAdaptor::UBSvgSubsetReader::loadScene() scene->registerTool(protractor); } } - else if (mXmlReader.name() == "protractor") + else if (mXmlReader.name() == "triangle") { UBGraphicsTriangle *triangle = triangleFromSvg(); @@ -1060,6 +1060,14 @@ bool UBSvgSubsetAdaptor::UBSvgSubsetWriter::persistScene() protractorToSvg(protractor); continue; } + + UBGraphicsTriangle *triangle = qgraphicsitem_cast (item); + + if (triangle && triangle->isVisible()) + { + triangleToSvg(triangle); + continue; + } } if (openStroke) @@ -2589,6 +2597,39 @@ UBGraphicsProtractor* UBSvgSubsetAdaptor::UBSvgSubsetReader::protractorFromSvg() return protractor; } +void UBSvgSubsetAdaptor::UBSvgSubsetWriter::triangleToSvg(UBGraphicsTriangle *item) +{ + + /** + * + * sample + * + + + */ + + mXmlWriter.writeStartElement(UBSettings::uniboardDocumentNamespaceUri, "triangle"); + mXmlWriter.writeAttribute("x", QString("%1").arg(item->boundingRect().x())); + mXmlWriter.writeAttribute("y", QString("%1").arg(item->boundingRect().y())); + mXmlWriter.writeAttribute("width", QString("%1").arg(item->boundingRect().width())); + mXmlWriter.writeAttribute("height", QString("%1").arg(item->boundingRect().height())); + mXmlWriter.writeAttribute("transform", toSvgTransform(item->sceneMatrix())); + mXmlWriter.writeAttribute("orientation", UBGraphicsTriangle::orientationToStr(item->getOrientation())); + + QString zs; + zs.setNum(item->zValue(), 'f'); // 'f' keeps precision + mXmlWriter.writeAttribute(UBSettings::uniboardDocumentNamespaceUri, "z-value", zs); + + UBItem* ubItem = dynamic_cast(item); + + if (ubItem) + { + mXmlWriter.writeAttribute(UBSettings::uniboardDocumentNamespaceUri, "uuid", UBStringUtils::toCanonicalUuid(ubItem->uuid())); + } + + mXmlWriter.writeEndElement(); +} + UBGraphicsTriangle* UBSvgSubsetAdaptor::UBSvgSubsetReader::triangleFromSvg() { UBGraphicsTriangle* triangle = new UBGraphicsTriangle(); @@ -2598,20 +2639,12 @@ UBGraphicsTriangle* UBSvgSubsetAdaptor::UBSvgSubsetReader::triangleFromSvg() graphicsItemFromSvg(triangle); - QStringRef svgX = mXmlReader.attributes().value("x"); - QStringRef svgY = mXmlReader.attributes().value("y"); - QStringRef svgWidth = mXmlReader.attributes().value("width"); - QStringRef svgHeight = mXmlReader.attributes().value("height"); QStringRef orientationStringRef = mXmlReader.attributes().value("orientation"); UBGraphicsTriangle::UBGraphicsTriangleOrientation orientation = UBGraphicsTriangle::orientationFromStr(orientationStringRef); + triangle->setOrientation(orientation); - if (!svgX.isNull() && !svgY.isNull() && !svgWidth.isNull() && !svgHeight.isNull()) - { - triangle->setRect(svgX.toString().toFloat(), svgY.toString().toFloat(), svgWidth.toString().toFloat(), svgHeight.toString().toFloat(), orientation); - } triangle->setVisible(true); - return triangle; } diff --git a/src/adaptors/UBSvgSubsetAdaptor.h b/src/adaptors/UBSvgSubsetAdaptor.h index aa60eae1..8a3412be 100644 --- a/src/adaptors/UBSvgSubsetAdaptor.h +++ b/src/adaptors/UBSvgSubsetAdaptor.h @@ -210,6 +210,7 @@ class UBSvgSubsetAdaptor void rulerToSvg(UBGraphicsRuler *item); void compassToSvg(UBGraphicsCompass *item); void protractorToSvg(UBGraphicsProtractor *item); + void triangleToSvg(UBGraphicsTriangle *item); void writeSvgElement(); private: diff --git a/src/tools/UBGraphicsTriangle.h b/src/tools/UBGraphicsTriangle.h index dc61e05c..da12bd0c 100644 --- a/src/tools/UBGraphicsTriangle.h +++ b/src/tools/UBGraphicsTriangle.h @@ -66,12 +66,24 @@ class UBGraphicsTriangle : public UBAbstractDrawRuler, public QGraphicsPolygonIt if (str == "TopRight") return TopRight; return sDefaultOrientation; } + static QString orientationToStr(UBGraphicsTriangleOrientation orientation) + { + QString result; + if (orientation == 0) result = "BottomLeft"; + else if (orientation == 1) result = "BottomRight"; + else if (orientation == 2) result = "TopLeft"; + else if (orientation == 3) result = "TopRight"; + + return result; + } + void setRect(const QRectF &rect, UBGraphicsTriangleOrientation orientation) { setRect(rect.x(), rect.y(), rect.width(), rect.height(), orientation); } void setRect(qreal x, qreal y, qreal w, qreal h, UBGraphicsTriangleOrientation orientation); void setOrientation(UBGraphicsTriangleOrientation orientation); + UBGraphicsTriangleOrientation getOrientation() const {return mOrientation;} QRectF rect() const {return boundingRect();} UBGraphicsScene* scene() const;