STL es un formato de archivo nativo del software CAD de estereolitografía creado por 3D Systems . [3] [4] [5] Chuck Hull , el inventor de la estereolitografía y fundador de 3D Systems, informa que la extensión de archivo es una abreviatura de estereolitografía . [6]
Un archivo STL describe una superficie triangulada sin estructurar mediante la unidad normal y los vértices (ordenados por la regla de la mano derecha [2] ) de los triángulos utilizando un sistema de coordenadas cartesianas tridimensionales . [7] En la especificación original, se requería que todas las coordenadas STL fueran números positivos, pero esta restricción ya no se aplica y las coordenadas negativas se encuentran comúnmente en los archivos STL actuales. Los archivos STL no contienen información de escala y las unidades son arbitrarias. [8] Los archivos STL describen solo la geometría de la superficie de un objeto tridimensional sin ninguna representación de color, textura u otros atributos comunes del modelo CAD. El formato STL especifica representaciones tanto ASCII como binarias . Los archivos binarios son más comunes, ya que son más compactos. [9]
STL se utiliza ampliamente para la creación rápida de prototipos , la impresión 3D y la fabricación asistida por computadora , [10] y es compatible con muchos otros paquetes de software. [ cita requerida ]
El formato STL fue inventado por Albert Consulting Group para 3D Systems en 1987. [11] El formato fue desarrollado para las primeras impresoras 3D comerciales de 3D Systems. Desde su lanzamiento inicial, el formato se mantuvo relativamente sin cambios durante 22 años. [12]
En 2009, se propuso una actualización del formato, denominada STL 2.0, que evolucionó hasta convertirse en el formato de archivo de fabricación aditiva . [12] [13]
Un archivo STL ASCII comienza con la línea:
nombre sólido
donde el nombre es una cadena opcional (aunque si se omite el nombre , debe haber un espacio después del carácter sólido, por compatibilidad con algún software). El resto de la línea se ignora y a veces se usa para almacenar metadatos (por ejemplo, nombre de archivo, autor, fecha de modificación, etc.). [14] El archivo continúa con cualquier número de triángulos, cada uno representado de la siguiente manera: [15]
faceta normal n i n j n k vértice del bucle externo v1 x v1 y v1 z vértice v2 x v2 y v2 z vértice v3 x v3 y v3 z endloop endfacet
donde cada n o v es un número de punto flotante en formato signo - mantisa - e
signo - exponente , p. ej., . El archivo concluye con :2.648000e-002
nombre solido
La estructura del formato sugiere que existen otras posibilidades (por ejemplo, facetas con más de un loop
, o bucles con más de tres vértices). En la práctica, sin embargo, todas las facetas son triángulos simples. [ cita requerida ]
Los espacios en blanco (espacios, tabulaciones, nuevas líneas) se pueden utilizar en cualquier parte del archivo, excepto dentro de números o palabras. Los espacios entre facet
y normal
y entre outer
y loop
son obligatorios. [9]
Debido a que los archivos STL ASCII pueden ser muy grandes, existe una versión binaria de STL. Un archivo STL binario tiene un encabezado de 80 caracteres que generalmente se ignora, pero nunca debe comenzar con la representación ASCII de la cadena , ya que eso puede hacer que algunos programas lo confundan con un archivo STL ASCII. Después del encabezado hay un entero sin signo little-endiansolid
de 4 bytes que indica la cantidad de facetas triangulares en el archivo. A continuación, hay datos que describen cada triángulo por turno. El archivo simplemente termina después del último triángulo.
Cada triángulo se describe mediante 12 números de punto flotante de 32 bits: 3 para la normal y 3 para las coordenadas X/Y/Z de cada vértice, tal como sucede con la versión ASCII de STL. Después de estos, sigue un entero sin signo de 2 bytes ("corto") que es el "número de bytes del atributo"; en el formato estándar, este debería ser cero porque la mayoría del software no entiende nada más. [9]
Los números de punto flotante se representan como números de punto flotante IEEE y se supone que son little-endian , aunque esto no se indica en la documentación.
UINT8[80] – Encabezado - 80 bytesUINT32 – Número de triángulos - 4 bytes
foreach triangulo - 50 bytes: REAL32[3] – Vector normal - 12 bytes REAL32[3] – Vértice 1 - 12 bytes REAL32[3] – Vértice 2 - 12 bytes REAL32[3] – Vértice 3 - 12 bytes UINT16 – Recuento de bytes del atributo: 2 bytesfin
Existen al menos dos variaciones no estándar del formato binario STL para agregar información de color:
COLOR=
seguida de cuatro bytes que representan el rojo, el verde, el azul y el canal alfa (transparencia) en el rango de 0 a 255. Este es el color de todo el objeto, a menos que se anule en cada faceta. Magics también reconoce una descripción del material; una característica de superficie más detallada. Justo después de la especificación debe haber otra cadena ASCII seguida de tres colores (3×4 bytes): el primero es un color de reflexión difusa , el segundo es un color de realce especular y el tercero es una luz ambiental . Se prefieren los ajustes de material sobre el color. El color por faceta se representa en los dos bytes de "número de bytes de atributo" de la siguiente manera:COLOR=RGBA
,MATERIAL=
El orden rojo/verde/azul dentro de esos dos bytes está invertido en estos dos enfoques, por lo que, si bien estos formatos podrían haber sido compatibles fácilmente, la inversión del orden de los colores significa que no lo son; y peor aún, un lector de archivos STL genérico no puede distinguirlos automáticamente. Tampoco hay forma de que las facetas sean selectivamente transparentes porque no hay un valor alfa por faceta, aunque en el contexto de la maquinaria actual de prototipado rápido, esto no es importante.
En las versiones ASCII y binarias de STL, la normal de la faceta debe ser un vector unitario que apunte hacia afuera desde el objeto sólido. [16] En la mayoría del software, esto se puede establecer en (0,0,0), y el software calculará automáticamente una normal basada en el orden de los vértices del triángulo utilizando la " regla de la mano derecha ", es decir, los vértices se enumeran en orden antihorario desde afuera. [ cita requerida ] Algunos cargadores STL (por ejemplo, el complemento STL para Art of Illusion) verifican que la normal en el archivo concuerde con la normal que calculan utilizando la regla de la mano derecha y advierten al usuario cuando no es así. Otro software puede ignorar la normal de la faceta por completo y utilizar solo la regla de la mano derecha. Aunque es raro especificar una normal que no se pueda calcular utilizando la regla de la mano derecha, para ser completamente portátil, un archivo debe proporcionar la normal de la faceta y ordenar los vértices de manera adecuada. Una excepción notable es SolidWorks , que utiliza la normal para efectos de sombreado .
No es posible utilizar triángulos para representar superficies curvas a la perfección. Para compensar, los usuarios suelen guardar archivos STL enormes para reducir la inexactitud. Sin embargo, los formatos nativos asociados con muchas aplicaciones de diseño 3D utilizan superficies matemáticas para preservar los detalles sin pérdida en archivos pequeños. Por ejemplo, Rhino 3D [17] y Blender [18] implementan NURBS para crear superficies curvas reales y almacenarlas en sus respectivos formatos de archivo nativos, pero deben generar una malla de triángulos al exportar un modelo al formato STL.
Las impresoras 3D construyen objetos solidificando ( SLA , SLS , SHS , DMLS , EBM , DLP ) o imprimiendo (3DP, MJM, FDM , FFF , PJP, MJS) [19] una capa a la vez. Esto requiere una serie de contornos 2D cerrados (capas horizontales) que se rellenan con material solidificado a medida que las capas se fusionan. Un formato de archivo natural para una máquina de este tipo sería una serie de polígonos cerrados (capas o cortes) correspondientes a diferentes valores Z. Sin embargo, dado que es posible variar los espesores de las capas para una construcción más rápida aunque menos precisa, fue más fácil definir el modelo a construir como un poliedro cerrado que se puede cortar en los niveles horizontales necesarios. Una normal de faceta incorrecta puede afectar la forma en que se corta y se rellena un archivo. Se puede elegir un corte en un valor Z diferente para omitir una faceta defectuosa o el archivo debe devolverse al programa CAD para realizar correcciones y luego regenerar el archivo STL.
Para formar correctamente un volumen 3D, la superficie representada por cualquier archivo STL debe estar cerrada (sin agujeros ni normal vectorial invertida) y conectada, donde cada borde sea parte de exactamente dos triángulos y no se autointersecte. Dado que la sintaxis STL no impone esta propiedad, se puede ignorar para aplicaciones donde el vacío no importa. La superficie faltante solo importa en la medida en que el software que corta los triángulos lo requiera para garantizar que los polígonos 2D resultantes sean cerrados. A veces, este tipo de software se puede escribir para limpiar pequeñas discrepancias moviendo vértices que están cerca entre sí para que coincidan. Los resultados no son predecibles y pueden requerir reparación con otro programa. Las impresoras 3D vectoriales requieren un archivo STL limpio y la impresión de un archivo de datos incorrecto no se llenará o puede detener la impresión.
El formato STL es simple y fácil de generar. Por lo tanto, muchos sistemas de diseño asistido por computadora pueden generar el formato de archivo STL. Si bien el resultado es simple de generar, la información de conectividad de la malla se descarta porque se pierde la identidad de los vértices compartidos.
Muchos sistemas de fabricación asistidos por ordenador requieren modelos triangulados. El formato STL no es el método más eficiente en términos de memoria y computación para transferir estos datos, pero STL se utiliza a menudo para importar la geometría triangulada al sistema CAM . El formato está disponible comúnmente, por lo que el sistema CAM lo utilizará. Para utilizar los datos, el sistema CAM puede tener que reconstruir la conectividad. Como los archivos STL no guardan la dimensión física de una unidad, un sistema CAM la solicitará. Las unidades típicas son mm
y inch
.
STL también se puede utilizar para intercambiar datos entre sistemas CAD/CAM y entornos computacionales como Mathematica .
como estándar de facto, se ha utilizado en muchos, si no en todos, los sistemas de creación rápida de prototipos.