Annoying bugs when working with big coordinates

Hello,
I am working on meshes at a geological scale (several hundreds of kilometers). I have discovered a very annoying bug when working with big coordinates. For example:

_This is OK:
create surface rectangle width 2000000 height 1000000 yplane
volume 1 move x 1000000 z -500000
webcut body 1 with plane xplane offset 1000000

_This is not OK:
create surface rectangle width 2000000 height 1000000 yplane
volume 1 move x 1000000 z -500000
webcut body 1 with plane xplane offset 1010000

-> INFO: Cutting Tool overlaps the original volume, Or cutting plane does not pass through volume.

_This is still not OK:
create surface rectangle width 2000000 height 1000000 yplane
volume 1 move x 1000000 z -500000
webcut body 1 with plane xplane offset 1050000

-> INFO: Cutting Tool overlaps the original volume, Or cutting plane does not pass through volume.

_This is beyond understanding:
create surface rectangle width 2000000 height 1000000 yplane
volume 1 move x 1000000 z -500000
webcut body 1 with plane xplane offset 1100000

-> ???

What strikes me the most is that the following commands work fine…
draw plane xplane offset 1010000
draw plane xplane offset 1050000
draw plane xplane offset 1100000

It is possible to get around by explicitly creating the webcut plane but I wanted to signal that however.

Regards,

Alexis Bottero

The answer here is that the solid modeler (ACIS) is sensitive to scale. When you play around with number this large, especially during intersection calculations (booleans) there may be numerical instability. ACIS says that it can accurately represent 10 digits away from its smallest value, which is 1e-6. That means that anything larger than 10,000 is suspect to accuracy issues.

The solution is to scale down the model into ACIS’s sweet spot, so the number is somewhere between 10,000 and 1e-6. Things should work just fine in that band. After everything is meshed, scale everything up or even just set the mesh to scale on export with this command:

Transform Mesh {Input|Output} [Scale [ ] ]
[Scale {X|Y|Z} ] [Translate [ []] ]
[Translate {X|Y|Z} ] [Rotate about {X|Y|Z}]
[Reset]