mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-16 10:05:59 +08:00
64bit coord_t
This commit is contained in:
parent
c3a9915fa1
commit
9fcbd1d786
@ -218,10 +218,10 @@ public:
|
|||||||
bbox.min /= m_resolution;
|
bbox.min /= m_resolution;
|
||||||
bbox.max /= m_resolution;
|
bbox.max /= m_resolution;
|
||||||
// Trim with the cells.
|
// Trim with the cells.
|
||||||
bbox.min.x() = std::max(bbox.min.x(), 0);
|
bbox.min.x() = std::max<coord_t>(bbox.min.x(), 0);
|
||||||
bbox.min.y() = std::max(bbox.min.y(), 0);
|
bbox.min.y() = std::max<coord_t>(bbox.min.y(), 0);
|
||||||
bbox.max.x() = std::min(bbox.max.x(), (coord_t)m_cols - 1);
|
bbox.max.x() = std::min<coord_t>(bbox.max.x(), (coord_t)m_cols - 1);
|
||||||
bbox.max.y() = std::min(bbox.max.y(), (coord_t)m_rows - 1);
|
bbox.max.y() = std::min<coord_t>(bbox.max.y(), (coord_t)m_rows - 1);
|
||||||
for (coord_t iy = bbox.min.y(); iy <= bbox.max.y(); ++ iy)
|
for (coord_t iy = bbox.min.y(); iy <= bbox.max.y(); ++ iy)
|
||||||
for (coord_t ix = bbox.min.x(); ix <= bbox.max.x(); ++ ix)
|
for (coord_t ix = bbox.min.x(); ix <= bbox.max.x(); ++ ix)
|
||||||
if (! visitor(iy, ix))
|
if (! visitor(iy, ix))
|
||||||
|
@ -29,7 +29,7 @@ TriangleMesh eigen_to_triangle_mesh(const EigenMesh &emesh)
|
|||||||
auto &VC = emesh.first; auto &FC = emesh.second;
|
auto &VC = emesh.first; auto &FC = emesh.second;
|
||||||
|
|
||||||
Pointf3s points(size_t(VC.rows()));
|
Pointf3s points(size_t(VC.rows()));
|
||||||
std::vector<Vec3crd> facets(size_t(FC.rows()));
|
std::vector<Vec3i> facets(size_t(FC.rows()));
|
||||||
|
|
||||||
for (Eigen::Index i = 0; i < VC.rows(); ++i)
|
for (Eigen::Index i = 0; i < VC.rows(); ++i)
|
||||||
points[size_t(i)] = VC.row(i);
|
points[size_t(i)] = VC.row(i);
|
||||||
|
@ -24,7 +24,9 @@ typedef Eigen::Matrix<coord_t, 2, 1, Eigen::DontAlign> Vec2crd;
|
|||||||
typedef Eigen::Matrix<coord_t, 3, 1, Eigen::DontAlign> Vec3crd;
|
typedef Eigen::Matrix<coord_t, 3, 1, Eigen::DontAlign> Vec3crd;
|
||||||
typedef Eigen::Matrix<int, 2, 1, Eigen::DontAlign> Vec2i;
|
typedef Eigen::Matrix<int, 2, 1, Eigen::DontAlign> Vec2i;
|
||||||
typedef Eigen::Matrix<int, 3, 1, Eigen::DontAlign> Vec3i;
|
typedef Eigen::Matrix<int, 3, 1, Eigen::DontAlign> Vec3i;
|
||||||
|
typedef Eigen::Matrix<int32_t, 2, 1, Eigen::DontAlign> Vec2i32;
|
||||||
typedef Eigen::Matrix<int64_t, 2, 1, Eigen::DontAlign> Vec2i64;
|
typedef Eigen::Matrix<int64_t, 2, 1, Eigen::DontAlign> Vec2i64;
|
||||||
|
typedef Eigen::Matrix<int32_t, 3, 1, Eigen::DontAlign> Vec3i32;
|
||||||
typedef Eigen::Matrix<int64_t, 3, 1, Eigen::DontAlign> Vec3i64;
|
typedef Eigen::Matrix<int64_t, 3, 1, Eigen::DontAlign> Vec3i64;
|
||||||
|
|
||||||
// Vector types with a double coordinate base type.
|
// Vector types with a double coordinate base type.
|
||||||
@ -53,12 +55,12 @@ typedef Eigen::Transform<double, 3, Eigen::Affine, Eigen::DontAlign> Transform3d
|
|||||||
|
|
||||||
inline bool operator<(const Vec2d &lhs, const Vec2d &rhs) { return lhs(0) < rhs(0) || (lhs(0) == rhs(0) && lhs(1) < rhs(1)); }
|
inline bool operator<(const Vec2d &lhs, const Vec2d &rhs) { return lhs(0) < rhs(0) || (lhs(0) == rhs(0) && lhs(1) < rhs(1)); }
|
||||||
|
|
||||||
|
inline int32_t cross2(const Vec2i32 &v1, const Vec2i32 &v2) { return v1(0) * v2(1) - v1(1) * v2(0); }
|
||||||
inline int64_t cross2(const Vec2i64 &v1, const Vec2i64 &v2) { return v1(0) * v2(1) - v1(1) * v2(0); }
|
inline int64_t cross2(const Vec2i64 &v1, const Vec2i64 &v2) { return v1(0) * v2(1) - v1(1) * v2(0); }
|
||||||
inline coord_t cross2(const Vec2crd &v1, const Vec2crd &v2) { return v1(0) * v2(1) - v1(1) * v2(0); }
|
|
||||||
inline float cross2(const Vec2f &v1, const Vec2f &v2) { return v1(0) * v2(1) - v1(1) * v2(0); }
|
inline float cross2(const Vec2f &v1, const Vec2f &v2) { return v1(0) * v2(1) - v1(1) * v2(0); }
|
||||||
inline double cross2(const Vec2d &v1, const Vec2d &v2) { return v1(0) * v2(1) - v1(1) * v2(0); }
|
inline double cross2(const Vec2d &v1, const Vec2d &v2) { return v1(0) * v2(1) - v1(1) * v2(0); }
|
||||||
|
|
||||||
inline Vec2crd to_2d(const Vec3crd &pt3) { return Vec2crd(pt3(0), pt3(1)); }
|
inline Vec2i32 to_2d(const Vec2i32 &pt3) { return Vec2i32(pt3(0), pt3(1)); }
|
||||||
inline Vec2i64 to_2d(const Vec3i64 &pt3) { return Vec2i64(pt3(0), pt3(1)); }
|
inline Vec2i64 to_2d(const Vec3i64 &pt3) { return Vec2i64(pt3(0), pt3(1)); }
|
||||||
inline Vec2f to_2d(const Vec3f &pt3) { return Vec2f (pt3(0), pt3(1)); }
|
inline Vec2f to_2d(const Vec3f &pt3) { return Vec2f (pt3(0), pt3(1)); }
|
||||||
inline Vec2d to_2d(const Vec3d &pt3) { return Vec2d (pt3(0), pt3(1)); }
|
inline Vec2d to_2d(const Vec3d &pt3) { return Vec2d (pt3(0), pt3(1)); }
|
||||||
@ -89,8 +91,8 @@ public:
|
|||||||
typedef coord_t coord_type;
|
typedef coord_t coord_type;
|
||||||
|
|
||||||
Point() : Vec2crd(0, 0) {}
|
Point() : Vec2crd(0, 0) {}
|
||||||
Point(coord_t x, coord_t y) : Vec2crd(x, y) {}
|
Point(int32_t x, int32_t y) : Vec2crd(coord_t(x), coord_t(y)) {}
|
||||||
Point(int64_t x, int64_t y) : Vec2crd(coord_t(x), coord_t(y)) {} // for Clipper
|
Point(int64_t x, int64_t y) : Vec2crd(coord_t(x), coord_t(y)) {}
|
||||||
Point(double x, double y) : Vec2crd(coord_t(lrint(x)), coord_t(lrint(y))) {}
|
Point(double x, double y) : Vec2crd(coord_t(lrint(x)), coord_t(lrint(y))) {}
|
||||||
Point(const Point &rhs) { *this = rhs; }
|
Point(const Point &rhs) { *this = rhs; }
|
||||||
explicit Point(const Vec2d& rhs) : Vec2crd(coord_t(lrint(rhs.x())), coord_t(lrint(rhs.y()))) {}
|
explicit Point(const Vec2d& rhs) : Vec2crd(coord_t(lrint(rhs.x())), coord_t(lrint(rhs.y()))) {}
|
||||||
|
@ -228,7 +228,7 @@ void to_eigen_mesh(const TriangleMesh &tmesh, Eigen::MatrixXd &V, Eigen::MatrixX
|
|||||||
void to_triangle_mesh(const Eigen::MatrixXd &V, const Eigen::MatrixXi &F, TriangleMesh &out)
|
void to_triangle_mesh(const Eigen::MatrixXd &V, const Eigen::MatrixXi &F, TriangleMesh &out)
|
||||||
{
|
{
|
||||||
Pointf3s points(size_t(V.rows()));
|
Pointf3s points(size_t(V.rows()));
|
||||||
std::vector<Vec3crd> facets(size_t(F.rows()));
|
std::vector<Vec3i> facets(size_t(F.rows()));
|
||||||
|
|
||||||
for (Eigen::Index i = 0; i < V.rows(); ++i)
|
for (Eigen::Index i = 0; i < V.rows(); ++i)
|
||||||
points[size_t(i)] = V.row(i);
|
points[size_t(i)] = V.row(i);
|
||||||
|
@ -48,9 +48,8 @@ Contour3D sphere(double rho, Portion portion, double fa) {
|
|||||||
vertices.emplace_back(Vec3d(b(0), b(1), z));
|
vertices.emplace_back(Vec3d(b(0), b(1), z));
|
||||||
|
|
||||||
if (sbegin == 0)
|
if (sbegin == 0)
|
||||||
facets.emplace_back((i == 0) ?
|
(i == 0) ? facets.emplace_back(coord_t(ring.size()), 0, 1) :
|
||||||
Vec3crd(coord_t(ring.size()), 0, 1) :
|
facets.emplace_back(id - 1, 0, id);
|
||||||
Vec3crd(id - 1, 0, id));
|
|
||||||
++id;
|
++id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,12 +65,11 @@ Contour3D sphere(double rho, Portion portion, double fa) {
|
|||||||
auto id_ringsize = coord_t(id - int(ring.size()));
|
auto id_ringsize = coord_t(id - int(ring.size()));
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
// wrap around
|
// wrap around
|
||||||
facets.emplace_back(Vec3crd(id - 1, id,
|
facets.emplace_back(id - 1, id, id + coord_t(ring.size() - 1) );
|
||||||
id + coord_t(ring.size() - 1)));
|
facets.emplace_back(id - 1, id_ringsize, id);
|
||||||
facets.emplace_back(Vec3crd(id - 1, id_ringsize, id));
|
|
||||||
} else {
|
} else {
|
||||||
facets.emplace_back(Vec3crd(id_ringsize - 1, id_ringsize, id));
|
facets.emplace_back(id_ringsize - 1, id_ringsize, id);
|
||||||
facets.emplace_back(Vec3crd(id - 1, id_ringsize - 1, id));
|
facets.emplace_back(id - 1, id_ringsize - 1, id);
|
||||||
}
|
}
|
||||||
id++;
|
id++;
|
||||||
}
|
}
|
||||||
@ -85,10 +83,10 @@ Contour3D sphere(double rho, Portion portion, double fa) {
|
|||||||
auto id_ringsize = coord_t(id - int(ring.size()));
|
auto id_ringsize = coord_t(id - int(ring.size()));
|
||||||
if (i == 0) {
|
if (i == 0) {
|
||||||
// third vertex is on the other side of the ring.
|
// third vertex is on the other side of the ring.
|
||||||
facets.emplace_back(Vec3crd(id - 1, id_ringsize, id));
|
facets.emplace_back(id - 1, id_ringsize, id);
|
||||||
} else {
|
} else {
|
||||||
auto ci = coord_t(id_ringsize + coord_t(i));
|
auto ci = coord_t(id_ringsize + coord_t(i));
|
||||||
facets.emplace_back(Vec3crd(ci - 1, ci, id));
|
facets.emplace_back(ci - 1, ci, id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,9 @@
|
|||||||
|
|
||||||
namespace Slic3r {
|
namespace Slic3r {
|
||||||
|
|
||||||
TriangleMesh::TriangleMesh(const Pointf3s &points, const std::vector<Vec3crd>& facets) : repaired(false)
|
template<typename FaceIndexType>
|
||||||
|
TriangleMesh::TriangleMesh(const Pointf3s &points, const std::vector<FaceIndexType> &facets) :
|
||||||
|
repaired(false)
|
||||||
{
|
{
|
||||||
stl_file &stl = this->stl;
|
stl_file &stl = this->stl;
|
||||||
stl.stats.type = inmemory;
|
stl.stats.type = inmemory;
|
||||||
@ -70,6 +72,9 @@ TriangleMesh::TriangleMesh(const Pointf3s &points, const std::vector<Vec3crd>& f
|
|||||||
stl_get_size(&stl);
|
stl_get_size(&stl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template TriangleMesh::TriangleMesh(const Pointf3s &points, const std::vector<Vec3i32> &facets);
|
||||||
|
template TriangleMesh::TriangleMesh(const Pointf3s &points, const std::vector<Vec3i64> &facets);
|
||||||
|
|
||||||
TriangleMesh::TriangleMesh(const indexed_triangle_set &M)
|
TriangleMesh::TriangleMesh(const indexed_triangle_set &M)
|
||||||
{
|
{
|
||||||
stl.stats.type = inmemory;
|
stl.stats.type = inmemory;
|
||||||
|
@ -22,7 +22,7 @@ class TriangleMesh
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TriangleMesh() : repaired(false) {}
|
TriangleMesh() : repaired(false) {}
|
||||||
TriangleMesh(const Pointf3s &points, const std::vector<Vec3crd> &facets);
|
template<typename FaceIndexType> TriangleMesh(const Pointf3s &points, const std::vector<FaceIndexType> &facets);
|
||||||
explicit TriangleMesh(const indexed_triangle_set &M);
|
explicit TriangleMesh(const indexed_triangle_set &M);
|
||||||
void clear() { this->stl.clear(); this->its.clear(); this->repaired = false; }
|
void clear() { this->stl.clear(); this->its.clear(); this->repaired = false; }
|
||||||
bool ReadSTLFile(const char* input_file) { return stl_open(&stl, input_file); }
|
bool ReadSTLFile(const char* input_file) { return stl_open(&stl, input_file); }
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
#include "Technologies.hpp"
|
#include "Technologies.hpp"
|
||||||
#include "Semver.hpp"
|
#include "Semver.hpp"
|
||||||
|
|
||||||
typedef int32_t coord_t;
|
typedef int64_t coord_t;
|
||||||
typedef double coordf_t;
|
typedef double coordf_t;
|
||||||
|
|
||||||
//FIXME This epsilon value is used for many non-related purposes:
|
//FIXME This epsilon value is used for many non-related purposes:
|
||||||
@ -33,6 +33,7 @@ typedef double coordf_t;
|
|||||||
// This scaling generates a following fixed point representation with for a 32bit integer:
|
// This scaling generates a following fixed point representation with for a 32bit integer:
|
||||||
// 0..4294mm with 1nm resolution
|
// 0..4294mm with 1nm resolution
|
||||||
// int32_t fits an interval of (-2147.48mm, +2147.48mm)
|
// int32_t fits an interval of (-2147.48mm, +2147.48mm)
|
||||||
|
// with int64_t we don't have to worry anymore about the size of the int.
|
||||||
#define SCALING_FACTOR 0.000001
|
#define SCALING_FACTOR 0.000001
|
||||||
// RESOLUTION, SCALED_RESOLUTION: Used as an error threshold for a Douglas-Peucker polyline simplification algorithm.
|
// RESOLUTION, SCALED_RESOLUTION: Used as an error threshold for a Douglas-Peucker polyline simplification algorithm.
|
||||||
#define RESOLUTION 0.0125
|
#define RESOLUTION 0.0125
|
||||||
|
@ -1985,7 +1985,7 @@ void GLCanvas3D::render()
|
|||||||
// we need to set the mouse's scene position here because the depth buffer
|
// we need to set the mouse's scene position here because the depth buffer
|
||||||
// could be invalidated by the following gizmo render methods
|
// could be invalidated by the following gizmo render methods
|
||||||
// this position is used later into on_mouse() to drag the objects
|
// this position is used later into on_mouse() to drag the objects
|
||||||
m_mouse.scene_position = _mouse_to_3d(m_mouse.position.cast<int>());
|
m_mouse.scene_position = _mouse_to_3d(m_mouse.position.cast<coord_t>());
|
||||||
|
|
||||||
_render_current_gizmo();
|
_render_current_gizmo();
|
||||||
_render_selection_sidebar_hints();
|
_render_selection_sidebar_hints();
|
||||||
|
@ -41,7 +41,7 @@ namespace GUI {
|
|||||||
const Transform3d& projection_matrix = camera.get_projection_matrix();
|
const Transform3d& projection_matrix = camera.get_projection_matrix();
|
||||||
|
|
||||||
// bounding box created from the rectangle corners - will take care of order of the corners
|
// bounding box created from the rectangle corners - will take care of order of the corners
|
||||||
BoundingBox rectangle(Points{ Point(m_start_corner.cast<int>()), Point(m_end_corner.cast<int>()) });
|
BoundingBox rectangle(Points{ Point(m_start_corner.cast<coord_t>()), Point(m_end_corner.cast<coord_t>()) });
|
||||||
|
|
||||||
// Iterate over all points and determine whether they're in the rectangle.
|
// Iterate over all points and determine whether they're in the rectangle.
|
||||||
for (unsigned int i = 0; i<points.size(); ++i) {
|
for (unsigned int i = 0; i<points.size(); ++i) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user