Fix some DXF issues

This commit is contained in:
David Varley
2020-09-04 16:06:06 +10:00
parent ec464282f3
commit 71d7f8bbe6
3 changed files with 46 additions and 53 deletions

View File

@@ -651,6 +651,7 @@ void BorderTitleBlock::drawDxf(
// dessine la numerotation des colonnes // dessine la numerotation des colonnes
if (display_border_ && if (display_border_ &&
display_columns_) { display_columns_) {
int offset = settings.value("border-columns_0", true).toBool() ? -1 : 0;
for (int i = 1 ; i <= columns_count_ ; ++ i) { for (int i = 1 ; i <= columns_count_ ; ++ i) {
double xCoord = diagram_rect_.topLeft().x() * Createdxf::xScale + double xCoord = diagram_rect_.topLeft().x() * Createdxf::xScale +
(rows_header_width_ + ((i - 1) * (rows_header_width_ + ((i - 1) *
@@ -662,11 +663,11 @@ void BorderTitleBlock::drawDxf(
double recHeight = columns_header_height_; double recHeight = columns_header_height_;
Createdxf::drawRectangle(file_path, xCoord, yCoord, Createdxf::drawRectangle(file_path, xCoord, yCoord,
recWidth, recHeight, color); recWidth, recHeight, color);
if (settings.value("border-columns_0", true).toBool()){
Createdxf::drawTextAligned(file_path, Createdxf::drawTextAligned(file_path,
QString::number(i - 1), QString::number(i - offset),
xCoord+recWidth/4, xCoord+recWidth/4,
yCoord + recHeight*0.2, yCoord + recHeight*0.5,
recHeight*0.7, recHeight*0.7,
0, 0,
0, 0,
@@ -676,22 +677,7 @@ void BorderTitleBlock::drawDxf(
1, 1,
color, color,
0); 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 // draw line numbering

View File

@@ -826,18 +826,23 @@ void Createdxf::drawTextAligned(const QString& fileName,
To_Dxf << text << "\r\n"; // Text Value To_Dxf << text << "\r\n"; // Text Value
To_Dxf << 50 << "\r\n"; To_Dxf << 50 << "\r\n";
To_Dxf << rotation << "\r\n"; // Text Rotation 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) { if (hAlign == 5) {
int xDiff = xAlign - x; int xDiff = xAlign - x;
int len = text.length();
int t = xDiff/height;
if (text.length() < xDiff/height && !leftAlign) { if (text.length() < xDiff/height && !leftAlign) {
hAlign = 1; hAlign = 1;
xAlign = (x+xAlign) / 2; xAlign = x+ (xAlign / 2);
} else if (text.length() < xDiff/height && leftAlign) { } else if (text.length() < xDiff/height && leftAlign) {
file.close(); hAlign = 0;
return; xAlign = x;
// file.close();
// return;
} }
} }
#endif
To_Dxf << 51 << "\r\n"; To_Dxf << 51 << "\r\n";
To_Dxf << oblique << "\r\n"; // Text Obliqueness To_Dxf << oblique << "\r\n"; // Text Obliqueness
To_Dxf << 72 << "\r\n"; To_Dxf << 72 << "\r\n";

View File

@@ -1804,50 +1804,53 @@ void TitleBlockTemplate::renderTextCellDxf(QString &file_path,
textHeight = text_font.pixelSize(); textHeight = text_font.pixelSize();
qreal x2 = x + w; qreal x2 = x + w;
qreal y1 = y;
int vAlign = 0; int vAlign = 0;
int hAlign = 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 ) { if ( cell.alignment & Qt::AlignRight ) {
hAlign = 2; hAlign = 2;
hALigned = true; x2 = x + w;
} else if ( cell.alignment & Qt::AlignHCenter ) { } else if ( cell.alignment & Qt::AlignHCenter ) {
hAlign = 1; hAlign = 1;
hALigned = true;
x2 = x + w/2; x2 = x + w/2;
} else if ( cell.alignment & Qt::AlignJustify ) { } else if (cell.alignment & Qt::AlignJustify ) {
hAlign = 5; 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); //painter.setFont(text_font);
qreal ratio = 1.0; qreal ratio = 1.0;
if (cell.hadjust) {
if (cell.hadjust) {
// Scale font width to fit string in cell width w // Scale font width to fit string in cell width w
QFontMetricsF font_metrics(text_font); // As DXF font aspect ratio is implementation dependent we add a fudge-factor based on tests with AutoCAD
qreal textw = font_metrics.width(text)*Createdxf::xScale; int len = text.length() * textHeight * Createdxf::xScale * 1.2;
if (textw > w) {
ratio = (w / textw) * 0.8; // Allow some space around text in cell 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, Createdxf::drawTextAligned(file_path,
text, text,
x - 1*Createdxf::xScale, x - 2*Createdxf::xScale,
y - 3*Createdxf::yScale, y1,
textHeight*Createdxf::yScale, textHeight*Createdxf::yScale,
0, 0,
0, 0,
@@ -1855,12 +1858,11 @@ void TitleBlockTemplate::renderTextCellDxf(QString &file_path,
vAlign, vAlign,
x2, x2,
ratio, ratio,
color, color,
cell.alignment & Qt::AlignLeft,
0); 0);
} }
/** /**
@brief TitleBlockTemplate::forgetSpanning @brief TitleBlockTemplate::forgetSpanning
Set the spanner_cell attribute of every cell to 0. Set the spanner_cell attribute of every cell to 0.