DXF G196 learning extension / DXF G196学习扩展示例

See chapter 22, "Extension example: add G196 bore milling to DXF", in the
accompanying Chinese/English manual (22-dxf-custom-cycle.md / .en.md).
Use a COPY of the application runtime. Merge package/env and package/extScripts
into that copy while it is closed. Keep backups. Merge, rather than replace,
files in already customized projects. Check G196/O9196 and #6013..#6015 allocation.
env/dxfpage contains the initialization inline; env/dxf-custom/init is its
readable reference, not an additional startup action. Restart the learning copy
to register the NC library. Enable DXF with #929.item[12]=1 and reimport the drawing.

G196 contract: explicit X Y Z R D I Q F, G90/G21/G17. Surface Z0.
D>I>0, Q>0, F>0, Z<0, R>0. An existing pilot hole must admit the tool and reach
the machining bottom. R must clear fixtures. Tool 0 skips M6/G43; fit and set
the tool/work coordinates beforehand. Feed/speed/cutting values are examples.
The macro uses concentric rings at successive depths, not thread milling.
Interpretation and native geometric preview are demonstrated; adapt cutting,
tool setup and clearance to the actual machine before machining.

中文：先复制软件运行目录，再合并package内的env和extScripts。不要覆盖原工程中的
已有定制。核对G196/O9196、#6013至#6015的占用。初始化已直接放在dxfpage中。
重启学习副本登记NC库；用#929.item[12]=1开启DXF，重新导入four-holes.dxf。
本例要求已有足够直径、足够深度的底孔，以Z0为工件表面，R高于工件与夹具。
示例的刀号0不执行换刀及G43，应预先完成装刀和坐标设置。切削参数需按机台调整。
完整设计过程、参数传递和原生中英文截图见第22章“扩展实例：给DXF增加G196扩孔功能”。
