ViewDesignEngine  3.1.0
高性能 CAD 计算几何引擎
vde::sdf::SdfNode类 参考

SDF 表达式树节点 更多...

#include <sdf_tree.h>

vde::sdf::SdfNode 的协作图:

Public 成员函数

template<typename Fn >
void visit (Fn &&fn)
 前序遍历所有节点 更多...
 
template<typename Fn >
void visit (Fn &&fn) const
 前序遍历(const 版本) 更多...
 
 SdfNode (SdfOp o)
 构造 SDF 节点 更多...
 

静态 Public 成员函数

static SdfNodePtr sphere (double r)
 创建球体节点 更多...
 
static SdfNodePtr box (const Point3D &half_extents)
 创建轴对齐长方体节点 更多...
 
static SdfNodePtr round_box (const Point3D &half_extents, double r)
 创建圆角长方体节点 更多...
 
static SdfNodePtr cylinder (double r, double h)
 创建圆柱体节点 更多...
 
static SdfNodePtr torus (double major_r, double minor_r)
 创建圆环体节点 更多...
 
static SdfNodePtr capsule (const Point3D &a, const Point3D &b, double r)
 创建胶囊体节点 更多...
 
static SdfNodePtr cone (double angle_rad, double h)
 创建圆锥台节点 更多...
 
static SdfNodePtr plane (const Vector3D &normal, double offset)
 创建平面节点 更多...
 
static SdfNodePtr ellipsoid (const Point3D &radii)
 创建椭球体节点 更多...
 
static SdfNodePtr triangular_prism (double h)
 创建三角棱柱节点 更多...
 
static SdfNodePtr hex_prism (double h)
 创建六棱柱节点 更多...
 
static SdfNodePtr link (double r, double length, double thickness)
 创建双环链接节点 更多...
 
static SdfNodePtr wedge (const Point3D &extents)
 创建楔形体节点 更多...
 
static SdfNodePtr op_union (SdfNodePtr a, SdfNodePtr b)
 创建并集节点: A ∪ B 更多...
 
static SdfNodePtr op_intersection (SdfNodePtr a, SdfNodePtr b)
 创建交集节点: A ∩ B 更多...
 
static SdfNodePtr op_difference (SdfNodePtr a, SdfNodePtr b)
 创建差集节点: A \ B 更多...
 
static SdfNodePtr smooth_union (SdfNodePtr a, SdfNodePtr b, double k)
 创建平滑并集节点 更多...
 
static SdfNodePtr smooth_intersection (SdfNodePtr a, SdfNodePtr b, double k)
 创建平滑交集节点 更多...
 
static SdfNodePtr smooth_difference (SdfNodePtr a, SdfNodePtr b, double k)
 创建平滑差集节点 更多...
 
static SdfNodePtr round (SdfNodePtr child, double r)
 创建圆角偏移节点 更多...
 
static SdfNodePtr onion (SdfNodePtr child, double thickness)
 创建壳层修饰节点 更多...
 
static SdfNodePtr repeat (SdfNodePtr child, const Point3D &cell)
 创建周期重复节点 更多...
 
static SdfNodePtr mirror_x (SdfNodePtr child)
 创建 X 镜像节点 更多...
 
static SdfNodePtr mirror_y (SdfNodePtr child)
 创建 Y 镜像节点 更多...
 
static SdfNodePtr mirror_z (SdfNodePtr child)
 创建 Z 镜像节点 更多...
 
static SdfNodePtr translate (SdfNodePtr child, const Point3D &offset)
 创建平移节点 更多...
 
static SdfNodePtr rotate (SdfNodePtr child, double angle_rad)
 创建旋转节点(绕 Y 轴) 更多...
 
static SdfNodePtr scale (SdfNodePtr child, const Point3D &factors)
 创建缩放节点 更多...
 
static SdfNodePtr twist (SdfNodePtr child, double amount)
 创建扭曲节点 更多...
 
static SdfNodePtr bend (SdfNodePtr child, double amount)
 创建弯曲节点 更多...
 
static SdfNodePtr elongate (SdfNodePtr child, const Point3D &h)
 创建拉伸节点 更多...
 
static SdfNodePtr cheap_bend (SdfNodePtr child, double amount)
 创建简化弯曲节点 更多...
 
static SdfNodePtr displace (SdfNodePtr child, double amplitude, double frequency)
 创建位移扰动节点 更多...
 

Public 属性

SdfOp op
 操作类型 更多...
 
SdfParams params
 参数值 更多...
 
std::vector< SdfNodePtrchildren
 子节点 更多...
 
std::string name
 节点名(调试用) 更多...
 

详细描述

SDF 表达式树节点

每个节点包含:

  • op: 操作类型
  • params: 参数值
  • children: 子节点列表(CSG 布尔 = 2 个子节点,修饰/变形 = 1 个,图元 = 0 个)
  • name: 可选名称(调试用)

使用 make_shared<SdfNode>(op) 或静态工厂方法创建节点。 所有工厂方法返回 SdfNodePtr(shared_ptr),自动管理生命周期。

注解
树是不可变的——节点创建后 op 和子节点关系不变,但 params 可被外部修改以支持参数优化。

在文件 sdf_tree.h138 行定义.

构造及析构函数说明

◆ SdfNode()

vde::sdf::SdfNode::SdfNode ( SdfOp  o)
inlineexplicit

构造 SDF 节点

参数
o操作类型

在文件 sdf_tree.h289 行定义.

成员函数说明

◆ bend()

static SdfNodePtr vde::sdf::SdfNode::bend ( SdfNodePtr  child,
double  amount 
)
static

创建弯曲节点

◆ box()

static SdfNodePtr vde::sdf::SdfNode::box ( const Point3D &  half_extents)
static

创建轴对齐长方体节点

◆ capsule()

static SdfNodePtr vde::sdf::SdfNode::capsule ( const Point3D &  a,
const Point3D &  b,
double  r 
)
static

创建胶囊体节点

◆ cheap_bend()

static SdfNodePtr vde::sdf::SdfNode::cheap_bend ( SdfNodePtr  child,
double  amount 
)
static

创建简化弯曲节点

◆ cone()

static SdfNodePtr vde::sdf::SdfNode::cone ( double  angle_rad,
double  h 
)
static

创建圆锥台节点

◆ cylinder()

static SdfNodePtr vde::sdf::SdfNode::cylinder ( double  r,
double  h 
)
static

创建圆柱体节点

◆ displace()

static SdfNodePtr vde::sdf::SdfNode::displace ( SdfNodePtr  child,
double  amplitude,
double  frequency 
)
static

创建位移扰动节点

◆ ellipsoid()

static SdfNodePtr vde::sdf::SdfNode::ellipsoid ( const Point3D &  radii)
static

创建椭球体节点

◆ elongate()

static SdfNodePtr vde::sdf::SdfNode::elongate ( SdfNodePtr  child,
const Point3D &  h 
)
static

创建拉伸节点

◆ hex_prism()

static SdfNodePtr vde::sdf::SdfNode::hex_prism ( double  h)
static

创建六棱柱节点

◆ link()

static SdfNodePtr vde::sdf::SdfNode::link ( double  r,
double  length,
double  thickness 
)
static

创建双环链接节点

◆ mirror_x()

static SdfNodePtr vde::sdf::SdfNode::mirror_x ( SdfNodePtr  child)
static

创建 X 镜像节点

◆ mirror_y()

static SdfNodePtr vde::sdf::SdfNode::mirror_y ( SdfNodePtr  child)
static

创建 Y 镜像节点

◆ mirror_z()

static SdfNodePtr vde::sdf::SdfNode::mirror_z ( SdfNodePtr  child)
static

创建 Z 镜像节点

◆ onion()

static SdfNodePtr vde::sdf::SdfNode::onion ( SdfNodePtr  child,
double  thickness 
)
static

创建壳层修饰节点

◆ op_difference()

static SdfNodePtr vde::sdf::SdfNode::op_difference ( SdfNodePtr  a,
SdfNodePtr  b 
)
static

创建差集节点: A \ B

◆ op_intersection()

static SdfNodePtr vde::sdf::SdfNode::op_intersection ( SdfNodePtr  a,
SdfNodePtr  b 
)
static

创建交集节点: A ∩ B

◆ op_union()

static SdfNodePtr vde::sdf::SdfNode::op_union ( SdfNodePtr  a,
SdfNodePtr  b 
)
static

创建并集节点: A ∪ B

◆ plane()

static SdfNodePtr vde::sdf::SdfNode::plane ( const Vector3D &  normal,
double  offset 
)
static

创建平面节点

◆ repeat()

static SdfNodePtr vde::sdf::SdfNode::repeat ( SdfNodePtr  child,
const Point3D &  cell 
)
static

创建周期重复节点

◆ rotate()

static SdfNodePtr vde::sdf::SdfNode::rotate ( SdfNodePtr  child,
double  angle_rad 
)
static

创建旋转节点(绕 Y 轴)

◆ round()

static SdfNodePtr vde::sdf::SdfNode::round ( SdfNodePtr  child,
double  r 
)
static

创建圆角偏移节点

◆ round_box()

static SdfNodePtr vde::sdf::SdfNode::round_box ( const Point3D &  half_extents,
double  r 
)
static

创建圆角长方体节点

◆ scale()

static SdfNodePtr vde::sdf::SdfNode::scale ( SdfNodePtr  child,
const Point3D &  factors 
)
static

创建缩放节点

◆ smooth_difference()

static SdfNodePtr vde::sdf::SdfNode::smooth_difference ( SdfNodePtr  a,
SdfNodePtr  b,
double  k 
)
static

创建平滑差集节点

◆ smooth_intersection()

static SdfNodePtr vde::sdf::SdfNode::smooth_intersection ( SdfNodePtr  a,
SdfNodePtr  b,
double  k 
)
static

创建平滑交集节点

◆ smooth_union()

static SdfNodePtr vde::sdf::SdfNode::smooth_union ( SdfNodePtr  a,
SdfNodePtr  b,
double  k 
)
static

创建平滑并集节点

◆ sphere()

static SdfNodePtr vde::sdf::SdfNode::sphere ( double  r)
static

创建球体节点

◆ torus()

static SdfNodePtr vde::sdf::SdfNode::torus ( double  major_r,
double  minor_r 
)
static

创建圆环体节点

◆ translate()

static SdfNodePtr vde::sdf::SdfNode::translate ( SdfNodePtr  child,
const Point3D &  offset 
)
static

创建平移节点

◆ triangular_prism()

static SdfNodePtr vde::sdf::SdfNode::triangular_prism ( double  h)
static

创建三角棱柱节点

◆ twist()

static SdfNodePtr vde::sdf::SdfNode::twist ( SdfNodePtr  child,
double  amount 
)
static

创建扭曲节点

◆ visit() [1/2]

template<typename Fn >
void vde::sdf::SdfNode::visit ( Fn &&  fn)
inline

前序遍历所有节点

对树中每个节点调用回调函数 fn,遍历顺序为前序(父节点先于子节点)。

模板参数
Fn可调用对象,签名为 void(SdfNode&)
int leaf_count = 0;
root->visit([&](const SdfNode& n) {
if (n.children.empty()) ++leaf_count;
});
SdfNode(SdfOp o)
构造 SDF 节点
Definition: sdf_tree.h:289

在文件 sdf_tree.h267 行定义.

引用了 children.

◆ visit() [2/2]

template<typename Fn >
void vde::sdf::SdfNode::visit ( Fn &&  fn) const
inline

前序遍历(const 版本)

模板参数
Fn可调用对象,签名为 void(const SdfNode&)
参见
visit(Fn&&)

在文件 sdf_tree.h279 行定义.

引用了 children.

◆ wedge()

static SdfNodePtr vde::sdf::SdfNode::wedge ( const Point3D &  extents)
static

创建楔形体节点

类成员变量说明

◆ children

std::vector<SdfNodePtr> vde::sdf::SdfNode::children

子节点

在文件 sdf_tree.h142 行定义.

被这些函数引用 visit().

◆ name

std::string vde::sdf::SdfNode::name

节点名(调试用)

在文件 sdf_tree.h143 行定义.

◆ op

SdfOp vde::sdf::SdfNode::op

操作类型

在文件 sdf_tree.h140 行定义.

◆ params

SdfParams vde::sdf::SdfNode::params

参数值

在文件 sdf_tree.h141 行定义.


该类的文档由以下文件生成: