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")#
-
ColorSampleResult process(const glm::vec4 &rgba_color) const#
Full color pipeline: gamma correct -> ICC -> blend -> CMYKW -> stochastic pick.
-
~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
-
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#
-
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#
-
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#