Files
ViewDesignEngine/include/vde/brep/measure.h
T
茂之钳 1db1a83c5d
CI / Build & Test (push) Failing after 24s
CI / Release Build (push) Failing after 25s
Build & Test / build-and-test (push) Has been cancelled
Build & Test / python-bindings (push) Has been cancelled
feat(v4.3): wall thickness analysis — centroid-offset sampling
- analyze_wall_thickness(): samples surface points, computes min distance
  to vertices/centroids on other faces (no mesh tessellation needed)
- WallThicknessResult: min/max/avg, thin_threshold, thick_threshold
- 3 new tests, 29/29 passing
2026-07-25 07:23:28 +00:00

84 lines
2.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#pragma once
/**
* @file measure.h
* @brief B-Rep 测量工具
*
* 提供 B-Rep 实体的几何属性测量函数:
* - 体积(散度定理)
* - 表面积(三角剖分求和)
* - 质心
* - 两实体间最小距离
* - 质量属性(惯性张量、回转半径)
* - 装配体质量属性 + BOM 物料清单
*
* @ingroup brep
*/
#include "vde/brep/brep.h"
#include "vde/brep/assembly.h"
#include "vde/core/point.h"
#include <Eigen/Dense>
#include <string>
#include <vector>
namespace vde::brep {
/// 质量属性结果:体积、质心、惯性张量、回转半径(ρ=1)
struct MassProperties {
double volume = 0.0;
core::Point3D centroid{0, 0, 0};
Eigen::Matrix3d inertia{Eigen::Matrix3d::Zero()};
core::Vector3D gyration_radii{0, 0, 0};
};
/// BOM 条目:零件名 + 数量 + 体积
struct BomEntry {
std::string name;
int quantity = 0;
double volume = 0.0;
double total_volume = 0.0;
};
// ── Basic measurements ──
[[nodiscard]] double distance(const BrepModel& a, const BrepModel& b);
[[nodiscard]] double surface_area(const BrepModel& body);
[[nodiscard]] double volume(const BrepModel& body);
[[nodiscard]] core::Point3D centroid(const BrepModel& body);
// ── Mass properties ──
[[nodiscard]] MassProperties mass_properties(const BrepModel& body);
[[nodiscard]] MassProperties assembly_mass_properties(const AssemblyNode& node,
const core::Transform3D& parent_tf = core::Transform3D::Identity());
// ── Gap analysis ──
[[nodiscard]] double clearance(const BrepModel& a, const BrepModel& b);
// ── BOM ──
/// 生成扁平合并的物料清单(按名称排序)
[[nodiscard]] std::vector<BomEntry> generate_bom(const AssemblyNode& node);
// ── Wall thickness analysis ──
/// 壁厚分析结果
struct WallThicknessResult {
double min_thickness = 0.0; ///< 最小壁厚
double max_thickness = 0.0; ///< 最大壁厚
double avg_thickness = 0.0; ///< 平均壁厚
int thin_regions = 0; ///< 薄壁区域数(< thin_threshold
int thick_regions = 0; ///< 厚壁区域数(> thick_threshold
double thin_threshold = 1.0; ///< 薄壁判定阈值
double thick_threshold = 10.0; ///< 厚壁判定阈值
};
/// 壁厚分析:沿各面法向采样,射线检测对面距离
/// @param body B-Rep 实体
/// @param samples_per_face 每个面的采样点数(默认 5×5=25)
/// @return 壁厚统计结果
[[nodiscard]] WallThicknessResult analyze_wall_thickness(const BrepModel& body,
int samples_per_face = 5);
} // namespace vde::brep