diff --git a/sources/bordertitleblock.cpp b/sources/bordertitleblock.cpp index e8d58ff30..471bf26ec 100644 --- a/sources/bordertitleblock.cpp +++ b/sources/bordertitleblock.cpp @@ -651,6 +651,7 @@ void BorderTitleBlock::drawDxf( // dessine la numerotation des colonnes if (display_border_ && display_columns_) { + int offset = settings.value("border-columns_0", true).toBool() ? -1 : 0; for (int i = 1 ; i <= columns_count_ ; ++ i) { double xCoord = diagram_rect_.topLeft().x() * Createdxf::xScale + (rows_header_width_ + ((i - 1) * @@ -662,11 +663,11 @@ void BorderTitleBlock::drawDxf( double recHeight = columns_header_height_; Createdxf::drawRectangle(file_path, xCoord, yCoord, recWidth, recHeight, color); - if (settings.value("border-columns_0", true).toBool()){ + Createdxf::drawTextAligned(file_path, - QString::number(i - 1), + QString::number(i - offset), xCoord+recWidth/4, - yCoord + recHeight*0.2, + yCoord + recHeight*0.5, recHeight*0.7, 0, 0, @@ -676,22 +677,7 @@ void BorderTitleBlock::drawDxf( 1, color, 0); - }else{ - Createdxf::drawTextAligned(file_path, - QString::number(i), - xCoord+recWidth/4, - yCoord + recHeight*0.2, - recHeight*0.7, - 0, - 0, - 1, - 2, - xCoord+recWidth/2, - 1, - color, - 0); - } - } + } } // draw line numbering diff --git a/sources/createdxf.cpp b/sources/createdxf.cpp index 089ad5716..8f5ea7523 100644 --- a/sources/createdxf.cpp +++ b/sources/createdxf.cpp @@ -826,18 +826,23 @@ void Createdxf::drawTextAligned(const QString& fileName, To_Dxf << text << "\r\n"; // Text Value To_Dxf << 50 << "\r\n"; To_Dxf << rotation << "\r\n"; // Text Rotation - // If "Fit to width", then check if width of text < width specified then change it "center align or left align" +#if 0 + // If "Fit to width", then check if width of text < width specified then change it "center align or left align" if (hAlign == 5) { int xDiff = xAlign - x; + int len = text.length(); + int t = xDiff/height; if (text.length() < xDiff/height && !leftAlign) { hAlign = 1; - xAlign = (x+xAlign) / 2; + xAlign = x+ (xAlign / 2); } else if (text.length() < xDiff/height && leftAlign) { - file.close(); - return; + hAlign = 0; + xAlign = x; +// file.close(); +// return; } } - +#endif To_Dxf << 51 << "\r\n"; To_Dxf << oblique << "\r\n"; // Text Obliqueness To_Dxf << 72 << "\r\n"; diff --git a/sources/titleblocktemplate.cpp b/sources/titleblocktemplate.cpp index c4700fb3c..5b93c858d 100644 --- a/sources/titleblocktemplate.cpp +++ b/sources/titleblocktemplate.cpp @@ -1804,50 +1804,53 @@ void TitleBlockTemplate::renderTextCellDxf(QString &file_path, textHeight = text_font.pixelSize(); qreal x2 = x + w; + qreal y1 = y; int vAlign = 0; int hAlign = 0; - bool hALigned = false; + + x2 = x; // default + + if ( cell.alignment & Qt::AlignTop ) { + vAlign = 3; + y1 = y + h - (textHeight*Createdxf::yScale / 8); + } else if ( cell.alignment & Qt::AlignVCenter ) { + vAlign = 2; + y1 = y + h/2; + } else if ( cell.alignment & Qt::AlignBottom ) { + y1 = y + (textHeight*Createdxf::yScale / 8); + } if ( cell.alignment & Qt::AlignRight ) { hAlign = 2; - hALigned = true; + x2 = x + w; } else if ( cell.alignment & Qt::AlignHCenter ) { hAlign = 1; - hALigned = true; x2 = x + w/2; - } else if ( cell.alignment & Qt::AlignJustify ) { + } else if (cell.alignment & Qt::AlignJustify ) { hAlign = 5; - hALigned = true; + vAlign = 0; + x2 = x + w; + y1 = y + textHeight*Createdxf::yScale / 8; } - if ( cell.alignment & Qt::AlignTop ) { - vAlign = 3; - y += h - textHeight*Createdxf::yScale; - if (!hALigned) - x2 = x; - } else if ( cell.alignment & Qt::AlignVCenter ) { - vAlign = 2; - y += h/2; - if (!hALigned) - x2 = x; - } else if ( cell.alignment & Qt::AlignBottom ) {} - //painter.setFont(text_font); qreal ratio = 1.0; - if (cell.hadjust) { + + if (cell.hadjust) { // Scale font width to fit string in cell width w - QFontMetricsF font_metrics(text_font); - qreal textw = font_metrics.width(text)*Createdxf::xScale; - if (textw > w) { - ratio = (w / textw) * 0.8; // Allow some space around text in cell - } + // As DXF font aspect ratio is implementation dependent we add a fudge-factor based on tests with AutoCAD + int len = text.length() * textHeight * Createdxf::xScale * 1.2; + + if(len > w) + ratio = (w/len); } - // x & y offset values below (1 & 3) currently set heuristically based on appearance... + + // x offset value below currently set heuristically based on appearance... Createdxf::drawTextAligned(file_path, text, - x - 1*Createdxf::xScale, - y - 3*Createdxf::yScale, + x - 2*Createdxf::xScale, + y1, textHeight*Createdxf::yScale, 0, 0, @@ -1855,12 +1858,11 @@ void TitleBlockTemplate::renderTextCellDxf(QString &file_path, vAlign, x2, ratio, - color, + color, + cell.alignment & Qt::AlignLeft, 0); - } - /** @brief TitleBlockTemplate::forgetSpanning Set the spanner_cell attribute of every cell to 0.