Background The Manifold 8 manual note is not quite correct when it states All spatial computations are done using the location precision parameter taken from the drawing of the first argument if it is an object ID, or the maximum possible precision if it is a geometric object.
The underlined words should read "or the default precision of 0.000001 if it is a geometric object". If a drawing has default precision of 0.000001 (1e-6), then operations using an object ID for the first argument apply the same precision as operations using Geom (I): there is no difference. Otherwise the difference depends on the (non-default) location precision of the source drawing. On the other hand, operations where the first argument is a synthetic or derived metric, such as the result of ConvexHull([Geom (I)]) or, equally, the result of ConvexHull([ID]), always use default location precision 1e-6. There is no choice of precision in those cases, unless the arguments can be rearranged so that an object ID appears first. If we want finer precision than the default then we must use object IDs, and they must be taken from a drawing having location precision finer than 1e-6. The maximum possible precision for the underlying double-precision data type is roughly 17 decimal digits; the maximum possible location precision depends on how many digits are used for the whole part of each coordinate. For example, using projected coordinates with false eastings and northings that use 7 digits, we have roughly 10 decimal digits left for location precision. In that case, the maximum location precision is 1e-10, and specifying a precision finer than 1e-10 makes no difference. (In practice, working at maximum decimal precision can cause problems with some geometric operations and unusual geometry. A magnet for corner cases.) By comparison, Radian currently allows specifying tolerance for all geometric operations individually, whether synthetic, derived, or taken directly from an existing table. It does work at the maximum possible floating-point precision by default, or if a tolerance of 0 is specified; I don't know of any geometry problems working at that scale in Radian. So, an advance on Manifold 8 in at least 3 ways. (Adam has said that the UI for tolerance is currently undergoing some changes, so we will see what comes next.) So much for the background. Question What happens in Manifold 8 if we perform an operation like UnionAll([ID]) if the objects represented by IDs are taken from two or more drawings, which have different location precision properties? That question has never occurred to me before. I am testing this but haven't found out a full answer yet.
|