mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-15 10:47:50 -06:00
Add the full source of BambuStudio
using version 1.0.10
This commit is contained in:
parent
30bcadab3e
commit
1555904bef
3771 changed files with 1251328 additions and 0 deletions
97
src/libslic3r/ModelArrange.hpp
Normal file
97
src/libslic3r/ModelArrange.hpp
Normal file
|
@ -0,0 +1,97 @@
|
|||
#ifndef MODELARRANGE_HPP
|
||||
#define MODELARRANGE_HPP
|
||||
|
||||
#include <libslic3r/Arrange.hpp>
|
||||
#include "libslic3r/PrintConfig.hpp"
|
||||
#include "libslic3r/Model.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
using ModelInstancePtrs = std::vector<ModelInstance*>;
|
||||
|
||||
using arrangement::ArrangePolygon;
|
||||
using arrangement::ArrangePolygons;
|
||||
using arrangement::ArrangeParams;
|
||||
using arrangement::InfiniteBed;
|
||||
using arrangement::CircleBed;
|
||||
|
||||
// Do something with ArrangePolygons in virtual beds
|
||||
using VirtualBedFn = std::function<void(arrangement::ArrangePolygon&)>;
|
||||
|
||||
[[noreturn]] inline void throw_if_out_of_bed(arrangement::ArrangePolygon&)
|
||||
{
|
||||
throw Slic3r::RuntimeError("Objects could not fit on the bed");
|
||||
}
|
||||
|
||||
ArrangePolygons get_arrange_polys(const Model &model, ModelInstancePtrs &instances);
|
||||
ArrangePolygon get_arrange_poly(const Model &model);
|
||||
bool apply_arrange_polys(ArrangePolygons &polys, ModelInstancePtrs &instances, VirtualBedFn);
|
||||
|
||||
void duplicate(Model &model, ArrangePolygons &copies, VirtualBedFn);
|
||||
void duplicate_objects(Model &model, size_t copies_num);
|
||||
|
||||
template<class TBed>
|
||||
bool arrange_objects(Model & model,
|
||||
const TBed & bed,
|
||||
const ArrangeParams ¶ms,
|
||||
VirtualBedFn vfn = throw_if_out_of_bed)
|
||||
{
|
||||
ModelInstancePtrs instances;
|
||||
auto&& input = get_arrange_polys(model, instances);
|
||||
arrangement::arrange(input, bed, params);
|
||||
|
||||
return apply_arrange_polys(input, instances, vfn);
|
||||
}
|
||||
|
||||
template<class TBed>
|
||||
void duplicate(Model & model,
|
||||
size_t copies_num,
|
||||
const TBed & bed,
|
||||
const ArrangeParams ¶ms,
|
||||
VirtualBedFn vfn = throw_if_out_of_bed)
|
||||
{
|
||||
ArrangePolygons copies(copies_num, get_arrange_poly(model));
|
||||
arrangement::arrange(copies, bed, params);
|
||||
duplicate(model, copies, vfn);
|
||||
}
|
||||
|
||||
template<class TBed>
|
||||
void duplicate_objects(Model & model,
|
||||
size_t copies_num,
|
||||
const TBed & bed,
|
||||
const ArrangeParams ¶ms,
|
||||
VirtualBedFn vfn = throw_if_out_of_bed)
|
||||
{
|
||||
duplicate_objects(model, copies_num);
|
||||
arrange_objects(model, bed, params, vfn);
|
||||
}
|
||||
|
||||
template<class T> struct PtrWrapper
|
||||
{
|
||||
T* ptr;
|
||||
|
||||
explicit PtrWrapper(T* p) : ptr{ p } {}
|
||||
|
||||
arrangement::ArrangePolygon get_arrange_polygon() const
|
||||
{
|
||||
arrangement::ArrangePolygon ap;
|
||||
ptr->get_arrange_polygon(&ap);
|
||||
return ap;
|
||||
}
|
||||
|
||||
void apply_arrange_result(const Vec2d& t, double rot, int item_id)
|
||||
{
|
||||
ptr->apply_arrange_result(t, rot);
|
||||
ptr->arrange_order = item_id;
|
||||
}
|
||||
};
|
||||
|
||||
template<class T>
|
||||
arrangement::ArrangePolygon get_arrange_poly(T obj);
|
||||
|
||||
template<>
|
||||
arrangement::ArrangePolygon get_arrange_poly(ModelInstance* inst);
|
||||
|
||||
ArrangePolygon get_instance_arrange_poly(ModelInstance* instance, const Slic3r::DynamicPrintConfig& config);
|
||||
}
|
||||
|
||||
#endif // MODELARRANGE_HPP
|
Loading…
Add table
Add a link
Reference in a new issue