/**
 * 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>

/**
 * 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 `Ohren_4.stl` outside of the preview mode */
//difference() {
  rotate(45, [0, 0, 1]) bottle_clip(name="c3cat");
//  translate([ 15, 0, 18]) rotate(80, [0, 1, 0]) catear();
//  translate([-15, 0, 18]) rotate(-80, [0, 1, 0]) catear();
//}
//
//translate([0,  5, 0]) catear();
//rotate(180) translate([0,  5, 0]) catear();

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

  difference() {
    rotate([0,0,-45]) union() {
      // main cylinder
      cylinder(r1=rl+width, r2=ru+width, h=ht);
      // text and logo
      if(logo == "") {
        color("orange") writecylinder(name, [0,0,0], rl+0.5, ht/13*7, h=ht/13*4, t=max(rl,ru), font=font);
        translate([4.7, -rl, ht*1.08]) rotate(-10, [1, 0, 0]) rotate(76, [0, 1, 0]) scale([0.08, 2, 0.08]) color("red") import("catears.stl");
      } else {
        color("orange") writecylinder(name, [0,0,0], rl+0.5, ht/13*7, h=ht/13*4, t=max(rl,ru), font=font);

        // The logo has been split in 3 parts.
/*
        rotate([0,0,-48]) translate([0,0,ht*3/4-0.1])
          rotate([90,0,0])
            scale([0.9,0.9,1])
              scale([ht/100,ht/100,1])
                translate([-25,-29,0.5])
                  linear_extrude(height=max(ru,rl)*2)
                    import("logo_1.dxf");
*/
        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([-18,-22,0.5])
                  linear_extrude(height=max(ru,rl)*2)
                    import(logo);
/*
        rotate([0,0,44]) translate([0,0,ht*3/4-0.1])
          rotate([90,0,0])
            scale([0.7,0.7,1])
              scale([ht/100,ht/100,1])
                translate([-25,-26,0.5])
                  linear_extrude(height=max(ru,rl)*2)
                    import("logo_3.dxf");
*/
      }
    }
    // inner cylinder which is substracted
    translate([0,0,-1])
      cylinder(r1=rl, r2=ru, h=ht+2);
    // 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);
    }
    // finally, substract a cube as a gap so we can clip it to the bottle
    translate([0,0,-1]) cube([50,50,50]);
  }
}

module catear() {
  rotate(-90, [0, 0, 1]) union() {
    scale([0.2,  0.2, 0.2]) translate([0, -85]) import("catear.stl");
    scale([0.2, -0.2, 0.2]) 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.
**/