Skip to content

Commit d33a277

Browse files
authored
Merge pull request #56 from prusa3d/jb_produced_on_support
Added support for "Produced on" (time of creation)
2 parents 3db61e4 + a44f3bb commit d33a277

File tree

5 files changed

+6329
-2
lines changed

5 files changed

+6329
-2
lines changed

src/LibBGCode/convert/convert.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,10 +302,17 @@ BGCODE_CONVERT_EXPORT EResult from_ascii_to_binary(FILE& src_file, FILE& dst_fil
302302
size_t pos = sv_line.find(GeneratedByPrusaSlicer);
303303
if (pos != std::string_view::npos) {
304304
std::string_view version = trim(sv_line.substr(pos + GeneratedByPrusaSlicer.length()));
305+
std::string_view time;
305306
pos = version.find(" ");
306-
if (pos != std::string_view::npos)
307+
if (pos != std::string_view::npos) {
308+
if (version.substr(pos, 4) == " on ")
309+
time = version.substr(pos + 4);
307310
version = version.substr(0, pos);
311+
312+
}
308313
binary_data.file_metadata.raw_data.emplace_back("Producer", "PrusaSlicer " + std::string(version));
314+
if (!time.empty())
315+
binary_data.file_metadata.raw_data.emplace_back("Produced on", time);
309316
producer_found = true;
310317
processed_lines.emplace_back(lines_counter++);
311318
return;
@@ -636,9 +643,17 @@ BGCODE_CONVERT_EXPORT EResult from_binary_to_ascii(FILE& src_file, FILE& dst_fil
636643
if (res != EResult::Success)
637644
// propagate error
638645
return res;
646+
639647
auto producer_it = std::find_if(file_metadata_block.raw_data.begin(), file_metadata_block.raw_data.end(),
640648
[](const std::pair<std::string, std::string>& item) { return item.first == "Producer"; });
641-
const std::string producer_str = (producer_it != file_metadata_block.raw_data.end()) ? producer_it->second : "Unknown";
649+
std::string producer_str = (producer_it != file_metadata_block.raw_data.end()) ? producer_it->second : "Unknown";
650+
651+
652+
auto produced_on_it = std::find_if(file_metadata_block.raw_data.begin(), file_metadata_block.raw_data.end(),
653+
[](const auto& item) { return item.first == "Produced on"; });
654+
if (produced_on_it != file_metadata_block.raw_data.end())
655+
producer_str += " on " + produced_on_it->second;
656+
642657
if (!write_line("; generated by " + producer_str + "\n\n\n"))
643658
return EResult::WriteError;
644659
res = read_next_block_header(src_file, file_header, block_header, checksum_buffer.data(), checksum_buffer.size());

tests/convert/convert_tests.cpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,3 +144,44 @@ TEST_CASE("Convert from ascii to binary", "[Convert]")
144144
// compare results
145145
compare_text_files(ba_dst_filename, ab_src_filename);
146146
}
147+
148+
TEST_CASE("Convert from binary to ascii PS 2.8.1", "[Convert]")
149+
{
150+
std::cout << "\nTEST: Convert from binary to ascii in PS 2.8.1 format\n";
151+
152+
const std::string src_filename = std::string(TEST_DATA_DIR) + "/mini_cube_ps2.8.1.bgcode";
153+
const std::string dst_filename = std::string(TEST_DATA_DIR) + "/mini_cube_ps2.8.1_out_a.gcode";
154+
const std::string check_filename = std::string(TEST_DATA_DIR) + "/mini_cube_ps2.8.1_ref.gcode";
155+
156+
// convert from binary to ascii
157+
binary_to_ascii(src_filename, dst_filename);
158+
// compare results
159+
compare_text_files(dst_filename, check_filename);
160+
}
161+
162+
TEST_CASE("Convert from ascii to binary PS 2.8.1", "[Convert]")
163+
{
164+
std::cout << "\nTEST: Convert from ascii to binary in PS 2.8.1 format\n";
165+
166+
// convert from ascii to binary
167+
const std::string ab_src_filename = std::string(TEST_DATA_DIR) + "/mini_cube_ps2.8.1.gcode";
168+
const std::string ab_dst_filename = std::string(TEST_DATA_DIR) + "/mini_cube_ps2.8.1_out_b.bgcode";
169+
BinarizerConfig config;
170+
config.checksum = EChecksumType::CRC32;
171+
config.compression.file_metadata = ECompressionType::None;
172+
config.compression.print_metadata = ECompressionType::None;
173+
config.compression.printer_metadata = ECompressionType::None;
174+
config.compression.slicer_metadata = ECompressionType::Deflate;
175+
config.compression.gcode = ECompressionType::Heatshrink_12_4;
176+
config.gcode_encoding = EGCodeEncodingType::MeatPackComments;
177+
config.metadata_encoding = EMetadataEncodingType::INI;
178+
ascii_to_binary(ab_src_filename, ab_dst_filename, config);
179+
180+
// convert back from binary to ascii
181+
const std::string ba_src_filename = ab_dst_filename;
182+
const std::string ba_dst_filename = std::string(TEST_DATA_DIR) + "/mini_cube_ps2.8.1_final.gcode";
183+
binary_to_ascii(ba_src_filename, ba_dst_filename);
184+
185+
// compare results
186+
compare_text_files(ba_dst_filename, ab_src_filename);
187+
}
26.2 KB
Binary file not shown.

0 commit comments

Comments
 (0)