In some ways, I'd have to agree with you.I am a full-time contract programmer using Catia V5, but I also own two APT compilers, and use them.
One of my APT compilers is 100% Catia compatible, and I use it to insert CALL's to Macro's in my graphical system which outputs an aptsource file. Then, I just "pre-compile" the aptsource before post-processing to G-code. Mostly, I use APT macro's for failsafe motion, spherical safety motion for dual-rotary 5-axis machines, as well as special tool-change requirements.
There are also a few parts that I program 100% in APT, because it's faster and easier sometimes. APT works especially well for part families, where I just have to change a few scalar's and the program updates in a snap. I had an order to program 1200 parts in a family. With Catia, I would have required 5000 files (part, product, process, aptsource, NC.) With APT, I did it all, saving just ONE master APT file, because my APT system allows for dynamic scalar editing while compiling like this (for instance):
$$--
$$ SET LENGTH IN X
LENX= 96 $$ USE 96 AS DEFAULT
INPUT/'LENGTH IN X AXIS (96 INCHES DEFAULT) = ', ANS $$ ANSWER 0 FOR DEFAULT
IF/ANS .GT. 0
LENX = ANS
ENDOF/IF
$$--
Pretty cool...By updating the scalars, the program header even updates for set-up instructions...like this snippet shows:
TX1 = TEXT/' ', CONVI, PRONUM, 5
TX2 = TEXT/' ', CONVI, PARNAM, 15
TX3 = TEXT/' ', CONVI, DASNUM, 5
TX4 = TEXT/' ', CONVI, LENX, 3
TX5 = TEXT/' ', CONVI, LENY, 3
TX6 = TEXT/' ', CONVI, LENZ, 3
PPRINT -- SETUPINSTRUCTIONS --
PPRINTLOAD PART ON VACUUM FIXTURE AGAINST STOPS
PPRINTTURN ON VACUUM
PPRINT/TX4, ' INCH LENGTH ALONG X AXIS'
PPRINT/TX5, ' INCH LENGTH ALONG Y AXIS'
PPRINT/'SIDE ONE USES G', ORNG1
PPRINT/'SIDE TWO USES G', ORNG2
PPRINT/'SET G', ORNG2, ' X TO LOCATING EDGE OF X- STOP'
PPRINT/'SET G', ORNG2, ' Y TO LOCATING EDGE OF Y+ STOP'
PPRINT/'SET G', ORNG2, ' Z TO TOP OF DOOR'
PPRINT/'SET G', ORNG1, ' TO SAME POSITION AS G', ORNG2, 'AND'
PPRINT/'SHIFT G', ORNG1, ' X+ AND Y- TO CLEAN UP'
PPRINT -- TOOLLIST --