CM2 MeshTools® Suite /release 4.9.0

by | May 23, 2019

  • 4.9.0
  • May, 2019
  • All CM2 MeshTools® Suite
  • Major release of the CM2 MeshTools® Suite
  • Due to changes in the API, client applications must be recompiled against the new headers


  • Lib names suffix is _49 for this series.
  • New Visual Studio 2019 builds (Win32/64).
  • New GCC 7 and GCC 8 builds (Linux32/64).
  • Visual Studio < 2010 and GCC < 4.8 are no longer supported (minimum versions raised to Visual Studio 2010 and GCC 4.8).
  • The Visual Studio 2019 builds target Windows 7 or later. Windows XP is still supported for the Visual Studio builds ≤ 2017 but deprecated.
  • macOS < 10.9 is no longer supported (minimum deployment target raised to 10.9 Mavericks).

/new features

CM2 Intersect T3

  • New settings.fix_flag (default = true) to allow for dry-run of the intersector when unset (false) and to only report pathologies without attempting to fix them.

CM2 SurfMesh T3, CM2 SurfMesh Q4 (still experimental)

  • Now able to mesh directly from a TopoDS_Shape.
  • Upgraded to OpenCascade(R) 7.3.0.


  • meshtools2d::interpolate now works with all-quad and mixed meshes (used to work only with all-triangle meshes).
  • meshtools2d::interpolate_metrics now works with all-quad and mixed meshes (used to work only with all-triangle meshes).
  • meshtools3d::duplicate_surface_nodes generalizes the former meshtools3d::duplicate_surface_nodes_TH4 to H8 and mixed solid meshes.
  • Port to Visual Studio 2019, GCC 7, GCC 8.


CM2 SurfRemesh T3, CM2 SurfRemesh Q4

  • Proximity detection between skeleton lines leading to finer and better meshes near small geometric features (ridges, fillets, holes…)
    This tends however to generate more elements. To mitigate this, use settings.target_h (set for instance target_h = max_h).
  • Massive speed-ups for some terrain-like surfaces.
  • User-defined mesh sizes better taken into account.
  • Speed-ups with frozen triangles.

CM2 TetraMesh Iso, CM2 TetraMesh Aniso

  • Enforcement of hard constraints fortified further (and sometimes much faster).
  • Better minimum shape quality on difficult cases.
  • In CONVEX_HULL_MODE, optimisations (local-remeshings only) are now performed in accordance with settings.optim_level (none was performed before).

CM2 Intersect T3

  • Much fewer remaining pathologies on difficult cases.
  • Significant speed-ups.

CM2 HexaMesh Iso

  • Fewer missing wall-quads when settings.make_conformal_flag = false.


All meshers

  • Crash in convex-hull mode when nodes were aligned.

CM2 TriaMesh Iso, CM2 TriaMesh Aniso, CM2 TetraMesh Iso, CM2 TetraMesh Aniso

  • settings.node_smoothing_flag didn’t work in REGULARIZE_MODE.

CM2 TriaMesh Iso, CM2 TriaMesh Aniso, CM2 QuadMesh Iso, CM2 QuadMesh Aniso

  • Fix in convex-hull mode when settings.strict_constraints_flag = true.
    The convex-hull wasn’t always exact, i.e. some (small) concavities could have been left.

CM2 SurfRemesh T3, CM2 SurfRemesh Q4

  • Metrics on user-defined hard nodes were poorly taken into account (when close to some skeleton lines).
  • Skeleton lines poorly remeshed sometimes.
  • settings.node_smoothing_flag didn’t work with settings.refine_flag = false.
  • Some initial elements could be uncolored in data_type::colors_in.
  • Nodes sometimes not on the initial surface with spurious chordal error.

CM2 QuadMesh Iso, CM2 QuadMesh Aniso, CM2 SurfMesh Q4, CM2 SurfRemesh Q4

  • In all-quad mode, could fail on a simple one-quad mesh.
  • settings_type::min_Q4_angle_quality didn’t work as expected.

CM2 HexaMesh Iso

  • CM2_INTERNAL_ERROR (Wall-triangle missing) sometimes.
  • Uninitialized-read fixed.


  • meshtools1d::metrics_gen_aniso3d: bug when hb < 0.
  • Fixes in meshtools::NASTRAN_input and meshtools::FEMAP_input.
  • Fix in meshtools2d::mesh_surface_param with target_metric and embedded hard nodes (isolated_nodes).
  • Doc fixes and clarifications.

/breaking changes

CM2 SurfRemesh T3, CM2 SurfRemesh Q4

  • Many changes especially in the mesh-partitioning algorithm and new proximity detection between skeleton lines.
    The latter tends however to generate more elements with default setting of target_h = 0.
    To mitigate this, set settings.target_h to a realistic mesh size (such as for instance target_h = max_h).


  • meshtools3d::duplicate_surface_nodes_TH4 replaced with meshtools3d::duplicate_surface_nodes (now generalized to H8 and mixed solid meshes).
  • Now built on Windows with UNICODE encoding setting (used to be MBCS).
    This may impact functions taking a filename as argument (such meshtools::NASTRAN_input, meshtools::NASTRAN_output and siblings).