Hola.
En MDT, así como Civil 3D, es posible "discretizar arcos" es decir, si tenemos una pol2d con segmentos arcos y la queremos convertir a pol3d(obviamente no puede tener arcos), lo que se hace es convertir el arco en segmentos pequeños de línea. Creo que ARKITool también tiene este comando, aunque se indicaba la longitud del segmento recto, y lo más indicado suele ser indicar la flecha.
Mi propuesta, sería hacer justamente lo contrario, a partir de una pol2d o pol3d (que previamente se discretizó su arco), sería volverlo a regenerar.Obviamente, siempre devolverá una pol2d (pq es la única que puede tener segmentos de arco).Eso quiere decir que si partimos de una 3dpol, devolverá una 2dpol. Quizá se podría avisar al usuario de este hecho en la línea de comandos.
El comando, nos pide la longitud máxima del segmento recto, y va comprobando segmento a segmento de cada entidad, si dicha longitud del segmento recto es inferior hasta que no lo sea ,elimina los segmentos rectos y genera un arco.
Bueno, en realidad programándolo sería algo así:
-obtener la "curve" (entidad primitiva) de la entidad seleccionada.
-hacer un bucle para comprobar cada segmento de la curva(en caso de ser recta):
comprobar la longitud del segmento recto que debe ser inferior o igual a la que hemos indicado.
El primer segmento que encontremos con esa condición nos quedamos con su vértice de inicio(StartPosition).
-comprobar cada segmento(en caso de ya no ser linea o ser de longitud superior, nos quedamos con su vértice de inicio).
Creamos una nueva entidad, y creamos un segmento curva usando los 2 vértices como vértice inicio y final, y podemos usar algún pto de paso, que sería un vértice de algún segmento intermedio.
Quizá el mayor problema, es si habían arcos consecutivos( en "C" o en "S") y se discretizaron esos arcos. La longitud de los segmentos rectos sería la misma y a primera vista no podríamos diferenciar que hay 2 arcos.
Se me ocurre, que quizá, como se puede calcular la flecha entre 2 segmentos rectos consecutivos, al generar el nuevo arco, se comprobase la flecha para ver si tiene el mismo valor.De no ser así, el arco no sería correcto.
Quizá,a cada segmento de línea recta que comprobamos, comprobamos si el nuevo arco tendría la misma flecha que la flecha existente,en caso de no ser así, comenzaría de nuevo con otro arco a partir de ese segmento de línea recta, que coincidiría con el punto de inflexión de un arco a otro.