Alineamiento Horizontal. Parte 2

Más allá del estacado

Tal como planteamos al final de la Parte 1 de este tema, tener controlados la mayor cantidad posible de aspectos relacionados a la definición de un alineamiento, requiere profundizar en los conocimientos de la programación en Lisp y tener claros los conceptos geométricos necesarios.

Las características geométricas del alineamiento estan influenciadas por los parámetros del diseño vial. Hay que tener presente el radio minimo para la velocidad de diseño, la longitud de la curva de transición, el sobreancho, el peralte para la curva, entre otros.

En principio, es adecuado fijarnos metas e ir de a pocos o por fases. Por ejemplo un primer objetivo sería:

- establecer algun modo de control que facilite la edición de curvas, si elijo una curva, ¿cómo puedo efectuar el cambio del radio sin tener que usar FILLET?
- que la modificación de la posición del PI actualice automáticamente el dibujo de los alineamientos concurrentes con la debida continuidad de las curvas adyacentes.
- que se pueda insertar un nuevo PI y el alineamiento se redibuje automaticamente
- que al eliminar un PI el alineamiento se redibuje.

Opciones para programar el control del alineamiento
Aún no se me han ocurrido otras opciones así que, se aceptan sugerencias factibles de implementar con lisp. Estas son las opciones que me he planteado:
  • Mantener un listado de coordenadas de los puntos PI con sus parámetros, ya sea en un diccionario o un archivo externo
  • incorporar los parámetros del alineamiento en la entidad de alineamiento (la polilinea) como XDATA
  • administrar inserciones de bloques con atributos cuyos puntos de inserción coinciden con las coordenadas de cada PI.
Considero como más adecuada la última opción. 

Administración de inserciones de bloque para controlar el dibujo de un alineamiento

Con una referencia de bloque con atributos se pueden guardar los datos que nos interesan:
  • coordenadas del PI (con las coordenadas del punto de inserción)
  • Radio de la curva (con un atributo)
  • Sobreancho de la curva (con un atributo)
  • Peralte de la curva (con un atributo)
  • Longitud de la curva de transición (con un atributo)
  • Nº del PI en la secuencia del alineamiento (con un atributo)
  • Velocidad de diseño de la curva (con un atributo)
Hay que asegurarse de mantener una lista que defina la secuencia de los PI, para esto lo mejor es conservar la información en una variable dentro de un diccionario accesible mediante las funciones LDATA.

Las funciones a programar son muchas por las opciones a manejar durante un trabajo de edicion de alineamiento. En mi caso he llamado E-ALIN al comando que invoca al editor de alineamiento y presenta las siguientes opciones:

E-ALIN
Command: Cuadro/Suprimir/Mover/Insertar/Editar/estaKar/Refrescar/Guardar:

La opción "Cuadro" carga un cuadro de dialogo que muestra los datos de todos los PI del alineamiento. de acuerdo a la funcionalidad requerida ha llegado a tener el siguiente aspecto:


Tal cual me facilita varias operaciones, los efectos de los cambios que se efectúen solo serán "palpables" si se sale del cuadro con el botón Aceptar y luego se aplica la opcion Refrescar. Desde este cuadro no se modifican las posiciones de los PI.

El cuadro es muy interactivo y me permite controlar numéricamente los efectos de los cambios en el valor del Radio de la curva, de la longitud de la transición, de la Velocidad. Generalmente los valores del peralte y del sobreancho se calculan a partir del radio y la velocidad. En el caso de la longitud de la curva de transición también se hace un cálculo con el radio y la velocidad, se presenta en el cuadro para ser modificado si se requiere al igual que los demás parámetros. Al salir del cuadro se retorna a la lista de opciones:

Cuadro/Suprimir/Mover/Insertar/Editar/estaKar/Refrescar/Guardar:

Los cambios en la posición de los PI se hacen con Mover. Desde Autocad también se pueden mover las ubicaciones de los PI (comando MOVE) o editar los parámetros con el editor de atributos, los efectos se reflejan entrando a E-ALIN y escogiendo Refrescar.

Las demás opciones se explican por sí mismas, la opción Guardar es parte de un plan de contingencia, con esta opción se graba en un archivo de texto las coordenadas de los PI que definen el alineamiento, sus radios y longitudes de transición.

Para lograr este control de la información del alineamiento hay que tener almacenadas las características principales del diseño partiendo de una definición del alineamiento. Se puede programar una utilidad para este caso, y con la ayuda de un cuadro de dialogo como el siguiente, se facilitan las tareas:


Con las opciones que se presentan en el cuadro no se requiere de mayores explicaciones sobre lo que se puede hacer con él, el botón [Definir Parámetros] lleva a otro cuadro donde se definen los parametros del alineamiento:


Tambien se puede programar el dibujo de los bordes del alineamiento, en estos bordes debe reflejarse el desarrollo de los sobreanchos en las curvas.

