scad/c3cat-bottle-clip/c3cat-bottle-clip.scad

218 lines
7.2 KiB
OpenSCAD
Raw Normal View History

2024-01-05 15:47:14 +01:00
/**
* A name tag that can easily be clipped to the neck of your bottle.
* Copyright (C) 2013 Roland Hieber <rohieb+bottleclip@rohieb.name>
*
* This file was modified by obelix <christian@loelkes.com> for the
* OHM2013-Logo. If you wish to use other logos please use the original
* file. All other parameters were not modified.
*
* This file was modified again by djerun to use the catars printed
* by c3cat: https://www.printables.com/model/35076-cat-ears
* as the logo and optionally allow use the easrs from
* https://www.thingiverse.com/thing:5029374
* printed at scale 0.2 as glue-ins for additional ears.
*
* `Ohren_4.stl` and `catears.stl` need to be placed in `../stls/`
* for the symlinks to work otherwise `catears.stl` needs to be placed
* at `./catears.stl` and `Ohren_4.stl` at `./catear.stl`.
*
* Version of the modification: 1.0
*
* See examples.scad for examples on how to use this module.
*
* The contents of this file are licenced under CC-BY-SA 3.0 Unported.
* See https://creativecommons.org/licenses/by-sa/3.0/deed for the
* licensing terms.
*/
include <write/Write.scad>
2024-11-18 02:15:59 +01:00
use <catear_headband.scad>
$fn = 360;
NAME = "c3cat";
LOGO_FILE = ""; // empty string is catear model
RENDER_COLOR_ONE = true;
RENDER_COLOR_TWO = true;
RENDER_COLOR_THREE = true;
USE_TINY_EARS = true;
2024-01-05 15:47:14 +01:00
/**
* Creates one instance of a bottle clip name tag. The default values are
* suitable for 0.5l Club Mate bottles (and similar bottles). By default, logo
* and text are placed on the name tag so they both share half the height. In this
* version the logo is fixed.
*
* Parameters:
* ru: the radius on the upper side of the clip
* rl: the radius on the lower side of the clip
* ht: the height of the clip
* width: the thickness of the wall. Values near 2.5 usually result in a good
* clippiness for PLA prints.
* name: the name that is printed on your name tag. For the default ru/rt/ht
* values, this string should not exceed 18 characters to fit on the name tag.
* font: the path to a font for Write.scad.
*/
2024-05-14 20:22:55 +02:00
/**
* currently openscad fails to render the original `Ohren_4.stl` outside of the preview mode
* according to [the wiki](https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/FAQ#Why_is_my_imported_STL_file_appearing_with_F5_but_not_F6?) this is the stls fault
* using meshlab to run `Filters` -> `Cleaning and Repairing` -> `Remove T-Vertices` by `Edge-Flip` with `Ratio` of `1000000` before importing the stl works but but two errors remain.
*/
scale([0.2, 0.2, 0.2]) {
difference() {
2024-12-14 14:31:52 +01:00
scale([5, 5, 5]) rotate(45, [0, 0, 1]) bottle_clip(name=NAME, logo=LOGO_FILE);
2024-05-14 20:22:55 +02:00
translate([ 15*5, 0*5, 18*5]) rotate(80, [0, 1, 0]) catear();
translate([-15*5, 0*5, 18*5]) rotate(-80, [0, 1, 0]) catear();
}
2024-11-21 21:19:54 +01:00
if (RENDER_COLOR_TWO) {
color("orange")
translate([ 15*5, 0*5, 18*5])
rotate(80, [0, 1, 0])
catear();
}
if (RENDER_COLOR_THREE) {
color("yellow")
translate([-15*5, 0*5, 18*5])
rotate(-80, [0, 1, 0])
catear();
}
2024-05-14 20:22:55 +02:00
}
2024-01-05 15:47:14 +01:00
2024-11-18 02:15:59 +01:00
module name(name, font, rl, ht, ru) {
writecylinder(
text=name,
where=[0,0,0],
radius=rl+0.5,
height=ht/13*7,
h=ht/13*4,
t=max(rl,ru),
font=font);
}
2024-01-05 15:47:14 +01:00
2024-11-18 02:15:59 +01:00
module logo(logo, rl, ht, ru, width) {
echo("logo: ", logo);
if(logo == "") {
2024-12-14 14:31:52 +01:00
echo("CATEAR LOGO");
2024-11-18 02:15:59 +01:00
ear_size=ht;
echo("ht: ", ht);
echo("ru: ", ru);
echo("rl: ", rl);
echo("width: ", width);
translate([0,-max(ru,rl),ht*3/4+.5])
rotate([90,0,0])
scale([1,1,1])
scale([ht/100,ht/100,1])
translate([0, -ht/2,0])
rotate(-90, [0, 0, 1])
catear_headband(
size=ear_size,
height=max(ru,rl),
thickness=width,
stretch_len=0,
tip_len=0,
details=false,
with_rake=false
);
} else {
2024-12-14 14:31:52 +01:00
echo("LOGO: ", logo);
2024-11-18 02:15:59 +01:00
// The logo has been split in 3 parts. // well was... TODO
2024-12-14 14:31:52 +01:00
rotate([0,0,-45]) translate([0,0,ht*3/4-0.1])
2024-11-21 21:19:54 +01:00
rotate([90,0,0])
2024-12-14 14:31:52 +01:00
scale([0.8,0.8,1])
2024-11-21 21:19:54 +01:00
scale([ht/100,ht/100,1])
2024-12-14 14:31:52 +01:00
translate([-32,-33,0.5])
2024-11-21 21:19:54 +01:00
linear_extrude(height=max(ru,rl)*2)
2024-12-14 14:31:52 +01:00
import("test.svg");
2024-11-21 21:19:54 +01:00
translate([0,0,ht*3/4-0.1])
rotate([90,0,0])
scale([0.8,0.8,1])
scale([ht/100,ht/100,1])
2024-12-14 14:31:52 +01:00
translate([-32,-33,0.5])
2024-11-21 21:19:54 +01:00
linear_extrude(height=max(ru,rl)*2)
import(logo);
2024-12-14 14:31:52 +01:00
rotate([0,0,45]) translate([0,0,ht*3/4-0.1])
2024-11-21 21:19:54 +01:00
rotate([90,0,0])
2024-12-14 14:31:52 +01:00
scale([0.8,0.8,1])
2024-11-21 21:19:54 +01:00
scale([ht/100,ht/100,1])
2024-12-14 14:31:52 +01:00
translate([-32,-33,0.5])
2024-11-21 21:19:54 +01:00
linear_extrude(height=max(ru,rl)*2)
2024-12-14 14:31:52 +01:00
import("test.svg");
2024-11-18 02:15:59 +01:00
}
}
module bottle_clip(ru=13, rl=17.5, ht=26, width=2.5, name="c3cat", font="write/orbitron.dxf", logo="") {
e=100; // should be big enough, used for the outer boundary of the text/logo
2024-11-21 21:19:54 +01:00
rotate([0,0,-45]) {
// main cylinder
if (RENDER_COLOR_ONE) {
color("black") difference() {
cylinder(r1=rl+width, r2=ru+width, h=ht);
2024-11-29 18:53:44 +01:00
difference() {
union() {
name(name=name, font=font, rl=rl, ht=ht, ru=ru);
2024-12-14 14:31:52 +01:00
logo(logo=logo, rl=rl, ht=ht, ru=ru, width=2*width);
2024-11-29 18:53:44 +01:00
}
cylinder(r1=rl+width/2, r2=ru+width/2, h=ht);
}
2024-11-21 21:19:54 +01:00
translate([0,0,-1])
cylinder(r1=rl, r2=ru, h=ht+2);
// finally, substract a cube as a gap so we can clip it to the bottle
rotate([0, 0, 45])
translate([0,0,-1])
cube([50,50,50]);
2024-11-18 02:15:59 +01:00
}
2024-11-21 21:19:54 +01:00
}
// text
if (RENDER_COLOR_TWO) {
color("orange") difference() {
name(name=name, font=font, rl=rl, ht=ht, ru=ru);
2024-11-29 18:53:44 +01:00
cylinder(r1=rl+width/2, r2=ru+width/2, h=ht);
2024-11-21 21:19:54 +01:00
outer_cutoff(rl, e, ru, ht, width);
}
}
// logo
if (RENDER_COLOR_THREE) {
color("yellow") difference() {
logo(logo=logo, rl=rl, ht=ht, ru=ru, width=2*width);
2024-11-29 18:53:44 +01:00
cylinder(r1=rl+width/2, r2=ru+width/2, h=ht);
2024-11-21 21:19:54 +01:00
outer_cutoff(rl, e, ru, ht, width);
2024-01-05 15:47:14 +01:00
}
}
2024-11-21 21:19:54 +01:00
}
}
module outer_cutoff(rl, e, ru, ht, width) {
2024-01-05 15:47:14 +01:00
// outer cylinder which is substracted, so the text and the logo end
// somewhere on the outside ;-)
difference () {
cylinder(r1=rl+e, r2=ru+e, h=ht);
translate([0,0,-1])
// Note: bottom edges of characters are hard to print when character
// depth is > 0.7
cylinder(r1=rl+width+0.7, r2=ru+width+0.7, h=ht+2);
}
}
module catear() {
2024-11-18 02:15:59 +01:00
if (USE_TINY_EARS) {
rotate(-90, [0, 0, 1]) union() {
scale([1, 1 ,1]) translate([0, -85]) import("catear.stl");
scale([1, -1, 1]) translate([0, -85]) import("catear.stl");
}
2024-01-05 15:47:14 +01:00
}
}
/**
* Creates one instance of a bottle clip name tag suitable for 0.33l longneck
* bottles (like fritz cola, etc.). All parameters are passed to the module
* bottle_clip(), see there for their documentation.
*/
module bottle_clip_longneck(name="c3cat", width=2.5, font="write/orbitron.dxf") {
bottle_clip(name=name, ru=13, rl=15, ht=26, width=width, font=font, logo="");
}
/**
* The Steinie-Tag has been removed since it does not support logos.
**/