diff --git a/sources/exportdialog.cpp b/sources/exportdialog.cpp index 6e68b7cce..82883c49f 100644 --- a/sources/exportdialog.cpp +++ b/sources/exportdialog.cpp @@ -36,6 +36,8 @@ #include "element.h" #include "dynamicelementtextitem.h" +#include + /** Constructeur @param project Le projet a exporter @@ -498,7 +500,42 @@ void ExportDialog::generateDxf(Diagram *diagram, int width, int height, bool kee qreal hotspot_y = Createdxf::sheetHeight - (elem_pos_y) * Createdxf::yScale; ElementPictureFactory::primitives primitives = ElementPictureFactory::instance()->getPrimitives(elmt->location()); - + + for(QGraphicsSimpleTextItem *text : primitives.m_texts) + { + qreal fontSize = text->font().pointSizeF(); + if (fontSize < 0) { + fontSize = text->font().pixelSize(); + } + fontSize *= Createdxf::yScale; + qreal x = elem_pos_x + text->pos().x(); + qreal y = elem_pos_y + text->pos().y(); + x *= Createdxf::xScale; + y = Createdxf::sheetHeight - (y * Createdxf::yScale);// - fontSize; + QPointF transformed_point = rotation_transformed(x, y, hotspot_x, hotspot_y, rotation_angle); + x = transformed_point.x(); + y = transformed_point.y(); + QStringList lines = text->text().split('\n'); + y += (fontSize/2) * (lines.count()-1); + for (QString line : lines) + { + qreal angle = 360 - (text->rotation() + rotation_angle); + if (line.size() > 0 && line != "_" ) { + Createdxf::drawText(file_path, line, x, y, fontSize, angle, 0); + } + angle += 1080; + // coordinates for next line + if (int(angle) % 360 == 0) // no rotation + y -= fontSize*1.06; + else if (int(angle - 180) % 360 == 0) // 180 degrees rotation + y += fontSize*1.06; + else if (int(angle - 270) % 360 == 0) // 270 degrees rotation + x -= fontSize*1.06; + else // ((angle - 90) % 360 == 0) 90 degrees rotation + x += fontSize*1.06; + } + } + for (QLineF line : primitives.m_lines) { qreal x1 = (elem_pos_x + line.p1().x()) * Createdxf::xScale; diff --git a/sources/factory/elementpicturefactory.cpp b/sources/factory/elementpicturefactory.cpp index 778706e82..5202a0253 100644 --- a/sources/factory/elementpicturefactory.cpp +++ b/sources/factory/elementpicturefactory.cpp @@ -27,6 +27,7 @@ #include #include #include +#include ElementPictureFactory* ElementPictureFactory::m_factory = nullptr; @@ -124,6 +125,12 @@ ElementPictureFactory::primitives ElementPictureFactory::getPrimitives(const Ele return m_primitives_H.value(location.uuid()); } +ElementPictureFactory::~ElementPictureFactory() { + for (primitives p : m_primitives_H.values()) { + qDeleteAll(p.m_texts); + } +} + /** * @brief ElementPictureFactory::build * Build the picture from location. @@ -523,6 +530,14 @@ void ElementPictureFactory::parseText(const QDomElement &dom, QPainter &painter, ctx.palette.setColor(QPalette::Text, text_color); text_document.documentLayout() -> draw(&painter, ctx); + //A very dirty workaround for export this text to dxf + QGraphicsSimpleTextItem *qgsti = new QGraphicsSimpleTextItem(); + qgsti->setText(dom.attribute("text")); + qgsti->setFont(font_); + qgsti->setPos(dom.attribute("x").toDouble(), dom.attribute("y").toDouble()); + qgsti->setRotation(dom.attribute("rotation", "0").toDouble()); + prim.m_texts << qgsti; + painter.restore(); } diff --git a/sources/factory/elementpicturefactory.h b/sources/factory/elementpicturefactory.h index 65134f95e..48dd125e7 100644 --- a/sources/factory/elementpicturefactory.h +++ b/sources/factory/elementpicturefactory.h @@ -27,6 +27,7 @@ class QPicture; class QUuid; class QDomElement; class QPainter; +class QGraphicsSimpleTextItem; /** * @brief The ElementPictureFactory class @@ -43,6 +44,7 @@ class ElementPictureFactory QList m_circles; QList> m_polygons; QList> m_arcs; + QList m_texts; }; @@ -88,7 +90,7 @@ class ElementPictureFactory ElementPictureFactory() {} ElementPictureFactory (const ElementPictureFactory &); ElementPictureFactory operator= (const ElementPictureFactory &); - ~ElementPictureFactory() {} + ~ElementPictureFactory(); bool build(const ElementsLocation &location, QPicture *picture=nullptr, QPicture *low_picture=nullptr); void parseElement(const QDomElement &dom, QPainter &painter, primitives &prim) const;