fix quickhull build
This commit is contained in:
parent
9dff9434c6
commit
8c92cb69ed
|
|
@ -1,6 +1,7 @@
|
||||||
#ifndef MESH_HPP_
|
#ifndef MESH_HPP_
|
||||||
#define MESH_HPP_
|
#define MESH_HPP_
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "Vector3.hpp"
|
#include "Vector3.hpp"
|
||||||
#include "Plane.hpp"
|
#include "Plane.hpp"
|
||||||
|
|
@ -22,11 +23,11 @@ namespace quickhull {
|
||||||
size_t m_opp;
|
size_t m_opp;
|
||||||
size_t m_face;
|
size_t m_face;
|
||||||
size_t m_next;
|
size_t m_next;
|
||||||
|
|
||||||
void disable() {
|
void disable() {
|
||||||
m_endVertex = std::numeric_limits<size_t>::max();
|
m_endVertex = std::numeric_limits<size_t>::max();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isDisabled() const {
|
bool isDisabled() const {
|
||||||
return m_endVertex == std::numeric_limits<size_t>::max();
|
return m_endVertex == std::numeric_limits<size_t>::max();
|
||||||
}
|
}
|
||||||
|
|
@ -53,7 +54,7 @@ namespace quickhull {
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void disable() {
|
void disable() {
|
||||||
m_he = std::numeric_limits<size_t>::max();
|
m_he = std::numeric_limits<size_t>::max();
|
||||||
}
|
}
|
||||||
|
|
@ -66,12 +67,12 @@ namespace quickhull {
|
||||||
// Mesh data
|
// Mesh data
|
||||||
std::vector<Face> m_faces;
|
std::vector<Face> m_faces;
|
||||||
std::vector<HalfEdge> m_halfEdges;
|
std::vector<HalfEdge> m_halfEdges;
|
||||||
|
|
||||||
// When the mesh is modified and faces and half edges are removed from it, we do not actually remove them from the container vectors.
|
// When the mesh is modified and faces and half edges are removed from it, we do not actually remove them from the container vectors.
|
||||||
// Insted, they are marked as disabled which means that the indices can be reused when we need to add new faces and half edges to the mesh.
|
// Insted, they are marked as disabled which means that the indices can be reused when we need to add new faces and half edges to the mesh.
|
||||||
// We store the free indices in the following vectors.
|
// We store the free indices in the following vectors.
|
||||||
std::vector<size_t> m_disabledFaces,m_disabledHalfEdges;
|
std::vector<size_t> m_disabledFaces,m_disabledHalfEdges;
|
||||||
|
|
||||||
size_t addFace() {
|
size_t addFace() {
|
||||||
if (m_disabledFaces.size()) {
|
if (m_disabledFaces.size()) {
|
||||||
size_t index = m_disabledFaces.back();
|
size_t index = m_disabledFaces.back();
|
||||||
|
|
@ -111,17 +112,17 @@ namespace quickhull {
|
||||||
}
|
}
|
||||||
|
|
||||||
MeshBuilder() = default;
|
MeshBuilder() = default;
|
||||||
|
|
||||||
// Create a mesh with initial tetrahedron ABCD. Dot product of AB with the normal of triangle ABC should be negative.
|
// Create a mesh with initial tetrahedron ABCD. Dot product of AB with the normal of triangle ABC should be negative.
|
||||||
void setup(size_t a, size_t b, size_t c, size_t d) {
|
void setup(size_t a, size_t b, size_t c, size_t d) {
|
||||||
m_faces.clear();
|
m_faces.clear();
|
||||||
m_halfEdges.clear();
|
m_halfEdges.clear();
|
||||||
m_disabledFaces.clear();
|
m_disabledFaces.clear();
|
||||||
m_disabledHalfEdges.clear();
|
m_disabledHalfEdges.clear();
|
||||||
|
|
||||||
m_faces.reserve(4);
|
m_faces.reserve(4);
|
||||||
m_halfEdges.reserve(12);
|
m_halfEdges.reserve(12);
|
||||||
|
|
||||||
// Create halfedges
|
// Create halfedges
|
||||||
HalfEdge AB;
|
HalfEdge AB;
|
||||||
AB.m_endVertex = b;
|
AB.m_endVertex = b;
|
||||||
|
|
@ -244,11 +245,11 @@ namespace quickhull {
|
||||||
return {f.m_he,m_halfEdges[f.m_he].m_next,m_halfEdges[m_halfEdges[f.m_he].m_next].m_next};
|
return {f.m_he,m_halfEdges[f.m_he].m_next,m_halfEdges[m_halfEdges[f.m_he].m_next].m_next};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user