mirror of
https://github.com/FULU-Foundation/OrcaSlicer-bambulab.git
synced 2026-05-21 17:39:10 -07:00
Moved some math macros (sqr, lerp, clamp) to libslic3r.h
Added UNUSED macro to libslic3r.h, used it to reduce some compile warnings. Split the Int128 class from Clipper library to a separate file, extended Int128 with intrinsic types wherever possible for performance, added new geometric predicates. Added a draft of new FillRectilinear3, which should reduce overfill near the perimeters in the future.
This commit is contained in:
@@ -13,12 +13,15 @@
|
||||
|
||||
#include <boost/multi_array.hpp>
|
||||
|
||||
#include "libslic3r.h"
|
||||
#include "ExtrusionSimulator.hpp"
|
||||
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.1415926535897932384626433832795
|
||||
#endif
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
// Replacement for a template alias.
|
||||
// Shorthand for the point_xy.
|
||||
template<typename T>
|
||||
@@ -172,24 +175,6 @@ inline T mag(const boost::geometry::model::d2::point_xy<T> &v)
|
||||
return l2(v);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline T lerp(T start, T end, T alpha)
|
||||
{
|
||||
return start * (T(1.) - alpha) + end * alpha;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline T clamp(T low, T high, T x)
|
||||
{
|
||||
return std::max<T>(low, std::min<T>(high, x));
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline T sqr(T x)
|
||||
{
|
||||
return x * x;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline T dist2_to_line(
|
||||
const boost::geometry::model::d2::point_xy<T> &p0,
|
||||
@@ -657,7 +642,7 @@ void gcode_spread_points(
|
||||
A2f &acc,
|
||||
const A2f &mask,
|
||||
const ExtrusionPoints &points,
|
||||
Slic3r::ExtrusionSimulationType simulationType)
|
||||
ExtrusionSimulationType simulationType)
|
||||
{
|
||||
int nc = acc.shape()[1];
|
||||
int nr = acc.shape()[0];
|
||||
@@ -796,14 +781,14 @@ void gcode_spread_points(
|
||||
// if (true) {
|
||||
// printf("volume_total: %f, volume_full: %f, fill factor: %f\n", volume_total, volume_full, 100.f - 100.f * volume_total / volume_full);
|
||||
// printf("volume_full: %f, volume_excess+deficit: %f, volume_excess: %f, volume_deficit: %f\n", volume_full, volume_excess+volume_deficit, volume_excess, volume_deficit);
|
||||
if (simulationType == Slic3r::ExtrusionSimulationSpreadFull || volume_total <= volume_full) {
|
||||
if (simulationType == ExtrusionSimulationSpreadFull || volume_total <= volume_full) {
|
||||
// The volume under the circle is spreaded fully.
|
||||
float height_avg = volume_total / area_total;
|
||||
for (size_t i = 0; i < n_cells; ++ i) {
|
||||
const Cell &cell = cells[i];
|
||||
acc[cell.idx.y()][cell.idx.x()] = (1.f - cell.fraction_covered) * cell.volume + cell.fraction_covered * cell.area * height_avg;
|
||||
}
|
||||
} else if (simulationType == Slic3r::ExtrusionSimulationSpreadExcess) {
|
||||
} else if (simulationType == ExtrusionSimulationSpreadExcess) {
|
||||
// The volume under the circle does not fit.
|
||||
// 1) Fill the underfilled cells and remove them from the list.
|
||||
float volume_borrowed_total = 0.;
|
||||
@@ -881,8 +866,6 @@ inline std::vector<V3uc> CreatePowerColorGradient24bit()
|
||||
return out;
|
||||
}
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
class ExtrusionSimulatorImpl {
|
||||
public:
|
||||
std::vector<unsigned char> image_data;
|
||||
|
||||
Reference in New Issue
Block a user