1.With manual zoom , there is no distortion.
Coming back to this, it should be possible to work around use key presses, something like
!mc:cmdwait('call repeat click("zoom_in") until get_zoom() >= 10')
It will be somewhat slow on a camera like this with many zoom steps, but if you don't have to zoom through the whole range too often it shouldn't be a big deal. If you do, more complicated code could speed it up.
I used >= because it may be possible that the camera zooms more than one step per click. If this is true, you'll want to make sure it does it consistent ly, or add logic to make sure all the cameras end up at the same zoom.
Also note that (at least on the cameras I tested a long time ago), get_zoom doesn't update while the zoom is moving, so you
cannot do something like
press('zoom_in')
repeat sleep(10) until get_zoom() == 10
release('zoom_in')
edit:
Of course, it would be great to fix thing so set_zoom doesn't mess up the distortion correction. I'm just offering this as a possible workaround.
edit #2:
On my elph130, I have found that the click method above can overshoot, e.g. if you try for get_zoom >= 50 you might get 54 instead. It isn't the same every time. If you click back and forth you can get it to end up on a specific value.
On that camera, I don't see a difference in distortion correction with set_zoom vs clicking, although there isn't a huge amount of distortion at the value (50) I was testing.
Strangely, there seems to be a slight difference in zoom level even when get_zoom() reports exactly the same value, with set_zoom being consistently wider. This shows up in the DNG, so it's probably not related to the software correction.