El desarrollo de los sobreanchos

Cuando una curva requiere de un sobreancho Sa, se debe considerar la forma en que este se desarrollará desde un valor "cero" hasta el valor Sa. Es usual que el sobreancho debe desarrollarse en el lado interior de la curva, si el radio del eje Rc el radio del borde interior será Rbi = Rc - Ancho/2, la curva que desarrolla el sobreancho tendrá entonces como radio: Rbi  - Sa. Las mejores opciones de desarrollo son:

  • Mediante arcos, es decir se acomoda un arco de radio grande tangente al lado recto y tangente al arco central que describe el sobreancho.
  • Mediante una clotoide que se desarrolla desde el tramo recto donde el radio es infinito hasta cuando el radio es Rbi  - Sa.




















He optado por usar la clotoide como transición para el desarrollo del sobreancho.

El proceso de cálculo consiste en hallar la longitud de la espiral necesaria para alcanzar la curvatura que produce el radio R= Rbi  - Sa. Las relaciones que se deducen de la geometría correspondiente son las siguientes:


y(Q) = 2*R*Q*(Q/3 - Q^3/42 + Q^5/1320  - .....)                (1)

R*cos(Q) + y(Q) = R + Sa                                                     (2)

y(Q) : representa el desplazamiento transversal de la clotoide para un angulo Q.

la combinación de las ecuaciones (1) y (2)  nos llevan a obtener primero el valor de Q (el ángulo con la debida precisión) y luego la longitud de la espiral. Si el coseno se desarrolla como una serie, de la combinación de las ecuaciones de arriba es posible llegar a la siguiente relación:

Sa / R = Q^2 / (3*2!) - Q^4 /(7*4!) + Q^6 /(11*6!) - Q^8 /(15*8!) + . . .

El cálculo automatizado nos permitirá descubrir que si la curva tiene una longitud de arco muy pequeña, no se obtendrán desarrollos adecuados de la transición.

El desarrollo de la curva de transición para el eje del alineamiento mediante la clotoide será tratado en la siguiente entrada

Hasta Luego.

Alineamiento Horizontal. Parte 1

Alineamiento horizontal

Una vez obtenido el modelo digital del terreno en Autocad, se pueden aplicar las herramientas correspondientes para obtener las soluciones que buscamos como parte del diseño de ingeniería. La más común de ellas es la obtención de los volúmenes de movimientos de tierras en cimentaciones de edificaciones, terraplenes, canales, líneas de conducción, carreteras, reservorios, etc.

Las obras de tipo lineal como canales, líneas de conducción, carreteras, entre otros, requiere, como un primer paso, la definición de un eje que determina la dirección y sentido de la obra, mediante este eje se identifica el espacio geométrico por el que se desarrollará el proyecto el mismo que podrá expresarse en planta y/o en elevación. Cuando el eje se presenta en planta se trata del alineamiento horizontal si se presenta en elevación se trata del perfil longitudinal.

Un alineamiento horizontal para un proyecto de camino es una sucesión de líneas rectas y curvas cuyos parámetros geométricos deben cumplir las condiciones establecidas en la normativa de diseño geométrico vial.

La opción más sencilla de dibujo de un alineamiento horizontal es mediante una polilínea. Cuando se dibuja una polilinea en autocad se usa el comando PLINE (en versión en español:  POL). Lo recomendable es empezar el dibujo mediante líneas quebradas, las intersecciones de estas líneas o vértices vienen a ser los PI del alineamiento. Para completar el desarrollo del alineamiento se aplica el comando FILLET (EMPALME) vértice por vértice  proporcionando el radio de curvatura necesario.
Un proceso de definición del alineamiento con frecuencia requiere de una serie de ajustes para los cuales hay que auxiliarse con las opciones de modificación seleccionando los “grips”, usando el comando de edición PEDIT (EDITPOL), varias veces el FILLET, etc. Todo se complica un poco más si hay que eliminar algún PI.

Al final o antes tendremos necesidad de colocar el estacado o las progresivas al alineamiento, directamente con Autocad lo más que se puede hacer es usar MEASURE con un bloque que es un segmento de línea para tener las marcas, colocar los números es otra complicación.

En conclusión: es mejor programar las herramientas para automatizar estas operaciones y, la buena noticia es que estas herramientas ya existen.

Si la opción es desarrollar herramientas propias, el uso de Autolisp es, para mí, la mejor vía.

Estacado de un alineamiento

Empezamos con lo más complicado de hacer "manualmente" con autocad y que es más sencillo de programar: el estacado del alineamiento.
Funciones a utilizar:
  • vlax-curve-getPointAtDist  : nos da la coordenada del punto a una distancia dada desde el inicio del alineamiento.
  • vlax-curve-getFirstDeriv : nos da la tangente del alineamiento cuando éste tiene un parámetro dado:
  • vlax-curve-getParamAtdDist : nos da el parámetro del alineamiento a una distancia dada desde el inicio del alineamiento. El valor obtenido es el que se usa en la función anterior.

Tener en mente que el alineamiento sobre el que se trabaje debe ser una sola entidad polilinea, sino no se obtendrán los resultados deseados.
Se entiende que debe existir, como dato previo, el valor de la estaca que corresponde al punto de inicio del alineamiento en la mayoría de los casos es 0.00 o 0+000.00. Un esquema simplificado de programación de esta herramienta sería:

  1. Pedir seleccionar el alineamiento al que se aplicará el estacado
  2. Pedir el valor de la estaca inicial y el espaciamiento para aplicar estacas
  3. Iterar a lo largo del alineamiento obteniendo el punto de la estaca, su orientación y escribiendo la estaca que le corresponde

Parte 1. Seleccionar el alineamiento al que se aplicará el estacado
Una manera sencilla de implementar esta parte es usando la función ENTSEL como sigue:
       (setq alinea (entsel “señalar alineamiento a estacar…”))
En la variable alinea se guardará una lista con 2 componentes el primero es el nombre interno de la entidad de alineamiento (de la polilinea) y el segundo viene a ser una lista que define las coordenadas del punto donde se hizo el “click” de selección. Así que para obtener el nombre usaremos (car alinea) y para obtener el punto de selección usaremos (cadr alinea).

Si solo nos interesa el nombre de la entidad podemos modificar la expresión así:
       (setq alinea (car (entsel “señalar alineamiento a estacar…”)))

Parte 2. Pedir el valor de la estaca inicial y el espaciamiento para aplicar estacas
En Autolisp se usa la función GETREAL para ingresar valores numéricos y la forma más sencilla de usarla es con:
     (setq est_inicio (getreal “Estaca Inicial:”))
     (setq espaciado (getreal “Espaciamiento de estacas:”))

Parte 3. Iterar a lo largo del alineamiento obteniendo el punto de la estaca, su orientación y escribiendo la estaca que le corresponde.
Este sería el núcleo de la rutina y donde deben intervenir las funciones especiales que presentamos más arriba:

vlax-curve-getPointAtDist
vlax-curve-getFirstDeriv
vlax-curve-getParamAtdDist


Si vamos a usar WHILE debemos prever que la iteración se detenga con alguna condición y la única que se me ocurre es verficar la longitud total del alineamiento. Así la iteración requiere de algunos pasos previos y podría quedar como sigue:

(setq Ltot (vlax-curve-getDistAtParam alinea  (vlax-curve-getEndParam alinea)))
(setq estak (* (+ (fix (/est_inicio espaciado)) 1) espaciado) )
(while (< (- estak est_inicio) Ltot)
    (setq punto (vlax-curve-getPointAtDist alinea (- estak est_inicio))
             beta   (vlax-curve-getFirstDeriv alinea
(vlax-curve-getParamAtdDist alinea (- estak est_inicio))))
      (progresiva estak punto beta) )
    (setq estak (+ estak espaciado)  )
    )

La expresión (progresiva punto beta) hace llamado a otra función que es la que dibuja la señal que define la ubicación de la estaca y escribe el número en el formato #+###.

Juntando las 3 partes explicadas podemos tener una rutina que al ejecutarla solo nos pide elegir el alineamiento, proporcionar la estaca de inicio y proporcionar el espaciamiento de estacas, para efectuar un inmediato estacado del alineamiento. No olvidar incluir la orden (vl-load-com) antes de que se haga algun llamado a las funciones VisualLisp.

Pero no es suficiente, la presentación del estacado de un alineamiento requiere otros parámetros, la posibilidad de cometer errores durante la ejecución requiere añadir controles especiales, etc. Con todo esto una rutina tendrá una presentación más complicada pero la base siempre será como la que se mostró arriba.

Alternativas de presentación del estacado:

Como pueden ver, incluso la introducción de datos puede ser más complicada, para tener una rutina aceptable y funcional se puede añadir un cuadro de dialogo que facilite la elección de opciones especiales.

Ejemplos de opciones a elegir:

 El estacado alineado con el eje, sobre el alineamiento

 El estacado alineado con el eje, debajo del alineamiento

 El estacado transversal al eje, a la izquierda del alineamiento

El estacado transversal al eje, a la derecha del alineamiento

Para facilitar el funcionamiento muestro un ejemplo de cuadro de dialogo que se puede programar:



Una vez lograda la programación de la herramienta para el estacado, lo siguiente que nos preguntamos es:
¿ y si debo marcar las estacas de los PC y PT de las curvas?
¿ y si el alineamiento tiene curvas de transición?, etc. ¿como proceder?

No hay otra que ahondar en la programación si queremos superar más obstáculos.

Continuará…