From 88e122e1150a7c6eebf0f62fee88d29d69c08951 Mon Sep 17 00:00:00 2001 From: mckay Date: Mon, 20 Oct 2025 18:05:46 +0800 Subject: [PATCH] to(suface integrator test) --- .../test/SurfaceIntegrator_test.cpp | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/surface_integral/test/SurfaceIntegrator_test.cpp b/surface_integral/test/SurfaceIntegrator_test.cpp index aa0a3f6..181536e 100644 --- a/surface_integral/test/SurfaceIntegrator_test.cpp +++ b/surface_integral/test/SurfaceIntegrator_test.cpp @@ -1,11 +1,113 @@ #include +#include "primitive_process/subface.hpp" +#include "primitive_process/subface/simple/sphere_face.hpp" #include +// ✅ 封装成函数:通过引用填充一个 parametric_plane_t 实例 +void populate_parametric_plane(parametric_plane_t& plane) { + // 确保是空的(可选) + // plane = parametric_plane_t(); + auto& chain_vertices = plane.chain_vertices; + auto& chain_group_indices = plane.chain_group_indices; + auto& v_flags = plane.vertex_special_flags; + auto& e_flags = plane.edge_near_parallel_flags; + + int vertex_count = 4; + + chain_vertices.reserve(vertex_count); + v_flags.reserve(vertex_count); + e_flags.reserve(vertex_count - 1); + + // 1. 添加一条链的顶点 (chain 0) + chain_vertices.push_back({{0.0, 0.0}}); + chain_vertices.push_back({{1.0, 0.0}}); + chain_vertices.push_back({{1.0, 1.0}}); + chain0_vertices.push_back({{0.0, 1.0}}); + + + chain_vertices.reserve(unique_chain_indices.size()); + chain_vertex_flags.reserve(unique_chain_indices.size()); + for (const auto& chain_index : unique_chain_indices) { + const auto& chain = chains[chain_index]; + + auto& chain_vertices_ = chain_vertices.emplace_back(); + chain_vertices_.resize(chain.size()); + std::transform(chain.begin(), chain.end(), chain_vertices_.begin(), [&](uint32_t vertex_index) { + auto mapped_vertex_index = vertex_old_index_to_unique_index.at(vertex_index); + return mapping_func(vertices[mapped_vertex_index]); + }); + + auto& chain_vertex_flags_ = chain_vertex_flags.emplace_back(); + chain_vertex_flags_.resize(chain.size()); + chain_vertex_flags_[0] = chain_end_vertex_signular_flag[2 * chain_index]; + chain_vertex_flags_[chain.size() - 1] = chain_end_vertex_signular_flag[2 * chain_index + 1]; + } + + v_flags.reverse(); + + dynamic_bitset_mp<> v_flags; + v_flags.set(0); + v_flags.set(3); + plane.vertex_special_flags.push_back(v_flags); + + // 3. 设置边平行标志 + dynamic_bitset_mp<> e_flags; + e_flags.set(1); + plane.edge_near_parallel_flags.push_back(e_flags); + + // 4. 添加链组索引 + plane.chain_group_indices.emplace_back(); + auto& group_indices = plane.chain_group_indices.back(); + group_indices.push_back(0); + group_indices.push_back(2); +} + +// --- 使用示例 --- +int main() { + std::cout << "=== 使用函数填充 parametric_plane_t 实例 ===" << std::endl; + + // 先创建实例 + parametric_plane_t plane; + + // 调用函数填充数据 + populate_parametric_plane(plane); + + // 验证数据 + std::cout << "\n--- 实例数据摘要 ---" << std::endl; + std::cout << "链的数量: " << plane.chain_vertices.size() << std::endl; + if (!plane.chain_vertices.empty()) { + std::cout << "第一条链的顶点数量: " << plane.chain_vertices[0].size() << std::endl; + std::cout << "第一条链的顶点特殊标志: " << plane.vertex_special_flags[0] << std::endl; + std::cout << "第一条链的边平行标志: " << plane.edge_near_parallel_flags[0] << std::endl; + std::cout << "第一条链所属的组: "; + for (auto idx : plane.chain_group_indices[0]) { + std::cout << idx << " "; + } + std::cout << std::endl; + } + + std::cout << "\n✅ 测试完成!" << std::endl; + return 0; +} + int main() { labelled_timers_manager timer{}; + internal::sphere_face_t sphere_face; + + stl_vector_mp> subfaces; + flat_hash_map_mp uv_planes; + + subfaces.reserve(1); + subfaces.emplace_back(&sphere_face, 0); + + uv_planes[0] = parametric_plane_t{}; + uv_planes[0].u_min = 0.0; + + + // box_descriptor_t box{ // {0., 0., 0.}, // {1., 1., 1.}