/** * A name tag that can easily be clipped to the neck of your bottle. * Copyright (C) 2013 Roland Hieber * * This file was modified by obelix 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 use $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; /** * 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. */ /** * 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() { scale([5, 5, 5]) rotate(45, [0, 0, 1]) bottle_clip(name=NAME, logo=LOGO_FILE); 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(); } 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(); } } 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); } module logo(logo, rl, ht, ru, width) { echo("logo: ", logo); if(logo == "") { echo("CATEAR LOGO"); 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 { echo("LOGO: ", logo); // The logo has been split in 3 parts. // well was... TODO rotate([0,0,-45]) translate([0,0,ht*3/4-0.1]) rotate([90,0,0]) scale([0.8,0.8,1]) scale([ht/100,ht/100,1]) translate([-32,-33,0.5]) linear_extrude(height=max(ru,rl)*2) import("test.svg"); translate([0,0,ht*3/4-0.1]) rotate([90,0,0]) scale([0.8,0.8,1]) scale([ht/100,ht/100,1]) translate([-32,-33,0.5]) linear_extrude(height=max(ru,rl)*2) import(logo); rotate([0,0,45]) translate([0,0,ht*3/4-0.1]) rotate([90,0,0]) scale([0.8,0.8,1]) scale([ht/100,ht/100,1]) translate([-32,-33,0.5]) linear_extrude(height=max(ru,rl)*2) import("test.svg"); } } 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 rotate([0,0,-45]) { // main cylinder if (RENDER_COLOR_ONE) { color("black") difference() { cylinder(r1=rl+width, r2=ru+width, h=ht); difference() { union() { name(name=name, font=font, rl=rl, ht=ht, ru=ru); logo(logo=logo, rl=rl, ht=ht, ru=ru, width=2*width); } cylinder(r1=rl+width/2, r2=ru+width/2, h=ht); } 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]); } } // text if (RENDER_COLOR_TWO) { color("orange") difference() { name(name=name, font=font, rl=rl, ht=ht, ru=ru); cylinder(r1=rl+width/2, r2=ru+width/2, h=ht); 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); cylinder(r1=rl+width/2, r2=ru+width/2, h=ht); outer_cutoff(rl, e, ru, ht, width); } } } } module outer_cutoff(rl, e, ru, ht, width) { // 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() { 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"); } } } /** * 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. **/