Para el modelado en 3D, la famosa aplicación web de AutoDesk Tinkercad debería ayudarnos ante cualquier diseño inicial de una manera más sencilla con el proceso de modelado 3D, tanto es así, que incluso los modeladores experimentados lo hacen explorando las formas de Tinkercad, pues curiosamente, una herramienta “simple” como Tinkercad puede utilizarse para crear formas complejas.
Lógicamente detrás del interfaz gráfico de Tinkercad ( o de cualquier otro programa de modelado 3D), está el código que procesa las manipulaciones del diseñador , de modo que a medida que arrastra y suelta formas, los algoritmos complejos están trabajando para calcular cómo aparecerán los gráficos en la pantalla y generando las formas 3d.
OpenSad en efecto surgen ante el dilema de que también debería ser posible crear figuras geométricas directamente mediante código, de un modo mucho mas eficiente y conciso que el proceso de diseño que cualquier otra herramienta gráfica como por ejemplo Tinkercad.
A diferencia de Tinkercad, OpenSCAD no es una aplicación basada en la web , de modo que si esta interesado en la herramienta tendrá que descargarla gratuitamente desde http://www.openscad.org ( está disponible para Windows, Mac OS X y Linux) e instalarla en su PC para usarla.
La interfaz OpenSCAD es sencilla en comparación con Tinkercad ,constando de sólo tres ventanas, siendo la ventana de la izquierda un editor de texto utilizado para ingresar el código.

