[qet] qet/qet: [5896] Static text of element are now exported to dxf

[ Thread Index | Date Index | More lists.tuxfamily.org/qet Archives ]


Revision: 5896
Author:   blacksun
Date:     2019-05-28 21:22:36 +0200 (Tue, 28 May 2019)
Log Message:
-----------
Static text of element are now exported to dxf

Modified Paths:
--------------
    trunk/sources/exportdialog.cpp
    trunk/sources/factory/elementpicturefactory.cpp
    trunk/sources/factory/elementpicturefactory.h

Modified: trunk/sources/exportdialog.cpp
===================================================================
--- trunk/sources/exportdialog.cpp	2019-05-28 15:59:42 UTC (rev 5895)
+++ trunk/sources/exportdialog.cpp	2019-05-28 19:22:36 UTC (rev 5896)
@@ -36,6 +36,8 @@
 #include "element.h"
 #include "dynamicelementtextitem.h"
 
+#include <QGraphicsSimpleTextItem>
+
 /**
 	Constructeur
 	@param project Le projet a exporter
@@ -498,7 +500,42 @@
 		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;

Modified: trunk/sources/factory/elementpicturefactory.cpp
===================================================================
--- trunk/sources/factory/elementpicturefactory.cpp	2019-05-28 15:59:42 UTC (rev 5895)
+++ trunk/sources/factory/elementpicturefactory.cpp	2019-05-28 19:22:36 UTC (rev 5896)
@@ -27,6 +27,7 @@
 #include <QPicture>
 #include <iostream>
 #include <QAbstractTextDocumentLayout>
+#include <QGraphicsSimpleTextItem>
 
 ElementPictureFactory* ElementPictureFactory::m_factory = nullptr;
 
@@ -124,6 +125,12 @@
 	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 @@
 	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();
 }
 

Modified: trunk/sources/factory/elementpicturefactory.h
===================================================================
--- trunk/sources/factory/elementpicturefactory.h	2019-05-28 15:59:42 UTC (rev 5895)
+++ trunk/sources/factory/elementpicturefactory.h	2019-05-28 19:22:36 UTC (rev 5896)
@@ -27,6 +27,7 @@
 class QUuid;
 class QDomElement;
 class QPainter;
+class QGraphicsSimpleTextItem;
 
 /**
  * @brief The ElementPictureFactory class
@@ -43,6 +44,7 @@
 			QList<QRectF> m_circles;
 			QList<QVector<QPointF>> m_polygons;
 			QList<QVector<qreal>> m_arcs;
+			QList<QGraphicsSimpleTextItem*> m_texts;
 		};
 		
 		
@@ -88,7 +90,7 @@
 		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;


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/