OpenSCad e o Customizer do Thingiverse

Responder [phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable
Brazil RafaelEstevam
Site Admin
Mensagens: 88
Registrado em: 4 years ago
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable

OpenSCad e o Customizer do Thingiverse

Mensagem por RafaelEstevam » 4 years ago

Introdução
OpenSCad
OpenSCad é um software de modelagem livre baseado em script que utiliza geometria sólido construtiva.
Vamos por partes… Ele é um software de modelagem, ou seja, é um programa de computador projetado para criar modelos 3D. Uma questão que de imediato causa uma má primeira impressão é a modelagem via texto, você escreve um código ou um programa que representa o modelo que você quer fazer. Geometria sólido construtiva é uma técnica de construção sólida, ou seja, o que é modelado é um sólido, um volume criado a partir de operações simples com formas simples.
Ao contrário de softwares de modelagem como o Blender, que foca nos aspectos artísticos da modelagem, ele foca nos aspectos CAD da modelagem. Você usaria ele para projetar uma engrenagem, uma máquina, um equipamento, porém não utilizaria para um filme de animação.
Customização
Uma característica muito importante do OpenSCad é a parametrização, não só você pode fazer um modelo, porém o modelo pode ser uma função de seus parâmetros, e ao trocar os valores dos parâmetros o modelo se adapta.
Um exemplo é uma engrenagem simples, que ao ser modelada pode ser definida como uma função de 4 parâmetros básicos: diâmetro interno, diâmetro Externo, número de dentes e profundidade dos dentes. Ao se trocar um dos parâmetros todo o modelo de adapta e a mesa engrenagem, sem necessidade de remodelagem ou alteração no modelo original.

Thingiverse e Customizer
O Thingiverse trouxe uma ferramenta muito interessante que é o Customizer, este software permite que você faça o envio de um arquivo de OpenSCad e ele gera uma interface para que outras pessoas possam facilmente ajustar os parâmetros e salvar o objeto em STL sem precisar tocar no código original.
O ponto forte do customizer é que ele utiliza as variáveis definidas em escopo global e as transforma em caixas de entrada para o usuário. Através de comentários no código, o modelador é capaz de instruir o customizer a quais controles utilizar em sua interface como caixas de texto, barras deslizante e caixas de combinação.

Um exemplo
Geometrias sólidas
Vou propor um exemplo desde o planejamento até a publicação no Thingiverse, o projeto será um simples porta copo de mesa com nome, para isso começaremos um novo arquivo no OpenSCad e utilizaremos a primitiva 3D de cilindro e uma uma primitiva 2D que será o texto.

Código: Selecionar todos

cylinder(d=100,h=1);
linear_extrude(height=1.2)
    text("RafaelEstevam",size=10,halign="center",
         valign="center");
Apesar do código apresentado ser perfeitamente funcional modificações não são práticas pois cada modificação precisa de edição do modelo e conforme formas mais complexas são montadas a tarefa de editar torna-se complicada, imagine trocar a diâmetro de todos os parafusos de uma máquina complexa tendo que editar cada parafuso e cada furo ?
Para isso vamos definir os parâmetros e editar o modelo para que ele aceite 3 parâmetros ao invés de valores que serão diâmetro, espessura e o texto em si.

Código: Selecionar todos

diametro = 100;
altura   =   1;
texto    = "RafaelEstevam";
 
cylinder(d=diametro,h=altura);
linear_extrude(height=altura+0.2)
    text(texto,size=10,halign="center",
         valign="center");
Agora sempre que uma modificação for necessária apenas é preciso mudar o valor das variáveis e não mais editar o modelo. Destaco aqui uma diferença do OpenSCad com outras linguagens como C é que o OpenSCad é uma linguagem funcional e suas variáveis são valores que são uniformes em toda a execução do programa, de forma muito parecida com constantes da linguagem C, ou seja se você declarar uma variável, utilizar num objeto, modificar o valor e utilizar novamente, ambos ficarão com o último valor atribuído.
Uma ressalva que sempre pega os novatos é a definição de variáveis dentro de IFs em laços, ela simplesmente assumirá o último valor.
Customizer
Agora que já temos nosso porta copos, podemos melhorar algumas questões e preparando para a utilização com o customizer do Thingiverse. Pela documentação temos que podemos utilizar uma barra deslizante onde o usuário deve escolher entre uma faixa de valores, para isto vamos utilizar um comentario na frente da variável e definir a faixa.

Código: Selecionar todos

diametro = 100; // [50:150]
altura   =   1; // [1:Fino,1.5:Medio,2:Maior]
texto    = "RafaelEstevam";
 
cylinder(d=diametro,h=altura);
linear_extrude(height=altura+0.2)
    text(texto,size=10,halign="center",
         valign="center");
Podemos também usar caixas de listagem, como feito na altura.
E vamos fazer com que o usuário escolha o texto entre uma caixa de opções, sendo elas: Café, Chá e Água. Devido a natureza internacional do thingiverse utilizarei os textos também em inglês, assim mais pessoas poderão utilizar nosso modelo.

Código: Selecionar todos

diametro = 100; // [50:150]
altura   =   1; // [1:Fino,1.5:Medio,2:Maior]
texto    = "Coffee"; // [Coffee, Tea, Water, Café, Chá, Agua]
$fn = 128;
cylinder(d=diametro,h=altura);
linear_extrude(height=altura+0.2)
    text(texto,size=10,halign="center",
         valign="center");
Imagem

Pronto, nosso modelo já está quase pronto para ser enviado, porém antes vamos definir a subdivisão de faces para que o cilindro fique bem lisinho.
Neste momento não é necessário que o usuário defina o valor, vamos deixar definido por nós, para isso vamos instruir o customizer a não exibir este valor.

Código: Selecionar todos

diametro = 100; // [50:150]
altura   =   1; // [1:Fino,1.5:Medio,2:Maior]
texto    = "Coffee"; // [Coffee, Tea, Water, Café, Chá, Agua]
/* [HIDDEN] */
$fn = 128;
cylinder(d=diametro,h=altura);
linear_extrude(height=altura+0.2)
    text(texto,size=10,halign="center",
         valign="center");
Conforme a quantidade de parâmetros aumenta podemos categorizar e agrupar, para isto fazemos igual ao exemplo anterior, porém definindo nomes.

Código: Selecionar todos

/* [Dimensões ] */
diametro = 100; // [50:150]
altura   =   1; // [1:Fino,1.5:Medio,2:Maior]
/* [Textos] */
texto    = "Coffee"; // [Coffee, Tea, Water, Café, Chá, Agua]
/* [HIDDEN] */
$fn = 128;
cylinder(d=diametro,h=altura);
linear_extrude(height=altura+0.2)
    text(texto,size=10,halign="center",
         valign="center");
Envio
Agora só nos resta enviar e esperar até que outras pessoas vejam nosso arquivo e possam fazer seus próprios porta copos personalizados.
Imagem

Link:
BBcode:
HTML:
Hide post links
Show post links

Responder [phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable