mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-07-31 23:02:06 +00:00
NEW:add step mesh parameters
jira: STUDIO-7415 Change-Id: I5e09a1eb1ad31063ad56d08d5738907a804dc112 (cherry picked from commit ccbe9630076b754ab440e98977c4164afff96250) (cherry picked from commit 84e7063c54a99e8a1440e74f831c6d1f6828f3f8)
This commit is contained in:
@@ -34,9 +34,6 @@
|
||||
#include "TopExp_Explorer.hxx"
|
||||
#include "BRep_Tool.hxx"
|
||||
|
||||
const double STEP_TRANS_CHORD_ERROR = 0.003;
|
||||
const double STEP_TRANS_ANGLE_RES = 0.5;
|
||||
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
@@ -223,7 +220,10 @@ static void getNamedSolids(const TopLoc_Location& location, const std::string& p
|
||||
}
|
||||
}
|
||||
|
||||
bool load_step(const char *path, Model *model, bool& is_cancel, ImportStepProgressFn stepFn, StepIsUtf8Fn isUtf8Fn)
|
||||
bool load_step(const char *path, Model *model, bool& is_cancel,
|
||||
double linear_defletion/*=0.003*/,
|
||||
double angle_defletion/*= 0.5*/,
|
||||
ImportStepProgressFn stepFn, StepIsUtf8Fn isUtf8Fn, long& mesh_face_num)
|
||||
{
|
||||
bool cb_cancel = false;
|
||||
if (stepFn) {
|
||||
@@ -278,7 +278,7 @@ bool load_step(const char *path, Model *model, bool& is_cancel, ImportStepProgre
|
||||
stl.resize(namedSolids.size());
|
||||
tbb::parallel_for(tbb::blocked_range<size_t>(0, namedSolids.size()), [&](const tbb::blocked_range<size_t> &range) {
|
||||
for (size_t i = range.begin(); i < range.end(); i++) {
|
||||
BRepMesh_IncrementalMesh mesh(namedSolids[i].solid, STEP_TRANS_CHORD_ERROR, false, STEP_TRANS_ANGLE_RES, true);
|
||||
BRepMesh_IncrementalMesh mesh(namedSolids[i].solid, linear_defletion, false, angle_defletion, true);
|
||||
// BBS: calculate total number of the nodes and triangles
|
||||
int aNbNodes = 0;
|
||||
int aNbTriangles = 0;
|
||||
@@ -351,6 +351,14 @@ bool load_step(const char *path, Model *model, bool& is_cancel, ImportStepProgre
|
||||
}
|
||||
});
|
||||
|
||||
if (mesh_face_num != -1) {
|
||||
for (size_t i = 0; i < stl.size(); i++) {
|
||||
// Test for overflow
|
||||
mesh_face_num += stl[i].stats.number_of_facets;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
ModelObject *new_object = model->add_object();
|
||||
const char * last_slash = strrchr(path, DIR_SEPARATOR);
|
||||
new_object->name.assign((last_slash == nullptr) ? path : last_slash + 1);
|
||||
|
||||
@@ -17,7 +17,13 @@ typedef std::function<void(int load_stage, int current, int total, bool& cancel)
|
||||
typedef std::function<void(bool isUtf8)> StepIsUtf8Fn;
|
||||
|
||||
//BBS: Load an step file into a provided model.
|
||||
extern bool load_step(const char *path, Model *model, bool& is_cancel, ImportStepProgressFn proFn = nullptr, StepIsUtf8Fn isUtf8Fn = nullptr);
|
||||
extern bool load_step(const char *path, Model *model,
|
||||
bool& is_cancel,
|
||||
double linear_defletion = 0.003,
|
||||
double angle_defletion = 0.5,
|
||||
ImportStepProgressFn proFn = nullptr,
|
||||
StepIsUtf8Fn isUtf8Fn = nullptr,
|
||||
long& mesh_face_num = *(new long(-1)));
|
||||
|
||||
//BBS: Used to detect what kind of encoded type is used in name field of step
|
||||
// If is encoded in UTF8, the file don't need to be handled, then return the original path directly.
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
|
||||
#include "SVG.hpp"
|
||||
#include <Eigen/Dense>
|
||||
#include <functional>
|
||||
#include "GCodeWriter.hpp"
|
||||
|
||||
// BBS: for segment
|
||||
@@ -186,7 +187,8 @@ Model Model::read_from_file(const std::string& input_file, DynamicPrintConfig* c
|
||||
StepIsUtf8Fn stepIsUtf8Fn,
|
||||
BBLProject * project,
|
||||
int plate_id,
|
||||
ObjImportColorFn objFn)
|
||||
ObjImportColorFn objFn,
|
||||
std::function<int(double&, double&)> step_mesh_fn)
|
||||
{
|
||||
Model model;
|
||||
|
||||
@@ -211,9 +213,19 @@ Model Model::read_from_file(const std::string& input_file, DynamicPrintConfig* c
|
||||
bool is_cb_cancel = false;
|
||||
std::string message;
|
||||
if (boost::algorithm::iends_with(input_file, ".stp") ||
|
||||
boost::algorithm::iends_with(input_file, ".step"))
|
||||
result = load_step(input_file.c_str(), &model, is_cb_cancel, stepFn, stepIsUtf8Fn);
|
||||
else if (boost::algorithm::iends_with(input_file, ".stl"))
|
||||
boost::algorithm::iends_with(input_file, ".step")) {
|
||||
double linear_defletion = 0.003;
|
||||
double angle_defletion = 0.5;
|
||||
if (step_mesh_fn) {
|
||||
if (step_mesh_fn(linear_defletion, angle_defletion) == -1) {
|
||||
result = false;
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
result = load_step(input_file.c_str(), &model, is_cb_cancel, linear_defletion, angle_defletion, stepFn, stepIsUtf8Fn);
|
||||
end:
|
||||
BOOST_LOG_TRIVIAL(info) << "Cancel step mesh dialog";
|
||||
} else if (boost::algorithm::iends_with(input_file, ".stl"))
|
||||
result = load_stl(input_file.c_str(), &model, nullptr, stlFn);
|
||||
else if (boost::algorithm::iends_with(input_file, ".oltp"))
|
||||
result = load_stl(input_file.c_str(), &model, nullptr, stlFn,256);
|
||||
|
||||
@@ -1543,7 +1543,8 @@ public:
|
||||
StepIsUtf8Fn stepIsUtf8Fn = nullptr,
|
||||
BBLProject * project = nullptr,
|
||||
int plate_id = 0,
|
||||
ObjImportColorFn objFn = nullptr
|
||||
ObjImportColorFn objFn = nullptr,
|
||||
std::function<int(double&, double&)> step_mesh_fn = nullptr
|
||||
);
|
||||
// BBS
|
||||
static bool obj_import_vertex_color_deal(const std::vector<unsigned char> &vertex_filament_ids, const unsigned char &first_extruder_id, Model *model);
|
||||
|
||||
Reference in New Issue
Block a user