OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::anonymous_namespace{AdaptiveInfillField.cpp}::RadialScale Class Reference
Collaboration diagram for Slic3r::anonymous_namespace{AdaptiveInfillField.cpp}::RadialScale:

Public Member Functions

 RadialScale (const AdaptiveTpms &tpms, int dimensions)
double operator() (double t) const

Private Attributes

int m_dimensions
std::array< double, 257 > m_scale

Detailed Description

Constructor & Destructor Documentation

◆ RadialScale()

Slic3r::anonymous_namespace{AdaptiveInfillField.cpp}::RadialScale::RadialScale ( const AdaptiveTpms & tpms,
int dimensions )
inline
183 : m_dimensions(dimensions)
184 {
185 const double ratio = std::max(tpms.interior_frequency / tpms.surface_frequency, 1e-3);
186 auto target = [&tpms, ratio](double depth) { return target_scale(ratio, tpms.gradient, depth); };
187 m_scale[0] = target(1.);
188 double volume = 0.;
189 for (size_t i = 1; i < m_scale.size(); ++i) {
190 const double t0 = double(i - 1) / double(m_scale.size() - 1);
191 const double t1 = double(i) / double(m_scale.size() - 1);
192 volume += (std::pow(t1, m_dimensions) - std::pow(t0, m_dimensions)) * target(1. - 0.5 * (t0 + t1));
193 m_scale[i] = volume / std::pow(t1, m_dimensions);
194 }
195 }
int m_dimensions
Definition AdaptiveInfillField.cpp:209
std::array< double, 257 > m_scale
Definition AdaptiveInfillField.cpp:210
double target_scale(double ratio, AdaptiveInfillGradient gradient, double depth)
Definition AdaptiveInfillField.cpp:149

References Slic3r::AdaptiveTpms::gradient, Slic3r::AdaptiveTpms::interior_frequency, m_dimensions, m_scale, Slic3r::AdaptiveTpms::surface_frequency, and Slic3r::anonymous_namespace{AdaptiveInfillField.cpp}::target_scale().

Here is the call graph for this function:

Member Function Documentation

◆ operator()()

double Slic3r::anonymous_namespace{AdaptiveInfillField.cpp}::RadialScale::operator() ( double t) const
inline
198 {
199 if (t >= 1.) {
200 const double volume = std::pow(t, m_dimensions);
201 return (m_scale.back() + volume - 1.) / volume;
202 }
203 const double x = t * double(m_scale.size() - 1);
204 const size_t i = std::min(size_t(x), m_scale.size() - 2);
205 return m_scale[i] + (m_scale[i + 1] - m_scale[i]) * (x - double(i));
206 }

References m_dimensions, and m_scale.

Member Data Documentation

◆ m_dimensions

int Slic3r::anonymous_namespace{AdaptiveInfillField.cpp}::RadialScale::m_dimensions
private

Referenced by RadialScale(), and operator()().

◆ m_scale

std::array<double, 257> Slic3r::anonymous_namespace{AdaptiveInfillField.cpp}::RadialScale::m_scale
private

Referenced by RadialScale(), and operator()().


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