When I have estlcam make the g code, I only have it do one part at a time. That way I have a rough g code, then a finish g code. I’ve put a x and y “home” endstop in place and then moved them so my dust collection pipe fits, so I lose another inch or so of cut area. Then I maed a z touch plate. So now before the cut I home x and y, then move the router to where I want to start the cut and write down the offsets. Then I home the z with the touch plate, and then run my script that sets 0 for everything at this location. Once it’s done with the roughing I change out the bit, which usually causes the router to move, so I rehome x and y, then run it back to my written down offsets and rehome z. Then rezero and hit print!