/
Puzzman
/
setPointMap
Обзор
Документация
Войти
/
Puzzman
/
setPointMap
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
scripts/libs/classes/class_printTable.ctl
209 строк
6 KB
Sergey
refactor
12 май 2025, 16:11
12 май 2025, 16:11
8c27993
Код
Авторство
О чём код?
class ClassPrintTable { private shared_ptr<StateTab> tab_ = nullptr; private file f_; private string path_; private int countLines = 0; private string n = "Наименование"; private string n2 = "Поз. в таблице"; private int sp = 0; private float dif = 0.0; private int maxLengthObject; private int maxLengthValue; public ClassPrintTable(shared_ptr<StateTab> Tab, const bool turn=false) { tab_ = Tab; maxLengthObject = checkMaxLengthObject(); maxLengthValue = checkMaxLengthValue(); } //поиск максимальной длины в знаячениях уставок private int checkMaxLengthValue() { int maxLength = 0; for (int j = 1; j <= dynlen(tab_.tableData.nameObjects); ++j) { int count = (tab_.needToFlip)?dynlen(tab_.tableData.rowsWithDataPLC):dynlen(tab_.tableData.rowsWithDataPLC[j])-4; for (int k = 1; k <= count; ++k) { string value = (tab_.needToFlip)?tab_.tableData.rowsWithDataPLC[k][j+4]:tab_.tableData.rowsWithDataPLC[j][k+4]; if (value.length() > maxLength) maxLength = value.length(); } } return maxLength; } //поиск максимальной длины в имнах уставок private int checkMaxLengthUst() { int maxLength = 0; for (int k = 1; k <= dynlen(tab_.tableData.nameUst[1]); ++k) { if (tab_.tableData.nameUst[1][k].length() > maxLength) maxLength = tab_.tableData.nameUst[1][k].length(); } return maxLength; } //поиск максимальной длины в имнах объектов private int checkMaxLengthObject() { int maxLength = 0; for (int k = 1; k <= dynlen(tab_.tableData.nameObjects); ++k) { if (tab_.tableData.nameObjects[k].length() > maxLength) maxLength = tab_.tableData.nameObjects[k].length(); } return maxLength; } //печать карты private print() { //Virtual_PDF_Printer - имя принтера(поменять на реальный, когда будет) //cpi - количество символов на дюйм //lpi - количество строк на дюйм //fit-to-page - встроить в лист //page-bottom - количество единиц отступа system("lp -d Virtual_PDF_Printer -o media=\"a4\" -o landscape -o cpi=24 -o lpi=8 -o fit-to-page -o page-bottom=5 " + path_); } private fileOpen() { path_ = "/opt/scadcc_export/" + tab_.tagTable + ".txt"; f_ = fopen(path_, "w"); } private fileClose() { fclose(f_); } private insertLegend() { int maxLength = checkMaxLengthUst(); int sp = 0; float dif; if (n.length() < maxLength) { dif = (float)(maxLength - n.length()); sp = ceil(dif / 2.0); int shift = (maxLength != n.length()) ? maxLength + 1 - sp - sp - n.length() : 0; fprintf(f_, "|%" + sp + "c%s%" + (sp + shift) + "c|", 32, n, 32); } else { fprintf(f_, "| %s |", n); } fprintf(f_, " %s |\n\n", n2); countLines += 2; for (int j = 1; j <= dynlen(tab_.tableData.nameUst[1]); ++j) { string name = tab_.tableData.nameUst[1][j]; sp = maxLength - name.length(); int shift = (maxLength != name.length()) ? maxLength + 1 - sp - name.length() : 0; fprintf(f_, "|%s%" + (sp + shift) + "c|", name, 32); string num = j; dif = (float)(n2.length() - num.length()); sp = ceil(dif / 2.0); int shift = (n2.length() != num.length()) ? n2.length() - sp - sp - num.length() : 0; sp = (shift <= 0)?++sp:0; fprintf(f_, "%" + sp + "c%s%" + (sp + shift) + "c|", 32, num, 32); fprintf(f_, "\n"); countLines += 1; } fprintf(f_, "\n\n"); countLines += 2; } private insertHeader() { int maxLength = checkMaxLengthObject(); string n = "Наименование"; int sp = 0; float dif; if (n.length() < maxLength) { dif = (float)(maxLength - n.length()); sp = ceil(dif / 2.0); int shift = (maxLength != n.length()) ? maxLength + 1 - sp - sp - n.length() : 0; fprintf(f_, "|%" + sp + "c%s%" + (sp + shift) + "c|", 32, n, 32); } else { fprintf(f_, "| %s |", n); } countLines += 1; int len = checkMaxLengthValue(); for (int k = 1; k <= dynlen(tab_.tableData.nameUst[1]); ++k) { string num = k; dif = (float)(maxLengthValue - num.length()); sp = ceil(dif / 2.0); int shift = (maxLengthValue != num.length()) ? maxLengthValue - sp - sp - num.length() : 0; sp = (shift <= 0)?++sp:0; fprintf(f_, "%" + sp + "c%s%" + (sp + shift) + "c|", 32, num, 32); } fprintf(f_, "\n\n"); countLines += 2; } private insertValue() { for (int j = 1; j <= dynlen(tab_.tableData.nameObjects); ++j) { if (countLines > 66) {countLines = 0; insertHeader();} string name = tab_.tableData.nameObjects[j]; int sp = maxLengthObject - name.length(); int shift = (maxLengthObject != name.length()) ? maxLengthObject + 1 - sp - name.length() : 0; fprintf(f_, "|%s%" + (sp + shift) + "c|", name, 32); int count = (tab_.needToFlip)?dynlen(tab_.tableData.rowsWithDataPLC):dynlen(tab_.tableData.rowsWithDataPLC[j])-4; for (int k = 1; k <= count; ++k) { int size = (tab_.needToFlip)?tab_.tableData.rowsWithDataPLC[k][j+4].length():tab_.tableData.rowsWithDataPLC[j][k+4].length(); float dif = (float)(maxLengthValue - size); sp = ceil(dif / 2.0); int shift = (maxLengthValue != size) ? maxLengthValue - sp - sp - size : 0; sp = (shift <= 0)?++sp:0; string value = (tab_.needToFlip)?tab_.tableData.rowsWithDataPLC[k][j+4]:tab_.tableData.rowsWithDataPLC[j][k+4]; fprintf(f_, "%" + sp + "c%s%" + (sp + shift) + "c|", 32, value, 32); } fprintf(f_, "\n"); countLines += 1; } } public createTable() { fileOpen(); insertLegend(); insertHeader(); insertValue(); fileClose(); print(); } ~ClassPrintTable() {} };