Compare commits

...

114 Commits

Author SHA1 Message Date
9588b3fe8c refined helix 2025-07-13 17:59:00 +02:00
f1c385f5dd corrected svg issues, reduced code 2025-07-13 17:58:29 +02:00
8d1c96b3ee minor changes 2025-03-14 13:48:05 +01:00
4e39e68a14 added first version of customized dna-helix 2025-03-14 13:32:08 +01:00
76809106ce interation 3 with more slop 2024-08-18 16:11:30 +02:00
5e18e5733c interation 3 with more slop 2024-08-18 15:26:12 +02:00
28f352e5f9 interation 2 with more slop 2024-08-18 13:32:23 +02:00
cbf18e926d interation 2 with more slop 2024-08-18 13:25:04 +02:00
7a7fbd1f4e kitt matrix improvements 2024-08-17 21:25:15 +02:00
edefeee886 added kitt matrix 2024-08-17 20:34:19 +02:00
d4258527b8 minor corrections 2024-08-17 20:34:05 +02:00
2572c7af6e finished end-section 2023-07-17 18:51:32 +02:00
f0729d7baf improved clip_wide 2023-07-17 18:36:54 +02:00
0c33006cff fix intersecting hole 2023-07-15 18:01:31 +02:00
d7ac5af9fe diskshelf iteration 3: more tolerances 2023-07-15 17:48:12 +02:00
56fd9e64d4 gitignore 2023-06-24 15:55:50 +02:00
ce77ff95c3 sc808: disk-slider back module 2023-06-24 15:26:39 +02:00
3adb41c979 split repos 2023-06-24 15:25:47 +02:00
cb30dd06cc sc808t iteration2 2023-06-20 22:48:28 +02:00
58061fa685 gitignore 2023-06-20 22:47:49 +02:00
6b1f5aa41b add: sc808t_ssd_disk-slider 2023-06-19 20:12:21 +02:00
a2a36a1ea1 add: rgb-fanblock 2023-04-23 00:04:47 +02:00
zeus
f8805b9883 prusaslicer 2023-03-31 23:07:10 +02:00
2c2f9e857e revision: gpu antisag bracket 2023-03-29 09:45:54 +02:00
ef13e277c7 add: gpu antisag bracket 2023-03-28 22:32:12 +02:00
c6552c797f add: openscad pipe-like cable wallmount 2023-03-17 00:59:42 +01:00
83ab29095b usb-c-dock: added options for dual holes 2023-03-14 22:39:26 +01:00
zeus
f51f197417 slicerconfig 2023-03-14 21:26:39 +01:00
f929ae9488 merge 2023-03-14 20:59:20 +01:00
ec52e9703a merge 2023-03-14 20:58:44 +01:00
cf524d52a9 add: openscad usb-c-wallmount 2023-03-14 20:55:48 +01:00
zeus
09230add3b vscode 2022-09-30 20:50:35 +02:00
zeus
06dc1b6287 gitignore 2022-09-30 20:48:51 +02:00
zeus
c22b714a0f prusaslicer 2022-09-30 20:42:49 +02:00
1e0d0c482e prusa 2.5 config 2022-09-30 20:01:50 +02:00
ee0b497fd2 prusaslicer 2022-09-30 19:55:33 +02:00
352bbdd459 pruda cache 2022-09-30 19:54:33 +02:00
a972c2f796 prusaslicer gitignore 2022-09-30 19:53:29 +02:00
e600f934f7 prusaslicer gitignore 2022-09-30 19:52:22 +02:00
7ca9ac3331 reorder supermicro-sc808t stuff 2022-09-30 19:51:14 +02:00
501be215b8 k3s, portainer, jupyter. added some STLs 2022-09-29 18:58:02 +02:00
6b4245b457 added better photos 2022-09-27 19:54:24 +02:00
2a05bef4f2 added better photos 2022-09-27 19:14:39 +02:00
d67a700515 Merge branch 'main' of ssh://git.kostianix.de:2222/zeus/3d-stuff into main 2022-09-27 08:50:02 +02:00
01316aba9a added rancher 2022-09-27 08:49:49 +02:00
zeus
eb1321b190 typo 2022-09-26 20:22:37 +02:00
3e4fb29057 added anaconda, jupyter notebook and angular 2022-09-26 10:24:23 +02:00
1f5e346ea2 folder structure, more STLs with magnets 2022-09-25 23:22:08 +02:00
704f690e8d more STLs 2022-09-24 18:37:48 +02:00
ef11bb8fcf gitignore 2022-09-24 15:13:32 +02:00
d804f9a8fe more hex logos, images, STLs 2022-09-24 14:26:46 +02:00
2064260e38 more hex logos, images, STLs 2022-09-24 11:25:05 +02:00
0ed55737d9 added hex rack-logos 2022-09-23 23:10:52 +02:00
599f3ffba3 avoid hole overlap 2022-09-22 14:17:59 +02:00
1fcb3fe322 corrected holes 2022-09-21 07:47:54 +02:00
9b4475d1ee wider mounting tab 2022-09-20 23:01:41 +02:00
3ad1b89c3f much less-steep angles 2022-09-20 22:12:14 +02:00
af08abafdd added hdd holder 2022-09-20 19:05:22 +02:00
1349201422 port re-arrangement 2022-09-13 20:41:56 +02:00
71dcf7f68b minor adjustments 2022-09-13 14:58:13 +02:00
beb92d38e0 added Variant with Ports 2022-09-13 11:23:01 +02:00
eb67f83ff7 slight adjustment 2022-09-13 00:15:12 +02:00
01a62c8550 added fanholder-rear 2022-09-12 23:03:20 +02:00
ac83d4d3e8 added fanholder-rear 2022-09-12 22:07:50 +02:00
423d6024ec minor adjustments 2022-09-11 23:54:04 +02:00
d151d33346 added grill version 2022-09-11 21:02:15 +02:00
c322fe63a3 corrected minor errors, added side cuts 2022-09-11 19:44:18 +02:00
zeus
b8ae21eebc corrected minor errors 2022-09-11 18:29:51 +02:00
f1c09f1331 added io-shield and dryfit-test 2022-09-11 17:20:37 +02:00
d0b46b53dd Merge remote-tracking branch 'refs/remotes/origin/main' into main 2022-09-11 13:58:02 +02:00
bf7040a56c fanholder 2022-09-11 13:56:56 +02:00
zeus
1f066465c7 increased TMC current 2022-09-10 15:50:10 +02:00
zeus
0d64af8235 remove slotted 2022-09-10 12:24:21 +02:00
a38e5ef82d remove slotted, minor adjustments 2022-09-10 12:22:39 +02:00
291c636d14 added slot 2022-09-10 12:01:20 +02:00
b7351800d4 sc808 dual fanholder 2022-09-10 11:01:37 +02:00
d95c3af1e3 ssd-holder for backup server 2022-09-09 23:26:32 +02:00
158ffcd669 added img 2022-09-09 13:22:54 +02:00
3554180422 added awesome modular multi-hdd-case 2022-09-09 13:22:30 +02:00
e721eee91d added hallway variant 2022-08-28 15:42:54 +02:00
86151de75e wallplate-lightsocket (livingroom) 2022-08-27 15:46:28 +02:00
6b64a545c7 added shelf-mounting cublets 2022-07-29 17:22:55 +02:00
cb0da133a8 add: xaser3 Mounting-Plate for RGB-Controller 2022-06-18 16:51:58 +02:00
24fadf126b added xaser3 ssd-bracket 2022-06-12 12:20:00 +02:00
f92c257424 ordering files from xaser3-lightpipe 2022-06-12 12:19:34 +02:00
a64a3b308a ordering files from xaser3-feet 2022-06-12 12:17:51 +02:00
bff62d8465 new height for deltazeug because of magnetic printbed 2022-06-05 03:02:53 +02:00
27fea39faa added mirrored feet 2022-06-03 21:18:50 +02:00
d409d93092 xaser3 feet 2022-06-03 21:10:48 +02:00
d15d9be9ba Merge branch 'main' of ssh://git.kostianix.de:2222/zeus/3d-stuff into main 2022-06-01 18:28:22 +02:00
e16d2d4274 added xaser lightpipe 2022-06-01 18:28:04 +02:00
zeus
2711a8101b sunlu filament, gitignore 2022-05-17 23:58:33 +02:00
73571cfcd8 smaller version of gonicus logo 2022-05-17 19:33:44 +02:00
deddc858ce prusa maintenance update 2022-03-04 14:00:37 +01:00
850157062f luefterblende fuer haufen 2022-03-04 14:00:08 +01:00
b465361e37 reworked gonicus logo 2022-03-04 13:59:50 +01:00
zeus
4ce1560100 added parametric magnet-holes 2021-11-27 22:01:53 +01:00
e3574135f9 prusaslicer profiles 2021-11-17 10:26:49 +01:00
aba0916b53 added y-scaling to wargaming base 2021-11-16 20:18:36 +01:00
bcb0ff21d4 added parametric wargaming base 2021-11-11 17:37:34 +01:00
5b39e352a1 prusaslicer config 2021-11-11 17:36:25 +01:00
7cf76fdc9e gitignore 2021-06-16 17:38:49 +02:00
9a0720f7a5 added prusaslicer config folder 2021-06-16 17:37:42 +02:00
76d198a166 added small partes 2021-06-16 16:32:48 +02:00
2fb7ced78f supermicro ODD bracket for 1U and 3U servers 2021-05-28 09:03:56 +02:00
b9eaa7530f added gonicus logo 2021-05-28 09:03:00 +02:00
4d561aa810 adjusted lcd-panel feedrate for E 2021-05-17 23:02:51 +02:00
6323ff9001 minor changes 2021-05-17 23:02:13 +02:00
a285b275b5 added more variants and description 2021-05-17 20:57:48 +02:00
3b28eb0ba3 added more sizes 2021-05-17 18:54:26 +02:00
82cfcf3225 fan holder minor changes 2021-05-16 00:44:18 +02:00
c0c9711cae supermicro fan holder 2021-05-15 22:23:29 +02:00
7acb14127e reordering some files 2021-03-08 16:49:36 +01:00
5fb7f9ebfc reordering some files 2021-03-08 16:49:00 +01:00
363 changed files with 140088 additions and 7293 deletions

