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.5 l 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.33 l 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 .
* * /