Refactor code structure for improved readability and maintainability

This commit is contained in:
FelipeCN
2025-11-12 10:59:32 -03:00
commit 9a7f047a5a
13 changed files with 92362 additions and 0 deletions
@@ -0,0 +1,64 @@
/*
Gridifnity Base Configurável
Este arquivo define quantidade de blocos na base do sistema Gridifnity.
Gridifnity é um sistema modular de blocos que permite a construção de estruturas personalizadas.
A configuração da base é feita através de variáveis que definem o número de blocos em
cada direção (X, Y).
*/
// Configuração da base
medida_bloco = 37.7; // Medida de cada bloco em mm
// Defina a espessura das linhas interna (entre os blocos) e a parte externa do sistema Gridifnity (bordas)
// Valores padrão: 4.3 mm espessura das linhas internas, 2.15 mm espessura externa
espessura_externa = 2.15; // Espessura externa do sistema Gridfinity
espessura_interna = 4.3; // Espessura das linhas entre os blocos
// Defina a altura da base do sistema Gridifnity
// Valor padrão: 4.1 mm
altura_base = 4.1; // Altura da base em mm
// Defina o número de blocos na base do sistema Gridifnity
// Valores padrão: 6 blocos em X e 5 blocos em Y
num_blocos_x = 6; // Número de blocos na direção X
num_blocos_y = 6; // Número de blocos na direção Y
// =========================================================
// Função para calcular a largura total da base
// =========================================================
function calcular_largura_total(num_blocos) =
(num_blocos * medida_bloco) + (2 * espessura_externa) + ((num_blocos - 1) * espessura_interna);
// =========================================================
// Módulo principal para criar a base Gridifnity
// =========================================================
module gridifnity_base() {
largura_total_x = calcular_largura_total(num_blocos_x);
largura_total_y = calcular_largura_total(num_blocos_y);
difference() {
// Criar o bloco sólido externo
cube([largura_total_x, largura_total_y, altura_base]);
// Remover os espaços internos para criar os blocos
for (x = [0:num_blocos_x-1]) {
for (y = [0:num_blocos_y-1]) {
translate([
espessura_externa + (x * (medida_bloco + espessura_interna)),
espessura_externa + (y * (medida_bloco + espessura_interna)),
-0.5
]) {
cube([medida_bloco, medida_bloco, altura_base + 1]);
}
}
}
}
}
// =========================================================
// Gerar a base
// =========================================================
gridifnity_base();
File diff suppressed because it is too large Load Diff
Binary file not shown.
@@ -0,0 +1,186 @@
/*
Gridifnity Base Configurável
Este arquivo define quantidade de blocos da caixa do sistema Gridifnity.
Gridifnity é um sistema modular de blocos que permite a construção de estruturas personalizadas.
A configuração da caixa é feita através de variáveis que definem o número de blocos em
cada direção (X, Y).
Quando for mais de 1 bloco em X ou Y, a caixa espaçará os blocos de acordo com a espessura interna definida e os conectar.
O diâmetro da base será ajustável mas o padrão é 37 mm (medida do bloco padrão) pois a base é 37.7mm.
*/
// Configuração da caixa
medida_bloco = 42; // Medida de cada bloco em mm
tamanho_base = 37.2; // Tamanho da base quadrada de encaixe (encaixa no grid de 37.7mm)
// Defina a espessura das paredes da caixa
// Valores padrão: 2.0 mm para espessura das paredes, 2.0 mm para espessura do fundo
espessura_parede = 1.2; // Espessura das paredes da caixa
espessura_fundo = 3.0; // Espessura do fundo da caixa
altura_transicao = 2.5; // Altura da zona de transição suave
// Defina a espessura interna (espaçamento entre blocos quando múltiplos)
espessura_interna = 4.3; // Espessura das linhas entre os blocos
// Defina o número de blocos da caixa
// Valores padrão: 1 bloco em X e 1 bloco em Y
num_blocos_x = 2; // Número de blocos na direção X
num_blocos_y = 2; // Número de blocos na direção Y
// Defina a altura da caixa (altura útil interna)
altura_caixa = 30; // Altura útil da caixa em mm
// Raio de arredondamento dos cantos internos e externos
raio_canto = 3.5; // Raio de arredondamento dos cantos
// =========================================================
// Função para calcular a largura total da caixa
// =========================================================
function calcular_largura_total_caixa(num_blocos) =
(num_blocos * medida_bloco);
// =========================================================
// Função para calcular offset do bloco (posição central)
// =========================================================
function calcular_offset_bloco(indice) =
(medida_bloco / 2) + (indice * medida_bloco);
// =========================================================
// Módulo para criar uma base quadrada para encaixe
// =========================================================
module base_encaixe() {
altura_base = 5; // Altura da base de encaixe
tolerancia = 0.20; // Tolerância para encaixe
raio_canto_base = 3.75; // Raio de arredondamento dos cantos da base
// Base quadrada com cantos arredondados para encaixe
hull() {
translate([raio_canto_base, raio_canto_base, 0])
cylinder(r=raio_canto_base, h=altura_base, $fn=32);
translate([tamanho_base - tolerancia - raio_canto_base, raio_canto_base, 0])
cylinder(r=raio_canto_base, h=altura_base, $fn=32);
translate([raio_canto_base, tamanho_base - tolerancia - raio_canto_base, 0])
cylinder(r=raio_canto_base, h=altura_base, $fn=32);
translate([tamanho_base - tolerancia - raio_canto_base, tamanho_base - tolerancia - raio_canto_base, 0])
cylinder(r=raio_canto_base, h=altura_base, $fn=32);
}
}
// =========================================================
// Módulo para criar uma caixa com cantos arredondados
// =========================================================
module caixa_arredondada(largura, profundidade, altura, raio) {
hull() {
// Criar cilindros nos 4 cantos para arredondar
translate([raio, raio, 0])
cylinder(r=raio, h=altura, $fn=32);
translate([largura - raio, raio, 0])
cylinder(r=raio, h=altura, $fn=32);
translate([raio, profundidade - raio, 0])
cylinder(r=raio, h=altura, $fn=32);
translate([largura - raio, profundidade - raio, 0])
cylinder(r=raio, h=altura, $fn=32);
}
}
// =========================================================
// Módulo principal para criar a caixa Gridifnity
// =========================================================
module gridifnity_caixa() {
largura_total_x = calcular_largura_total_caixa(num_blocos_x);
largura_total_y = calcular_largura_total_caixa(num_blocos_y);
altura_total = altura_caixa + espessura_fundo;
// Calcular dimensões
// Cada bloco tem 42mm, as pontes internas têm espessura_interna
largura_util = medida_bloco; // Largura de cada bloco (42mm)
difference() {
union() {
// Criar as bases de encaixe para cada bloco
for (x = [0:num_blocos_x-1]) {
for (y = [0:num_blocos_y-1]) {
translate([
calcular_offset_bloco(x) - (tamanho_base / 2),
calcular_offset_bloco(y) - (tamanho_base / 2),
0
]) {
base_encaixe();
}
}
}
// Criar estrutura completa conectada (caixas + pontes integradas)
// Primeiro: transições de cada base para a estrutura superior
for (x = [0:num_blocos_x-1]) {
for (y = [0:num_blocos_y-1]) {
hull() {
// Topo da base de encaixe
translate([
calcular_offset_bloco(x) - (tamanho_base / 2),
calcular_offset_bloco(y) - (tamanho_base / 2),
4.9
]) {
hull() {
translate([3.75, 3.75, 0])
cylinder(r=3.75, h=0.2, $fn=32);
translate([tamanho_base - 0.15 - 3.75, 3.75, 0])
cylinder(r=3.75, h=0.2, $fn=32);
translate([3.75, tamanho_base - 0.15 - 3.75, 0])
cylinder(r=3.75, h=0.2, $fn=32);
translate([tamanho_base - 0.15 - 3.75, tamanho_base - 0.15 - 3.75, 0])
cylinder(r=3.75, h=0.2, $fn=32);
}
}
// Início da estrutura superior (centrada no bloco)
translate([
calcular_offset_bloco(x) - (largura_util / 2),
calcular_offset_bloco(y) - (largura_util / 2),
5 + altura_transicao - 0.1
])
caixa_arredondada(
largura_util,
largura_util,
0.2,
raio_canto
);
}
}
}
// Segundo: criar corpo sólido conectado
// Calcular dimensão total (cada bloco é 42mm)
largura_corpo_x = num_blocos_x * medida_bloco;
largura_corpo_y = num_blocos_y * medida_bloco;
translate([0, 0, 5 + altura_transicao])
caixa_arredondada(
largura_corpo_x,
largura_corpo_y,
altura_total - 5 - altura_transicao,
raio_canto
);
}
// Remover o interior da caixa (cavidade única, sem divisórias)
largura_corpo_x = num_blocos_x * medida_bloco;
largura_corpo_y = num_blocos_y * medida_bloco;
translate([
espessura_parede,
espessura_parede,
espessura_fundo + 5
])
caixa_arredondada(
largura_corpo_x - (2 * espessura_parede),
largura_corpo_y - (2 * espessura_parede),
altura_caixa + altura_transicao + 1,
raio_canto - espessura_parede
);
}
}
// =========================================================
// Gerar a caixa
// =========================================================
gridifnity_caixa();
File diff suppressed because it is too large Load Diff