libvcad_compilers — utilities#
Shared helpers for attribute resolution, voxel processing, and I/O.
-
namespace AttributeResolver#
Functions
Validates that the root node has all required attributes.
Throws std::runtime_error with a descriptive message listing missing attributes.
-
class ColorPipeline#
- #include <color_pipeline.h>
Public Functions
-
glm::vec4 apply_icc_profile(glm::vec3 rgb) const#
Transforms an RGB color (0 to 1) to CMYK using the ICC profile.
-
std::shared_ptr<ColorPipeline> clone() const#
Creates a new instance with its own lcms2 state for thread safety.
-
ColorPipeline(const std::string &icc_profile = "default", const ColorPipelineOptions &options = ColorPipelineOptions())#
-
std::array<float, 6> ink_probabilities(const glm::vec4 &rgba_color) const#
Converts an sRGBA color into CMYKW+Clear ink probabilities.
Applies the same correction and CMYKW logic used by process(), but returns continuous probabilities instead of stochastically selecting one ink channel. Components are ordered Cyan, Magenta, Yellow, Black, White, Clear.
-
ColorSampleResult process(const glm::vec4 &rgba_color) const#
Converts sRGBA to CMYKW and stochastically picks one ink.
Applies the configured ColorPipelineOptions before CMYKW conversion.
-
~ColorPipeline()#
Public Static Functions
-
static glm::vec3 cmyk_to_rgb(const glm::vec4 &cmyk)#
-
static glm::vec3 gamma_correct(glm::vec3 rgb, float gamma = 2.2f)#
-
static std::vector<std::string> get_icc_profiles()#
-
static glm::vec4 rgb_to_cmyk(const glm::vec3 &rgb)#
-
static std::tuple<double, double, double, double, double> rgb_to_cmykw(glm::vec4 rgba)#
-
static void set_icc_resource_path(const std::string &path)#
Private Functions
-
glm::vec3 color_managed_rgb(const glm::vec3 &rgb) const#
-
float compute_cmyk_primary_affinity(const glm::vec4 &cmyk) const#
Private Members
-
cmsHTRANSFORM m_color_transform#
-
cmsHPROFILE m_icc_profile#
-
std::string m_icc_profile_name#
-
ColorPipelineOptions m_options#
-
std::vector<glm::vec4> m_palette#
-
cmsHPROFILE m_srgb_profile#
Private Static Attributes
-
static std::string s_icc_resource_path#
-
struct ColorSampleResult#
- #include <color_pipeline.h>
-
glm::vec4 apply_icc_profile(glm::vec3 rgb) const#
-
struct ColorPipelineOptions#
- #include <color_pipeline.h>
Enables or disables individual color pipeline correction steps.
Defaults match the full legacy color correction pipeline.
Public Functions
-
bool any_enabled() const#
-
bool any_enabled() const#
-
namespace ImageOutput#
Functions
-
std::string setup_output_directory(const std::string &output_directory, const std::string &file_prefix)#
Creates the output directory if it doesn’t exist and returns the full filename root path (directory + file_prefix).
-
size_t trim_empty_layers(const std::vector<size_t> &active_voxel_counts, const std::string &filename_root, const std::string &extension = ".png")#
Removes empty layers from the beginning and end of a numbered PNG stack.
Renumbers remaining files to start at 0.
- Returns:
the number of remaining layers.
-
bool write_binary_bmp_1bit(const std::string &path, long width, long height, const std::vector<unsigned char> &binary_data, std::int32_t x_pixels_per_meter = 11811, std::int32_t y_pixels_per_meter = 11811)#
Writes a 1-bit monochrome BMP file with a two-entry black/white palette.
Non-zero values in binary_data are written as black pixels (material present). Zero values are written as white pixels. The file uses a BITMAPINFOHEADER and a bottom-up pixel layout.
- Returns:
true on success, false on failure.
-
bool write_grayscale_bmp(const std::string &path, long width, long height, const std::vector<unsigned char> &grayscale_data)#
Writes an 8-bit grayscale BMP file with an identity grayscale palette.
- Returns:
true on success, false on failure.
-
bool write_rgba_png(const std::string &path, long width, long height, const std::vector<unsigned char> &rgba_data)#
Writes an RGBA image as a PNG file.
- Returns:
true on success, false on failure.
-
std::string setup_output_directory(const std::string &output_directory, const std::string &file_prefix)#
-
class ParallelVoxelLoop#
- #include <parallel_voxel_loop.h>
Public Types
Public Functions
-
void run(long z_dim, const LayerCallback &layer_fn, const std::atomic<bool> &cancelled, const std::function<void(double)> &progress_callback = nullptr)#
Runs parallel_for over [0, z_dim).
For each z, calls layer_fn with a thread-local clone of root. Checks cancellation between layers and reports progress after each layer completes.
-
void run(long z_dim, const LayerCallback &layer_fn, const std::atomic<bool> &cancelled, const std::function<void(double)> &progress_callback = nullptr)#
-
namespace RequiredAttributeCheck#
Utilities for enforcing required attribute presence at sampled points during compilation.
All checks throw std::runtime_error with the first failing world-space coordinate when the attribute is absent.
Functions
-
void require(const std::string &compiler_name, const std::string &attribute_name, const glm::vec3 &world_pos, const std::optional<AttributeSamples> &samples)#
Verifies that a required attribute is present in the given samples.
Fast path: returns immediately when the attribute key exists. Throws std::runtime_error with compiler name, attribute name, and world-space XYZ when the attribute is missing.
- Parameters:
compiler_name – Human-readable compiler name for the error message.
attribute_name – The attribute key that must be present.
world_pos – The world-space position of the sample point.
samples – The attribute samples at that point (may be nullopt).
Same as require() but attempts a fuzzy 3x3x3 neighbor probe before throwing.
Use this for compilers whose sampling grid may land just outside the implicit surface.
- Parameters:
root – The prepared node tree (used for neighbor sampling).
voxel_size – The voxel size (determines neighbor offsets).
compiler_name – Human-readable compiler name for the error message.
attribute_name – The attribute key that must be present.
world_pos – The world-space position of the sample point.
samples – The attribute samples at that point (may be nullopt).
-
void require(const std::string &compiler_name, const std::string &attribute_name, const glm::vec3 &world_pos, const std::optional<AttributeSamples> &samples)#
-
namespace StochasticSampler#
Functions
Extracts VOLUME_FRACTIONS from samples and performs weighted stochastic material selection.
Applies liquid keep-out if configured.
- Parameters:
samples – The attribute samples at the voxel location.
signed_distance – The signed distance value at the voxel location.
material_defs – Material definitions for color lookup.
liquid_keep_out_distance – Distance from surface within which liquid is removed.
liquid_material_id – The material ID of the liquid material.
- Returns:
MaterialSampleResult with the selected material.
-
struct MaterialSampleResult#
- #include <stochastic_sampler.h>
-
class VoxelGrid#
- #include <voxel_grid.h>
Public Functions
-
glm::vec3 bbox_max() const#
-
glm::vec3 bbox_min() const#
-
std::tuple<size_t, size_t, size_t> index_to_xyz(size_t index) const#
-
glm::vec3 space_size() const#
-
glm::vec3 voxel_size() const#
-
VoxelGrid(glm::vec3 bbox_min, glm::vec3 bbox_max, glm::vec3 voxel_size)#
-
glm::vec3 world_position(long x, long y, long z) const#
-
long x_dim() const#
-
size_t xyz_to_index(size_t x, size_t y, size_t z) const#
-
long y_dim() const#
-
long z_dim() const#
-
glm::vec3 bbox_max() const#