498{
499 std::uint32_t layer_count =
m_layers.size();
500
506 std::vector<uint8_t> layer_images;
507 std::uint32_t image_offset;
508
510
512 intro.area_num = 4;
513 intro.header_data_offset = sizeof(intro);
514 intro.preview_data_offset = sizeof(intro) + sizeof(header);
515 intro.layer_data_offset = intro.preview_data_offset + sizeof(preview);
516 intro.image_data_offset = intro.layer_data_offset +
517 sizeof(layers_header) +
518 (sizeof(anycubicsla_format_layer) * layer_count);
519
522
523 try {
524
525 std::ofstream out;
526 out.open(fname, std::ios::binary | std::ios::out | std::ios::trunc);
530
531 layers_header.payload_size = intro.image_data_offset - intro.layer_data_offset -
532 sizeof(layers_header.tag) - sizeof(layers_header.payload_size);
533 layers_header.layer_count = layer_count;
535
536
538 image_offset = intro.image_data_offset;
539 size_t i = 0;
540 for (
const sla::EncodedRaster &rst :
m_layers) {
542 std::memset(&l, 0, sizeof(l));
543 l.image_offset = image_offset;
544 l.image_size = rst.size();
545 if (i < header.bottom_layer_count) {
546 l.exposure_time_s = header.bottom_exposure_time_s;
547 l.layer_height_mm = misc.bottom_layer_height_mm;
548 l.lift_distance_mm = misc.bottom_lift_distance_mm;
549 l.lift_speed_mms = misc.bottom_lift_speed_mms;
550 } else {
551 l.exposure_time_s = header.exposure_time_s;
552 l.layer_height_mm = header.layer_height_mm;
553 l.lift_distance_mm = header.lift_distance_mm;
554 l.lift_speed_mms = header.lift_speed_mms;
555 }
556 image_offset += l.image_size;
558
559 const char* img_start = reinterpret_cast<const char*>(rst.data());
560 const char* img_end = img_start + rst.size();
561 std::copy(img_start, img_end, std::back_inserter(layer_images));
562 i++;
563 }
564 const char* img_buffer = reinterpret_cast<const char*>(layer_images.data());
565 out.write(img_buffer, layer_images.size());
566 out.close();
567 } catch(std::exception& e) {
568 BOOST_LOG_TRIVIAL(
error) << e.what();
569
570 throw;
571 }
572
573}
#define LAYER_SIZE_ESTIMATE
Definition AnycubicSLA.cpp:32
void fill_preview(anycubicsla_format_preview &p, anycubicsla_format_misc &, const ThumbnailsList &thumbnails)
Definition AnycubicSLA.cpp:228
void fill_header(anycubicsla_format_header &h, anycubicsla_format_misc &m, const SLAPrint &print, std::uint32_t layer_count)
Definition AnycubicSLA.cpp:272
struct Slic3r::anycubicsla_format_layer anycubicsla_format_layer
struct Slic3r::anycubicsla_format_misc anycubicsla_format_misc
static void anycubicsla_write_intro(std::ofstream &out, anycubicsla_format_intro &i)
Definition AnycubicSLA.cpp:425
struct Slic3r::anycubicsla_format_preview anycubicsla_format_preview
static void anycubicsla_write_layer(std::ofstream &out, anycubicsla_format_layer &l)
Definition AnycubicSLA.cpp:482
static void anycubicsla_write_header(std::ofstream &out, anycubicsla_format_header &h)
Definition AnycubicSLA.cpp:439
static void anycubicsla_write_preview(std::ofstream &out, anycubicsla_format_preview &p)
Definition AnycubicSLA.cpp:465
struct Slic3r::anycubicsla_format_intro anycubicsla_format_intro
struct Slic3r::anycubicsla_format_layers_header anycubicsla_format_layers_header
static void anycubicsla_write_layers_header(std::ofstream &out, anycubicsla_format_layers_header &h)
Definition AnycubicSLA.cpp:475
struct Slic3r::anycubicsla_format_header anycubicsla_format_header
static char error[256]
Definition tga.cpp:50