0
.gitignore vendored Normal file
View File

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +0,0 @@
- soft pwm for fans to respect sunon 40mm fans
- https://github.com/MarlinFirmware/Marlin/issues/12360
- https://github.com/MarlinFirmware/Marlin/issues/19924
- https://www.3d-druck-community.de/showthread.php?tid=23057

View File

@@ -1,23 +0,0 @@
# Filaments
| Make | Material | Color/Code | Dia | Price/Volume | Notes | 3dprintingdb |
|--- |--- |--- |--- |--: |--- |--- |
| Noulei | PLA | Silk Black / #24 | 1.75mm | 26,99€/1kg | 190°C, better layer bond as other silk filaments from same vendor | N/A |
| Noulei | PLA | Silk Blue / #11 | 1.75mm | 26,99€/1kg | 190°C, Shiny tortoise/light blue | N/A |
| Noulei | PLA | Silk Silver Blue / #14| 1.75mm | 26,99€/1kg | 190°C, Shiny purple | N/A |
| GEEETECH | PLA | Black / 700-001-0426 / Y2005 | 1.75mm | 24,99€/1kg | | N/A |
| GEEETECH | PLA | Silk Silver | 1.75mm | 26,99€/1kg | | N/A |
| TINMORRY | PETG | White | 1,75mm | 18,88€/1kg | 235°C/75°C, very strong layer bond | [link](https://3dprintingdb.com/filament/928/tinmorry-petg-white) |
| DasFilament | PETG | Silber | 1,75mm | 22,37€/850g(refill) | 235°C/75°C, with sparkles | N/A |
| DasFilament | PETG | Saphirblau | 1,75mm | 21,41€/800g | 225°C/75°C, needs less temp than others! | [link](https://3dprintingdb.com/filament/662/das-filament-petg-saphirblau) |
| DasFilament | PETG | Rubinrot | 1,75mm | 18,88€/850g(refill) | TBD | [link](https://3dprintingdb.com/filament/663/das-filament-petg-rubinrot) |
## Next Filaments to test out:
* Prusa PLA
* Galaxy Black
* DasFilament PLA
* Blue Pearl
* DasFilament PETG
* [Opalgrün](https://3dprintingdb.com/filament/661/das-filament-petg-opalgrun)
* Sturmgrau
* Anthrazit V2

View File

@@ -0,0 +1,190 @@
/**
* Genera un contenedor para almacenar discos duros.
*
* @author Joaquín Fernández
* @url https://gitlab.com/joaquinfq/openscad/blob/master/Electronics/HardDisk.scad
* @license CC-BY-NC-4.0
* @see https://www.thingiverse.com/thing:3642857
*/
//---------------------------------------------------------------
// Variables personalizables
//---------------------------------------------------------------
count = 4; // Cantidad de discos duros a almacenar.
desktop = false; // Indica si el disco duro es de PC (3.5") o portátil (2.5").
notch = true; // Indica si se genera el espacio para sacar el disco con el dedo.
padding = 20; // Ancho de la pestaña a usar como separador entre discos.
screws = true; // Indica si se dejan los espacios para los tornillos.
thickness = 2; // Grosor de las paredes del contenedor.
tolerance = 0.9; // Tolerancia a usar en las medidas del disco duro.
model = 5; // Tipo de disco duro (altura estándar):
// 2.5"
// 0: 19.05
// 1: 17.00
// 2: 15.00
// 3: 12.70
// 4: 10.50
// 5: 9.50
// 6: 8.47
// 7: 7.00
// 8: 5.00
// 3.5"
// 0: 42.00
// 1: 26.10
// 2: 17.80
//---------------------------------------------------------------
use <../Modules/Box/rounded.scad>
use <../Modules/Models/SFF/8200.scad>
use <../Modules/Models/SFF/8300.scad>
//---------------------------------------------------------------
// Valores calculados. No tocar sin estar seguro.
//---------------------------------------------------------------
size = desktop
? sff8300(tolerance = tolerance, type = model)
: sff8200(tolerance = tolerance, type = model);
width = size[desktop ? 3 : 4];
height = size[1];
length = size[desktop ? 2 : 6];
dt = 2 * thickness;
d = (height - dt) * 0.7;
dy = height + thickness;
ty = thickness + count * dy;
epsilon = $preview ? 0.01 : 0;
$fn = $preview ? 60 : 180;
/**
* Dibuja el separador de los discos.
*
* @param {Float} thickness Grosor del separador.
* @param {Float} radius Radio a usar para redondear el borde.
* @param {Float} width Ancho del espacio a dejar en el separador.
* @param {Float} length Longitud del espacio a dejar en el separador.
*/
module separator(thickness = thickness, radius = 5, width = width - padding, length = length - padding)
{
_r = radius;
_r2 = _r * _r;
_w = width / 2;
_a1 = _w - _r;
_a2 = _w + _r;
_b = length - _r;
linear_extrude(thickness)
{
polygon(
points = [
[ _a1, 0 ],
for (_x = [ 0 : 0.1 : _r ]) [ _x + _a1, - sqrt(_r2 - pow(_x, 2)) + _r ],
[ _w, _b ],
for (_x = [ - _r : 0.1 : 0 ]) [ _a2 + _x, sqrt(_r2 - pow(_x, 2)) + _b ],
[ _a2, _b + _r ],
[ _a2, _b + 2 * _r ],
[ - _a2, _b + 2 * _r ],
[ - _a2, _b + _r ],
for (_x = [ _r : -0.1 : 0 ]) [ - _a2 + _x, sqrt(_r2 - pow(_x, 2)) + _b ],
[ - _w, _b ],
for (_x = [ _r : -0.1 : 0 ]) [ - (_x + _a1), - sqrt(_r2 - pow(_x, 2)) + _r ],
[ - _a1, 0 ],
]
);
}
}
//---------------------------------------------------------------
// Inicio del script.
//---------------------------------------------------------------
difference()
{
boxRounded(width + dt, ty, length + thickness, 1.2, thickness);
for (n = [ 0 : count - 1 ])
{
translate([ - width / 2, n * dy + thickness - ty / 2, - (length + thickness) / 2 + thickness ])
{
if (desktop)
{
sff8300Model(length + 5, screws ? dt : 0, slot = 5, tolerance = tolerance, type = model);
}
else
{
sff8200Model(length + 5, screws ? dt : 0, slot = 5, tolerance = tolerance, type = model);
}
if (notch)
{
hull()
{
for (_x = [ d + thickness, width - (d + thickness) ])
{
translate([ _x, height / 2, - thickness / 2 ])
{
cylinder(h = 2 * dt, d = d, center = true);
}
}
}
}
if (n)
{
if (padding)
{
translate([ width / 2, dt / 4, padding - dt ])
{
rotate([ 90, 0, 0 ])
{
separator(dt);
}
}
}
else
{
translate([ width / 2, - epsilon, length / 2 ])
{
cube([ width, dt + 2 * epsilon, length ], center = true);
}
}
}
}
}
translate([ 0, 0, (length + thickness) / 2 - dt / 2 + 0.01 ])
{
cube([ width, count * height, dt ], center = true);
}
rotate([90,0,0]){
translate([0,0,-25.8+thickness/2+0.1])cube([100,150,thickness+0.2],center=true);
}
}
hole_dia=4.5;
rotate([90,0,0]){
translate([7.5,0,-25.8+thickness/2+0.1]){
difference(){
cube([110,103.35,thickness+0.2],center=true);
translate([-50,20,0]){
#cylinder(d=hole_dia,h=10,center=true);
translate([0,-64.45,0])#cylinder(d=hole_dia,h=10,center=true);
translate([83.5,20,0])#cylinder(d=hole_dia,h=10,center=true);
}
}
}
//}
}

View File

@@ -0,0 +1,33 @@
/**
* Diversas funciones para detectar el tipo de datos de un valor.
*
* @author Joaquín Fernández
* @license CC-BY-NC-4.0
* @url https://gitlab.com/joaquinfq/openscad/blob/master/Functions/is.scad
*/
/**
* Verifica si el valor es un array
*
* @param value Valor a verificar.
*
* @return `true` si el valor es un array.
*/
function isArray(x) = len(x) != undef && !isString(x);
/**
* Verifica si el valor es un booleano
*
* @param value Valor a verificar.
*
* @return `true` si el valor es un booleano.
*/
function isBool(x) = !isString(x) && (str(x) == "true" || str(x) == "false");
/**
* Verifica si el valor es un texto
*
* @param value Valor a verificar.
*
* @return `true` si el valor es un texto.
*/
function isString(x) = x != undef && len(x) != undef && len(str(x,x)) == len(x) * 2;

View File

@@ -0,0 +1,137 @@
/**
* Módulos para dibujar cajas con bordes redondeados.
*
* @author Joaquín Fernández
* @url https://gitlab.com/joaquinfq/openscad/blob/master/Modules/Box/rounded.scad
* @license CC-BY-NC-4.0
*/
//----------------------------------------------------------
use <../../Functions/is.scad>
//----------------------------------------------------------
/**
* Genera las coordenadas para dibujar un rectángulo con las esquinas redondeadas.
* Cada esquina puede tener un radio diferente.
*
* @param {Float} width Ancho del rectángulo.
* @param {Float} height Alto del rectángulo.
* @param {Float[]} radius Radios a usar para redondear cada esquina.
*/
function boxRoundedRect(width, height, radius = [ 1, 1, 1, 1 ]) = let(
_r = radius[0] == undef
? [ radius, radius, radius, radius ]
: radius
)
[
[
[ 0, height - _r[0] ],
[ _r[0], height - _r[0] ],
[ _r[0], height ],
[ width - _r[1], height ],
[ width - _r[1], height - _r[1] ],
[ width , height - _r[1] ],
[ width , _r[2] ],
[ width - _r[2], _r[2] ],
[ width - _r[2], 0 ],
[ _r[3], 0 ],
[ _r[3], _r[3] ],
[ 0, _r[3] ]
],
[
[ _r[0], height - _r[0] ],
[ width - _r[1], height - _r[1] ],
[ width - _r[2], _r[2] ],
[ _r[3], _r[3] ]
]
];
//----------------------------------------------------------
/**
* Dibuja un bloque con los bordes XY redondeados.
*
* @param {Float} width Ancho del bloque (eje X).
* @param {Float} height Largo del bloque (eje Y).
* @param {Float} length Alto del bloque (eje Z).
* @param {Float|Float[]} radius Radios del borde de cada esquina.
*/
module boxRounded(width, height, length, radius = [ 1, 1, 1, 1 ])
{
if (radius)
{
translate([ - width / 2, - height / 2, - length / 2 ])
{
linear_extrude(length)
{
boxRounded2d(width, height, radius);
}
}
}
else
{
cube([ width, height, length ], center = true);
}
}
//----------------------------------------------------------
/**
* Dibuja un bloque con los bordes XY redondeados.
*
* @param {Float} width Ancho del bloque (eje X).
* @param {Float} height Largo del bloque (eje Y).
* @param {Float|Float[]} radius Radios del borde de cada esquina.
*/
module boxRounded2d(width, height, radius = [ 1, 1, 1, 1 ])
{
// Si se pasa un número, lo convertimos a un array.
_radius = isArray(radius)
? radius
: [ radius, radius, radius, radius ];
_data = boxRoundedRect(width, height, _radius);
polygon(points = _data[0]);
for (_index = [ 0 : 3 ])
{
if (_radius[_index] > 0)
{
translate(_data[1][_index])
{
circle(r = _radius[_index]);
}
}
}
}
//----------------------------------------------------------
/**
* Dibuja un bloque con todos los bordes redondeados.
*
* @param width Ancho del bloque (eje X).
* @param height Largo del bloque (eje Y).
* @param length Alto del bloque (eje Z).
* @param radius Radio del borde.
*/
module boxRounded3d(width, height, length, radius = 1)
{
if (radius > 0)
{
hull()
{
for (z = [ -1, 1 ])
{
for (y = [ -1, 1 ])
{
for (x = [ -1, 1 ])
{
translate([
x * (width / 2 - radius),
y * (height / 2 - radius),
z * (length / 2 - radius)
])
{
sphere(r = radius, center = true);
}
}
}
}
}
}
else
{
cube([ width, height, length ], center = true);
}
}

View File

@@ -0,0 +1,76 @@
/**
* Genera una bandeja para insertar un modelo.
*
* @author Joaquín Fernández
* @url https://gitlab.com/joaquinfq/openscad/blob/master/Modules/Box/tray.scad
* @license CC-BY-NC-4.0
*/
//----------------------------------------------------------
/**
* Permite dibujar una bandeja y decidir cuáles caras eliminar.
*
* Los lados de la bandeja se enumeran de la siguiente manera (con respecto al plano XZ):
*
* - a : Parte trasera.
* - b : Parte inferior.
* - l : Parte izquierda.
* - r : Parte derecha.
* - t : Parte superior.
*
* @param {Float} width Anchura de la bandeja a generar (eje X).
* @param {Float} height Altura de la bandeja a generar (eje Y).
* @param {Float} length Longitud de la bandeja a generar (eje Z).
* @param {Float} thickness Grosor de las paredes de la bandeja.
* @param {Boolean} sides Lados de la bandeja a omitir.
*/
module boxTray(width, height, length, thickness = 5, sides = [])
{
_t = 2 * thickness;
difference()
{
cube([ width + _t, height + _t, length + thickness ]);
translate([ thickness, thickness, 0 ])
{
if ($children)
{
children();
}
else
{
cube([ width, height, length ]);
}
}
for (_s = sides)
{
if (_s == "a")
{
translate([ 0, 0, length ])
{
cube([ width + _t, height + _t, _t ]);
}
}
else if (_s == "b")
{
cube([ width + _t, thickness, length + _t ]);
}
else if (_s == "l")
{
translate([ width + thickness, 0, 0 ])
{
cube([ thickness, height + _t, length + _t ]);
}
}
else if (_s == "r")
{
cube([ thickness, height + _t, length + _t ]);
}
else if (_s == "t")
{
translate([ 0, height + thickness, 0 ])
{
cube([ width + _t, thickness, length + _t ]);
}
}
}
}
}

View File

@@ -0,0 +1,152 @@
/**
* Modelos y variables según la especificación SFF-8200.
*
* @author Joaquín Fernández
* @url https://gitlab.com/joaquinfq/openscad/blob/master/Modules/Models/SFF/8200.scad
* @license CC-BY-NC-4.0
*
* @see SFF-8200 2.5" Form Factor Drives
*/
//----------------------------------------------------------
use <../../Box/tray.scad>
use <../box.scad>
//----------------------------------------------------------
/**
* Devuelve las especificaciones de las medidas según SFF-8200.
*
* @param {Float} tolerance Tolerancia a usar para ajustar las medidas.
* @param {Integer} type Tipo de unidad (0: pequeña, 1: mediana, 2: grande).
*
* @return {Float[]}
*/
function sff8200(tolerance = 0, type = 0) = [
3.00, // Diámetro del tornillo
(
type == 0
? 19.05
: type == 1
? 17.00
: type == 2
? 15.00
: type == 3
? 12.70
: type == 4
? 10.50
: type == 5
? 9.50
: type == 6
? 8.47
: type == 7
? 7.00
: 5.00
) + tolerance,
0.00,
0.50,
69.85 + tolerance,
0.25,
100.45 + tolerance,
undef,
undef,
undef,
100.20 + tolerance, // #10
100.50 + tolerance,
110.20 + tolerance,
undef,
undef,
undef,
undef,
undef,
undef,
undef,
undef, // #20
undef,
undef,
3.00 + tolerance / 2,
34.93,
38.10,
undef,
0.50,
4.07 + tolerance / 2,
61.72,
34.93, // #30
38.10,
undef,
0.50,
undef,
undef,
undef,
8.00,
3.00,
undef,
undef, // #40
2.50,
undef,
undef,
undef,
undef,
undef,
undef,
undef,
undef,
14.00 + tolerance / 2, // #50
90.60 + tolerance / 2,
14.00 + tolerance / 2,
90.60 + tolerance / 2
];
//----------------------------------------------------------
/**
* Dibuja un modelo de una unidad de 3.5" según la especificación SFF-8200.
*
* Este modelo permite extraer el volumen posteriormente para crear una ranura
* como las usadas en las cajas de PCs.
*
* @param {Float} length Longitud de la unidad a generar.
* @param {Float} thickness Grosor del bloque donde se insertará el modelo.
* @param {Float} screw Diámetro del tornillo a usar.
* @param {Float} slot Longitud de la ranura donde se insertarán los tornillos.
* @param {Float} tolerance Valor a usar para ajustar las medidas estándar.
* @param {Integer} type Tipo de unidad (0: pequeña, 1: mediana, 2: grande).
*/
module sff8200Model(length = 0, thickness = 5, screw = 0, slot = 15, tolerance = 0.3, type = 0)
{
_A = sff8200(tolerance, type);
modelBox(
_A[4],
_A[1],
length ? length : _A[6],
thickness,
screw ? screw : _A[0],
slot,
[
[ _A[23], _A[6] - _A[52] ],
[ _A[23], _A[6] - _A[53] ]
],
[
[ _A[28], _A[6] - _A[50] ],
[ _A[28], _A[6] - _A[51] ],
[ _A[4] - _A[28], _A[6] - _A[50] ],
[ _A[4] - _A[28], _A[6] - _A[51] ]
]
);
}
//----------------------------------------------------------
/**
* Dibuja una bandeja que puede insertarse en una ranura donde va una unidad de 3.5".
*
* @param {Float} length Longitud de la unidad a generar.
* @param {Float} thickness Grosor del bloque donde se insertará el modelo.
* @param {Float} screw Diámetro del tornillo a usar.
* @param {Float} slot Longitud de la ranura donde se insertarán los tornillos.
* @param {Float} tolerance Valor a usar para ajustar las medidas estándar.
* @param {Boolean} sides Lados a eliminar de la bandeja.
* @param {Integer} type Define la altura según el tipo de unidad (0: más grande, 8: más pequeña).
*/
module sff8200Tray(length = 0, thickness = 5, screw = 0, slot = 15, tolerance = 0.3, sides = [ "a", "t" ], type = 0)
{
_A = sff8200(tolerance, type);
boxTray(_A[4], _A[1], length ? length : _A[6], thickness, sides)
{
sff8200Model(length, thickness, screw ? screw : _A[0], slot, tolerance, type);
}
}
//sff8200Tray();

View File

@@ -0,0 +1,95 @@
/**
* Modelos y variables según la especificación SFF-8300.
*
* @author Joaquín Fernández
* @url https://gitlab.com/joaquinfq/openscad/blob/master/Modules/Models/SFF/8300.scad
* @license CC-BY-NC-4.0
*
* @see SFF-8300 3.5" Form Factor Drives
*/
//----------------------------------------------------------
use <../../Box/tray.scad>
use <../box.scad>
//----------------------------------------------------------
/**
* Devuelve las especificaciones de las medidas según SFF-8300.
*
* @param {Float} tolerance Tolerancia a usar para ajustar las medidas.
* @param {Integer} type Tipo de unidad (0: pequeña, 1: mediana, 2: grande).
*
* @return {Float[]}
*/
function sff8300(tolerance = 0, type = 1) = [
3.00, // Diámetro del tornillo
type == 0 ? 42.00 : (type == 1 ? 26.10 : 17.80) + tolerance,
147.00 + tolerance,
101.60 + tolerance,
95.25 + tolerance,
3.18,
44.45 + tolerance / 2,
41.28 + tolerance / 2,
28.50 + tolerance / 2,
101.60 + tolerance / 2,
6.35 + tolerance / 2,
0.25,
0.50,
76.20 + tolerance / 2
];
//----------------------------------------------------------
/**
* Dibuja un modelo de una unidad de 3.5" según la especificación SFF-8300.
*
* Este modelo permite extraer el volumen posteriormente para crear una ranura
* como las usadas en las cajas de PCs.
*
* @param {Float} length Longitud de la unidad a generar.
* @param {Float} thickness Grosor del bloque donde se insertará el modelo.
* @param {Float} screw Diámetro del tornillo a usar.
* @param {Float} slot Longitud de la ranura donde se insertarán los tornillos.
* @param {Float} tolerance Valor a usar para ajustar las medidas estándar.
* @param {Integer} type Tipo de unidad (0: pequeña, 1: mediana, 2: grande).
*/
module sff8300Model(length = 0, thickness = 5, screw = 0, slot = 15, tolerance = 0.3, type = 0)
{
_A = sff8300(tolerance, type);
modelBox(
_A[3],
_A[1],
length ? length : _A[2],
thickness,
screw ? screw : _A[0],
slot,
[
[ _A[10], _A[2] - _A[8] ],
[ _A[10], _A[2] - _A[8] - _A[9] ]
],
[
[ _A[5], _A[2] - _A[7] ],
[ _A[5], _A[2] - _A[7] - _A[6] ],
[ _A[5], _A[2] - _A[7] - _A[13] ],
[ _A[3] - _A[5], _A[2] - _A[7] ],
[ _A[3] - _A[5], _A[2] - _A[7] - _A[6] ],
[ _A[3] - _A[5], _A[2] - _A[7] - _A[13] ]
]
);
}
//----------------------------------------------------------
/**
* Dibuja una bandeja que puede insertarse en una ranura donde va una unidad de 3.5".
*
* @param {Float} length Longitud de la unidad a generar.
* @param {Float} thickness Grosor del bloque donde se insertará el modelo.
* @param {Float} screw Diámetro del tornillo a usar.
* @param {Float} slot Longitud de la ranura donde se insertarán los tornillos.
* @param {Float} tolerance Valor a usar para ajustar las medidas estándar.
* @param {Boolean} sides Lados a eliminar de la bandeja.
* @param {Integer} type Define la altura según el tipo de unidad (0: grande, 1: mediana, 2: pequeña).
*/
module sff8300Tray(length = 0, thickness = 5, screw = 0, slot = 15, tolerance = 0.3, sides = [ "a", "t" ], type = 1)
{
_A = sff8300(tolerance, type);
boxTray(_A[3], _A[1], length ? length : _A[2], thickness, sides)
{
sff8300Model(length, thickness, screw ? screw : _A[0], slot, tolerance, type);
}
}

View File

@@ -0,0 +1,82 @@
/**
* Modelo que dibuja una caja que puede tener tornillos y ranuras y que
* puede usarse como un negativo sobre otra caja y obtener la diferencia.
*
* @author Joaquín Fernández
* @url https://gitlab.com/joaquinfq/openscad/blob/master/Modules/Models/box.scad
* @license CC-BY-NC-4.0
*
* @param {Float} width Anchura del modelo a generar.
* @param {Float} height Altura del modelo a generar.
* @param {Float} length Longitud del modelo a generar.
* @param {Float} thickness Grosor del bloque donde se insertará el modelo.
* @param {Float} screw Diámetro del tornillo a usar.
* @param {Float} slot Longitud de la ranura donde se insertarán los tornillos.
* @param {Float} tolerance Valor a usar para ajustar las medidas estándar.
* @param {Float[]} side Coordenadas de los agujeros laterales.
* @param {Float[]} bottom Coordenadas de los agujeros inferiores.
*/
module modelBox(width, height, length, thickness, screw = 0, slot = 0, side = [], bottom = [])
{
cube([ width, height, length ]);
// Agujeros laterales
for (_side = side)
{
if (slot)
{
hull()
{
for (_n = [ - slot / 2, slot / 2 ])
{
translate([ width / 2, _side[0], _side[1] + _n ])
{
rotate([ 0, 90, 0 ])
{
cylinder(d = screw, h = width + thickness * 2, center = true);
}
}
}
}
}
else
{
translate([ width / 2, _side[0], _side[1] ])
{
rotate([ 0, 90, 0 ])
{
cylinder(d = screw, h = width + thickness * 2, center = true);
}
}
}
}
// Agujeros inferiores
for (_bottom = bottom)
{
if (slot)
{
hull()
{
for (_n = [ - slot / 2, slot / 2 ])
{
translate([ width - _bottom[0], 0, _bottom[1] + _n ])
{
rotate([ 90, 0, 0 ])
{
cylinder(d = screw, h = thickness);
}
}
}
}
}
else
{
translate([ width - _bottom[0], 0, _bottom[1] ])
{
rotate([ 90, 0, 0 ])
{
cylinder(d = screw, h = thickness);
}
}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
id="svg1"
width="501.33334"
height="178.66667"
viewBox="0 0 501.33334 178.66667"
sodipodi:docname="haystack_logo_final.svg"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showguides="true"
inkscape:zoom="3.2546641"
inkscape:cx="109.84236"
inkscape:cy="69.899687"
inkscape:window-width="5120"
inkscape:window-height="1372"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g1">
<sodipodi:guide
position="154.87316,107.74798"
orientation="0,-1"
id="guide1"
inkscape:locked="false" />
<sodipodi:guide
position="408.0677,50.320605"
orientation="0,-1"
id="guide3"
inkscape:locked="false" />
</sodipodi:namedview>
<g
inkscape:groupmode="layer"
inkscape:label="Image"
id="g1">
<path
style="fill:#000000"
d="m 125.31473,153.15745 c 0.32361,-24.84341 -1.74527,-36.06144 -15.89944,-59.045268 l -8.85996,-14.386967 7.07083,-9.514556 11.98249,18.707475 c 7.74992,12.099446 10.95559,19.597976 13.01655,26.841556 0,0 2.84053,10.88974 3.5787,16.45382 0.94049,7.08905 1.0643,21.42708 1.0643,21.42708 l -0.23925,21.48138 -12,-0.0257 z m 82.26852,-25.32179 c -6.79765,-2.22596 -13.88764,-8.07626 -13.88764,-8.07626 -0.0381,-0.0342 7.06667,-8.68224 7.06667,-8.68224 l 3.97035,2.82714 c 4.76565,3.39344 14.1229,5.58756 17.8505,4.92645 7.75546,-1.37545 11.77629,-9.95953 -6.04897,-13.2625 -8.90014,-1.64917 -18.51381,-7.201061 -20.27411,-13.076441 -1.91807,-6.401928 -0.98605,-10.686611 3.47881,-15.992791 4.2928,-5.101702 11.3218,-5.722837 18.4607,-5.622832 5.37668,0.07532 18.16272,6.300787 18.16272,6.300787 -1.16603,2.619741 -5.57525,9.875482 -5.52415,9.753794 l -5.18481,-2.64509 c -5.38579,-2.747624 -11.35893,-3.054762 -14.85768,-2.011576 -3.63087,1.08258 -4.75459,4.871973 -3.5225,7.684615 1.37813,3.146015 7.67926,3.591052 14.93801,6.045572 6.82697,2.308517 13.24941,4.392612 16.42394,10.862102 1.23243,2.51163 0.96349,9.02362 -0.96472,12.17885 -5.56569,9.10741 -17.21942,13.00406 -30.08712,8.79042 z m 166.0103,-21.46368 c -1.48309,-5.04618 -0.96418,-10.512542 0.0329,-13.776365 2.71295,-8.880641 8.85017,-17.298301 16.66143,-19.951358 10.42808,-3.541848 21.40674,-2.539274 30.4917,2.764525 l 4.96483,2.898471 -8.1308,9.863975 -4.81172,-3.265321 c -11.86273,-8.050262 -27.90952,0.261204 -26.96689,14.611162 1.02816,15.652231 18.50059,21.256421 27.6218,13.634681 l 3.94927,-3.30003 8.74709,8.96434 -3.70726,3.26268 c -7.06847,6.2208 -20.648,8.33008 -30.89871,4.70033 -5.42498,-1.92097 -14.3365,-8.0999 -17.95364,-20.40709 z M 1.6956149,99.640587 V 70.97392 h 6.666667 6.6666671 V 82.307253 93.640587 H 26.362282 37.695616 V 82.307253 70.97392 h 6.666667 6.666666 V 99.640587 128.30725 H 44.362283 37.695616 V 116.97392 105.64059 H 26.362282 15.028949 v 11.33333 11.33333 H 8.3622819 1.6956149 Z M 63.744232,123.30725 C 66.59586,106.25446 72.803233,91.979161 86.155074,71.7683 99.916134,50.938014 102.37972,46.387822 106.4375,34.307252 c 2.60391,-7.752186 3.60534,-13.490071 3.66513,-21.000001 l 0.0823,-10.3333329 h 5.75535 5.75536 V 13.360453 c 0,19.163686 -9.07772,38.383291 -27.068015,65.884254 -5.82228,8.900256 -7.72078,14.126075 -8.14179,14.284256 0,0 10.279841,0.111624 14.992315,0.111624 l 6.36555,11.794273 c -9.122675,0.28357 -18.252151,0.20573 -27.378076,0.20573 l -2.051657,6.90866 c -1.128409,3.79977 -2.231702,9.42558 -2.377543,10.69079 l -0.584097,5.06721 H 62.908115 Z m 87.284718,-5.92984 V 106.44756 L 140.36228,89.560489 C 134.49561,80.272597 129.6413,70.954628 129.6413,70.954628 c 3.02508,0.01727 3.48035,0.01929 14.21082,0.01929 l 6.52282,11.287817 c 3.58755,6.2083 6.78856,11.022071 7.11337,10.697268 4.54102,-6.974921 8.67985,-14.884864 12.95875,-22.024512 0,0 0.0136,-0.09172 14.09563,0.02395 -3.02169,6.848287 -7.33158,12.932566 -11.34972,19.234764 l -10.16402,15.885945 v 11.11405 11.11405 h -6 -6 z M 268.36228,105.64059 V 82.97392 h -8.66666 -8.66667 v -6 -6 h 24 24 v 6 6 h -8.66667 -8.66666 v 22.66667 22.66666 h -6.66667 -6.66667 z m 34.44941,22.64966 c 0,0 24.93638,-57.405468 24.88185,-57.405468 h 10.77302 l 25.05122,57.384868 -13.60161,0.0376 -4.40063,-11.8202 -25.49513,0.10667 -3.88035,11.71353 z m 30.04155,-42.965528 c -2.46505,6.333771 -4.90586,12.677133 -7.44293,18.982528 h 14.91306 c -2.51572,-6.317459 -5.04821,-12.628324 -7.47013,-18.982528 z M 443.02895,70.97392 h 12 l 0.1282,24.666667 23.20512,-24.68097 15.9444,0.0144 -22.50614,25.526067 c -0.008,-0.0046 6.09017,8.557266 12.1859,16.807266 l 11.08313,15 h -15.60774 l -17.09955,-23.8 -7.33334,6.96558 v 16.83432 h -12 z M 85.424934,47.905541 C 81.606985,36.351334 82.045145,35.705457 81.718464,29.562339 l -0.0228,-5.255087 h 6 6 l 0.0158,3.666666 c 0.009,2.016667 0.87911,6.910332 1.93423,10.874812 l 1.9184,7.208145 -8.445544,11.929437 -1.62963,-3.83456 z"
id="path1"
sodipodi:nodetypes="ssccssacccssccssssssccsssssssssssccsssccsssscccccccccccccccccccccccscsccccssscccssccsccsccssccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccscccsc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.6 KiB

View File

@@ -0,0 +1,97 @@
// number of fragments | a higher fragment count will result in slower render times '20' is sufficient.
fn = 30; // [0:100]
// "sugar phosphate backbones" | part of helix_base module | if adjusted also consider adjusting 'post_distance_apart' or 'center_bridge_length'.
post_radius = 3.5; // [0:500]
post_hole_radius = 1.25; // [0:500]
// part of helix_base module | if adjusted also consider adjusting 'center_bridge_length'.
post_distance_apart = 15; // [0:500]
// "base pairs" length between "sugar phosphate backbones" | part of helix_base module | if adjusted also consider adjusting 'post_distance_apart'.
center_bridge_length = 24; // [0:500]
// part of helix_base module | thickness of "basepairs" in relevence to the the Y-axis of 'helix_base' before "linear_extrude" is implemented. further explanation is below.
center_bridge_width = .8; // [0:0.1:500]
// 'helix_height' adjusts the height of the linear_extruded 'helix_base' module | 'helix_height, helix_twists, helix_twists' all work hand in hand and should be experimented to fully understand the linear_extrude's nature.
helix_height = 120; // [0:500]
// 'helix_twists' adjusts the degree of twist in the linear_extruded 'helix_base' module.
helix_twists = 400; // [0:3600]
// 'helix_slices' adjusts the number of slices used in the linear_extruded 'helix_base' module | more slices = higher resolution and longer render times, less slices = the contrary | 200 is sufficient.
helix_slices = 600; // [0:500]
// this is fun try changing from 0-3 to scale 'helix_base' as it reaches its specified height in 'helix_height' | '1' = 1to1 scale, 0 = 1to0, 2 = 1to2 scale and so on in sequential order.
helix_scale = 1; // [0:10]
// the radius of the differenced circle that creates the spaces between each "base pair" | if adjusted you may also want to adjust 'center_bridge_length' and 'post_distance_apart'.
spacer_radius = 11.6; // [0:500]
// the height of the differenced circle changing this will result in a visual thickness change, in the Z-axis, of each "basepair".
spacer_height = 4; // [0:550]
// the point in the Z-axis at which the spacers will start appearing | 'spacer_start, spacer_increment_distance, and spacer_increment_height all work together to create the "base pairs/ bridges" that appear between each "sugar phosphate backbone/post".
spacer_start = 0; // [0:550]
// the distance between each spacer changing this will result in a visual thickness change, in the Z-axis, of each "basepair".
spacer_increment_distance = 6; // [0:500]
// the height to which the spacers ascend to and then stop being produced.
spacer_increment_height = helix_height; // [0:500]
// the radius of the circle where the standing platform is located at the base of the helix.
base_platform_radius = 30; // [0:500]
base_platform_inner_radius = 25;
// the height of the above said platform.
base_platform_height = 12; // [0:100]
// the controls the number of sides the platform has, 0 defaults to 'fn'. 3, 4, 5, 6 ...
base_platform_shape = 6; // [0:50]
usb_mount_hole_spacing = 15; // 19-(2*2) ?
usb_mount_hole_dia = 2.0; // ?
usb_height = 4.1;
usb_rectangular_width = 11+1; //presumeably this is 19-4-4 = 11 plus one for wiggle room. needs testing.
module helix_basic(){
translate([-post_distance_apart,0,0]){
difference(){
circle(post_radius,$fn = fn);
circle(post_hole_radius,$fn = fn);
}
}
translate([post_distance_apart,0,0]){
difference(){
circle(post_radius, $fn = fn);
circle(post_hole_radius, $fn = fn);
}
}
square([center_bridge_length,center_bridge_width],center = true);
}
// the basic 2D shape that the helix is extruded upon.
union(){
difference(){
linear_extrude(height = helix_height, twist = helix_twists, slices = helix_slices, scale = helix_scale){
helix_basic();
}
for (a = [ spacer_start : spacer_increment_distance : spacer_increment_height])
translate([0, 0, a]) {
linear_extrude(height = spacer_height, center = true){
circle(spacer_radius, $fn = fn);
}
}
}
rotate([0,0,helix_twists+90+3*post_radius-0.5]){
translate([post_distance_apart,0,helix_height])scale([1,1,0.25])sphere(r = post_radius, $fn = fn);
translate([-post_distance_apart,0,helix_height])scale([1,1,0.25])sphere(r = post_radius, $fn = fn);
}
}
translate([0,0,-base_platform_height/2])difference(){
hull(){ // base
translate([0,0,base_platform_height/3])cylinder(r = base_platform_radius-(base_platform_height/2), h = base_platform_height/3, center = true, $fn = base_platform_shape);
translate([0,0,-base_platform_height/4])cylinder(r = base_platform_radius, h = base_platform_height/2, center = true, $fn = base_platform_shape);
}
translate([post_distance_apart,0,(base_platform_height/2)-(base_platform_height/4)])cylinder(r1 = post_hole_radius*2, r2 = post_hole_radius, h = base_platform_height/2+0.2, center = true, $fn = fn);
translate([-post_distance_apart,0,(base_platform_height/2)-(base_platform_height/4)])cylinder(r1 = post_hole_radius*2, r2 = post_hole_radius, h = base_platform_height/2+0.2, center = true, $fn = fn);
translate([0,0,-base_platform_height/2+0.01])cylinder(r = base_platform_inner_radius, h = base_platform_height, center = true, $fn = base_platform_shape);
translate([0,0,-base_platform_height/2+1-0.01])cylinder(r = base_platform_inner_radius+2, h = 2, center = true, $fn = base_platform_shape);
// todo: add cutout through base for filament-leds, because they don't reach to the bottom!
// usb-module:
translate([0,base_platform_radius*0.75,- base_platform_height/6])rotate([90,0,0])cube([usb_rectangular_width,usb_height,15],center=true); //cylinder(d = usb_height, h = 10, center = true, $fn = fn);
translate([usb_mount_hole_spacing/2,base_platform_radius*0.75,- base_platform_height/6])rotate([90,0,0])cylinder(d = usb_mount_hole_dia, h = 10, center = true, $fn = base_platform_shape);
translate([-usb_mount_hole_spacing/2,base_platform_radius*0.75,- base_platform_height/6])rotate([90,0,0])cylinder(d = usb_mount_hole_dia, h = 10, center = true, $fn = base_platform_shape);
}
// baseplate with pry-hole:
translate([0,0,-15])difference(){
translate([0,0,(-base_platform_height/2+1-0.01)])cylinder(r = base_platform_inner_radius+2, h = 2-0.2, center = true, $fn = base_platform_shape);
for (x = [ base_platform_radius*0.75 , -base_platform_radius*0.75 ])translate([0,x,(-base_platform_height/2+1-0.01)])cube([10,2,2+0.01], center=true);
}

View File

@@ -0,0 +1,134 @@
// number of fragments | a higher fragment count will result in slower render times '20' is sufficient.
fn = 30; // [0:100]
// "sugar phosphate backbones" | part of helix_base module | if adjusted also consider adjusting 'post_distance_apart' or 'center_bridge_length'.
post_radius = 5; // [0:500]
post_hole_radius = 1.75; // [0:500]
// part of helix_base module | if adjusted also consider adjusting 'center_bridge_length'.
post_distance_apart = 25; // [0:500]
// "base pairs" length between "sugar phosphate backbones" | part of helix_base module | if adjusted also consider adjusting 'post_distance_apart'.
center_bridge_length = 55; // [0:500]
// part of helix_base module | thickness of "basepairs" in relevence to the the Y-axis of 'helix_base' before "linear_extrude" is implemented. further explanation is below.
center_bridge_width = 1.6; // [0:0.1:500]
// 'helix_height' adjusts the height of the linear_extruded 'helix_base' module | 'helix_height, helix_twists, helix_twists' all work hand in hand and should be experimented to fully understand the linear_extrude's nature.
helix_height = 165; // [0:500]
// 'helix_twists' adjusts the degree of twist in the linear_extruded 'helix_base' module.
helix_twists = 400; // [0:3600]
// 'helix_slices' adjusts the number of slices used in the linear_extruded 'helix_base' module | more slices = higher resolution and longer render times, less slices = the contrary | 200 is sufficient.
helix_slices = 600; // [0:500]
// this is fun try changing from 0-3 to scale 'helix_base' as it reaches its specified height in 'helix_height' | '1' = 1to1 scale, 0 = 1to0, 2 = 1to2 scale and so on in sequential order.
helix_scale = 1; // [0:10]
// the radius of the differenced circle that creates the spaces between each "base pair" | if adjusted you may also want to adjust 'center_bridge_length' and 'post_distance_apart'.
spacer_radius = 20.25; // [0:500]
// the height of the differenced circle changing this will result in a visual thickness change, in the Z-axis, of each "basepair".
spacer_height = 6; // [0:550]
// the point in the Z-axis at which the spacers will start appearing | 'spacer_start, spacer_increment_distance, and spacer_increment_height all work together to create the "base pairs/ bridges" that appear between each "sugar phosphate backbone/post".
spacer_start = 0; // [0:550]
// the distance between each spacer changing this will result in a visual thickness change, in the Z-axis, of each "basepair".
spacer_increment_distance = 9; // [0:500]
// the height to which the spacers ascend to and then stop being produced.
spacer_increment_height = helix_height; // [0:500]
// the radius of the circle where the standing platform is located at the base of the helix.
base_platform_radius = 52.5; // [0:500]
base_platform_inner_radius = 47.5;
// the height of the above said platform.
base_platform_height = 20; // [0:100]
// the controls the number of sides the platform has, 0 defaults to 'fn'. 3, 4, 5, 6 ...
base_platform_shape = 6; // [0:50]
usb_mount_hole_spacing = 15; // 19-(2*2) ?
usb_mount_hole_dia = 2.0; // ?
usb_height = 4.1;
usb_rectangular_width = 11+1; //presumeably this is 19-4-4 = 11 plus one for wiggle room. needs testing.
text=true;
textdepth=2;
usb=false;
module logo(path,scale){
translate([0,0,0]){
scale([scale,scale,1]){
linear_extrude(textdepth){
import(path,center=true);
}
}
}
}
module helix_basic(){
translate([-post_distance_apart,0,0]){
difference(){
circle(post_radius,$fn = fn);
if(usb){
circle(post_hole_radius,$fn = fn);
}
}
}
translate([post_distance_apart,0,0]){
difference(){
circle(post_radius, $fn = fn);
if(usb){
circle(post_hole_radius, $fn = fn);
}
}
}
square([center_bridge_length,center_bridge_width],center = true);
}
// the basic 2D shape that the helix is extruded upon.
union(){
difference(){
linear_extrude(height = helix_height, twist = helix_twists, slices = helix_slices, scale = helix_scale){
helix_basic();
}
for (a = [ spacer_start : spacer_increment_distance : spacer_increment_height])
translate([0, 0, a]) {
linear_extrude(height = spacer_height, center = true){
circle(spacer_radius, $fn = fn);
}
}
}
// elipsoids on top to cover up the led-holes:
rotate([0,0,helix_twists+90+2.1*post_radius-0.5]){
translate([post_distance_apart,0,helix_height])scale([1,1,0.25])sphere(r = post_radius, $fn = fn);
translate([-post_distance_apart,0,helix_height])scale([1,1,0.25])sphere(r = post_radius, $fn = fn);
}
}
translate([0,0,-base_platform_height/2])difference(){
hull(){ // base
translate([0,0,base_platform_height/3])cylinder(r = base_platform_radius-(base_platform_height/2), h = base_platform_height/3, center = true, $fn = base_platform_shape);
translate([0,0,-base_platform_height/4])cylinder(r = base_platform_radius, h = base_platform_height/2, center = true, $fn = base_platform_shape);
}
if(usb){
translate([post_distance_apart,0,(base_platform_height/2)-(base_platform_height/4)])cylinder(r1 = post_hole_radius*2, r2 = post_hole_radius, h = base_platform_height/2+0.2, center = true, $fn = fn);
translate([-post_distance_apart,0,(base_platform_height/2)-(base_platform_height/4)])cylinder(r1 = post_hole_radius*2, r2 = post_hole_radius, h = base_platform_height/2+0.2, center = true, $fn = fn);
//bottom cutout narrow:
translate([0,0,-base_platform_height/2+0.01])cylinder(r = base_platform_inner_radius, h = base_platform_height, center = true, $fn = base_platform_shape);
//bottom cutout wide:
translate([0,0,-base_platform_height/2+1-0.01])cylinder(r = base_platform_inner_radius+2, h = 2, center = true, $fn = base_platform_shape);
// only draw usb-module-cutouts if desired:
// usb-module:
translate([0,base_platform_radius*0.75,- base_platform_height/6])rotate([90,0,0])cube([usb_rectangular_width,usb_height,15],center=true); //cylinder(d = usb_height, h = 10, center = true, $fn = fn);
// usb-screw-holes:
translate([usb_mount_hole_spacing/2,base_platform_radius*0.75,- base_platform_height/6])rotate([90,0,0])cylinder(d = usb_mount_hole_dia, h = 15, center = true, $fn = base_platform_shape);
translate([-usb_mount_hole_spacing/2,base_platform_radius*0.75,- base_platform_height/6])rotate([90,0,0])cylinder(d = usb_mount_hole_dia, h = 15, center = true, $fn = base_platform_shape);
}
if(text){
rotate([49,0,0]){
translate([0,-23.25,32.35]){
#logo("haystack_logo_final.svg",0.2);
}
}
}
}
// baseplate with pry-hole:
if(usb){
translate([0,0,-15]){
difference(){
translate([0,0,(-base_platform_height/2+1-0.01)])cylinder(r = base_platform_inner_radius+2, h = 2-0.2, center = true, $fn = base_platform_shape);
for (x = [ base_platform_radius*0.80 , -base_platform_radius*0.80 ])translate([0,x,(-base_platform_height/2+1-0.01)])cube([10,2,2+0.01], center=true);
}
}
}

View File

@@ -0,0 +1,25 @@
// some basic 2d-to-3d-extrusion of Vectorfiles
// ###############
h=3; //height
w=20; //width
l=75; //lenght
hd=w/2.25; //hole_dia
emd=1.25; // embossing depth
q=0.01; // minimal value to avoid visual glitches
$fn=100; //resolution
// ###############
difference(){
translate([0,0,h/2]){
hull(){
for(x=[(l-w)/2,-(l-w)/2]){
translate([x,0,0])cylinder(h=h,r=w/2,center=true); // body
}}}
translate([-(l/2)+(w/3),0,h/2]){
cylinder(h=h+q,r=hd/2,center=true); // keychain-hole
}
translate([w/4,0,h-emd]){
scale([0.4,0.4,1]){
linear_extrude(height = emd+q){
import("src/GONICUS-Logo_2022_logo-only-new.svg",center=true); // logo
}}}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.7 KiB

View File

@@ -0,0 +1,158 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="143.12636mm"
height="25.433369mm"
viewBox="0 0 143.12636 25.433369"
version="1.1"
id="svg1"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
sodipodi:docname="GONICUS-Logo_2022_logo-only-new.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
inkscape:zoom="1.036062"
inkscape:cx="377.87314"
inkscape:cy="63.220154"
inkscape:window-width="5120"
inkscape:window-height="1372"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs1">
<clipPath
id="SVGID_2_">
<rect
id="use9"
x="148"
y="229.71001"
width="540.95001"
height="136.57001" />
</clipPath>
<clipPath
id="clipPath1">
<rect
id="use1"
x="148"
y="229.71001"
width="540.95001"
height="136.57001" />
</clipPath>
<clipPath
id="clipPath2">
<rect
id="use2"
x="148"
y="229.71001"
width="540.95001"
height="136.57001" />
</clipPath>
<clipPath
id="clipPath3">
<rect
id="use3"
x="148"
y="229.71001"
width="540.95001"
height="136.57001" />
</clipPath>
<clipPath
id="clipPath4">
<rect
id="use4"
x="148"
y="229.71001"
width="540.95001"
height="136.57001" />
</clipPath>
<clipPath
id="clipPath5">
<rect
id="use5"
x="148"
y="229.71001"
width="540.95001"
height="136.57001" />
</clipPath>
</defs>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-5.0263979,-131.7625)">
<g
id="g2-1"
transform="matrix(0.26458333,0,0,0.26458333,4.9386488,131.58535)"
inkscape:highlight-color="#aaaaaa">
<path
class="st0"
d="m 415.1,265.77 -10.5,58.68 h 26.88 l 10.5,-58.68 z m 6.45,-36.06 -4.13,23.06 h 26.87 l 4.13,-23.06 z"
id="path4-8"
style="display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
transform="translate(-147.66835,-228.54044)" />
<path
style="display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path12-7"
clip-path="url(#SVGID_2_)"
d="m 316.76,324.45 17.09,-94.74 h 48.44 c 0,0 8.38,0.03 13.97,4.53 5.59,4.5 7.09,10.56 7.56,13.88 0.47,3.31 0.53,7.13 -0.63,13.56 -1.16,6.44 -11.31,62.78 -11.31,62.78 h -26.81 l 11.56,-64.41 c 0,0 2.03,-7.16 -6.41,-7.22 -8.44,-0.06 -13.69,-0.06 -13.69,-0.06 l -12.88,71.69 h -26.89 z"
class="st1"
transform="translate(-147.66835,-228.54044)" />
<path
style="display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path14-9"
clip-path="url(#SVGID_2_)"
d="m 622.67,229.71 -17.09,94.74 h -48.44 c 0,0 -8.16,-0.31 -13.97,-4.53 -5.85,-4.26 -7.41,-9.26 -7.88,-12.57 -0.47,-3.31 -0.22,-8.43 0.94,-14.87 1.16,-6.44 11.31,-62.78 11.31,-62.78 h 26.81 l -11.56,64.41 c 0,0 -1.04,7.12 6.41,7.22 8.44,0.11 13.69,0.06 13.69,0.06 l 12.88,-71.69 h 26.9 z"
class="st1"
transform="translate(-147.66835,-228.54044)" />
<path
style="display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path16-2"
clip-path="url(#SVGID_2_)"
d="m 637.22,229.71 h 26.94 c 0,0 -4.98,6.61 0.88,15.46 0,0 17.58,28.39 19.41,31.26 8.35,13.12 4.81,29.5 -8.09,38.49 -8.31,5.79 -15.69,8.75 -30.65,9.73 -7.79,0.51 -31.42,-0.2 -31.42,-0.2 l 4.19,-23.16 c 0,0 20.67,-0.04 22.98,-0.17 7.54,-0.42 12.41,-2.54 14.94,-7.95 2.51,-5.38 -1.07,-11.46 -4.07,-15.71 0,0 -15.42,-23.59 -16.17,-24.98 -0.75,-1.39 -3.92,-5.98 -2.92,-12.56 0.95,-6.23 3.98,-10.21 3.98,-10.21"
class="st1"
transform="translate(-147.66835,-228.54044)" />
<path
style="display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path18-0"
clip-path="url(#SVGID_2_)"
d="m 203.5,260.25 c 0,0 2.03,-7.16 -6.41,-7.22 -4.3,-0.03 -7.77,-0.04 -10.15,-0.05 -3.71,0 -4.06,3.56 -4.06,3.56 l -6.78,37.77 c 0,0 -1.04,7.12 6.41,7.22 4.18,0.06 7.59,0.08 9.95,0.08 3.71,0 4.11,-2.82 4.23,-3.47 0.12,-0.66 0.88,-4.88 0.88,-4.88 h -13.15 l 3.14,-18.67 h 13.36 -0.09 26.84 c -1.51,8.37 -3.38,19.27 -5.11,28.85 -3.27,16.35 -15.77,21.21 -26.93,21.21 h -25.18 c 0,0 -8.17,-0.3 -13.97,-4.52 -5.86,-4.26 -7.41,-9.26 -7.88,-12.57 -0.47,-3.31 -0.22,-8.43 0.94,-14.87 0.74,-4.12 4.26,-23.66 7.35,-40.81 3.07,-14.14 12.46,-21.97 28.77,-21.97 h 23.49 c 0,0 8.37,0.02 13.97,4.52 5.59,4.5 7.09,10.57 7.56,13.88 0.45,3.23 0.53,6.93 -0.54,13.08 H 203.3 Z"
class="st1"
transform="translate(-147.66835,-228.54044)"
sodipodi:nodetypes="ccccccsccccccccsccsccscccccc" />
<path
style="display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path20-2"
clip-path="url(#SVGID_2_)"
d="m 289.97,260.2 -2.58,14.39 c 0,0 -4.14,23.11 -4.22,23.55 -0.12,0.66 -0.52,3.47 -4.23,3.47 -2.36,0 -5.77,-0.02 -9.95,-0.08 -7.45,-0.1 -6.41,-7.22 -6.41,-7.22 l 6.78,-37.77 c 0,0 0.35,-3.56 4.05,-3.56 2.38,0.01 5.85,0.02 10.15,0.05 8.03,0.06 6.41,7.17 6.41,7.17 m 27.19,-11.89 c -0.47,-3.31 -1.97,-9.38 -7.56,-13.88 -5.6,-4.5 -13.97,-4.52 -13.97,-4.52 h -23.49 c -16.31,0 -25.7,7.83 -28.77,21.97 -3.09,17.15 -6.61,36.69 -7.35,40.81 -1.16,6.44 -1.41,11.56 -0.94,14.87 0.47,3.31 2.02,8.31 7.88,12.57 5.8,4.22 13.97,4.52 13.97,4.52 h 25.18 c 11.17,0 23.67,-4.85 26.93,-21.21 1.24,-6.85 2.54,-14.37 3.74,-21.15 l 4.03,-22.09 c 0.87,-5.45 0.77,-8.87 0.35,-11.89"
class="st1"
transform="translate(-147.66835,-228.54044)" />
<path
style="display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1"
id="path22-3"
clip-path="url(#SVGID_2_)"
d="m 498.56,287.81 c -0.93,5.18 -1.78,9.94 -1.82,10.14 -0.12,0.66 -0.52,3.47 -4.23,3.47 -2.36,0 -5.77,-0.02 -9.95,-0.08 -7.45,-0.1 -6.41,-7.22 -6.41,-7.22 l 6.78,-37.77 c 0,0 0.35,-3.56 4.05,-3.56 2.38,0.01 5.85,0.02 10.15,0.05 8.03,0.06 6.41,7.17 6.41,7.17 l -1.14,6.36 h 26.82 l 1.16,-6.36 c 0.87,-5.45 0.77,-8.87 0.35,-11.89 -0.47,-3.31 -1.97,-9.38 -7.56,-13.88 -5.6,-4.5 -13.97,-4.52 -13.97,-4.52 h -23.49 c -16.31,0 -25.7,7.83 -28.77,21.97 -3.09,17.15 -6.61,36.69 -7.35,40.81 -1.16,6.44 -1.41,11.56 -0.94,14.87 0.47,3.31 2.02,8.31 7.88,12.57 5.8,4.22 13.97,4.52 13.97,4.52 h 25.18 c 11.17,0 23.67,-4.85 26.93,-21.21 0.9,-4.97 1.83,-10.29 2.73,-15.43 h -26.78 z"
class="st1"
transform="translate(-147.66835,-228.54044)" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@@ -0,0 +1,109 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xml:space="preserve"
style="enable-background:new 0 0 841.89 595.28;"
viewBox="0 0 841.89 595.28"
y="0px"
x="0px"
id="Ebene_1"
version="1.1"
sodipodi:docname="GONICUS-Logo_2022_logo-only.svg"
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="1.9537024"
inkscape:cx="420.99555"
inkscape:cy="297.64001"
inkscape:window-width="5120"
inkscape:window-height="1372"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="Ebene_1" /><metadata
id="metadata33"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
id="defs31">
<defs
id="defs7">
<rect
id="SVGID_1_"
x="148"
y="229.71"
width="540.95"
height="136.57" />
</defs>
<clipPath
id="SVGID_2_">
<use
xlink:href="#SVGID_1_"
style="overflow:visible;"
id="use9" />
</clipPath>
</defs>
<style
id="style2"
type="text/css">
.st0{fill:#213A8F;}
.st1{clip-path:url(#SVGID_2_);fill:#213A8F;}
</style>
<g
id="g861"
style="fill:#000000"><path
class="st0"
d="M415.1,265.77l-10.5,58.68h26.88l10.5-58.68H415.1z M421.55,229.71l-4.13,23.06h26.87l4.13-23.06H421.55z"
id="path4"
style="fill:#000000" /><path
style="fill:#000000"
id="path12"
clip-path="url(#SVGID_2_)"
d="m 316.76,324.45 17.09,-94.74 h 48.44 c 0,0 8.38,0.03 13.97,4.53 5.59,4.5 7.09,10.56 7.56,13.88 0.47,3.31 0.53,7.13 -0.63,13.56 -1.16,6.44 -11.31,62.78 -11.31,62.78 h -26.81 l 11.56,-64.41 c 0,0 2.03,-7.16 -6.41,-7.22 -8.44,-0.06 -13.69,-0.06 -13.69,-0.06 l -12.88,71.69 h -26.89 z"
class="st1" /><path
style="fill:#000000"
id="path14"
clip-path="url(#SVGID_2_)"
d="m 622.67,229.71 -17.09,94.74 h -48.44 c 0,0 -8.16,-0.31 -13.97,-4.53 -5.85,-4.26 -7.41,-9.26 -7.88,-12.57 -0.47,-3.31 -0.22,-8.43 0.94,-14.87 1.16,-6.44 11.31,-62.78 11.31,-62.78 h 26.81 l -11.56,64.41 c 0,0 -1.04,7.12 6.41,7.22 8.44,0.11 13.69,0.06 13.69,0.06 l 12.88,-71.69 h 26.9 z"
class="st1" /><path
style="fill:#000000"
id="path16"
clip-path="url(#SVGID_2_)"
d="m 637.22,229.71 h 26.94 c 0,0 -4.98,6.61 0.88,15.46 0,0 17.58,28.39 19.41,31.26 8.35,13.12 4.81,29.5 -8.09,38.49 -8.31,5.79 -15.69,8.75 -30.65,9.73 -7.79,0.51 -31.42,-0.2 -31.42,-0.2 l 4.19,-23.16 c 0,0 20.67,-0.04 22.98,-0.17 7.54,-0.42 12.41,-2.54 14.94,-7.95 2.51,-5.38 -1.07,-11.46 -4.07,-15.71 0,0 -15.42,-23.59 -16.17,-24.98 -0.75,-1.39 -3.92,-5.98 -2.92,-12.56 0.95,-6.23 3.98,-10.21 3.98,-10.21"
class="st1" /><path
style="fill:#000000"
id="path18"
clip-path="url(#SVGID_2_)"
d="m 203.5,260.25 c 0,0 2.03,-7.16 -6.41,-7.22 -4.3,-0.03 -7.77,-0.04 -10.15,-0.05 -3.71,0 -4.06,3.56 -4.06,3.56 l -6.78,37.77 c 0,0 -1.04,7.12 6.41,7.22 4.18,0.06 7.59,0.08 9.95,0.08 3.71,0 4.11,-2.82 4.23,-3.47 0.12,-0.66 0.88,-4.88 0.88,-4.88 h -13.15 l 3.14,-18.67 h 13.36 -0.09 26.84 c -1.51,8.37 -3.38,19.27 -5.11,28.85 -3.27,16.35 -15.77,21.21 -26.93,21.21 h -25.18 c 0,0 -8.17,-0.3 -13.97,-4.52 -5.86,-4.26 -7.41,-9.26 -7.88,-12.57 -0.47,-3.31 -0.22,-8.43 0.94,-14.87 0.74,-4.12 4.26,-23.66 7.35,-40.81 3.07,-14.14 12.46,-21.97 28.77,-21.97 h 23.49 c 0,0 8.37,0.02 13.97,4.52 5.59,4.5 7.09,10.57 7.56,13.88 0.45,3.23 0.53,6.93 -0.54,13.08 H 203.3 Z"
class="st1" /><path
style="fill:#000000"
id="path20"
clip-path="url(#SVGID_2_)"
d="m 289.97,260.2 -2.58,14.39 c 0,0 -4.14,23.11 -4.22,23.55 -0.12,0.66 -0.52,3.47 -4.23,3.47 -2.36,0 -5.77,-0.02 -9.95,-0.08 -7.45,-0.1 -6.41,-7.22 -6.41,-7.22 l 6.78,-37.77 c 0,0 0.35,-3.56 4.05,-3.56 2.38,0.01 5.85,0.02 10.15,0.05 8.03,0.06 6.41,7.17 6.41,7.17 m 27.19,-11.89 c -0.47,-3.31 -1.97,-9.38 -7.56,-13.88 -5.6,-4.5 -13.97,-4.52 -13.97,-4.52 h -23.49 c -16.31,0 -25.7,7.83 -28.77,21.97 -3.09,17.15 -6.61,36.69 -7.35,40.81 -1.16,6.44 -1.41,11.56 -0.94,14.87 0.47,3.31 2.02,8.31 7.88,12.57 5.8,4.22 13.97,4.52 13.97,4.52 h 25.18 c 11.17,0 23.67,-4.85 26.93,-21.21 1.24,-6.85 2.54,-14.37 3.74,-21.15 l 4.03,-22.09 c 0.87,-5.45 0.77,-8.87 0.35,-11.89"
class="st1" /><path
style="fill:#000000"
id="path22"
clip-path="url(#SVGID_2_)"
d="m 498.56,287.81 c -0.93,5.18 -1.78,9.94 -1.82,10.14 -0.12,0.66 -0.52,3.47 -4.23,3.47 -2.36,0 -5.77,-0.02 -9.95,-0.08 -7.45,-0.1 -6.41,-7.22 -6.41,-7.22 l 6.78,-37.77 c 0,0 0.35,-3.56 4.05,-3.56 2.38,0.01 5.85,0.02 10.15,0.05 8.03,0.06 6.41,7.17 6.41,7.17 l -1.14,6.36 h 26.82 l 1.16,-6.36 c 0.87,-5.45 0.77,-8.87 0.35,-11.89 -0.47,-3.31 -1.97,-9.38 -7.56,-13.88 -5.6,-4.5 -13.97,-4.52 -13.97,-4.52 h -23.49 c -16.31,0 -25.7,7.83 -28.77,21.97 -3.09,17.15 -6.61,36.69 -7.35,40.81 -1.16,6.44 -1.41,11.56 -0.94,14.87 0.47,3.31 2.02,8.31 7.88,12.57 5.8,4.22 13.97,4.52 13.97,4.52 h 25.18 c 11.17,0 23.67,-4.85 26.93,-21.21 0.9,-4.97 1.83,-10.29 2.73,-15.43 h -26.78 z"
class="st1" /></g>
</svg>

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@@ -1,7 +1,7 @@
// some basic 2d-to-2d-extrusion of DXF-Vectorfiles // some basic 2d-to-2d-extrusion of DXF-Vectorfiles
// by zeus - zeus@ctdo.de - CC-BY-NC-4.0 // by zeus - zeus@ctdo.de - CC-BY-NC-4.0
// -> https://www.thingiverse.com/zeus // -> https://www.thingiverse.com/zeus
// -> https://github.com/zeus86 // -> https://git.kostianix.de/zeus/3d-stuff
// 2015-05-05 // 2015-05-05
h=5; h=5;
@@ -11,4 +11,4 @@ translate([92.5,115,-h/2*1]){
scale([1.0,1.5,1]) cylinder(r=90.0, h=h/2*1); scale([1.0,1.5,1]) cylinder(r=90.0, h=h/2*1);
} }
scale([0.4,0.4,1])#linear_extrude(height = h/2*1) import("rose2.dxf"); scale([0.4,0.4,1])#linear_extrude(height = h/2*1) import("src/rose2.dxf");

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@@ -1,7 +1,7 @@
// some basic 2d-to-3d-extrusion of Vectorfiles // some basic 2d-to-3d-extrusion of Vectorfiles
// by zeus - zeus@ctdo.de - CC-BY-NC-4.0 // by zeus - zeus@ctdo.de - CC-BY-NC-4.0
// -> https://www.thingiverse.com/zeus // -> https://www.thingiverse.com/zeus
// -> https://github.com/zeus86 // -> https://git.kostianix.de/zeus/3d-stuff
// 2021-02-18 // 2021-02-18
// ############### // ###############
h=4; //height h=4; //height
@@ -21,7 +21,7 @@ difference(){
translate([w/3,0,h-emd]){ translate([w/3,0,h-emd]){
scale([0.66,0.66,0.66]){ scale([0.66,0.66,0.66]){
linear_extrude(height = h/2*1){ linear_extrude(height = h/2*1){
import("snakemake_sw.svg",center=true); import("src/snakemake_sw.svg",center=true);
} }
} }
} }

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

View File

@@ -0,0 +1,62 @@
// auto-lüfterschlitz-einsatz-mopped
//#######################################
// vars:
plate_h=54; // frontplatte, höhe
plate_w=196; // frontplatte, breite
tab_depth=20; // tiefe der seitlichen flügel
mt=3; // materialstärke
pin_t=4; // länge des loch-pins
hole_dia=9.5; // durchmesser befestigungsloch
hole_depth=11.75; // distanz tiefe der befestigungsbohrung, mittenabstand
instrument_dia=52; // durchmesser einlass für instrument
instrument_count=3; // anzahl einlässe
instrument_h=20; // hülsentiefe für einlässe
offset=1.5; // x und y überstand der Platte
$fn=100; // detailgrad
//#######################################
// model:
module plate(){
translate([-plate_w/2-offset,-plate_h/2-offset,-mt/2]){
cube([plate_w+(2*offset),plate_h+(2*offset),mt]);
// left tab
translate([offset,2*mt+offset,mt]) {
union(){
cube([mt,plate_h-4*mt,tab_depth]);
translate([-pin_t/2,(plate_h-4*mt)/2,hole_depth])rotate([0,90,0])cylinder(h=pin_t,r=hole_dia/2,center=true);
}
}
// right tab
translate([plate_w-offset,2*mt+offset,mt]) {
union(){
cube([mt,plate_h-4*mt,tab_depth]);
translate([pin_t/2+mt,(plate_h-4*mt)/2,hole_depth])rotate([0,90,0])cylinder(h=pin_t,r=hole_dia/2,center=true);
}
}
}
}
module insert_hole(){
translate([0,0,-mt/2-0.1])cylinder(r=instrument_dia/2+mt/2,h=mt+0.2);
}
module insert(){
difference(){
cylinder(r=instrument_dia/2+mt/2,h=instrument_h,center=true);
cylinder(r=instrument_dia/2,h=instrument_h+0.1,center=true);
}
}
module complete_model(){
plate();
}
difference(){
complete_model();
insert_hole();
translate([plate_w*0.33,0,0])insert_hole();
translate([-(plate_w*0.33),0,0])insert_hole();
}
translate([0,0,instrument_h/2-mt/2]){
insert();
translate([plate_w*0.33,0,0])insert();
translate([-(plate_w*0.33),0,0])insert();
}

Binary file not shown.

View File

@@ -0,0 +1,23 @@
// rgb and fancontroller casing for esp with wled to drive computer-rbg-gear
// by zeus - cc4.0-by-nc-sa - 2022-04-30
// ##################################################
// Variables
case_w=;
case_l=;
case_h_btm=;
mt=3;
fan_cutout_w=; // 4-pin pwm-headers, 90° angled
fan_cutout_h=;
fan_cutout_top_w=; // cutout for the retention-clip on top
fan_cutout_top_d=; // ~ depth
rgb_cutout_w=; // jst_sm-sockets
rgb_cutout_h=;
io_cutout_w=; // the other three sockets for power and MB connectivity, about 12-13 pins overall width
io_cutout_h=;
hole_dia=;
// Model

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

View File

@@ -0,0 +1,55 @@
// by zeus - zeus@ctdo.de - CC-BY-NC-4.00
// -> https://www.thingiverse.com/zeus
// -> https://www.printables.com/social/366928-zeus/about
// -> https://github.com/zeus86
// -> https://blog.tastatursport.de/
// 2023-03-28
// GPU-antisag-adapter for Lian Li O11D Evo with vertical GPU Kit and 25mm Bottom-Fans (default orientation)
//##################
//
//
//##################
//
// VARS
mt=5; // general material thickness
cen_w=8; // center bar
cen_h=mt; // center bar
cen_elev=24; // total center elevation
depth=110; // 110 for 120mm fans
tri_w=40; // triangular plate
tri_x=tri_w/sqrt(2);// nominal side-length of the square-section, the triangular shape is made of
tri_h=mt; // triangular plate
$fn=100; // general resolution
q=0.01; // used to avoid graphical glitches
hds=15; // short hole-distance
hdl=105; // long hole distance
holedia=5; // diameter of the hole for the screw//
hole_dist=holedia-0.66; // distance from edge
//##################
//
// MODEL
module triangle(){
difference(){
rotate([0,0,45])cube([tri_x,tri_x,mt],center=true);
translate([0,-tri_w/2,0])cube([tri_w,tri_w,5+q],center=true);
for (x=[hds/2,-hds/2]){
translate([x,hole_dist,0]){
cylinder(r=holedia/2,h=mt+q,center=true);
translate([0,0,holedia*0.3])cylinder(r1=holedia/2,r2=holedia,h=mt+q,center=true);
}
}
}
};
module cen(){
hull(){
cube([cen_w,hdl-(hole_dist*1.5)-q,cen_h],center=true);
translate([0,0,cen_elev-mt])cube([cen_w,hdl/2,cen_h],center=true);
}
}
translate([0,0,mt/2]){
triangle();
translate([0,hdl/2+hole_dist,0])cen();
translate([0,hdl+hole_dist*2,0])rotate([0,0,180])triangle();
}

View File

@@ -0,0 +1,2 @@
raw/*
hex-rackpanels.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Some files were not shown because too many files have changed in this diff Show More