OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::GUI::TextureDisplacementPreviewJob Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/Jobs/TextureDisplacementPreviewJob.hpp>

Inheritance diagram for Slic3r::GUI::TextureDisplacementPreviewJob:
Collaboration diagram for Slic3r::GUI::TextureDisplacementPreviewJob:

Public Types

enum  JobPrepareState { PREPARE_STATE_DEFAULT = 0 , PREPARE_STATE_MENU = 1 }

Public Member Functions

 TextureDisplacementPreviewJob (TextureDisplacementPreviewInput &&input, uint64_t generation, std::shared_ptr< const std::atomic< uint64_t > > current_generation, std::function< void(std::vector< TextureDisplacementPreviewResult >, uint64_t)> on_finished)
void process (Ctl &ctl) override
void finalize (bool canceled, std::exception_ptr &eptr) override

Private Attributes

TextureDisplacementPreviewInput m_input
uint64_t m_generation
std::shared_ptr< const std::atomic< uint64_t > > m_current_generation
std::vector< TextureDisplacementPreviewResult > m_results
std::function< void(std::vector< TextureDisplacementPreviewResult >, uint64_t)> m_on_finished

Detailed Description

Member Enumeration Documentation

◆ JobPrepareState

Enumerator
PREPARE_STATE_DEFAULT 
PREPARE_STATE_MENU 
22 {
25 };
@ PREPARE_STATE_MENU
Definition Job.hpp:24
@ PREPARE_STATE_DEFAULT
Definition Job.hpp:23

Constructor & Destructor Documentation

◆ TextureDisplacementPreviewJob()

Slic3r::GUI::TextureDisplacementPreviewJob::TextureDisplacementPreviewJob ( TextureDisplacementPreviewInput && input,
uint64_t generation,
std::shared_ptr< const std::atomic< uint64_t > > current_generation,
std::function< void(std::vector< TextureDisplacementPreviewResult >, uint64_t)> on_finished )
20 : m_input(std::move(input)), m_generation(generation), m_current_generation(std::move(current_generation)),
21 m_on_finished(std::move(on_finished))
22{
23}
std::function< void(std::vector< TextureDisplacementPreviewResult >, uint64_t)> m_on_finished
Definition TextureDisplacementPreviewJob.hpp:93
uint64_t m_generation
Definition TextureDisplacementPreviewJob.hpp:90
std::shared_ptr< const std::atomic< uint64_t > > m_current_generation
Definition TextureDisplacementPreviewJob.hpp:91
TextureDisplacementPreviewInput m_input
Definition TextureDisplacementPreviewJob.hpp:89

References m_current_generation, m_generation, m_input, and m_on_finished.

Member Function Documentation

◆ finalize()

void Slic3r::GUI::TextureDisplacementPreviewJob::finalize ( bool canceled,
std::exception_ptr & eptr )
overridevirtual

Reimplemented from Slic3r::GUI::Job.

71{
72 if (!m_on_finished)
73 return;
74 // The handler must run on *every* outcome, cancellation included, because the caller uses it to
75 // clear its "a job is in flight" latch. Returning early on `canceled` - which is what a cancel_all()
76 // from Plater (project load/close, app exit) delivers - left that latch stuck true and no preview
77 // was ever queued again for the rest of the session. An empty result is the caller's signal that
78 // nothing usable came back; it already handles that.
79 if (canceled || eptr)
81 else
83}
std::vector< TextureDisplacementPreviewResult > m_results
Definition TextureDisplacementPreviewJob.hpp:92

References m_generation, m_on_finished, and m_results.

◆ process()

void Slic3r::GUI::TextureDisplacementPreviewJob::process ( Ctl & ctl)
overridevirtual

Implements Slic3r::GUI::Job.

