diff --git a/network_process/src/connect_by_topo/pair_faces.cpp b/network_process/src/connect_by_topo/pair_faces.cpp index d70b471..ac22818 100644 --- a/network_process/src/connect_by_topo/pair_faces.cpp +++ b/network_process/src/connect_by_topo/pair_faces.cpp @@ -1,7 +1,7 @@ #include void compute_patch_order(const stl_vector_mp> &tetrahedrons, - const stl_vector_mp &iso_edge, + const iso_edge_t &iso_edge, const stl_vector_mp &iso_verts, const stl_vector_mp &iso_faces, const stl_vector_mp &tetrahedron_arrangements, diff --git a/network_process/src/post_topo/patch_propagation.cpp b/network_process/src/post_topo/patch_propagation.cpp index 8e229da..8919298 100644 --- a/network_process/src/post_topo/patch_propagation.cpp +++ b/network_process/src/post_topo/patch_propagation.cpp @@ -116,14 +116,14 @@ void transform_subface_to_primitive_labels(const baked_blobtree_t& stl_vector_mp> temp_subface_signs{}; for (size_t i = 0; i < tree.primitives.size(); ++i) { auto& cell_primitive_sign = cell_primitive_signs[i]; - const auto& primitive = *tree.primitives[i].object_ptr; + const auto primitive_ptr = tree.primitives[i].object_ptr; const auto& subface_indices = tree.primitives[i].index_mapping; temp_subface_signs.clear(); temp_subface_signs.reserve(subface_indices.size()); for (const auto& subface_index : subface_indices) temp_subface_signs.emplace_back(cell_subface_signs[subface_index]); - cell_primitive_sign = primitive.judge_sign_by_subface_sign(temp_subface_signs); + cell_primitive_sign = primitive_ptr->judge_sign_by_subface_sign(temp_subface_signs); } } diff --git a/primitive_process/interface/data/data_type.hpp b/primitive_process/interface/data/data_type.hpp index d379d76..98317a0 100644 --- a/primitive_process/interface/data/data_type.hpp +++ b/primitive_process/interface/data/data_type.hpp @@ -109,18 +109,8 @@ struct default_elem_ctor { // TODO: this will cause error, try to handle it // static_assert(std::is_base_of{}); T res{}; - res.model_matrices = make_pointer_wrapper(k); + res.model_matrices = make_pointer_wrapper(const_cast(k)); return res; } }; - -// template <> -// struct default_elem_ctor { -// internal::inverted_transform_block operator()(const internal::transform_block* k) const -// { -// internal::inverted_transform_block res{}; -// res.data = k->inverse(); -// return res; -// } -// }; } // namespace detail \ No newline at end of file diff --git a/primitive_process/src/base/primitive.cpp b/primitive_process/src/base/primitive.cpp index bdc0936..6a5d6e9 100644 --- a/primitive_process/src/base/primitive.cpp +++ b/primitive_process/src/base/primitive.cpp @@ -33,7 +33,7 @@ dynamic_bitset_mp<> primitive::judge_sign_by_subface_sign(stl_vector_mp res = subface_signs.front(); for (size_t i = 1; i < subfaces.size(); ++i) { - if (!subfaces[i].is_marked()) + if (!subfaces[i].get_mark()) res |= subface_signs[i]; else res |= subface_signs[i].flip(); diff --git a/primitive_process/src/data/data_center.cpp b/primitive_process/src/data/data_center.cpp index cfc2ff7..a125d26 100644 --- a/primitive_process/src/data/data_center.cpp +++ b/primitive_process/src/data/data_center.cpp @@ -67,25 +67,24 @@ void primitive_data_center_t::release_transform_block(const internal::paired_mod void primitive_data_center_t::release_surface(surface_type type, const marked_subface_ptr_t& subface) { - auto subface_ptr = subface.get_ptr(); switch (type) { case surface_type::plane: { - auto model_matrices = subface_ptr->model_matrices; + auto model_matrices = subface->model_matrices; std::get(this->surfaces[static_cast(type)]).release(model_matrices); release_transform_block(model_matrices); break; } case surface_type::sphere: { - auto model_matrices = subface_ptr->model_matrices; + auto model_matrices = subface->model_matrices; std::get(this->surfaces[static_cast(type)]).release(model_matrices); release_transform_block(model_matrices); break; } case surface_type::cylinder: { - auto model_matrices = subface_ptr->model_matrices; + auto model_matrices = subface->model_matrices; std::get(this->surfaces[static_cast(type)]).release(model_matrices); release_transform_block(model_matrices); break; diff --git a/primitive_process/src/primitive/simple/cylinder.cpp b/primitive_process/src/primitive/simple/cylinder.cpp index 856d02c..03272e9 100644 --- a/primitive_process/src/primitive/simple/cylinder.cpp +++ b/primitive_process/src/primitive/simple/cylinder.cpp @@ -12,7 +12,7 @@ void cylinder_t::initialize(primitive_data_center_t &data_center) void cylinder_t::destroy() { - primitive_data_center_t &data_center = bottom_plane.get_ptr()->data_center; + primitive_data_center_t &data_center = bottom_plane->data_center; data_center.release_surface(surface_type::cylinder, static_pointer_cast(cylinder_face)); data_center.release_surface(surface_type::plane, static_pointer_cast(bottom_plane)); diff --git a/primitive_process/src/primitive/simple/sphere.cpp b/primitive_process/src/primitive/simple/sphere.cpp index 9e5ea0e..0c5f4a5 100644 --- a/primitive_process/src/primitive/simple/sphere.cpp +++ b/primitive_process/src/primitive/simple/sphere.cpp @@ -9,7 +9,7 @@ void sphere_t::initialize(primitive_data_center_t &data_center) void sphere_t::destroy() { - primitive_data_center_t& data_center = sphere_face.get_ptr()->data_center; + primitive_data_center_t& data_center = sphere_face->data_center; data_center.release_surface(surface_type::sphere, static_pointer_cast(sphere_face)); } diff --git a/shared_module/utils/marked_ptr.hpp b/shared_module/utils/marked_ptr.hpp index 9981a17..c91452f 100644 --- a/shared_module/utils/marked_ptr.hpp +++ b/shared_module/utils/marked_ptr.hpp @@ -24,6 +24,8 @@ struct marked_ptr { operator size_t() const { return get_mark(); } + T* operator->() const noexcept { return get_ptr(); } + protected: T* ptr{nullptr}; }; diff --git a/shared_module/utils/pointer_wrapper.hpp b/shared_module/utils/pointer_wrapper.hpp index e92c46e..ad6dcc6 100644 --- a/shared_module/utils/pointer_wrapper.hpp +++ b/shared_module/utils/pointer_wrapper.hpp @@ -17,6 +17,8 @@ struct pointer_wrapper{ T& get() const noexcept { return *ptr; } auto operator->() const noexcept { return ptr; } operator T&() const noexcept { return *ptr; } + auto operator*() const noexcept { return *ptr; } + auto operator*() noexcept { return *ptr; } T copy() const noexcept { return *ptr; }