Con OpenSCAD pues está diseñando código, pero no se preocupe: escribir código con Open SCAD es muy similar a la sintaxis HTML siendo el código para crear objetos autoexplicativo ,por ejemplo, el comando del cubo crea cubos, el comando de esfera crea esferas y el comando del cilindro crea cilindros, etc.
Probablemente haya alrededor de 60 comandos en OpenSCAD , algunos de ellos que enunciaremos mas abajo, muchos de los cuales permitirán manipular la geometría , como por ejemplo mover, rotar, escalar y usar operaciones booleanas para combinar objetos, pero no se preocupe porque para modelar la mayoría de la piezas solo necesitaran unos pocos comandos como son union , difference, translate, cylinder o cube.
Es facil deducir que en base a esos , es decir mediante secuencias de comandos en el lenguaje de OpenSCAD , se utilizaran para crear modelos en 2D o 3D.
Este script es una lista de formato libre de instrucciones de acción.
object(); variable = value;
operator() action();
operator()
{ action();
action();
}
operator()
operator()
{ action();
action();
}
operator()
{ operator()
action();
operator()
{ action();
action();
}
}
Como vemos en el ejemplo hay objetos, acciones y operadores para construir una pieza:
- Objetos:Los objetos son los bloques de construcción de modelos, creados por primitivas 2D y 3D. Los objetos terminan en un punto y coma ‘;’.
- Acciones: Instrucciones de acción que incluyen la creación de objetos usando las primitivas y asignar valores a variables. Las instrucciones de acción también terminan en un punto y coma ‘;’.
- Operadores :Los operadores o las transformaciones, modifican la ubicación, color y otras propiedades de los objetos. Los operadores usen llaves ‘{}’ cuando su ámbito de aplicación abarca más de una acción. Más de un operador puede usarse para la misma acción o grupo de acciones. Varios operadores se procesan de derecha a izquierda, es decir, el más cercano a la acción del operador se procesa primero. Los operadores no terminan en punto y coma ‘;‘, pero la persona hacen acciones que contienen.
Por ultimo y no menos importante sobre todo para llevar las piezas modeladas al mundo real por ejemplo mediante impresion en 3d, as unidades en OpenSCAD son genéricas de modo que no hay sistemas de medición en OpenSCAD, es decir , no hay designación para las unidades, y le corresponde al diseñador definir el tamaño del objeto al configurar el archivo antes de la impresión 3D.
A modo de resumen vamos a ver de forma sintetica los entresijos del lenguaje OpenScad;
RESUMEN DE LAS FUNCIONES MAS IMPORTANTES
Sintaxis de elementos principales
Los usuarios pueden ampliar el lenguaje definiendo sus propios módulos y funciones. Esto permite agrupar partes de secuencia de comandos de fácil reutilización con diferentes valores. Nombres bien escogidos también ayudan a documentar la secuencia de comandos.
OpenSCAD proporciona: funciones que devuelven valores. módulos que realizan acciones pero no devuelven valores.
OpenSCAD calcula el valor de variables en tiempo de compilación, no tiempo de ejecución. La última asignación variable dentro de un ámbito se aplicará en todo el mundo en ese ámbito. También se aplica a los ámbitos internos, ni los niños, sus. Ver alcance de variables para obtener más detalles. Puede ser útil pensar en ellos como constantes capaz de anular en lugar de variables.
En resumen estas son las cinco construcciones mas usadas ;
var = value; Variables en OpenSCAD son creadas por una declaración con un nombre o identificador, asignación a través de una expresión y un punto y coma. El papel de los arreglos de discos, en muchos lenguajes imperativos, se maneja en OpenSCAD mediante vectores. |
module name(…) { … } Módulos pueden utilizarse para definir objetos o, mediante children(), definir los operadores. Una vez definido, módulos temporalmente se agrega al lenguaje. |
function name(…) = … Las funciones operan sobre valores para calcular y devolver valores nuevos. |
include <….scad> actúa como si el contenido del archivo incluido fueron escrito en el archivo incluido |
use <….scad> importaciones de módulos y funciones, pero no se ejecuta ningún comando que no sea de esas definiciones |
2D
3D
Transformaciones
translate ([x, y, z]) Se traduce (se mueve) en sus elementos secundarios a lo largo del vector especificado. El nombre de argumento es opcional. |
rotate ([x, y, z]) Gira su child ‘a’ grados sobre el eje del sistema coordinado o alrededor de un eje arbitrario. Los nombres de argumento son opcionales si los argumentos se dan en el mismo orden como se especifica. |
scale ([x, y, z]) La escala de sus elementos secundarios mediante el vector especificado. El nombre de argumento es opcional. |
resize ([x, y, z], auto) Modifica el tamaño del objeto secundario para que coincida con el dado x,y y z |
mirror ([x, y, z]) Refleja el elemento en un plano que pase por el origen |
multmatrix (m) Multiplica la geometría de todos los elementos secundarios con la matriz de transformación de 4 x 4 dada. Uso: multmatrix (m = […]) { … } |
color («colorname») Los nombres de los colores disponibles son los de lista del color SVG la World Wide Web consortium. |
color ([r, g, b, a]) Muestra los elementos secundarios mediante el color RGB especificado + valor alfa. Sólo se utiliza para la previsualización de F5 como CGAL y STL (F6) actualmente no admiten color. El valor de alfa por defecto 1.0 (opaco) si no se especifica. |
offset (r|delta, chamfer) Desplazamiento permite mover contornos 2D hacia afuera o hacia adentro por una cantidad dada. |
hull() Muestra el casco convexo de los nodos secundarios. |
minkowski() |
Operaciones booleanas
union() Crea una Unión de su hijo nodos. Es la suma de todos los hijos (lógica de o). Se puede utilizar con objetos 2D o 3D, pero no mezclarlas. |
difference() Resta los nodos hijo 2 º (y todos los otros) de la primera ( y no). Se puede utilizar con objetos 2D o 3D, pero no mezclarlas. |
intersection() Crea la intersección de todos los nodos secundarios. Esto mantiene la porción traslapada (lógica y). Se conserva sólo la zona que es común o compartido por todos los hijos. Se puede utilizar con objetos 2D o 3D, pero no mezclarlas. |
Modificadores de carácter
* | Desactivar |
! | Mostrar sólo |
# | Destacar / debug |
% | Transparente / antecedentes |
Matemáticas
abs Corresponde a la funcion del valor absoluto. Devuelve el valor positivo de un número decimal con signo. |
acos arcoseno, o coseno inverso, expresado en grados. |
asin arco seno, o seno inverso, expresado en grados |
atan arco tangente, o tangente inversa, matemática. Devuelve el valor principal de la arco tangente de x, expresada en grados. |
atan2 atan dos argumentos , tomando y como su primer argumento. Devuelve el valor principal de la arco tangente de y / x, expresada en grados |
ceil Función matemática techo . Devuelve el valor de entero más próximo por redondeo el valor si es necesario. |
cos Función matemática coseno de grados. |
exp Función matemática exp . Devuelve la función exponencial de base e de x, que es el número e elevado a la potencia x. |
floor Función matemática flooro . Floor(x) = el entero más grande no es mayor que x |
len Función matemática longitud . Devuelve la longitud de una matriz, un vector o un parámetro de cadena. |
let Asignación secuencial de variables dentro de una expresión. La siguiente expresión se evalúa en el contexto de las tareas que y puede utilizar las variables. Esto es principalmente útil para realizar complicadas expresiones más legible mediante la asignación de resultados provisionales a las variables. |
ln Función matemática logaritmo natural. |
log Función matemática del logaritmo en base 10. |
max Devuelve el máximo de los parámetros. Si se da un único vector como parámetro, devuelve el máximo elemento de ese vecto |
min Devuelve el mínimo de los parámetros. Si se da un único vector como parámetro, devuelve el mínimo elemento de ese vector. |
pow Función matemática potencia |
rands Generador de números aleatorios. Genera un vector constante de pseudo números aleatorios, al igual que una matriz. Los números son dobles no enteros. Cuando se genera un único número, se llama todavía con variable [0] |
round El operador devuelve la parte entera más o menos, respectivamente, si la entrada numérica es positivo o negativo |
sign Función matemática signum . Devuelve un valor de unidad que extrae la señal de un valor |
sin Función matemática seno |
sqrt Función matemática de raíz cuadrada . |
tan Función de la tangente de matemática. |
Funciones
chr Convertir a números en una cadena que contiene caracteres con el código correspondiente. OpenSCAD utiliza Unicode, por lo que el número se interpreta como punto de código Unicode. Números fuera del intervalo de punto de código válido producirá una cadena vacía. |
concat Devuelven un vector que contiene los argumentos. Donde argumento es un vector de los elementos del vector se agregan individualmente al vector resultado. Cadenas son diferentes de vectores en este caso |
cross Calcula el producto cruzado de dos vectores en el espacio 3D. El resultado es un vector que es perpendicular a ambos vectores de entrada. Utilizando parámetros de entrada no válidos (por ejemplo vectores con una longitud diferente de 3 o de otro tipo) producirá un resultado indefinido. |
lookup Buscar valor en tabla e interpolar linealmente si no hay ninguna coincidencia exacta. El primer argumento es el valor a buscar. La segunda es la tabla de búsqueda–un vector de pares de clave y valor. |
norm Devuelve la norma euclideana de un vector. Tenga en cuenta que esto devuelve la longitud numérica real mientras que len devuelve el número de elementos en el vector o matriz. |
parent_module (idx) $parent_modules contiene el número de módulos en la pila de ejecución. parent_module(i) devuelve el nombre del módulo niveles por encima del módulo actual en la pila de ejecución. La pila es independiente de donde se definen los módulos. Es donde ellos son instancias que cuenta. Esto puede usarse para construir por ejemplo, las listas de materiale |
search Buscar valor en tabla e interpolar linealmente si no hay ninguna coincidencia exacta. El primer argumento es el valor a buscar. La segunda es la tabla de búsqueda–un vector de pares de clave y valor. |
str Convertir todos los argumentos a las cadenas y concatenar. |
version devuelve el número de versión de OpenSCAD. |
version_num devuelve el número de versión de OpenSCAD |
Otros
children ([idx]) Los objetos se indizan mediante enteros de 0 a $children-1. OpenSCAD establece $children el número total de objetos en el ámbito de aplicación. Objetos agrupados en un ámbito sub se tratan como un hijoo. |
echo (…) Esta función imprime el contenido de la ventana de compilación (también conocido como consola). Útil para depurar código. Valores numéricos se redondean a 5 dígitos significativos. La consola OpenSCAD soporta un subconjunto de lenguaje de marcado HTML |
for (i = [start:end]) { … } Bucle para evaluar cada valor en un rango, aplicándola a la acción siguiente. Parámetros start – valor inicial end – parada cuando el siguiente valor sea final |
for (i = [start:step:end]) { … } Bucle para evaluar cada valor en un rango , aplicándola a la acción siguiente. Parámetros start – valor inicial step o paso – cantidad para aumentar el valor, opcional, por defecto = 1 end – parada cuando el siguiente valor sea final |
for (i = […, …, …]) { … } Bucle evaluando cada valor en un vector, aplicándola a la acción siguiente. |
if (…) { … } Estructura condicional realizando una prueba para determinar si las acciones en un ámbito secundario deben realizarse o no. |
import («….stl») Importa un archivo para su uso en el modelo actual de OpenSCAD. OpenSCAD actualmente soporta importación de DXF, apagado y ficheros STL (ASCII y binario). La extensión de archivo se utiliza para determinar el tipo. |
intersection_for (i = [start:end]) { … } Iterar sobre los valores en un rango y crear la intersección de objetos creados por cada pasada. Además de crear instancias independientes para cada paso, el estándar for() también agrupa todas estas instancias de creación de una Unión implícita. Parámetros start – valor inicial end – parada cuando el siguiente valor sea final |
intersection_for (i = [start:step:end]) { … } Iterar sobre los valores en un rango y crear la intersección de objetos creados por cada pasada. Además de crear instancias independientes para cada paso, el estándar for() también agrupa todas estas instancias de creación de una Unión implícita. Parámetros start – valor inicial step o paso – cantidad para aumentar el valor, opcional, por defecto = 1 end – parada cuando el siguiente valor sea final |
intersection_for (i = […, …, …]) { … } Iterar sobre los valores en un vector y crear la intersección de objetos creados por cada pasada. Además de crear instancias independientes para cada paso, el estándar for() también agrupa todas estas instancias de creación de una Unión implícita. |
linear_extrude (height, center, convexity, twist, slices) Es una operación de modelado que toma un polígono 2D como entrada y extiende en la tercera dimensión de modo que se crea así una forma 3D. Tenga en cuenta que la protuberancia se realiza siempre del plano XY a la altura indican a lo largo del eje Z ; así que si se gira o aplicar otras transformaciones antes de extrusión, la extrusión se aplica a la proyección del polígono 2D en el plano XY. Parámetros height -altura, center -centro, convexity-convexidad, twits-torcedura, slices-rodajas |
projection (cut) Utilizando la función, puede crear dibujos en 2d de modelos en 3d y exportarlos al formato dxf. Funciona proyectando un modelo 3D (x, y) plano, con z en 0. If, sólo puntos con z = 0 se considerará (cortando efectivamente el objeto), con (el valor predeterminado), puntos por encima y por debajo del plano se considerarán así (creando una proyección adecuada). projection()cut=truecut=false |
render (convexity) Las fuerzas de la generación de una malla incluso en modo de vista previa. Útil para ser demasiado lentos para seguir las operaciones booleanas. |
rotate_extrude (convexity) Gira alrededor del eje z para formar un sólido que tiene simetría de rotación una figura en 2D. Una forma de pensar de esta operación es imaginar un torno de alfarero colocada en el plano X-Y con su eje de rotación hacia arriba hacia + Z. Luego colocando el objeto por el hecho de ser en esta virtual de alfarero (posiblemente extendido hacia abajo por debajo del plano X-Y a -Z, tomar la sección de este objeto en el plano X-Z pero mantener solamente el derecho de la mitad (X > = 0). Es la forma 2D que necesitan ser alimentados a rotate_extrude() como el niño con el fin de generar este sólido. Desde una forma 2D se procesa por OpenSCAD en el plano X-Y, una manera alternativa de pensar de esta operación es la siguiente: hace girar una figura en 2D alrededor del eje y para formar un sólido. El sólido resultante se coloca de modo que su eje de rotación se encuentra a lo largo del eje z. No puede utilizarse para producir una hélice o rosca. La forma 2D necesita mentir completamente en el derecho de cualquiera de los dos (recomendado) o el lado izquierdo del eje y. Más precisamente hablando, cada vértice de la forma debe tener ya sea x > = 0 o x < = 0. Si la forma cruza el eje X una advertencia aparecerá en la ventana de consola y se ignorará el rotate_extrude(). Para OpenSCAD versiones anteriores a 2016.xxxx, si la forma es en el eje negativo las caras será al revés, que puede causar efectos no deseados |
surface (file, center, invert, convexity) Lee mapa información de archivos de texto o imagen. Parámetros file : La ruta del archivo que contiene los datos del mapa. center:Esto determina la posición del objeto generado. Si es cierto objeto se centra en x y el eje y. De lo contrario, el objeto se coloca en el cuadrante positivo. Por defecto false. invert: Invierte como los valores de color de imágenes importadas se traducen en valores de altura. Esto no tiene ningún efecto al importar archivos de datos de texto. Por defecto false. convexity. El parámetro de convexidad especifica el número máximo de partes delanteras (lados traseros) podría penetrar un rayo que se intersecan el objeto. Este parámetro sólo es necesario para visualizar correctamente el objeto en modo de vista previa OpenCSG y no tiene ningún efecto en la prestación final. |
Compresiones de listas
Generar | [ for (i = range|list) i ] es decir [para (i = rango | lista) i] |
Condiciones | [ for (i = …) if (condition(i)) i ] es decir [para (i =…) si (conditcon(i)) i] |
Asignaciones | [ for (i = …) let (assignments) a ] es decir [para (i =…) que (asignaciones) un] |
Variables especiales
$children | Número de hijos de módulo |
$fa | Ángulo mínimo |
$fs | Tamaño mínimo |
$fn | Número de fragmentos |
$t | Paso de la animación |
$vpr | Rotación de la vista |
$vpt | Traducción de ventanilla |
$vpd | Distancia de la cámara de ventanilla |
Mas información en https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/
htt
Debe estar conectado para enviar un comentario.