Renamed getEdges and getVertices to computeEdges and computeVertices

This commit is contained in:
iasonmanolas 2022-02-18 17:44:33 +02:00
parent ec7160e637
commit bef2ae8860
2 changed files with 57 additions and 47 deletions

View File

@ -78,7 +78,8 @@ double PatternGeometry::getTriangleEdgeSize() const { return triangleEdgeSize; }
PatternGeometry::PatternGeometry() {} PatternGeometry::PatternGeometry() {}
std::vector<vcg::Point3d> PatternGeometry::getVertices() const { std::vector<vcg::Point3d> PatternGeometry::computeVertices() const
{
std::vector<VCGEdgeMesh::CoordType> verts(VN()); std::vector<VCGEdgeMesh::CoordType> verts(VN());
for (size_t vi = 0; vi < VN(); vi++) { for (size_t vi = 0; vi < VN(); vi++) {
verts[vi] = vert[vi].cP(); verts[vi] = vert[vi].cP();
@ -140,9 +141,15 @@ PatternGeometry PatternGeometry::createFan(PatternGeometry &pattern) {
return fan; return fan;
} }
PatternGeometry::PatternGeometry(PatternGeometry &other) { void PatternGeometry::updateBaseTriangle()
{
baseTriangle = computeBaseTriangle();
}
PatternGeometry::PatternGeometry(PatternGeometry &other)
{
vcg::tri::Append<PatternGeometry, PatternGeometry>::MeshCopy(*this, other); vcg::tri::Append<PatternGeometry, PatternGeometry>::MeshCopy(*this, other);
this->vertices = other.getVertices(); this->vertices = other.computeVertices();
baseTriangle = other.getBaseTriangle(); baseTriangle = other.getBaseTriangle();
baseTriangleHeight = computeBaseTriangleHeight(); baseTriangleHeight = computeBaseTriangleHeight();
vcg::tri::UpdateTopology<PatternGeometry>::VertexEdge(*this); vcg::tri::UpdateTopology<PatternGeometry>::VertexEdge(*this);
@ -166,7 +173,7 @@ bool PatternGeometry::load(const std::filesystem::__cxx11::path &meshFilePath)
void PatternGeometry::add(const std::vector<vcg::Point3d> &vertices) { void PatternGeometry::add(const std::vector<vcg::Point3d> &vertices) {
this->vertices = vertices; this->vertices = vertices;
std::for_each(vertices.begin(), vertices.end(), [&](const vcg::Point3d &p) { std::for_each(vertices.begin(), vertices.end(), [&](const vcg::Point3d &p) {
vcg::tri::Allocator<PatternGeometry>::AddVertex(*this, p); vcg::tri::Allocator<PatternGeometry>::AddVertex(*this, p, DefaultNormal);
}); });
vcg::tri::UpdateTopology<PatternGeometry>::VertexEdge(*this); vcg::tri::UpdateTopology<PatternGeometry>::VertexEdge(*this);
vcg::tri::UpdateTopology<PatternGeometry>::EdgeEdge(*this); vcg::tri::UpdateTopology<PatternGeometry>::EdgeEdge(*this);
@ -754,16 +761,17 @@ PatternGeometry::getIntersectingEdges(
return intersectingEdges; return intersectingEdges;
} }
PatternGeometry::PatternGeometry(const std::string &filename, PatternGeometry::PatternGeometry(const std::filesystem::path &patternFilePath,
bool addNormalsIfAbsent) { bool addNormalsIfAbsent)
if (!std::filesystem::exists(std::filesystem::path(filename))) { {
if (!std::filesystem::exists(std::filesystem::path(patternFilePath))) {
assert(false); assert(false);
std::cerr << "No flat pattern with name " << filename << std::endl; std::cerr << "No flat pattern with name " << patternFilePath << std::endl;
return; return;
} }
if (!load(filename)) { if (!load(patternFilePath)) {
assert(false); assert(false);
std::cerr << "File could not be loaded " << filename << std::endl; std::cerr << "File could not be loaded " << patternFilePath << std::endl;
return; return;
} }
if (addNormalsIfAbsent) { if (addNormalsIfAbsent) {
@ -867,8 +875,8 @@ std::shared_ptr<PatternGeometry> PatternGeometry::tilePattern(
assert(vcg::tri::HasFEAdjacency(tileInto)); assert(vcg::tri::HasFEAdjacency(tileInto));
assert(vcg::tri::HasFVAdjacency(tileInto)); assert(vcg::tri::HasFVAdjacency(tileInto));
for (const VCGPolyMesh::FaceType &f : tileInto.face) { for (const VCGPolyMesh::FaceType &f : tileInto.face) {
const int facePatternIndex = perSurfaceFacePatternIndices[tileInto.getIndex(f)]; const int patternIndex = perSurfaceFacePatternIndices[tileInto.getIndex(f)];
if (facePatternIndex == -1) { if (patternIndex == -1) {
continue; continue;
} }
CoordType centerOfFace(0, 0, 0); CoordType centerOfFace(0, 0, 0);
@ -884,7 +892,7 @@ std::shared_ptr<PatternGeometry> PatternGeometry::tilePattern(
for (int &vi : firstInFanConnectToNeighbor_vi) { for (int &vi : firstInFanConnectToNeighbor_vi) {
vi += pTiledPattern->VN(); vi += pTiledPattern->VN();
} }
ConstPatternGeometry &pattern = patterns[facePatternIndex]; ConstPatternGeometry &pattern = patterns[patternIndex];
for (size_t vi = 0; vi < f.VN(); vi++) { for (size_t vi = 0; vi < f.VN(); vi++) {
auto ep = f.FEp(vi); auto ep = f.FEp(vi);
@ -909,9 +917,9 @@ std::shared_ptr<PatternGeometry> PatternGeometry::tilePattern(
//Transform the base triangle nodes to the mesh triangle using barycentric coords //Transform the base triangle nodes to the mesh triangle using barycentric coords
for (int vi = 0; vi < transformedPattern.VN(); vi++) { for (int vi = 0; vi < transformedPattern.VN(); vi++) {
transformedPattern.vert[vi].P() = CoordType( transformedPattern.vert[vi].P() = CoordType(
meshTrianglePoints[0] * barycentricCoordinates[facePatternIndex][vi][0] meshTrianglePoints[0] * barycentricCoordinates[patternIndex][vi][0]
+ meshTrianglePoints[1] * barycentricCoordinates[facePatternIndex][vi][1] + meshTrianglePoints[1] * barycentricCoordinates[patternIndex][vi][1]
+ meshTrianglePoints[2] * barycentricCoordinates[facePatternIndex][vi][2]); + meshTrianglePoints[2] * barycentricCoordinates[patternIndex][vi][2]);
} }
for (VertexType &v : transformedPattern.vert) { for (VertexType &v : transformedPattern.vert) {
@ -923,7 +931,7 @@ std::shared_ptr<PatternGeometry> PatternGeometry::tilePattern(
transformedPattern, transformedPattern,
remap); remap);
for (size_t ei = 0; ei < pattern.EN(); ei++) { for (size_t ei = 0; ei < pattern.EN(); ei++) {
perPatternIndexToTiledPatternEdgeIndex[facePatternIndex].push_back(remap.edge[ei]); perPatternIndexToTiledPatternEdgeIndex[patternIndex].push_back(remap.edge[ei]);
} }
const size_t ei = tileInto.getIndex(ep); const size_t ei = tileInto.getIndex(ep);
tileIntoEdgeToInterfaceVi[ei].push_back(remap.vert[pattern.interfaceNodeIndex]); tileIntoEdgeToInterfaceVi[ei].push_back(remap.vert[pattern.interfaceNodeIndex]);
@ -938,7 +946,7 @@ std::shared_ptr<PatternGeometry> PatternGeometry::tilePattern(
firstInFanConnectToNeighbor_vi[connectToNeighborIndex], firstInFanConnectToNeighbor_vi[connectToNeighborIndex],
pTiledPattern->VN() - pattern.VN() pTiledPattern->VN() - pattern.VN()
+ connectToNeighborsVi[connectToNeighborIndex]); + connectToNeighborsVi[connectToNeighborIndex]);
perPatternIndexToTiledPatternEdgeIndex[facePatternIndex].push_back( perPatternIndexToTiledPatternEdgeIndex[patternIndex].push_back(
pTiledPattern->getIndex(*eIt)); pTiledPattern->getIndex(*eIt));
} }
} }
@ -952,13 +960,13 @@ std::shared_ptr<PatternGeometry> PatternGeometry::tilePattern(
+ connectToNeighborsVi[connectToNeighborIndex], + connectToNeighborsVi[connectToNeighborIndex],
pTiledPattern->VN() - pattern.VN() pTiledPattern->VN() - pattern.VN()
+ connectToNeighborsVi[connectToNeighborIndex]); + connectToNeighborsVi[connectToNeighborIndex]);
perPatternIndexToTiledPatternEdgeIndex[facePatternIndex].push_back( perPatternIndexToTiledPatternEdgeIndex[patternIndex].push_back(
pTiledPattern->getIndex(*eIt)); pTiledPattern->getIndex(*eIt));
} }
} }
} }
// tiledPattern.updateEigenEdgeAndVertices(); // pTiledPattern->updateEigenEdgeAndVertices();
// tiledPattern.registerForDrawing(); // pTiledPattern->registerForDrawing();
// polyscope::show(); // polyscope::show();
} }
@ -987,6 +995,7 @@ std::shared_ptr<PatternGeometry> PatternGeometry::tilePattern(
return sum + v.size(); return sum + v.size();
}); });
const int en = pTiledPattern->EN();
assert(pTiledPattern->EN() == sumOfEdgeIndices); assert(pTiledPattern->EN() == sumOfEdgeIndices);
tileIntoEdgesToTiledVi.clear(); tileIntoEdgesToTiledVi.clear();

View File

@ -59,7 +59,7 @@ private:
bool hasDanglingEdges(const std::vector<size_t> &numberOfNodesPerSlot); bool hasDanglingEdges(const std::vector<size_t> &numberOfNodesPerSlot);
bool hasValenceGreaterThan(const std::vector<size_t> &numberOfNodesPerSlot, bool hasValenceGreaterThan(const std::vector<size_t> &numberOfNodesPerSlot,
const size_t &valenceThreshold); const size_t &valenceThreshold);
std::vector<vcg::Point3d> getVertices() const; std::vector<vcg::Point3d> computeVertices() const;
static PatternGeometry createFan(PatternGeometry &pattern); static PatternGeometry createFan(PatternGeometry &pattern);
static PatternGeometry createTile(PatternGeometry &pattern); static PatternGeometry createTile(PatternGeometry &pattern);
double getTriangleEdgeSize() const; double getTriangleEdgeSize() const;
@ -85,7 +85,7 @@ private:
PatternGeometry(const std::vector<size_t> &numberOfNodesPerSlot, PatternGeometry(const std::vector<size_t> &numberOfNodesPerSlot,
const std::vector<vcg::Point2i> &edges); const std::vector<vcg::Point2i> &edges);
PatternGeometry(const std::string &filename, bool addNormalsIfAbsent = true); PatternGeometry(const std::filesystem::path &patternFilePath, bool addNormalsIfAbsent = true);
bool createHoneycombAtom(); bool createHoneycombAtom();
void copy(PatternGeometry &copyFrom); void copy(PatternGeometry &copyFrom);
@ -129,6 +129,7 @@ private:
void deleteDanglingVertices() override; void deleteDanglingVertices() override;
void deleteDanglingVertices( void deleteDanglingVertices(
vcg::tri::Allocator<VCGEdgeMesh>::PointerUpdater<VertexPointer> &pu) override; vcg::tri::Allocator<VCGEdgeMesh>::PointerUpdater<VertexPointer> &pu) override;
void updateBaseTriangle();
}; };
#endif // FLATPATTERNGEOMETRY_HPP #endif // FLATPATTERNGEOMETRY_HPP