26{
27 // No ctl.update_status() anywhere in here on purpose - see the class comment. A preview is
28 // invisible bookkeeping; the only thing on screen should be the preview itself.
29
30 // Only ever touches m_input (captured by value before this job was queued) and local state -
31 // never the live Model - so this is safe to run concurrently with the UI thread.
32 //
33 // The quantizers are built once for the whole run: the palette is the object's, not the part's,
34 // and each one fills a colour lookup cube that costs tens of milliseconds.
35 TextureColorRequest color_request;
36 TextureColorRequest *color = nullptr;
37 if (!m_input.color.empty()) {
38 color_request.quantize = GLGizmoTextureDisplacement::make_palette_quantizer(m_input.color.palette);
39 if (!m_input.color.palette_pure.empty())
40 color_request.quantize_pure = GLGizmoTextureDisplacement::make_palette_quantizer(m_input.color.palette_pure);
41 color_request.despeckle_passes = m_input.color.despeckle_passes;
42 if (color_request.quantize)
43 color = &color_request;
44 }
45
46 // Bail the moment this preview stops being the current one: build_texture_displacement() then
47 // returns an empty mesh, and finalize() drops the whole run rather than showing half of it.
48 const auto still_wanted = [this, &ctl](int) {
49 return !ctl.was_canceled() &&
51 };
52
53 m_results.resize(m_input.volumes.size());
54 for (size_t i = 0; i < m_input.volumes.size(); ++i) {
55 const TextureDisplacementPreviewVolume &volume = m_input.volumes[i];
56 if (color != nullptr)
57 color_request.out_triangle = &m_results[i].triangle_color;
58 m_results[i].mesh = build_texture_displacement(volume.base_mesh, volume.layers, volume.facets_data,
59 volume.options, still_wanted, color, volume.volume_to_world,
60 nullptr, nullptr,
61 volume.model_uv.empty() ? nullptr : &volume.model_uv,
62 &volume.texture_anchor, volume.resting_drop);
63 if (!still_wanted(0)) {
64 m_results.clear();
65 return;
66 }
67 }
68}
static ColorQuantizeFn make_palette_quantizer(const std::vector< PaletteEntry > &palette)
Definition GLGizmoTextureDisplacement.cpp:6019
indexed_triangle_set build_texture_displacement(const indexed_triangle_set &base_mesh, const std::vector< TextureDisplacementLayer > &layers, const TextureDisplacementFacetsData &facets_data, const TextureDisplacementOptions &options, const DisplacementProgressFn &progress, const TextureColorRequest *color, const Transform3d &volume_to_world, BakeStageRecorder *debug, TextureBakeStats *stats, const std::vector< Vec2f > *model_uv, const Vec3d *texture_anchor, float resting_drop)
Definition TextureDisplacement.cpp:3495

References Slic3r::GUI::TextureDisplacementPreviewVolume::base_mesh, Slic3r::build_texture_displacement(), Slic3r::TextureColorRequest::despeckle_passes, Slic3r::GUI::TextureDisplacementPreviewVolume::facets_data, Slic3r::GUI::TextureDisplacementPreviewVolume::layers, m_current_generation, m_generation, m_input, m_results, Slic3r::GUI::GLGizmoTextureDisplacement::make_palette_quantizer(), Slic3r::GUI::TextureDisplacementPreviewVolume::model_uv, Slic3r::GUI::TextureDisplacementPreviewVolume::options, Slic3r::TextureColorRequest::out_triangle, Slic3r::TextureColorRequest::quantize, Slic3r::TextureColorRequest::quantize_pure, Slic3r::GUI::TextureDisplacementPreviewVolume::resting_drop, Slic3r::GUI::TextureDisplacementPreviewVolume::texture_anchor, Slic3r::GUI::TextureDisplacementPreviewVolume::volume_to_world, and Slic3r::GUI::Job::Ctl::was_canceled().

Here is the call graph for this function:

Member Data Documentation

◆ m_current_generation

std::shared_ptr<const std::atomic<uint64_t> > Slic3r::GUI::TextureDisplacementPreviewJob::m_current_generation
private

◆ m_generation

uint64_t Slic3r::GUI::TextureDisplacementPreviewJob::m_generation
private

◆ m_input

TextureDisplacementPreviewInput Slic3r::GUI::TextureDisplacementPreviewJob::m_input
private

◆ m_on_finished

std::function<void(std::vector<TextureDisplacementPreviewResult>, uint64_t)> Slic3r::GUI::TextureDisplacementPreviewJob::m_on_finished
private

◆ m_results

std::vector<TextureDisplacementPreviewResult> Slic3r::GUI::TextureDisplacementPreviewJob::m_results
private

Referenced by finalize(), and process().


The documentation for this class was generated from the following files: