From d398ecb3e209d68d59b6eab28c9ef26d5f239425 Mon Sep 17 00:00:00 2001 From: lab pc Date: Tue, 30 Nov 2021 23:44:54 +0800 Subject: [PATCH] Format file and class name and complete annotation --- include/Octree/{OctreeBase.h => BaseOctree.h} | 74 ++++++++++++++----- include/Octree/OctreeBuilder.h | 10 ++- include/Octree/OctreeIO.h | 10 +-- include/Octree/OctreeSDF.h | 53 ------------- include/Octree/OctreeTraverser.h | 26 ++++++- include/Octree/OctreeUDF.h | 56 -------------- include/Octree/SDFOctree.h | 56 ++++++++++++++ include/Octree/SDFTraversalSampler.h | 17 +++-- include/Octree/UDFOctree.h | 57 ++++++++++++++ include/Octree/UDFTraversalSampler.h | 11 +-- include/Octree/VoxelDenseData.h | 2 - src/{OctreeBase.cpp => BaseOctree.cpp} | 18 +++-- src/OctreeBuilder.cpp | 8 +- src/OctreeIO.cpp | 4 +- src/OctreeTraverser.cpp | 2 +- src/{OctreeSDF.cpp => SDFOctree.cpp} | 14 ++-- src/SDFTraversalSampler.cpp | 6 +- src/{OctreeUDF.cpp => UDFOctree.cpp} | 12 +-- src/UDFTraversalSampler.cpp | 29 ++++---- tests/octree_test/main.cpp | 8 +- tests/sdf_test/main.cpp | 2 +- 21 files changed, 275 insertions(+), 200 deletions(-) rename include/Octree/{OctreeBase.h => BaseOctree.h} (53%) delete mode 100644 include/Octree/OctreeSDF.h delete mode 100644 include/Octree/OctreeUDF.h create mode 100644 include/Octree/SDFOctree.h create mode 100644 include/Octree/UDFOctree.h rename src/{OctreeBase.cpp => BaseOctree.cpp} (82%) rename src/{OctreeSDF.cpp => SDFOctree.cpp} (58%) rename src/{OctreeUDF.cpp => UDFOctree.cpp} (62%) diff --git a/include/Octree/OctreeBase.h b/include/Octree/BaseOctree.h similarity index 53% rename from include/Octree/OctreeBase.h rename to include/Octree/BaseOctree.h index 8418491..1c2cefe 100644 --- a/include/Octree/OctreeBase.h +++ b/include/Octree/BaseOctree.h @@ -8,8 +8,8 @@ * ------------------------------------ **/ -#ifndef OCTREE_OCTREEBASE_H -#define OCTREE_OCTREEBASE_H +#ifndef OCTREE_BASEOCTREE_H +#define OCTREE_BASEOCTREE_H #include #include @@ -19,7 +19,7 @@ #include "AABB.h" namespace Octree { - class OctreeBase; + class BaseOctree; class OctreeNode; @@ -30,8 +30,8 @@ namespace Octree { using std::array; #if 0 - using octree_sptr = shared_ptr; - using octree_wptr = weak_ptr; + using octree_sptr = shared_ptr; + using octree_wptr = weak_ptr; #endif using ocnode_sptr = shared_ptr; @@ -40,26 +40,24 @@ namespace Octree { struct OctreeNode : public std::enable_shared_from_this { - friend class OctreeBase; + friend class BaseOctree; + friend class OctreeBuilder; + protected: uint32_t level; array children; ocnode_ptr father; AABB aabb; - -#if 0 - struct AABB { - double min_x, max_x; - double min_y, max_y; - double min_z, max_z; - } aabb; -#endif - set tri_ids; public: explicit OctreeNode(ocnode_ptr father, const AABB &aabb, uint32_t level); + /** + * Insert a face index into `tri_ids` + * TODO: This function and property `tri_ids` are considered to be discarded + * @param tri + */ void insert_triangle_id(uint32_t tri); /** @@ -67,33 +65,71 @@ namespace Octree { */ void split_if_no_children(); + /** + * Make sub node via aabb + * @param aabb + * @return + */ virtual ocnode_sptr make_child(const AABB &aabb); + /** + * If this node is a leaf + * @return + */ bool is_leaf() const; + /** + * Return all-8 sub node + * @return + */ array get_children() const; + /** + * Find the leaf that contains the @param pos + * @param pos + * @return + */ ocnode_sptr map_node(const Eigen::Vector3d &pos); }; - class OctreeBase { + class BaseOctree { public: uint32_t max_level; ocnode_sptr root; public: - explicit OctreeBase(uint32_t max_level, const AABB &aabb); + explicit BaseOctree(uint32_t max_level, const AABB &aabb); - explicit OctreeBase(uint32_t max_level, ocnode_sptr root); + explicit BaseOctree(uint32_t max_level, ocnode_sptr root); + public: + /** + * Find the leaf that contains the @param pos + * @param pos + * @return + */ ocnode_sptr map_node(const Eigen::Vector3d &pos); + /** + * Return the root node + * @return + */ ocnode_sptr get_root() const { return root; } + /** + * Return the max_level + * @return + */ uint32_t get_max_level() const { return max_level; } + + /** + * Get the aabb of root + * @return + */ + AABB aabb() const; }; } -#endif //OCTREE_OCTREEBASE_H +#endif //OCTREE_BASEOCTREE_H diff --git a/include/Octree/OctreeBuilder.h b/include/Octree/OctreeBuilder.h index c8a37d8..f3bd877 100644 --- a/include/Octree/OctreeBuilder.h +++ b/include/Octree/OctreeBuilder.h @@ -19,7 +19,7 @@ namespace Octree { - class OctreeBase; + class BaseOctree; class OctreeNode; using ocnode_sptr = std::shared_ptr; @@ -28,9 +28,9 @@ namespace Octree { public: const uint32_t max_depth; const pMesh::Triangle3dMesh<> &mesh; - OctreeBase &octree; + BaseOctree &octree; - explicit OctreeBuilder(const pMesh::Triangle3dMesh<> &mesh, OctreeBase &octree); + explicit OctreeBuilder(const pMesh::Triangle3dMesh<> &mesh, BaseOctree &octree); void build(); @@ -51,6 +51,10 @@ namespace Octree { */ void insert_triangle_to_leaf(OctreeNode &node, uint32_t tid); + /** + * Clean up the leaves that not contain any triangle to reduce memory + * @param node + */ void clean_up(ocnode_sptr &node); }; } diff --git a/include/Octree/OctreeIO.h b/include/Octree/OctreeIO.h index 1342df6..2dda1b2 100644 --- a/include/Octree/OctreeIO.h +++ b/include/Octree/OctreeIO.h @@ -16,7 +16,7 @@ namespace Octree { - class OctreeBase; + class BaseOctree; class OctreeNode; class OctreeIO { @@ -26,10 +26,10 @@ namespace Octree { class OctreeSaver : public OctreeIO { private: - const OctreeBase &octree; + const BaseOctree &octree; public: - explicit OctreeSaver(const OctreeBase &octree); + explicit OctreeSaver(const BaseOctree &octree); void save(const fs_path &path); @@ -39,10 +39,10 @@ namespace Octree { class OctreeLoader : public OctreeIO { private: - OctreeBase &octree; + BaseOctree &octree; public: - explicit OctreeLoader(OctreeBase &octree); + explicit OctreeLoader(BaseOctree &octree); void load(const fs_path &path); }; diff --git a/include/Octree/OctreeSDF.h b/include/Octree/OctreeSDF.h deleted file mode 100644 index 13a281a..0000000 --- a/include/Octree/OctreeSDF.h +++ /dev/null @@ -1,53 +0,0 @@ -/** - * ------------------------------------ - * @author: Weipeng Kong - * @date: 2021/11/30 - * @email: yjxkwp@foxmail.com - * @site: https://donot.fit - * @description: - * ------------------------------------ -**/ - -#ifndef OCTREE_OCTREESDF_H -#define OCTREE_OCTREESDF_H - -#include "OctreeBase.h" - - -namespace Octree { - class SDFData; - - class OctreeSDFNode; - - using sdfdata_sptr = shared_ptr; - - using ocsdfnode_sptr = shared_ptr; - using ocsdfnode_wptr = weak_ptr; - using ocsdfnode_ptr = OctreeSDFNode *; - - struct OctreeSDFNode : public OctreeNode { - public: - sdfdata_sptr sdf; - - public: - explicit OctreeSDFNode(ocnode_ptr father, const AABB &aabb, uint32_t level); - - double get_sdf(const Eigen::Vector3d &pos); - - ocnode_sptr make_child(const AABB &aabb) override; - }; -} - -namespace Octree { - class OctreeSDF : public OctreeBase { - public: - explicit OctreeSDF(uint32_t max_level, const AABB &aabb); - - ocsdfnode_sptr map_node(const Eigen::Vector3d &pos){return std::static_pointer_cast(OctreeBase::map_node(pos));} - - ocsdfnode_sptr get_root() const { return std::static_pointer_cast(root); } - }; -} - - -#endif //OCTREE_OCTREESDF_H diff --git a/include/Octree/OctreeTraverser.h b/include/Octree/OctreeTraverser.h index 04ed8ba..4d1b5ea 100644 --- a/include/Octree/OctreeTraverser.h +++ b/include/Octree/OctreeTraverser.h @@ -11,7 +11,7 @@ #ifndef OCTREE_OCTREETRAVERSER_H #define OCTREE_OCTREETRAVERSER_H -#include "OctreeBase.h" +#include "BaseOctree.h" namespace Octree { class OctreeTraverser { @@ -21,21 +21,41 @@ namespace Octree { BFS }; protected: - const OctreeBase &octree; + const BaseOctree &octree; private: const TraverseStrategy strategy; public: - explicit OctreeTraverser(const OctreeBase &octree, const TraverseStrategy strategy = DFS); + /** + * Constructor + * @param octree + * @param strategy + */ + explicit OctreeTraverser(const BaseOctree &octree, const TraverseStrategy strategy = DFS); + /** + * Start traversing + */ void traverse(); + /** + * Function called when node is visited + * @param node + */ virtual void visit_node(OctreeNode &node); private: + /** + * Breadth-first search + * @param node + */ void dfs(ocnode_sptr node); + /** + * Depth-first search + * @param root + */ void bfs(ocnode_sptr root); }; } diff --git a/include/Octree/OctreeUDF.h b/include/Octree/OctreeUDF.h deleted file mode 100644 index 44d0006..0000000 --- a/include/Octree/OctreeUDF.h +++ /dev/null @@ -1,56 +0,0 @@ -/** - * ------------------------------------ - * @author: Weipeng Kong - * @date: 2021/11/30 - * @email: yjxkwp@foxmail.com - * @site: https://donot.fit - * @description: - * ------------------------------------ -**/ - -#ifndef OCTREE_OCTREEUDF_H -#define OCTREE_OCTREEUDF_H - - - -#include "OctreeBase.h" - - -namespace Octree { - class UDFData; - - class OctreeUDFNode; - - using udfdata_sptr = shared_ptr; - - using ocudfnode_sptr = shared_ptr; - using ocudfnode_wptr = weak_ptr; - using ocudfnode_ptr = OctreeUDFNode *; - - struct OctreeUDFNode : public OctreeNode { - public: - udfdata_sptr udf; - - public: - explicit OctreeUDFNode(ocnode_ptr father, const AABB &aabb, uint32_t level); - - double get_udf(const Eigen::Vector3d &pos); - - ocnode_sptr make_child(const AABB &aabb) override; - }; -} - -namespace Octree { - class OctreeUDF : public OctreeBase { - public: - explicit OctreeUDF(uint32_t max_level, const AABB &aabb); - - ocudfnode_sptr map_node(const Eigen::Vector3d &pos) { return std::static_pointer_cast(OctreeBase::map_node(pos)); } - - ocudfnode_sptr get_root() const { return std::static_pointer_cast(root); } - }; -} - - - -#endif //OCTREE_OCTREEUDF_H diff --git a/include/Octree/SDFOctree.h b/include/Octree/SDFOctree.h new file mode 100644 index 0000000..c5134bc --- /dev/null +++ b/include/Octree/SDFOctree.h @@ -0,0 +1,56 @@ +/** + * ------------------------------------ + * @author: Weipeng Kong + * @date: 2021/11/30 + * @email: yjxkwp@foxmail.com + * @site: https://donot.fit + * @description: + * ------------------------------------ +**/ + +#ifndef OCTREE_SDFOCTREE_H +#define OCTREE_SDFOCTREE_H + +#include "BaseOctree.h" + + +namespace Octree { + class SDFData; + + class SDFOctreeNode; + + using sdfdata_sptr = shared_ptr; + using ocsdfnode_sptr = shared_ptr; + using ocsdfnode_wptr = weak_ptr; + using ocsdfnode_ptr = SDFOctreeNode *; + + struct SDFOctreeNode : public OctreeNode { + public: + sdfdata_sptr sdf; + + public: + explicit SDFOctreeNode(ocnode_ptr father, const AABB &aabb, uint32_t level); + + double get_sdf(const Eigen::Vector3d &pos); + + ocnode_sptr make_child(const AABB &aabb) override; + }; +} + +namespace Octree { + class SDFOctree : public BaseOctree { + public: + explicit SDFOctree(uint32_t max_level, const AABB &aabb); + + ocsdfnode_sptr map_node(const Eigen::Vector3d &pos) { + return std::static_pointer_cast(BaseOctree::map_node(pos)); + } + + ocsdfnode_sptr get_root() const { + return std::static_pointer_cast(root); + } + }; +} + + +#endif //OCTREE_SDFOCTREE_H diff --git a/include/Octree/SDFTraversalSampler.h b/include/Octree/SDFTraversalSampler.h index e6213a5..a9fa3ce 100644 --- a/include/Octree/SDFTraversalSampler.h +++ b/include/Octree/SDFTraversalSampler.h @@ -18,32 +18,37 @@ #include namespace Octree { - class OctreeSDFNode; - class OctreeSDF; + class SDFOctreeNode; + + class SDFOctree; class SDFTraversalBuilder : public OctreeTraverser { const pMesh::Triangle3dMesh<> &mesh; const double sample_step; - struct QueryBox{ - OctreeSDFNode &node; + struct QueryBox { + SDFOctreeNode &node; int start; int len; }; std::vector query_boxes; public: - explicit SDFTraversalBuilder(const OctreeSDF &octree, const pMesh::Triangle3dMesh<> &mesh, const double sample_step, const TraverseStrategy strategy = DFS); + explicit SDFTraversalBuilder(const SDFOctree &octree, const pMesh::Triangle3dMesh<> &mesh, + const double sample_step, const TraverseStrategy strategy = DFS); void build(); void visit_node(OctreeNode &node) override; }; +} + +namespace Octree { class SDFTraversalSampler : public OctreeTraverser { public: - explicit SDFTraversalSampler(const OctreeBase &octree, const TraverseStrategy strategy = DFS); + explicit SDFTraversalSampler(const BaseOctree &octree, const TraverseStrategy strategy = DFS); void visit_node(OctreeNode &node) override; }; diff --git a/include/Octree/UDFOctree.h b/include/Octree/UDFOctree.h new file mode 100644 index 0000000..75edff3 --- /dev/null +++ b/include/Octree/UDFOctree.h @@ -0,0 +1,57 @@ +/** + * ------------------------------------ + * @author: Weipeng Kong + * @date: 2021/11/30 + * @email: yjxkwp@foxmail.com + * @site: https://donot.fit + * @description: + * ------------------------------------ +**/ + +#ifndef OCTREE_UDFOCTREE_H +#define OCTREE_UDFOCTREE_H + + +#include "BaseOctree.h" + + +namespace Octree { + class UDFData; + + class UDFOctreeNode; + + using udfdata_sptr = shared_ptr; + using ocudfnode_sptr = shared_ptr; + using ocudfnode_wptr = weak_ptr; + using ocudfnode_ptr = UDFOctreeNode *; + + struct UDFOctreeNode : public OctreeNode { + public: + udfdata_sptr udf; + + public: + explicit UDFOctreeNode(ocnode_ptr father, const AABB &aabb, uint32_t level); + + double get_udf(const Eigen::Vector3d &pos); + + ocnode_sptr make_child(const AABB &aabb) override; + }; +} + +namespace Octree { + class UDFOctree : public BaseOctree { + public: + explicit UDFOctree(uint32_t max_level, const AABB &aabb); + + ocudfnode_sptr map_node(const Eigen::Vector3d &pos) { + return std::static_pointer_cast(BaseOctree::map_node(pos)); + } + + ocudfnode_sptr get_root() const { + return std::static_pointer_cast(root); + } + }; +} + + +#endif //OCTREE_UDFOCTREE_H diff --git a/include/Octree/UDFTraversalSampler.h b/include/Octree/UDFTraversalSampler.h index 48318b3..b6c8135 100644 --- a/include/Octree/UDFTraversalSampler.h +++ b/include/Octree/UDFTraversalSampler.h @@ -12,28 +12,29 @@ #define OCTREE_SDFTRAVERSALSAMPLER_H #include "OctreeTraverser.h" -#include "SDFData.h" #include "UDFData.h" - #include #include #include namespace Octree { + class UDFOctreeNode; + class UDFOctree; + class UDFTraversalBuilder : public OctreeTraverser { const pMesh::Triangle3dMesh<> &mesh; const double sample_step; struct QueryBox{ - OctreeNode &node; + UDFOctreeNode &node; int start; int len; }; std::vector query_boxes; public: - explicit UDFTraversalBuilder(const OctreeBase &octree, const pMesh::Triangle3dMesh<> &mesh, const double sample_step, const TraverseStrategy strategy = DFS); + explicit UDFTraversalBuilder(const BaseOctree &octree, const pMesh::Triangle3dMesh<> &mesh, const double sample_step, const TraverseStrategy strategy = DFS); void build(); @@ -42,7 +43,7 @@ namespace Octree { class UDFTraversalSampler : public OctreeTraverser { public: - explicit UDFTraversalSampler(const OctreeBase &octree, const TraverseStrategy strategy = DFS); + explicit UDFTraversalSampler(const BaseOctree &octree, const TraverseStrategy strategy = DFS); void visit_node(OctreeNode &node) override; }; diff --git a/include/Octree/VoxelDenseData.h b/include/Octree/VoxelDenseData.h index e5ba743..ea70cd8 100644 --- a/include/Octree/VoxelDenseData.h +++ b/include/Octree/VoxelDenseData.h @@ -46,8 +46,6 @@ namespace Octree { */ int get_array_index(int x, int y, int z) const; }; - - } #endif //OCTREE_VOXELDENSEDATA_H diff --git a/src/OctreeBase.cpp b/src/BaseOctree.cpp similarity index 82% rename from src/OctreeBase.cpp rename to src/BaseOctree.cpp index cdbd2c3..38a5568 100644 --- a/src/OctreeBase.cpp +++ b/src/BaseOctree.cpp @@ -8,23 +8,31 @@ * ------------------------------------ **/ -#include "Octree/OctreeBase.h" +#include "Octree/BaseOctree.h" -Octree::ocnode_sptr Octree::OctreeBase::map_node(const Eigen::Vector3d &pos) { +Octree::ocnode_sptr Octree::BaseOctree::map_node(const Eigen::Vector3d &pos) { auto fd = (root == nullptr) ? nullptr : root->map_node(pos); return fd; return fd == nullptr ? root : fd; } -Octree::OctreeBase::OctreeBase(uint32_t max_level, const Octree::AABB &aabb) : - OctreeBase(max_level, std::make_shared(nullptr, aabb, 0)) { +Octree::BaseOctree::BaseOctree(uint32_t max_level, const Octree::AABB &aabb) : + BaseOctree(max_level, std::make_shared(nullptr, aabb, 0)) { } -Octree::OctreeBase::OctreeBase(uint32_t max_level, Octree::ocnode_sptr root) : max_level(max_level), root(root) { +Octree::BaseOctree::BaseOctree(uint32_t max_level, Octree::ocnode_sptr root) : max_level(max_level), root(root) { } +Octree::AABB Octree::BaseOctree::aabb() const { + if(root == nullptr){ + return AABB(); + }else{ + return root->aabb; + } +} + Octree::OctreeNode::OctreeNode(ocnode_ptr father, const Octree::AABB &aabb, uint32_t level) : father(father), level(level), diff --git a/src/OctreeBuilder.cpp b/src/OctreeBuilder.cpp index 5c824d9..72de49a 100644 --- a/src/OctreeBuilder.cpp +++ b/src/OctreeBuilder.cpp @@ -9,7 +9,7 @@ **/ #include "../include/Octree/OctreeBuilder.h" -#include "Octree/OctreeBase.h" +#include "Octree/BaseOctree.h" #include #if 0 @@ -20,14 +20,12 @@ struct OctreeNodeBuilder{ #endif -Octree::OctreeBuilder::OctreeBuilder(const pMesh::Triangle3dMesh<> &mesh, Octree::OctreeBase &octree): - mesh(mesh), max_depth(octree.get_max_level()), octree(octree) -{ +Octree::OctreeBuilder::OctreeBuilder(const pMesh::Triangle3dMesh<> &mesh, Octree::BaseOctree &octree) : + mesh(mesh), max_depth(octree.get_max_level()), octree(octree) { } - void Octree::OctreeBuilder::build() { for (int i = 0; i < mesh.f_size(); ++i) { this->insert_triangle(*octree.root, i); diff --git a/src/OctreeIO.cpp b/src/OctreeIO.cpp index 9b2396a..e1c1117 100644 --- a/src/OctreeIO.cpp +++ b/src/OctreeIO.cpp @@ -9,14 +9,14 @@ **/ #include "../include/Octree/OctreeIO.h" -#include "Octree/OctreeBase.h" +#include "Octree/BaseOctree.h" namespace SerializationTool{ } -Octree::OctreeSaver::OctreeSaver(const Octree::OctreeBase &octree): octree(octree) { +Octree::OctreeSaver::OctreeSaver(const Octree::BaseOctree &octree): octree(octree) { } diff --git a/src/OctreeTraverser.cpp b/src/OctreeTraverser.cpp index 2e7dad5..c707971 100644 --- a/src/OctreeTraverser.cpp +++ b/src/OctreeTraverser.cpp @@ -10,7 +10,7 @@ #include "../include/Octree/OctreeTraverser.h" -Octree::OctreeTraverser::OctreeTraverser(const OctreeBase &octree, const TraverseStrategy strategy) : octree(octree), +Octree::OctreeTraverser::OctreeTraverser(const BaseOctree &octree, const TraverseStrategy strategy) : octree(octree), strategy( strategy) { diff --git a/src/OctreeSDF.cpp b/src/SDFOctree.cpp similarity index 58% rename from src/OctreeSDF.cpp rename to src/SDFOctree.cpp index a63a53e..1258d48 100644 --- a/src/OctreeSDF.cpp +++ b/src/SDFOctree.cpp @@ -8,11 +8,11 @@ * ------------------------------------ **/ -#include "Octree/OctreeSDF.h" +#include "Octree/SDFOctree.h" #include "Octree/SDFData.h" -double Octree::OctreeSDFNode::get_sdf(const Eigen::Vector3d &pos) { +double Octree::SDFOctreeNode::get_sdf(const Eigen::Vector3d &pos) { Eigen::Vector3d relative = pos - aabb.get_min(); auto size = aabb.size(); relative.x() = relative.x() / size.x(); @@ -21,16 +21,16 @@ double Octree::OctreeSDFNode::get_sdf(const Eigen::Vector3d &pos) { return sdf->sample(relative.x(), relative.y(), relative.z()); } -Octree::OctreeSDFNode::OctreeSDFNode(Octree::ocnode_ptr father, const Octree::AABB &aabb, uint32_t level) : OctreeNode( +Octree::SDFOctreeNode::SDFOctreeNode(Octree::ocnode_ptr father, const Octree::AABB &aabb, uint32_t level) : OctreeNode( father, aabb, level) { } -Octree::ocnode_sptr Octree::OctreeSDFNode::make_child(const Octree::AABB &aabb) { - return std::make_shared(this, aabb, level + 1); +Octree::ocnode_sptr Octree::SDFOctreeNode::make_child(const Octree::AABB &aabb) { + return std::make_shared(this, aabb, level + 1); } -Octree::OctreeSDF::OctreeSDF(uint32_t max_level, const Octree::AABB &aabb) : - OctreeBase(max_level, std::static_pointer_cast(std::make_shared(nullptr, aabb, 0))) { +Octree::SDFOctree::SDFOctree(uint32_t max_level, const Octree::AABB &aabb) : + BaseOctree(max_level, std::static_pointer_cast(std::make_shared(nullptr, aabb, 0))) { } diff --git a/src/SDFTraversalSampler.cpp b/src/SDFTraversalSampler.cpp index e7be17f..093185d 100644 --- a/src/SDFTraversalSampler.cpp +++ b/src/SDFTraversalSampler.cpp @@ -10,12 +10,12 @@ #include "Octree/SDFTraversalSampler.h" #include "Octree/SDFData.h" -#include "Octree/OctreeSDF.h" +#include "Octree/SDFOctree.h" #include #include #include -Octree::SDFTraversalBuilder::SDFTraversalBuilder(const Octree::OctreeSDF &octree, +Octree::SDFTraversalBuilder::SDFTraversalBuilder(const Octree::SDFOctree &octree, const pMesh::Triangle3dMesh<> &mesh, const double sample_step, const Octree::OctreeTraverser::TraverseStrategy strategy) @@ -24,7 +24,7 @@ Octree::SDFTraversalBuilder::SDFTraversalBuilder(const Octree::OctreeSDF &octree void Octree::SDFTraversalBuilder::visit_node(Octree::OctreeNode &node) { // if (not node.is_leaf()) return; - auto &sdf_node = (OctreeSDFNode &)node; + auto &sdf_node = (SDFOctreeNode &)node; if (node.level >= octree.get_max_level()) { // deepest voxel diff --git a/src/OctreeUDF.cpp b/src/UDFOctree.cpp similarity index 62% rename from src/OctreeUDF.cpp rename to src/UDFOctree.cpp index 2a4a5c3..c1d4e1a 100644 --- a/src/OctreeUDF.cpp +++ b/src/UDFOctree.cpp @@ -8,15 +8,15 @@ * ------------------------------------ **/ -#include "Octree/OctreeUDF.h" +#include "Octree/UDFOctree.h" #include "Octree/UDFData.h" -Octree::OctreeUDFNode::OctreeUDFNode(Octree::ocnode_ptr father, const Octree::AABB &aabb, uint32_t level) : OctreeNode( +Octree::UDFOctreeNode::UDFOctreeNode(Octree::ocnode_ptr father, const Octree::AABB &aabb, uint32_t level) : OctreeNode( father, aabb, level) { } -double Octree::OctreeUDFNode::get_udf(const Eigen::Vector3d &pos) { +double Octree::UDFOctreeNode::get_udf(const Eigen::Vector3d &pos) { Eigen::Vector3d relative = pos - aabb.get_min(); auto size = aabb.size(); relative.x() = relative.x() / size.x(); @@ -25,10 +25,10 @@ double Octree::OctreeUDFNode::get_udf(const Eigen::Vector3d &pos) { return udf->sample(relative.x(), relative.y(), relative.z()); } -Octree::ocnode_sptr Octree::OctreeUDFNode::make_child(const Octree::AABB &aabb) { - return std::make_shared(this, aabb, level + 1); +Octree::ocnode_sptr Octree::UDFOctreeNode::make_child(const Octree::AABB &aabb) { + return std::make_shared(this, aabb, level + 1); } -Octree::OctreeUDF::OctreeUDF(uint32_t max_level, const Octree::AABB &aabb) : OctreeBase(max_level, aabb) { +Octree::UDFOctree::UDFOctree(uint32_t max_level, const Octree::AABB &aabb) : BaseOctree(max_level, aabb) { } diff --git a/src/UDFTraversalSampler.cpp b/src/UDFTraversalSampler.cpp index 9add277..3ad3111 100644 --- a/src/UDFTraversalSampler.cpp +++ b/src/UDFTraversalSampler.cpp @@ -8,15 +8,16 @@ * ------------------------------------ **/ -#include "Octree/SDFTraversalSampler.h" -#include "Octree/SDFData.h" +#include "Octree/UDFTraversalSampler.h" +#include "Octree/UDFData.h" +#include "Octree/UDFOctree.h" #include #include #include -#if 0 -Octree::UDFTraversalBuilder::UDFTraversalBuilder(const Octree::OctreeBase &octree, + +Octree::UDFTraversalBuilder::UDFTraversalBuilder(const Octree::BaseOctree &octree, const pMesh::Triangle3dMesh<> &mesh, const double sample_step, const Octree::OctreeTraverser::TraverseStrategy strategy) @@ -24,8 +25,9 @@ Octree::UDFTraversalBuilder::UDFTraversalBuilder(const Octree::OctreeBase &octre } void Octree::UDFTraversalBuilder::visit_node(Octree::OctreeNode &node) { -// if (not node.is_leaf()) return; + auto &udf_node = (UDFOctreeNode &)node; +// if (not node.is_leaf()) return; if (node.level >= octree.max_level) { // deepest voxel auto aabb_size = node.aabb.size(); @@ -39,9 +41,9 @@ void Octree::UDFTraversalBuilder::visit_node(Octree::OctreeNode &node) { int start = this->query_boxes.empty() ? 0 : (this->query_boxes.back().start + this->query_boxes.back().len); int len = _x * _y * _z; - sdfdata_sptr sdf = std::make_shared(std::vector(len), _x, _y, _z); - node.sdf = sdf; - query_boxes.push_back({.node=node, .start=start, .len=len}); + udfdata_sptr udf = std::make_shared(std::vector(len), _x, _y, _z); + udf_node.udf = udf; + query_boxes.push_back({.node=udf_node, .start=start, .len=len}); } else { // rough voxel (un-deepest) // Only calc corners @@ -52,9 +54,9 @@ void Octree::UDFTraversalBuilder::visit_node(Octree::OctreeNode &node) { int start = this->query_boxes.empty() ? 0 : (this->query_boxes.back().start + this->query_boxes.back().len); int len = _x * _y * _z; - sdfdata_sptr sdf = std::make_shared(std::vector(len), _x, _y, _z); - node.sdf = sdf; - query_boxes.push_back({.node=node, .start=start, .len=len}); + udfdata_sptr udf = std::make_shared(std::vector(len), _x, _y, _z); + udf_node.udf = udf; + query_boxes.push_back({.node=udf_node, .start=start, .len=len}); } } @@ -80,7 +82,7 @@ void Octree::UDFTraversalBuilder::build() { int index_base = 0; for (const auto &qbox: this->query_boxes) { - auto &sdf = *qbox.node.sdf; + auto &sdf = *qbox.node.udf; auto &aabb = qbox.node.aabb; const auto pos_base = aabb.get_min(); const auto pos_max = aabb.get_max(); @@ -132,7 +134,7 @@ void Octree::UDFTraversalBuilder::build() { double *distance = S.data(); for (const auto &qbox: this->query_boxes) { - auto &sdf = *qbox.node.sdf; + auto &sdf = *qbox.node.udf; double *target_data = sdf.value.data(); std::memcpy(target_data, distance + qbox.start, qbox.len * sizeof(double)); } @@ -140,4 +142,3 @@ void Octree::UDFTraversalBuilder::build() { query_boxes.clear(); } -#endif diff --git a/tests/octree_test/main.cpp b/tests/octree_test/main.cpp index b444f4f..d061aa3 100644 --- a/tests/octree_test/main.cpp +++ b/tests/octree_test/main.cpp @@ -9,7 +9,7 @@ **/ #include -#include "Octree/OctreeSDF.h" +#include "Octree/SDFOctree.h" #include "Octree/OctreeBuilder.h" #include "Octree/OctreeTraverser.h" #include "Octree/SDFTraversalSampler.h" @@ -32,7 +32,7 @@ class VTKTraverser : public pMesh::io::BaseReader, public Octree::OctreeTraverser { int node_cnt = 0; public: - explicit VTKTraverser(const Octree::OctreeSDF &octree, const TraverseStrategy strategy = DFS); + explicit VTKTraverser(const Octree::SDFOctree &octree, const TraverseStrategy strategy = DFS); void visit_node(Octree::OctreeNode &node) override; @@ -65,7 +65,7 @@ int main() { boost::timer t; Octree::AABB aabb(mesh.aabb()); - Octree::OctreeSDF octree(level, aabb); + Octree::SDFOctree octree(level, aabb); aabb.extend(2); Octree::OctreeBuilder builder(mesh, octree); @@ -210,7 +210,7 @@ bool VTKTraverser::operator>>(pMesh::io::ReadAdapter &adapter) { } -VTKTraverser::VTKTraverser(const Octree::OctreeSDF &octree, const OctreeTraverser::TraverseStrategy strategy) +VTKTraverser::VTKTraverser(const Octree::SDFOctree &octree, const OctreeTraverser::TraverseStrategy strategy) : OctreeTraverser( octree, strategy) { } diff --git a/tests/sdf_test/main.cpp b/tests/sdf_test/main.cpp index bb6b6c1..ae66f42 100644 --- a/tests/sdf_test/main.cpp +++ b/tests/sdf_test/main.cpp @@ -9,7 +9,7 @@ **/ #include -#include "Octree/OctreeBase.h" +#include "Octree/BaseOctree.h" #include "Octree/OctreeBuilder.h" #include "Octree/OctreeTraverser.h" #include "Octree/SDFTraversalSampler.h"