NURBS curve undersampling
I have found that Gmsh has some limitations in its sampling of NURBS curves. This can result in the visualised geometry differing signficantly from the actual geometry, and, although I'm less certain, I have observed some behaviour that makes me wonder if it also affects meshing.
I have attached a screenshot, where I added a single NURBS curve. Gmsh makes it look like I have added a triangle, whereas it is actually an octagon with a triangle replacing one of its spans. When I mesh this curve with sufficiently small element sizes, the underlying geometry becomes apparent (the 1D elements are shown in black).
My suspicion is that Gmsh samples the NURBS curve in parameter space with a distribution based on the overall knot value range, and that it then linearly interpolates between these computed 3d space points to produce the geometry visualisation. This means that the sampled points won't necessary correspond to where control points act. To enhance the current NURBS sampling approach, it would be a significant improvement to also sample at the knot values. An alternative approach altogether potentially worth considering is a sampling approach based on each knot span, rather than the overall knot vector range.
The code below can be used to produce the example shown in the screenshot: nurbs_curve.cpp
Update: I've also remembered that I've observed the same thing with NURBS surface boundaries (gmsh::model::occ::addBSplineSurface). Perhaps the two are related.