Hola Oswaldo
No había visto esta pregunta.
Dejo esto por si en estos 5 meses aún no obtuviste la respuesta o por si a alguien más le sirve
Si haces offset con el método Offset (ActiveX) de los objetos este siempre se calcula hacia la derecha, por lo que un valor positivo irá a la derecha y un valor negativo a la izquierda en el sentido de avance. En cuanto a los arcos, siempre son en sentido antihorario, por lo que valor positivo es externo y valor negativo es interno.
Y si quieres usar comandos, pues debes calcular un punto, en el caso de los arcos basta con un polar hacia uno de los extremos del arco, un valor de distancia mayor al radio será externo y un valor menor será interno.
En el caso de los polígonos, como estos pueden ser cerrados y trazados en sentido horario, no siempre derecha es externo. Lo que yo hago es sumar los angulos internos (con una medicion simple de delta entre cada par de aristas) para verificar si el lado de la mediciíón es externo o interno. Te dejo por aquí la funcióm que yo uso, que toma la lista de vértices y verifica si está trazado en sentido horario o antihorario:
(La sumatoria de angulos internos de cualquier polígono es igual a la cantidad-de-lados mutiplicado por pi radianes (o 180°) menos 2pi(360°)
Entonces si el poligono es horario derecha es interno y si el polígono es antihorario derecha=externo, y pues por ejemplo para hacer un offset a lo interno, usando el metodo Offset de objeto ActivX, si esa función retorna verdadero la distancia la pongo en positivo y si retorna falso (nil) la pongo en negativo