Para una ocasión especial de un momento relativamente cercano en mi vida tenía que regalar unos marcapáginas personalizados (obviamente añadí colgando unos diseños impresos en 3D, pero no es momento para hablar de ello). Uno de los invitados era invidente y se me ocurrió regalarle una tarjeta con texto en Braille para que pudiese leerlo. Podría haber pedido a algún amigo suyo que me ayudase pues tienen máquinas para hacer una hoja con texto en Braille, pero realmente lo que yo quería era una tarjeta impresa en 3D. Y ahí empezó la aventura…
Primera idea, encontrarlo en plano (en 2D) y convertirlo a un diseño 3D con algún programa que admita diseños vectoriales. Seguro que hay traductores online que pueden hacer el trabajo sucio… Meec, ¡error! Traducen castellano, sí, pero resulta que el Braille no es igual en todos los países latinos (o eso creo haber discernido). Los que encontré no traducen en el Braille que aparece como oficial en la página de la ONCE.
Lo óptimo, llegados a este punto, sería un programa que permitiese diseñar en 3D mediante código y poder de esta forma programar la traducción automática.
Por mis conocimientos de programas me decanté rápidamente por OpenSCAD pues parecía sencillo crear lo que necesitaba (sencillo en programación no es para nada sinónimo de rápido). La idea inicial: una función que al llamarla indicases cuál de los seis puntos que compone cada caracter Braille quieres que aparezcan.
Manos a la obra: decidí crear una función (módulo en OpenSCAD) sencilla:
Llegó la hora de decidir finalmente entre programar un traductor o usar ese módulo para hacer un texto en concreto… y, como no, me decanté por la primera opción. He de decir que siempre me parece sencillo el proceso hasta que entro en el bucle casi infinito de iteraciones modificando el programa para optimizarlo.
Para hacer un traductor necesitaba crear todas las letras y símbolos del alfabeto (no he incluído los números, lo dejo para otro momento). Así que me puse a crear un módulo para cada letra:
Intenté programar un bucle que recorriese el texto y guardase la posición que tenía que ocupar cada letra del mismo al ser traducida al Braille, pero resulta que los bucles en OpenSCAD tienen aún opciones reducidas y no fuí capaz de hacerlo (que no digo que no se pueda, pero soy un novato en estas lides).
Pero… si la cruda realidad es capaz de tocar las narices no voy a ser yo menos. ¿Por qué no complicarme la vida creando un programa en Python que genere un programa OpenSCAD? ¡Con Python sí que sería muy sencillo recorrer un string e ir almacenando las posiciones de cada letra en función de si es mayúscula o minúscula!
He de decir que el programa final no está todo lo depurado que quisiera y tiene fallos de esos que no impiden un buen funcionamiento pero destrozan los ojos de personas avezadas en el código, pero poco a poco iré mejorándolo.
El caso es que he conseguido un script de Python que te genera un archivo .SCAD que puede abrir OpenSCAD con el texto traducido a Braille listo para ser renderizado y exportado como STL para imprimirlo en 3D, aquí tenéis un vídeo resumen:
Por ello, es mejor imprimirla de canto, es decir, en vertical. Hay que poner una base de apoyo para que no se caiga, pero el resultado es óptimo de esta forma. Dejo una imagen de una plaquita impresa de la primera forma junto a otra impresa de la segunda forma:

traductor.py |