¿Qué es un documento STL?

publicado en: Portada | 0

El nombre STL, utilizado como extensión para este tipo de documentos, es un acrónimo de stereolithography; estereolitografía en castellano, a la que a veces también se hace referencia por las siglas SL o SLA.

Se trata de documentos que contienen información 3D (es decir, en tres dimensiones) sobre objetos sólidos con los que poder fabricar un prototipo rápido de los mismos. Actualmente se utilizan con frecuencia como un formato intermedio entre los programas de modelado 3D y los de impresión 3D. En nuestro taller Guadal-lab los utilizamos para importar en el programa de laminado e impresión 3D Cura y los generamos desde las aplicaciones de modelado 3D, especialmente desde FreeCad.

Exportando un cubo de FreeCad en formato STL

El formato fue desarrollado originalmente por la empresa 3D Systems, fundada por Chuck Hull, inventor del primer sistema de estereolitografía para prototipado rápido

Existen dos formatos para los documentos STL, los de texto (también llamados ASCII STL, por el nombre del formato de texto usado) y los binarios. Aunque los primeros casi no se usan por ocupar mucho más que los segundos sin aportar nada, nos van a resultar muy prácticos para entender cómo son.

Los documentos STL básicamente están formados por una estructura que define el sólido con un nombre y una lista de vértices por cada cara que delimita el objeto. A cada grupo de vértices que definen una cara le precede un vector que indica la normal de la cara, es decir, la dirección del exterior de la misma. En el siguiente texto se muestra un ejemplo de un tetraedro.

solid tetraedro
  facet normal -0.816497 -0.471405 0.333333
    outer loop
      vertex 0 0 1.08866
      vertex -1 0.57735 -0.544331
      vertex 0 -1.1547 -0.544331
    endloop
  endfacet
  facet normal 0 0 -1
    outer loop
      vertex -1 0.57735 -0.544331
      vertex 1 0.57735 -0.544331
      vertex 0 -1.1547 -0.544331
    endloop
  endfacet
  facet normal 0.816497 -0.471405 0.333333
    outer loop
      vertex 0 -1.1547 -0.544331
      vertex 1 0.57735 -0.544331
      vertex 0 0 1.08866
    endloop
  endfacet
  facet normal 0 0.942809 0.333333
    outer loop
      vertex 0 0 1.08866
      vertex 1 0.57735 -0.544331
      vertex -1 0.57735 -0.544331
    endloop
  endfacet
endsolid tetraedro

El texto solid tetraedro / endsolid tetraedro encierra la definición del tetraedro del ejemplo. El vector de la normal de cada cara precede su definición por el texto facet normal. Los vértices de las caras están delimitados por el texto outer loop / endloop y el grupo de coordenadas de cada vértice comienza con vertex.

En realidad, el orden de los vértices y la regla de la mano derecha definen la normal de la cara suficientemente bien, por lo que muchas aplicaciones simplemente ignoran los datos de la línea facet normal que la definen explícitamente con un vector.

En el ejemplo del tetraedro las caras están definidas correctamente por triángulos pero ¿Qué ocurre con otros sólidos, como un cubo? Con este sistema se podrían definir otros polígonos, como cuadrados, para las caras pero en la práctica lo más eficiente es usar triángulos (que seguro son coplanarios) para definir la forma del sólido.

Tetraedro y Cubo en STL con caras formadas por triángulos

En la imagen anterior se ha marcado en verde una cara y sus aristas exteriores tanto en el tetraedro como en el cubo. Puede verse también que cada cara del cubo está formada por dos triángulos y en la información del objeto de la parte inferior de la ventana se aprecia que el número de caras es de 12 en lugar de las 6 que se esperaría de un cubo.

Además de la información geométrica, los documentos STL pueden también almacenar información de otro tipo (atributos) Muchos programas simplemente no utilizan esta información; las aplicaciones que generan documentos STL y no utilizan este atributo graban un valor cero en su lugar. Cuando se hace uso de ese atributo suele servir para definir el color del objeto, aunque no es exactamente parte del estándar original.

Como se decía más arriba, para ahorrar espacio en el documento STL (ocupar menos memoria) y para leerlo por un programa de forma mucho más sencilla (aún a costa de que resulte ilegible para un ser humano) se utiliza habitualmente el formato binario en lugar de el formato de texto; un documento STL que defina un objeto 3D mínimamente complejo puede ocupar mucho. La estructura de un documento STL binario está formado por una cabecera de 80 caracteres con el nombre del objeto, un entero sin signo de 32 bits para indicar el número de triángulos

Char [80] – Cabecera del documento (80 caracteres ASCII de 1 byte)
unsigned long int – Número de triángulos (entero sin signo de 32 bits)
float [3] – Normal a la cara (float de 32 bits)
float [3] – Vértice 1 (3 float de 32 bits)
float [3] – Vértice 2 (3 float de 32 bits)
float [3] – Vértice 3 (3 float de 32 bits)
unsigned int – Atributo (entero sin signo de 16 bits)

Pese a que este formato es el más compacto y por tanto el más liviano y rápido de procesar y por lo tanto el más usado, la mayoría de las aplicaciones permiten leer también el formato de texto y algunas de ellas también son capaces de grabarlo.

Víctor Ventura

Desarrollando aplicaciones para la web conocí el potencial de internet de las cosas, encontré la excusa perfecta para satisfacer la inquietud de aprender electrónica que había tenido desde siempre. Ahora puedo darme el gusto de programar las cosas que yo mismo diseño y fabrico.

Más entradas - Página web

Sígueme:
TwitterLinkedIn

Seguir Víctor Ventura:

Programador multimedia y web + IoT. Mejor con software libre.

Desarrollando aplicaciones para la web conocí el potencial de internet de las cosas, encontré la excusa perfecta para satisfacer la inquietud de aprender electrónica que había tenido desde siempre. Ahora puedo darme el gusto de programar las cosas que yo mismo diseño y fabrico.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *