mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-10-23 00:31:11 -06:00
Merge branch 'master' of https://github.com/prusa3d/PrusaSlicer
This commit is contained in:
commit
3fc12fdaaa
19 changed files with 374 additions and 262 deletions
|
@ -577,6 +577,16 @@ void Print::config_diffs(
|
|||
}
|
||||
}
|
||||
|
||||
std::vector<ObjectID> Print::print_object_ids() const
|
||||
{
|
||||
std::vector<ObjectID> out;
|
||||
// Reserve one more for the caller to append the ID of the Print itself.
|
||||
out.reserve(m_objects.size() + 1);
|
||||
for (const PrintObject *print_object : m_objects)
|
||||
out.emplace_back(print_object->id());
|
||||
return out;
|
||||
}
|
||||
|
||||
Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_config)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
|
|
|
@ -370,6 +370,8 @@ public:
|
|||
// a cancellation callback is executed to stop the background processing before the operation.
|
||||
void clear() override;
|
||||
bool empty() const override { return m_objects.empty(); }
|
||||
// List of existing PrintObject IDs, to remove notifications for non-existent IDs.
|
||||
std::vector<ObjectID> print_object_ids() const override;
|
||||
|
||||
ApplyStatus apply(const Model &model, DynamicPrintConfig config) override;
|
||||
|
||||
|
|
|
@ -348,6 +348,8 @@ public:
|
|||
// The Print is empty either after clear() or after apply() over an empty model,
|
||||
// or after apply() over a model, where no object is printable (all outside the print volume).
|
||||
virtual bool empty() const = 0;
|
||||
// List of existing PrintObject IDs, to remove notifications for non-existent IDs.
|
||||
virtual std::vector<ObjectID> print_object_ids() const = 0;
|
||||
|
||||
// Validate the print, return empty string if valid, return error if process() cannot (or should not) be started.
|
||||
virtual std::string validate() const { return std::string(); }
|
||||
|
@ -406,7 +408,7 @@ public:
|
|||
// set to an ObjectID of a Print or a PrintObject based on flags
|
||||
// (whether UPDATE_PRINT_STEP_WARNINGS or UPDATE_PRINT_OBJECT_STEP_WARNINGS is set).
|
||||
ObjectID warning_object_id;
|
||||
// For which Print or PrintObject step a new warning is beeing issued?
|
||||
// For which Print or PrintObject step a new warning is being issued?
|
||||
int warning_step { -1 };
|
||||
};
|
||||
typedef std::function<void(const SlicingStatus&)> status_callback_type;
|
||||
|
|
|
@ -357,13 +357,26 @@ std::vector<Vec2f> sample_expolygon(const ExPolygon &expoly, float samples_per_m
|
|||
double r = random_triangle(rng);
|
||||
size_t idx_triangle = std::min<size_t>(std::upper_bound(areas.begin(), areas.end(), (float)r) - areas.begin(), areas.size() - 1) * 3;
|
||||
// Select a random point on the triangle.
|
||||
double u = float(std::sqrt(random_float(rng)));
|
||||
double v = float(random_float(rng));
|
||||
const Vec2f &a = triangles[idx_triangle ++];
|
||||
const Vec2f &b = triangles[idx_triangle++];
|
||||
const Vec2f &c = triangles[idx_triangle];
|
||||
const Vec2f x = a * (1.f - u) + b * (u * (1.f - v)) + c * (v * u);
|
||||
out.emplace_back(x);
|
||||
#if 0
|
||||
// https://www.cs.princeton.edu/~funk/tog02.pdf
|
||||
// page 814, formula 1.
|
||||
double u = float(std::sqrt(random_float(rng)));
|
||||
double v = float(random_float(rng));
|
||||
out.emplace_back(a * (1.f - u) + b * (u * (1.f - v)) + c * (v * u));
|
||||
#else
|
||||
// Greg Turk, Graphics Gems
|
||||
// https://devsplorer.wordpress.com/2019/08/07/find-a-random-point-on-a-plane-using-barycentric-coordinates-in-unity/
|
||||
double u = float(random_float(rng));
|
||||
double v = float(random_float(rng));
|
||||
if (u + v >= 1.f) {
|
||||
u = 1.f - u;
|
||||
v = 1.f - v;
|
||||
}
|
||||
out.emplace_back(a + u * (b - a) + v * (c - a));
|
||||
#endif
|
||||
}
|
||||
}
|
||||
return out;
|
||||
|
|
|
@ -175,6 +175,16 @@ static std::vector<SLAPrintObject::Instance> sla_instances(const ModelObject &mo
|
|||
return instances;
|
||||
}
|
||||
|
||||
std::vector<ObjectID> SLAPrint::print_object_ids() const
|
||||
{
|
||||
std::vector<ObjectID> out;
|
||||
// Reserve one more for the caller to append the ID of the Print itself.
|
||||
out.reserve(m_objects.size() + 1);
|
||||
for (const SLAPrintObject *print_object : m_objects)
|
||||
out.emplace_back(print_object->id());
|
||||
return out;
|
||||
}
|
||||
|
||||
SLAPrint::ApplyStatus SLAPrint::apply(const Model &model, DynamicPrintConfig config)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
|
|
|
@ -420,6 +420,8 @@ public:
|
|||
|
||||
void clear() override;
|
||||
bool empty() const override { return m_objects.empty(); }
|
||||
// List of existing PrintObject IDs, to remove notifications for non-existent IDs.
|
||||
std::vector<ObjectID> print_object_ids() const;
|
||||
ApplyStatus apply(const Model &model, DynamicPrintConfig config) override;
|
||||
void set_task(const TaskParams ¶ms) override;
|
||||
void process() override;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue