Flexible Geometry API
cadflow.flexible 使用稀疏控制网格和确定性采样描述设计好的静态薄壁形态,并输出索引三角网格。该模块不计算运动、平衡、载荷或时间演化。
对象模型
| 类型 | 责任 |
|---|---|
FlexibleMaterial | 厚度与外观元数据 |
FlexiblePanel | 一个矩形控制网格及采样策略 |
FlexiblePanelMesh | 单个 Panel 的 Vertex、Normal、Triangle 与 Material |
FlexibleModel | 具有唯一名称的有序 Panel 集合 |
FlexibleMesh | 合并数组、Panel Range、测量与导出 |
RingSection | sectioned_panel 使用的椭圆截面 |
构造 Panel
from cadflow.flexible import FlexibleMaterial, FlexibleModel, FlexiblePanel
panel = FlexiblePanel(
name="cover",
control_points=(
((0, 0, 0), (0, 50, 5), (0, 100, 0)),
((60, 0, 3), (60, 50, 16), (60, 100, 3)),
((120, 0, 0), (120, 50, 5), (120, 100, 0)),
),
sample_rows=36,
sample_columns=44,
material=FlexibleMaterial(name="coated fabric", thickness=1.2),
)
model = FlexibleModel("protective-cover")
model.add_panel(panel)
mesh = model.build()
控制数组必须具有 (rows, columns, 3) 形状,至少为 2x2 网格,且全部数值有限。采样数量必须为整数,并且不小于对应控制网格维度。
周期截面与厚度
列方向需要闭合时设置 periodic_columns=True,并提供至少三个互不重复的控制列;末尾不要再次放入第一列。sectioned_panel 根据有序 RingSection 构造这种形态。
Thickness 为 0 时生成单一曲面;正 Thickness 创建沿法向偏置的两侧,并封闭剩余边界。全部尺寸和下游 Tolerance 必须使用一致的单位约定。
合并 Mesh
FlexibleModel.add_panel 会拒绝重复 Panel 名称。build() 以确定性顺序拼接各 Panel,并在 mesh.panels 中记录每个 Panel 的 Vertex Range 与 Triangle Range。
FlexibleMesh 成员 | 含义 |
|---|---|
vertex_count、triangle_count | 合并后的元素数量 |
bounds | 轴对齐最小点与最大点 |
surface_area | 三角形面积总和 |
is_watertight | 每条无向三角边恰好出现两次 |
write_obj(path) | 带 Normal 与 Panel 身份的分组网格 |
write_stl(path) | 合并后的二进制三角网格 |
write_json(path) | 数组、Panel Range、Material、Bounds 与测量 |
交付前验证数量、Bounds、接缝连续性、Panel Range 与预期 Watertight 状态。全部符号见 10 个 Flexible API。