Note that the X coordinate is rounded in the case of A, and not rounded in the case of B. I wish I could upload the offending mesh too, but it’s not mine to share. This causes later down the line various inconsistencies, resulting in a bad mesh
Not sure whether this is something to avoid entirely, but on the surface you’d expect them to yield similar results.
I did wonder at first if setting UseDoublePrecisionVertices to True might help here https://developer.rhino3d.com/api/RhinoCommon/html/P_Rhino_Geometry_Collections_MeshVertexList_UseDoublePrecisionVertices.htm
but it seems that if you do this then retrieve a vertex position using Mesh.Vertices[0], it still returns a Point3f
Maybe someone else from McNeel can clarify how this works. Does it only affect vertices which are added or moved after switching it on? and does Mesh.Vertices[0] then return a Point3d?
As far as I understand it, traditionally a Mesh would only have single precision vertices. To keep this API going forward, but also be able to support double precision vertices, the support for this has been “bolted on” (not meant in a negative way).
So the default mesh.Vertices collection will still use single precision, but if UseDoublePrecisionVertices has been set to true, the storage will be in double precision.
To access in double precision, you can use mesh.Vertices.SetVertex(int, Point3d) or mesh.Vertices.Add(Point3d) to set/add a vertex in double precision, and mesh.Vertices.Point3dAt(int) to get a double precision vertex. This also works if UseDoublePrecisionVertices is not set to true, but then the storage will be in single precision.