一一构建CGAL Mesh_criteria

Build CGAL Mesh_criteria one by one

我曾经按如下方式构建我的 CGAL MeshCriteria,效果很好。

auto criteria = Mesh_criteria(
    CGAL::parameters::edge_size=edge_size,
    CGAL::parameters::facet_angle=facet_angle,
    CGAL::parameters::facet_size=facet_size,
    CGAL::parameters::facet_distance=facet_distance,
    CGAL::parameters::cell_radius_edge_ratio=cell_radius_edge_ratio,
    CGAL::parameters::cell_size=size
);

现在我有一个函数,它只有 一些 标准约束,其他值无效(例如,负数)。我想按如下方式构建 Mesh_criteria(伪代码),但不知道该怎么做:

auto criteria = Mesh_criteria();
if edge_size > 0.0:
    criteria.add(CGAL::parameters::edge_size=edge_size);

if facet_angle > 0.0:
    criteria.add(CGAL::parameters::facet_angle=facet_angle);

// [...]

有什么提示吗?

我没有看到任何解决方案,但知道默认值并使用三元运算符 ?:

这是代码的复制粘贴,将为您提供默认值:

  template <class ArgumentPack>
  Mesh_criteria_3_impl(const ArgumentPack& args)
    : edge_criteria_(args[parameters::edge_size
                          | args[parameters::edge_sizing_field
                                 | args[parameters::sizing_field | FT(DBL_MAX)] ] ])
    , facet_criteria_(args[parameters::facet_angle | FT(0)],
                      args[parameters::facet_size
                           | args[parameters::facet_sizing_field
                                  | args[parameters::sizing_field | FT(0)] ] ],
                      args[parameters::facet_distance | FT(0)],
                      args[parameters::facet_topology | CGAL::FACET_VERTICES_ON_SURFACE])
    , cell_criteria_(args[parameters::cell_radius_edge_ratio
                          | args[parameters::cell_radius_edge | FT(0)] ],
                     args[parameters::cell_size
                          | args[parameters::cell_sizing_field
                                 | args[parameters::sizing_field | FT(0)] ] ])
  { }