Per il primo problema credo che dipenda dal fatto che il cad e il cn approssimano i valori in modo differente, mi spiego meglio: se il cn calcola che i due cerchi non si incrociano, fino a un certo limite di tolleranza ovviamente, si sposta semplicemente dalla del primo cerchio all'inizio del secondo quindi vedi un gradino o un pianetto.
Io proverei ad usare "cerchio raggio" in cui gli dai il punto finale del primo cerchio(l'intersezione tra i due cerchi), il raggio e la direzione , oppure se vuoi lasciare calcolare il raggio al cn "cerchio tangente" che è uguale ma senza raggio.
Per la traslazione dell'origine non capisco cosa intendi, se devi fare una serie di lavorazioni uguali io farei così (non formalizzarti sulla sintassi che vado a memoria e non mi ricordo cosa scrive esattamente il cn):
cycl def punto zero
x (prima origine)
y
z
lbl1
... (programma da ripetere)
...
lbl 0
cycl def punto zero
x1 (seconda origine)
y1
z1
call lbl 1 rep
altrimenti se gli interassi sono tutti uguali puoi fare così:
q1=0
q2=0
q3=0
lbl 1
cycl def punto zero
x q1
y q2
z q3
...programma da ripetere
...
fn q1=q1+ spostamento
fn q2=q2+ spostamento
fn q3=q3+ spotamento
call lbl 1 rep 10/10(numero spostamenti meno uno)
Spero di aver capito cosa intendevi
Ciao