adjust the connector bar

adjust the connector bar

use <../../../basics/rounded-edges/doughnuts/doughnuts.scad>;

use <../../../shapes/geometry/arc/extruded/extruded-arc.scad>;

module halfCirclePhoneStand(height = 19.125,
                            minkowskiSphereRadius = 0.5,
                            arcRadius = 36,
                            arcRadiusExtension = 1.5)
{
    halfCirclePhoneStand_cradle(height = height,
                                minkowskiSphereRadius = minkowskiSphereRadius,
                                radius = arcRadius,
                                radiusExtension = arcRadiusExtension);

    halfCirclePhoneStand_stand(height = height,
                               minkowskiSphereRadius = minkowskiSphereRadius);
}

// sub-modules and functions follow

function halfCirclePhoneStand_cradle_cutout_zLength() = 4.2;

function halfCirclePhoneStand_cradle_cutout_zTranslate(minkowskiSphereRadius,
                                                        bedHeight,
                                                        zLength) = minkowskiSphereRadius + (bedHeight / 2.0) - (zLength / 2.0);

module halfCirclePhoneStand_cradle(height,
                                   minkowskiSphereRadius,
                                   radius,
                                   radiusExtension)
{
    xTranslate = 30;
    yTranslate = 32.7;

    difference()
    {
        halfCirclePhoneStand_cradle_bed(height = height,
                                           minkowskiSphereRadius = minkowskiSphereRadius,
                                           radius = radius,
                                           radiusExtension = radiusExtension,
                                           xTranslate = xTranslate,
                                           yTranslate = yTranslate);

        halfCirclePhoneStand_cradle_cutout(bedHeight = height,
                                        minkowskiSphereRadius = minkowskiSphereRadius,
                                        radius = radius,
                                        radiusExtension = radiusExtension,
                                        bed_xTranslate = xTranslate,
                                        bed_yTranslate = yTranslate);
    }
}

module halfCirclePhoneStand_cradle_bed(height,
                                       minkowskiSphereRadius,
                                       radius,
                                       radiusExtension,
                                       xTranslate,
                                       yTranslate)
{
    zTranslate = minkowskiSphereRadius;
    color("magenta")
    translate([xTranslate, yTranslate, zTranslate])
    rotate([0, 0, 213])
    roundedRectangularArc(angle = 150,
                          height = height,
                          minkowskiRadius = minkowskiSphereRadius,
                          radius = radius,
                          radiusExtension = radiusExtension);
}

module halfCirclePhoneStand_cradle_cutout(bedHeight,
                                          minkowskiSphereRadius,
                                          radius,
                                          radiusExtension,
                                          bed_xTranslate,
                                          bed_yTranslate)
{
    zLength = halfCirclePhoneStand_cradle_cutout_zLength();

    cutoutRadiusExtension = radiusExtension + 3;

    xTranslate = bed_xTranslate + 0.2;
    yTranslate = bed_yTranslate + 0.2;
    zTranslate = halfCirclePhoneStand_cradle_cutout_zTranslate(minkowskiSphereRadius = minkowskiSphereRadius,
                                                                bedHeight = bedHeight,
                                                                zLength = zLength);

    color("DarkTurquoise")
    translate([xTranslate, yTranslate, zTranslate])
    rotate([0, 0, 227])
    roundedRectangularArc(angle = 37,
                          height = zLength,
                          minkowskiRadius = minkowskiSphereRadius,
                          radius = radius,
                          radiusExtension = cutoutRadiusExtension);
}

module halfCirclePhoneStand_stand(height,
                                  minkowskiSphereRadius)
{
    halfCirclePhoneStand_stand_top(height = height,
                                   minkowskiSphereRadius = minkowskiSphereRadius);

    halfCirclePhoneStand_stand_connectorBar(bedHeight = height,
                                            minkowskiSphereRadius = minkowskiSphereRadius);

    halfCirclePhoneStand_stand_base(height = height,
                                    minkowskiSphereRadius = minkowskiSphereRadius);
}

module halfCirclePhoneStand_stand_base(height,
                                       minkowskiSphereRadius)
{
    color("green")
    translate([0, 0, minkowskiSphereRadius])
    roundDoughnut(height = height,
                innerRadius = 4.9,      // 4.9
                outerRadius = 5.59,     // 5.59
                minkowskiSphereRadius = minkowskiSphereRadius);
}

module halfCirclePhoneStand_stand_connectorBar(minkowskiSphereRadius, bedHeight)
{
    xLength = 5;
    yLength = 3;
    zLength = halfCirclePhoneStand_cradle_cutout_zLength() + minkowskiSphereRadius;

    xTranslate = 5;
    yTranslate = 5;
    zTranslate = halfCirclePhoneStand_cradle_cutout_zTranslate(minkowskiSphereRadius = minkowskiSphereRadius,
                                                                bedHeight = bedHeight,
                                                                zLength = zLength)
                    + (zLength / 2.0);

    color("blue")
    translate([xTranslate, yTranslate, zTranslate])
    rotate([0, 0, 45])
    cube([xLength, yLength, zLength], center = true);
}

module halfCirclePhoneStand_stand_top(height,
                                      minkowskiSphereRadius)
{
    xTranslate = 8.105;  // 8.05     // 8.1
    yTranslate = 8.85;  // 8.85     // 8.9

    color("green")
    translate([xTranslate, yTranslate, minkowskiSphereRadius])
    roundDoughnut(height = height,
                innerRadius = 1.9,  // 2.0
                outerRadius = 2.6,  // 2.6
                minkowskiSphereRadius = minkowskiSphereRadius);
}

use <../../../basics/rounded-edges/doughnuts/doughnuts.scad>;

use <../../../shapes/geometry/arc/extruded/extruded-arc.scad>;

module halfCirclePhoneStand(height = 19.125,
                            minkowskiSphereRadius = 0.5,
                            arcRadius = 36,
                            arcRadiusExtension = 1.5)
{
    halfCirclePhoneStand_cradle(height = height,
                                minkowskiSphereRadius = minkowskiSphereRadius,
                                radius = arcRadius,
                                radiusExtension = arcRadiusExtension);

    halfCirclePhoneStand_stand(height = height,
                               minkowskiSphereRadius = minkowskiSphereRadius);
}

// sub-modules and functions follow

function halfCirclePhoneStand_cradle_cutout_zLength() = 4.2;

function halfCirclePhoneStand_cradle_cutout_zTranslate(minkowskiSphereRadius,
                                                        bedHeight,
                                                        zLength) = minkowskiSphereRadius + (bedHeight / 2.0) - (zLength / 2.0);

module halfCirclePhoneStand_cradle(height,
                                   minkowskiSphereRadius,
                                   radius,
                                   radiusExtension)
{
    xTranslate = 30;
    yTranslate = 32.7;

    difference()
    {
        halfCirclePhoneStand_cradle_bed(height = height,
                                           minkowskiSphereRadius = minkowskiSphereRadius,
                                           radius = radius,
                                           radiusExtension = radiusExtension,
                                           xTranslate = xTranslate,
                                           yTranslate = yTranslate);

        halfCirclePhoneStand_cradle_cutout(bedHeight = height,
                                        minkowskiSphereRadius = minkowskiSphereRadius,
                                        radius = radius,
                                        radiusExtension = radiusExtension,
                                        bed_xTranslate = xTranslate,
                                        bed_yTranslate = yTranslate);
    }
}

module halfCirclePhoneStand_cradle_bed(height,
                                       minkowskiSphereRadius,
                                       radius,
                                       radiusExtension,
                                       xTranslate,
                                       yTranslate)
{
    zTranslate = minkowskiSphereRadius;
    color("magenta")
    translate([xTranslate, yTranslate, zTranslate])
    rotate([0, 0, 213])
    roundedRectangularArc(angle = 150,
                          height = height,
                          minkowskiRadius = minkowskiSphereRadius,
                          radius = radius,
                          radiusExtension = radiusExtension);
}

module halfCirclePhoneStand_cradle_cutout(bedHeight,
                                          minkowskiSphereRadius,
                                          radius,
                                          radiusExtension,
                                          bed_xTranslate,
                                          bed_yTranslate)
{
    zLength = halfCirclePhoneStand_cradle_cutout_zLength();

    cutoutRadiusExtension = radiusExtension + 3;

    xTranslate = bed_xTranslate + 0.2;
    yTranslate = bed_yTranslate + 0.2;
    zTranslate = halfCirclePhoneStand_cradle_cutout_zTranslate(minkowskiSphereRadius = minkowskiSphereRadius,
                                                                bedHeight = bedHeight,
                                                                zLength = zLength);

    color("DarkTurquoise")
    translate([xTranslate, yTranslate, zTranslate])
    rotate([0, 0, 227])
    roundedRectangularArc(angle = 37,
                          height = zLength,
                          minkowskiRadius = minkowskiSphereRadius,
                          radius = radius,
                          radiusExtension = cutoutRadiusExtension);
}

module halfCirclePhoneStand_stand(height,
                                  minkowskiSphereRadius)
{
    halfCirclePhoneStand_stand_top(height = height,
                                   minkowskiSphereRadius = minkowskiSphereRadius);

    halfCirclePhoneStand_stand_connectorBar(bedHeight = height,
                                            minkowskiSphereRadius = minkowskiSphereRadius);

    halfCirclePhoneStand_stand_base(height = height,
                                    minkowskiSphereRadius = minkowskiSphereRadius);
}

module halfCirclePhoneStand_stand_base(height,
                                       minkowskiSphereRadius)
{
    color("green")
    translate([0, 0, minkowskiSphereRadius])
    roundDoughnut(height = height,
                innerRadius = 4.9,      // 4.9
                outerRadius = 5.59,     // 5.59
                minkowskiSphereRadius = minkowskiSphereRadius);
}

module halfCirclePhoneStand_stand_connectorBar(minkowskiSphereRadius, bedHeight)
{
    xLength = 40;
    yLength = 3;
    zLength = halfCirclePhoneStand_cradle_cutout_zLength() + minkowskiSphereRadius;

    xTranslate = 0;
    yTranslate = 0;
    zTranslate = halfCirclePhoneStand_cradle_cutout_zTranslate(minkowskiSphereRadius = minkowskiSphereRadius,
                                                                bedHeight = bedHeight,
                                                                zLength = zLength)
                    + (zLength / 2.0);

    translate([xTranslate, yTranslate, zTranslate])
//    rotate([0, 0, 45])
    cube([xLength, yLength, zLength]
    , center = true
    );
}

module halfCirclePhoneStand_stand_top(height,
                                      minkowskiSphereRadius)
{
    xTranslate = 8.105;  // 8.05     // 8.1
    yTranslate = 8.85;  // 8.85     // 8.9

    color("green")
    translate([xTranslate, yTranslate, minkowskiSphereRadius])
    roundDoughnut(height = height,
                innerRadius = 1.9,  // 2.0
                outerRadius = 2.6,  // 2.6
                minkowskiSphereRadius = minkowskiSphereRadius);
}


Added empty module femur.

Added empty module femur.

Signed-off-by: Thomas Helmke <d6f41dc76d91e6cfef52bde6495ccf71cd6b9a7c@gmx.de>

use <small-parts.scad>

module coxa()
{
	width = 40;
	length = 80;
	wall = 5;
	radiusaxle = 8.7/2;
	radiuswheel = 20.7/2;
	heightwheel = 2.5;
	compwidth = 26;
	compheight = 20;
	compwall = 8;
	servowidth = 41;
	difference()
	{
		union()
		{
			cylinder(r=width/2,h=wall);
			translate([length,0,0])
				cylinder(r=width/2,h=wall);
			translate([0,-width/2,0])
				cube([length, width, wall]);
		}
		cylinder(r=radiusaxle,h=wall);
		translate([0,0,heightwheel])
			cylinder(r=radiuswheel,h=wall);
	}
	union()
	{
		//translate([length-compwall,-width/2,-compheight])
			//cube([compwall,compwidth,compheight]);
		translate([length-2*compwall-servowidth,-width/2,-compheight])
			cube([compwall,compwidth,compheight]);
		translate([length-2*compwall-servowidth,-width/2,-compheight-wall])
			cube([servowidth+2*compwall,compwidth,wall]);
	}
}

module femur()
{
}

//coxa();
//translate([80-8,-20,0])rotate([0,90,0])servo_u_holder();

femur();

use <small-parts.scad>

module coxa()
{
	width = 40;
	length = 80;
	wall = 5;
	radiusaxle = 8.7/2;
	radiuswheel = 20.7/2;
	heightwheel = 2.5;
	compwidth = 26;
	compheight = 20;
	compwall = 8;
	servowidth = 41;
	difference()
	{
		union()
		{
			cylinder(r=width/2,h=wall);
			translate([length,0,0])
				cylinder(r=width/2,h=wall);
			translate([0,-width/2,0])
				cube([length, width, wall]);
		}
		cylinder(r=radiusaxle,h=wall);
		translate([0,0,heightwheel])
			cylinder(r=radiuswheel,h=wall);
	}
	union()
	{
		//translate([length-compwall,-width/2,-compheight])
			//cube([compwall,compwidth,compheight]);
		translate([length-2*compwall-servowidth,-width/2,-compheight])
			cube([compwall,compwidth,compheight]);
		translate([length-2*compwall-servowidth,-width/2,-compheight-wall])
			cube([servowidth+2*compwall,compwidth,wall]);
	}
}

coxa();
//translate([80-8,-20,0])rotate([0,90,0])servo_u_holder();


minor adjustments to bottom.scad

minor adjustments to bottom.scad

tol = 0.5;
pcb_x = 130;
pcb_y = 110;
pcb_z = 4;
bolt_d = 3.6;
shift_bolt = 5;

// box thickness
th = 3;

shift_x = th + 1;
shift_y = th + 1;

box_x = pcb_x + shift_x + th + 1;
box_y = pcb_y + 2*th + 1;

pcb_width = 2;
pcb_up = 9;

box_z = th + pcb_up + pcb_width - 1;

//socket_h = 15;
socket_w = 10;
socket_n = 5;
socket_int = 20;
start_socket_x = 20 + shift_x;
start_socket_z = th + pcb_z + tol;
eps = 1e-1;

usb_type_b_w = 15.2;
//usb_type_b_h = 3;
start_type_b_y = shift_y + pcb_y - 30.1;
start_type_b_z = th + pcb_z + tol;

usb_type_a_w = 17.3;
//usb_type_a_h = 0.5;
start_type_a_y = shift_y + 44.7;
start_type_a_z = th + pcb_z + tol;

// programmator
micro_x = 10;
micro_y = 21.1;
micro_start_x = shift_x + 4.75;
micro_start_y = shift_y + pcb_y - 23.3 - micro_y;

contrast_start_x = shift_x + 38.4;
contrast_start_y = shift_y + 25.7;
volume_start_x = shift_x + pcb_x - 39.2;
volume_start_y = contrast_start_y;
pot_d = 7;
under_pcb = 12.5;
fn = 10;
gaika_d = 6.25;
gaika_h = 6;

difference() {
  union() {
    difference() {
      cube([box_x,box_y,box_z], false);
      translate([th, th, th]) {
        cube([box_x-2*th+eps, box_y-2*th+eps, box_z-th+eps], false);
      }
    }
    // under_pcb
    for (dx = [shift_x+shift_bolt, shift_x+pcb_x-shift_bolt]) {
      for (dy = [shift_y+shift_bolt, shift_y+pcb_y-shift_bolt]) {
        translate([dx,dy,pcb_up/2+th-eps]) {
          cube(size=[under_pcb,under_pcb,pcb_up], center=true);
        }
      }
    }
  }

  // bolts
  for (dx = [shift_x+shift_bolt, shift_x+pcb_x-shift_bolt]) {
    for (dy = [shift_y+shift_bolt, shift_y+pcb_y-shift_bolt]) {
      translate([dx,dy,-eps]) {
        cylinder($fn=fn, r=bolt_d/2, h=th+pcb_up+2*eps);
        // gaika
        cylinder($fn=6, r=gaika_d/2, h=gaika_h);
      }
    }
  }

//    for (i = [0:1:socket_n-1]) {
//        translate([start_socket_x+i*socket_int-tol, box_y-th-eps, start_socket_z]) {
//            cube(size=[socket_w+2*tol, th+2*eps, box_z]);
//        }
//    }

//    // usb_in1 type b
//    translate([box_x-th-eps, start_type_b_y-tol, start_type_b_z]) {
//        cube(size=[th+2*eps, usb_type_b_w+2*tol, box_z]);
//    }

//    // usb_out1 type a
//    translate([-eps, start_type_a_y - tol, start_type_a_z]) {
//        cube(size=[th+2*eps, usb_type_a_w + 2*tol, box_z]);
//    }

    // programmator
    translate([micro_start_x-tol,micro_start_y-tol, -eps]) {
      cube(size=[micro_x+2*tol, micro_y+2*tol, th+2*eps]);
    }

    // contrast
    translate([contrast_start_x, contrast_start_y, -eps]) {
      cylinder($fn=fn, r=pot_d/2, h=th+2*eps);
    }

    // volume
//    translate([volume_start_x, volume_start_y, -eps]) {
//      cylinder($fn=20, r=pot_d/2, h=th+2*eps);
//    }
};

//// bolts
//for (dx = [shift_x+shift_bolt, shift_x+pcb_x-shift_bolt]) {
//  for (dy = [shift_y+shift_bolt, shift_y+pcb_y-shift_bolt]) {
//    difference() {
//      translate([dx,dy,pcb_up/2+th]) {
//        cube(size=[a,a,pcb_up], center=true);
//      }
//      translate([dx,dy,-eps]) {
//        cylinder($fn=20, r=bolt_d/2, h=th+pcb_up+2*eps);
//      }
//    }
//  }
//}

//leg_r = t;
//shift = t/2+leg_r;
//for (dx = [shift, a-shift])
//    for (dy = [shift, b-shift]) {
//        translate([dx, dy, 0]) {
//            cylinder(h=c, r=leg_r, $fn=40);
//        }
//    }

tol = 0.5;
pcb_x = 130;
pcb_y = 110;
pcb_z = 4;
bolt_d = 3.6;
shift_bolt = 5;

// box thickness
th = 3;

shift_x = th + 1;
shift_y = th + 1;

box_x = pcb_x + shift_x + th + 1;
box_y = pcb_y + 2*th + 1;

pcb_width = 2;
pcb_up = 9;

box_z = th + pcb_up + pcb_width - 1;

//socket_h = 15;
socket_w = 10;
socket_n = 5;
socket_int = 20;
start_socket_x = 20 + shift_x;
start_socket_z = th + pcb_z + tol;
eps = 1e-1;

usb_type_b_w = 15.2;
//usb_type_b_h = 3;
start_type_b_y = shift_y + pcb_y - 30.1;
start_type_b_z = th + pcb_z + tol;

usb_type_a_w = 17.3;
//usb_type_a_h = 0.5;
start_type_a_y = shift_y + 44.7;
start_type_a_z = th + pcb_z + tol;

// programmator
micro_x = 10;
micro_y = 21.1;
micro_start_x = shift_x + 4.75;
micro_start_y = shift_y + pcb_y - 23.3 - micro_y;

contrast_start_x = shift_x + 38.4;
contrast_start_y = shift_y + 25.7;
volume_start_x = shift_x + pcb_x - 39.2;
volume_start_y = contrast_start_y;
pot_d = 7;
under_pcb = 8;
fn = 10;
gaika_d = 6.25;
gaika_h = 2.5;

difference() {
  union() {
    difference() {
      cube([box_x,box_y,box_z], false);
      translate([th, th, th]) {
        cube([box_x-2*th+eps, box_y-2*th+eps, box_z-th+eps], false);
      }
    }
    // under_pcb
    for (dx = [shift_x+shift_bolt, shift_x+pcb_x-shift_bolt]) {
      for (dy = [shift_y+shift_bolt, shift_y+pcb_y-shift_bolt]) {
        translate([dx,dy,pcb_up/2+th-eps]) {
          cube(size=[under_pcb,under_pcb,pcb_up], center=true);
        }
      }
    }
  }

  // bolts
  for (dx = [shift_x+shift_bolt, shift_x+pcb_x-shift_bolt]) {
    for (dy = [shift_y+shift_bolt, shift_y+pcb_y-shift_bolt]) {
      translate([dx,dy,-eps]) {
        cylinder($fn=fn, r=bolt_d/2, h=th+pcb_up+2*eps);
        // gaika
        cylinder($fn=6, r=gaika_d/2, h=gaika_h);
      }
    }
  }

//    for (i = [0:1:socket_n-1]) {
//        translate([start_socket_x+i*socket_int-tol, box_y-th-eps, start_socket_z]) {
//            cube(size=[socket_w+2*tol, th+2*eps, box_z]);
//        }
//    }

//    // usb_in1 type b
//    translate([box_x-th-eps, start_type_b_y-tol, start_type_b_z]) {
//        cube(size=[th+2*eps, usb_type_b_w+2*tol, box_z]);
//    }

//    // usb_out1 type a
//    translate([-eps, start_type_a_y - tol, start_type_a_z]) {
//        cube(size=[th+2*eps, usb_type_a_w + 2*tol, box_z]);
//    }

    // programmator
    translate([micro_start_x-tol,micro_start_y-tol, -eps]) {
      cube(size=[micro_x+2*tol, micro_y+2*tol, th+2*eps]);
    }

    // contrast
    translate([contrast_start_x, contrast_start_y, -eps]) {
      cylinder($fn=fn, r=pot_d/2, h=th+2*eps);
    }

    // volume
//    translate([volume_start_x, volume_start_y, -eps]) {
//      cylinder($fn=20, r=pot_d/2, h=th+2*eps);
//    }
};

//// bolts
//for (dx = [shift_x+shift_bolt, shift_x+pcb_x-shift_bolt]) {
//  for (dy = [shift_y+shift_bolt, shift_y+pcb_y-shift_bolt]) {
//    difference() {
//      translate([dx,dy,pcb_up/2+th]) {
//        cube(size=[a,a,pcb_up], center=true);
//      }
//      translate([dx,dy,-eps]) {
//        cylinder($fn=20, r=bolt_d/2, h=th+pcb_up+2*eps);
//      }
//    }
//  }
//}

//leg_r = t;
//shift = t/2+leg_r;
//for (dx = [shift, a-shift])
//    for (dy = [shift, b-shift]) {
//        translate([dx, dy, 0]) {
//            cylinder(h=c, r=leg_r, $fn=40);
//        }
//    }


The documentation was updated a little.

The documentation was updated a little.

difference()
{
	cylinder (h = 2, r=55, center = true, $fn=100);

	/**
	 * This double for loop creates x and y coordinates for a 4 by 4 grid.
	 * 30 - -30 = 60
	 * 60 / 20 = 4
	 */
    for(x = [-30 : 20 : 30],
        y = [-30 : 20 : 30])
    {
        translate([x, y, -5])
        scale([0.1, 0.1, 13.9])
        import("../../../../shapes/spurs/spurs-a.stl");
    }
}


A default height was given to the spur.

A default height was given to the spur.


SD-card mounting drills and hole added

SD-card mounting drills and hole added

use <lcd.scad>
use <menu_knob.scad>
use <menu_knob_manipulator.scad>
use <reset_button.scad>
use <sdcard_reader.scad>
use <cable_guide.scad>

boxSize = [143, 148, 6+7];
lcdOffset = boxSize - [98+5, 60+5, 12];
encoderOffset = [20-14/2, boxSize[1]-30/2-15/2-3, boxSize[2]-(6+7)];
sdCardOffset = [35, 80, boxSize[2]-6];
resetButtonOffset = [encoderOffset[0]+14/2, 68, 1];

//rotate([180, 0, 0])
{
  difference()
  {
    union()
    {
      // main mounting legs
      for(offset = [ [boxSize[0]-16, 0, boxSize[2]-7], [boxSize[0]-70, 0, boxSize[2]-7] ])
        translate(offset)
          cube([16, 40+13, 7]);
      // side mounting wing
      translate([15, 0, 6])
        cube([18, 20, 7]);

      difference()
      {
        // main working area
        cube(boxSize);
        // prusa's framework  corner
        translate([15, 0, 0])
          cube([143-15, 53, boxSize[2]]);
        // LCD
        translate(lcdOffset)
        {
          // LCD itself
          translate([1/2-2/2, 10-1, 2])
            cube([97+2, 40+2, 10]);
          // place for PCB
          translate([-2/2, -1/2, -lcdOffset[2]-7])
            cube([98+2, 60+1, 10]);
          // place for cables
          translate([9, 60-5, -2])
            cube([39,10,4]);
          lcdBoard();
        }
        // encoder
        translate(encoderOffset)
        {
          translate([-2, -1/2, -8])
            cube([14+2*2, 12+1, 8+6]);
          menuKnob();
        }
        // SD card mount
        translate(sdCardOffset)
          rotate([0,180,0])
            sdCardReader();
        // reset button
        translate(resetButtonOffset)
        {
          translate([0, 0, -resetButtonOffset[2]])
            cylinder(r=(16+1)/2, h=boxSize[2])
          resetButton();
        }
        // cable guide drill
        translate([boxSize[0]-98-5, 40+16+6, 0])
          cableGuide();
        // side mounting wing cut-in, so that screw will hold tight
        cube([15, 40, 6]);
      }
    }

    // SD card mounting drills
    translate(sdCardOffset)
      rotate([0,180,0])
      {
        for(offset = [
                       [3/2+1, 3/2+1, -20/2],
                       [3/2+1, 31-3/2-1, -20/2]
                     ])
        {
          translate(offset)
            cylinder(r=3/2, h=20, $fs=1);
        }
      }
    // SD card mounting place
    translate(sdCardOffset + [+2/2, -2/2, 0])
      rotate([0,180,0])
        cube([45+2,31+2,2+8]);

    // frame-mounting drills
    for(offsetOY = [ 13/2+5/2, 40+13+5])
      for(offsetOX = [15/2, boxSize[0]-70+16/2, boxSize[0]-16/2])
        translate([offsetOX, offsetOY, -1])
          cylinder(r=5/2, h=6+7+2, $fs=1);
  }

  // LCD stub
  %translate(lcdOffset)
    lcdBoard();
  // encoder stub
  %translate(encoderOffset)
  {
    menuKnob();
    translate([7, 6, 23+4])
      rotate([180,0,0])
        menuKnobManipulator();
  }
  // SD card mount stub
  %translate(sdCardOffset)
    rotate([0,180,0])
      sdCardReader();
  // reset button stub
  %translate(resetButtonOffset)
    resetButton();
}

use <lcd.scad>
use <menu_knob.scad>
use <menu_knob_manipulator.scad>
use <reset_button.scad>
use <sdcard_reader.scad>
use <cable_guide.scad>

boxSize = [143, 148, 6+7];
lcdOffset = boxSize - [98+5, 60+5, 12];
encoderOffset = [20-14/2, boxSize[1]-30/2-15/2-3, boxSize[2]-(6+7)];
sdCardOffset = [35, 80, boxSize[2]-6];
resetButtonOffset = [encoderOffset[0]+14/2, 68, 1];

//rotate([180, 0, 0])
{
  difference()
  {
    union()
    {
      // main mounting legs
      for(offset = [ [boxSize[0]-16, 0, boxSize[2]-7], [boxSize[0]-70, 0, boxSize[2]-7] ])
        translate(offset)
          cube([16, 40+13, 7]);
      // side mounting wing
      translate([15, 0, 6])
        cube([18, 20, 7]);

      difference()
      {
        // main working area
        cube(boxSize);
        // prusa's framework  corner
        translate([15, 0, 0])
          cube([143-15, 53, boxSize[2]]);
        // LCD
        translate(lcdOffset)
        {
          // LCD itself
          translate([1/2-2/2, 10-1, 2])
            cube([97+2, 40+2, 10]);
          // place for PCB
          translate([-2/2, -1/2, -lcdOffset[2]-7])
            cube([98+2, 60+1, 10]);
          // place for cables
          translate([9, 60-5, -2])
            cube([39,10,4]);
          lcdBoard();
        }
        // encoder
        translate(encoderOffset)
        {
          translate([-2, -1/2, -8])
            cube([14+2*2, 12+1, 8+6]);
          menuKnob();
        }
        // SD card mount
        translate(sdCardOffset)
          rotate([0,180,0])
            sdCardReader();
        // reset button
        translate(resetButtonOffset)
        {
          translate([0, 0, -resetButtonOffset[2]])
            cylinder(r=(16+1)/2, h=boxSize[2])
          resetButton();
        }
        // cable guide drill
        translate([boxSize[0]-98-5, 40+16+6, 0])
          cableGuide();
        // side mounting wing cut-in, so that screw will hold tight
        cube([15, 40, 6]);
      }
    }

    // mounting drills
    for(offsetOY = [ 13/2+5/2, 40+13+5])
      for(offsetOX = [15/2, boxSize[0]-70+16/2, boxSize[0]-16/2])
        translate([offsetOX, offsetOY, -1])
          cylinder(r=5/2, h=6+7+2, $fs=1);
  }

  // LCD stub
  %translate(lcdOffset)
    lcdBoard();
  // encoder stub
  %translate(encoderOffset)
  {
    menuKnob();
    translate([7, 6, 23+4])
      rotate([180,0,0])
        menuKnobManipulator();
  }
  // SD card mount stub
  %translate(sdCardOffset)
    rotate([0,180,0])
      sdCardReader();
  // reset button stub
  %translate(resetButtonOffset)
    resetButton();
}


This is the first commit for Masaka's mask by Data.


Adding CPU enclosure 3d model

Adding CPU enclosure 3d model

/*
This box generator is taken from here: http://www.thingiverse.com/thing:66030
You need to have it in your library folder to be able to generate the enclosure properly.

@brief Generic Electronic Device Packaging for Tyndall version 2
@details This OpenSCAD script will generate a 2 part fit together packaging.

This starts with the user entering some basic values:
	1. Dimensions of the object to be packaged in XYZ (device_xyz, [x,y,z])
	2. Size of the gap between each side of the object and the internal wall of the packaging (clearance_xyz, [x,y,z])
	3. How thick the material of the packaging is (wall_t)
	4. The external radius of the rounded corners of the packaging (corner_radius)
	5. How many sides do these rounded corners have? (corner_sides, 3 to 10 are good for most items, 1 will give you chamfered edges)
	6. How high is the lip that connects the 2 halves? (lip_h, 1.5 to 3 are good for most applications)
	7. How tall is the top relative to the bottom? (top_bottom_ratio, 0.1 to 0.9, 0.5 will give you 2 halves of equal height)
	8. Does the part have mouse ears or not? (has_mouseears, true or false)
	9. How thick the flat discs that make the mouse ears should be (mouse_ear_thickness, twice print layer thickness is a good idea)
	10. How large the flat discs that make the mouse ears are (mouse_ear_radius, 5 to 15 generally work well)
	11. What parts you want and how they are laid out (layout, [beside, stacked, top, bottom])
	12. How far apart the 2 halves are in the "beside" layout (separation, 2 is good)
	13. How much of an overlap (-ve) or gap (+ve) is there between the inner and outer lip surfaces (lip_fit, a value of 0 implies they meet perfectly in the middle, this will depend on your material printer etc. so you will likely need to play around with this variable)

Next the user can modify the data structures that create holes, posts and text on each face of the packaging. These are complicated and may require you to play around with values or read some of the comments further down in the code
	1. The cutouts and depressions used on the packaging (holes=[[]])
		format for each hole [face_name, shape_name, shape_position[x_pos,y_pos,x_offs,y_offs,rotate,align], shape_size[depth,,,]]
	2. The internal supporting structures used on the packaging (posts=[[]])
		format for each post [face_name, shape_name shape_position[x_pos,y_pos,x_offs,y_offs,rotate,align], shape_size[depth,,,]]
	3. The engraved text used on the packaging (text=[[]])
		format for each piece of text [face_name, text_to_write, shape_position[x_pos,y_pos,x_offs,y_offs,rotate,align], shape_size[depth,font_height,font_spacing,mirror]] Note: for silly reasons mirror must be 0 or 1 corresponding to false and true in this version

	Which of the 6 sides of the packaging do you want this feature on? (face_name, T,B,N,E,W,S)
		"T", The Top or Z+ face
		"B", The Bottom or Z- face
		"N", the North or Y+ face
		"E", the East or X+ face
		"W", the West or X- face
		"S", the South or Y- Face
	Where on the face do you want this feature (shape_position [x_pos,y_pos,x_offs,y_offs,rotate,align] )
		x_pos, how far along the face do you move in X
		y_pos, how far along the face do you move in Y
		x_offs, where along the face do you take measurements from in X
		y_offs, where along the face do you take measurements from in Y
		rotate, how much do you want the object rotated in degrees
			if you do not use any of the above please set them to 0! do not just leave them empty!
		align, do you want the object aligned with the "inside" or the "outside" of the packaging face

	What shape do you want? (shape_name, Cone/Ellipse/Cylinder/Round_Rect/Square/Rectangle/Nub_Post/Dip_Post/Hollow_Cylinder)
	What are the shape's dimensions (shape_size[depth,,,])...you will need to read the section below as they are different for each shape
		"Square" shape_size[depth, length_breadth]
		"Rectangle" shape_size[depth, length, breadth]
		"Round_Rect" shape_size[depth, length, breadth, corner_radius, corner_sides]
		"Cylinder" shape_size[depth, radius ,sides]
		"Ellipse" shape_size[depth, radius_length, radius_breadth, sides]
		"Cone" shape_size[depth, radius_bottom, radius_top ,sides]
		"Nub_Post" shape_size[depth, radius_bottom, radius_top, depth_nub, sides]
		"Dip_Post" shape_size[depth, radius_bottom, radius_top, depth_dip, sides]
		"Hollow_Cylinder" shape_size[depth, radius_outside, radius_inside ,sides]
	A string of text you want to have carved into a face (text_to_write)
		for text shape_size[depth,font_height,font_spacing,mirror]

Once the user has provided this data the shape is made as follows:
	1. Calculate external size of packaging based on "device_xyz", "clearance_xyz" & "wall_t"
	2. Create Hollow cuboidal shape by differencing a slightly smaller one from a slightly larger one
	3. From "posts" create internal support structures and union that with the previous shape
	4. From "holes" create shapes on each face and difference that from the previous shape
	5. From "text" create letters on each face and difference that from the previous shape
	6. Using the packaging height, "lip_h", "top_bottom_ratio" & "lip_fit" split teh previous shape into a top and bottom half
	7. Using layout & separation arrange the parts as specified by the user
	8. Using layout, mouse_ears, mouse_ear_thickness & mouse_ear_radius union the mouse ears to the previous shapes correctly
	9. Done!

Author Mark Gaffney
Version 2.6k
Date 2013-07-09

@ToDo:
fix internal radii no-of-sides when using chamfered package to maintain wall thickness

Warning:
	Some combinations of values, shapes and locations etc. may lead to an invalid or non-manifold shape beign created, preventing you from exporting a .stl
	If this happens try to remove or change some of the features or values until you get a valid shape and then add them back gradually until you find the offending item, then change it so it doesn't cause a problem

	Note: This thing uses  HarlanDMii's"write.scad" module http://www.thingiverse.com/thing:16193
	which you will need to have downloaded and located in the directory if you want to run this on your PC

	Generating text can be very slow!

	When generating a stacked layout it may look like the top is taller than it should be, this seems to be a visualisation bug in OpenSCAD, if you create a .STL it will be perfect

@note
WIMUv4 variant 2013
	This variant is used to make a production packaging for WIMUv3a

Changes from previous versions:
v2.6k
	moved and enlarged uUSB & switch holes to prevent fragile structures being formed on advice of i.materialise
	moved lables for switch, uUSB and uSD from top to sides of object
v2.6j
	added text for indicating switch on/off
	added holes and guides for internal reset/bootloader-enable switches
	added a hole for screw in screwpost
v2.6i
	packaging for WIMUv4 2013 version with small battery (same size as WIMUv3a and WIMUv3
	began to fix a bug where interlocking features didn't generate in the correct location if the top_bottom_ratio wasn't 0.5
		only implemented and tested for spheroids
v2.6h
 - 	added option to choose style of interlocking features
 - 		added new style of interlocking  features(overlapping spheroid)
 - 	Changed depth of uUSB overmold cutout to remove unnecessary features
 - 	added cutout beneath uUSB to enahnce visibility of SMT LEDs
 - 	Added option to flip the halves if only makigna top or bottom

v2.6g
 - 	changed style of interlocking cutouts (overlapping flattened hemi-hexagonal prisms)
 - 	added interlocking feature on side with many cutouts
 - 	added support for controlling the r1 and r2 and height of the interlocking features (note: the side with cutouts has hardcoded length of 19)
 - 	moved switch cutout down 0.5mm
 - 	rotate post above zigbee from 30 to 0
 - 	remove post_tolerance from "PCB lateral retainers" as fit was very loose on prototypes and they can be easily pared down with a file etc.
v2.6f
 - 	modified tolerances from 0.2-0.35 on advice from i.materialise as minimum tolerance is 0.3mm
 - 	added simple interlocking feature on centre of lips (slightly interlocking hemispherical tongue & groove)
 - 	made corners more rounded (moved from 3 facets to 9)
v2.6e
 - 	modified text especially size and depth for i.materialise order 0.4-0.5mm wide and deep
 - 	ensure model is output as 2 separate stl files with 1 part each!
v2.6d
 - 	Implemented flanges on bottom half based on belt_holder_v3.1.scad
v2.6c
 - 	Implemented ability to choose box shape i.e. "cuboid","rounded4sides", "rounded6sides", "chamfered6sides"
 - 	Ensured "box_type" module is used in generation of each box_half
v2.6b
 - 	investigated and fixed some top lip mis alignment
 - 	added wimuv3 stack as imported .stl
v2.6
 - 	implements loading external objects (such as .stl files) to place on faces
 - 	implemented overlooked translation of text on faces from previous version
 - 	fixed box_t in make_cutouts
 - 	Note: Top lip seems to be malformed lip_h is 0.5 less than it should be
v2.5 (AKA cutouts_on_faces_for_loop-v0_2.scad)
 - 	Implement tolerancing of connection between 2 halves using lip_fit
 - 	implement text on faces
 - 	Complete documentation
v2.4 (AKA cutouts_on_faces_for_loop-v0_4.scad)
 - 	user provides device dimensions and internal clearance(s), packaging dimensions are calculated based on this
 - 	preparations to allow for different wall_t in x,y,z
 - 	implement posts
 - 	mouse ears work properly
 - 	2 halves in "beside" layout joined by union

v2.3 2013-03-23 (AKA cutouts_on_faces_for_loop-v0_3.scad)
 - 	fixed calls to make_box and half_box modules
 - 	added ability to handle "holes" array for making cutouts to make_box and half_box modules
 - 	added module for rounded cuboid
 - 	fixed errors on rounded cuboid cutouts's use of a_bit
 - 	fixed translate errors for making lips on box
 - 	ensured all parts generate on z=0
 - 	gave top (greenish) and bottom (reddish) different colours for ease of identification
 - 	rotated top in "beside" layout to more intuitive orientation
 - 	added box cross module and included in hull calculations to ensure box sizes are exact even with low side count
 - 	added box_type module to allow choice of different shaped boxes or automatically swap them based on the current variables
 - 	added mouse_ears module
 Note: In stacked mode you may notice the red half looks like it is the full length, this appears to be a visualisation bug in openscad, the part is generated correctly

v2.2 2013-03-22 (AKA cutouts_on_faces_for_loop-v0_2.scad)
based on My own structure
 - 	New format [face_name, shape_name, shape_position[x_pos,y_pos,x_offs,y_offs,rotate,align], shape_size[depth,,,]]
 - 	 - 	face_name ("N", "S", "E", "W", "T", "B")
 - 	 - 	shape_name ("Square", "Rectangle" , "Round_Rect", "Cylinder", "Ellipse" , "Cone")
 - 	 - 	shape_position[x_pos,y_pos,x_offs,y_offs,rotate,align=("inside" or "outside")]
 - 	 - 	 - 	"Square" shape_size[depth, length_breadth]
 - 	 - 	 - 	"Rectangle" shape_size[depth, length, breadth]
 - 	 - 	 - 	"Round_Rect" shape_size[depth, length, breadth, corner_radius, corner_sides]
 - 	 - 	 - 	"Cylinder" shape_size[depth, radius ,sides]
 - 	 - 	 - 	"Ellipse" shape_size[depth, radius_length, radius_breadth, sides]
 - 	 - 	 - 	"Cone" shape_size[[depth, radius_bottom, radius_top ,sides]

 - 	pos_x and pos_y are chosen to align with views taken from the North, Top or East faces towards the origin so that they are aligned with [-x,+z], [+x,+y] & [+y,+z] respectively
 - 	rotation is clockwise about the plane of the North, Top or East faces as lookign towards the origin this means they are anticlockwise for the opposite faces(i.e. same convention as above)
 - 	these 2 conventiosn are chosen to make it easier to position cutouts that align with oppsite sides. e.g. a box that fits around a rotated ellipse pipe

v2.1 2013-03-22 (AKA cutouts_on_faces_for_loop-v0_1.scad)
 - based on kitlaan's array structure, supporting cones and rectangles
 - from kitlaan's Customisable Electronic Device Packaging http://www.thingiverse.com/thing:8607
 - 	 - 	rect [ x-offset, y-offset, x-width, y-width, corner-radius, corner-sides, depth, rotate ]
 - 	 - 	cylinder [ x-offset, y-offset, inner-radius, outer-radius, sides, depth, rotate ]

 @attention
Copyright (c) 2013 Tyndall National Institute.
All rights reserved.
Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without written agreement is hereby granted, provided that the above copyright notice and the following two paragraphs appear in all copies of this software.

IN NO EVENT SHALL TYNDALL NATIONAL INSTITUTE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF TYNDALL NATIONAL INSTITUTE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

TYNDALL NATIONAL INSTITUTE SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND TYNDALL NATIONAL INSTITUTE HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

*/
a_bit=0.1;
/* [User Controls] */
//dimensions of the object to be packaged
device_xyz=[23,37,18];
//size of the gap between each side of the object and the internal wall of the packaging
clearance_xyz=[0.5,0.25,0.5];//
//how thick the material of the packaging in each direction//recommend keeping X&Y value the same
//wall_thickness_xyz=[2,2,1];//not yet implemented!!!

//how thick the material of the packaging
wall_t=3;//thickness//actual most recent version has a base thickness of 2 but that is not yet fully implemented in this code

//The external radius of the rounded corners of the packaging
corner_radius=clearance_xyz[1]+wall_t;

//How many sides do these rounded corners have?
corner_sides=9;

//How high is the lip that connects the 2 halves?
lip_h=2;

//How tall is the top relative to the bottom
top_bottom_ratio=0.65;

//Does the part have mouse ears or not?
has_mouseears=false;//[true, false]

//how thick the flat discs that make the mosue ears should be (twice print layer thickness is a good idea)
mouse_ear_thickness=0.32*2;

//how large the flat discs that make the mouse ears are (5 to 15 generally work well)
mouse_ear_radius=10;

//the layout of the parts
layout="beside";//[beside, stacked, top, bottom, topflipped, bottomflipped]

//the orientation of the individual top/bottom half parts when generated separately
flipped=true;//[true, false]

//how far apart the 2 halves are in the "beside" layout
separation=4;//2;

//how much of an overlap (-ve) or gap (+ve) is there between the inner and outer lip surfaces, a value of 0 implies they meet perfectly in the middle
lip_fit=0.5;

//does it have an imported representaion of the actual device to be packaged?
has_device=false;//true/false

//what style of box is it
box_type="rounded4sides";//"rounded4sides";//"cuboid","rounded4sides", "rounded6sides", "chamfered6sides"

//data structure defining all the cutouts and depressions used on the packaging
holes = [ //format [face_name, shape_name, shape_position[x_pos,y_pos,x_offs,y_offs,rotate,align], shape_size[depth,,,]]
    ["S", "Rectangle", [0, 0, -1.5, -device_xyz[2]/2+5.5, 0, "inside"], [wall_t, 14, 7]],
    ["W", "Rectangle", [0, 0, -1.5, -device_xyz[2]/2+5.5, 0, "outside"], [wall_t+3, 39, 7]],
    // Reset button; Not needed, really.
    //["T", "Cylinder", [0, 0, 0.5, -device_xyz[1]/2+6, 0, "outside"], [wall_t, 1.5, 10]],

	//[depth, length, breadth, corner_radius, corner_sides]
	];

	post_tolerance=0.2;
//data structure defining all the internal supporting structures used on the packaging
posts = [ //format [face_name, shape_name shape_position[x_pos,y_pos,x_offs,y_offs,rotate,align], shape_size[depth,,,]]

	];
//data structure defining all the engraved text used on the packaging
text_engrave_emboss_depth=1;
text_height_big=7;
text_height_small=3;
text_spacing=1.1;
text = [//recessed text on faces [face_name, text_to_write, shape_position[x_pos,y_pos,x_offs,y_offs,rotate,align], shape_size[depth,font_height,font_spacing,mirror]] Note: for silly reasons mirror must be 0 or 1 corresponding to false and true in this version
	//["T", "WIMUv4",		[0,6,0,0,0,"outside"], 				[text_engrave_emboss_depth,text_height_big,text_spacing,0]],
	//["T", "+Z",			[0,-6,0,0,0,"outside"], 			[text_engrave_emboss_depth,text_height_big,text_spacing,0]],

	//["S", "uSD",		[-5,6.5,0,0,0,"outside"], 			[text_engrave_emboss_depth,text_height_small,text_spacing,0]],
	//["E", "I O",		[-10,-4,0,0,0,"outside"], 			[text_engrave_emboss_depth,text_height_small,text_spacing,0]],
	//["E", "USB",		[4,-4,0,0,0,"outside"], 			[text_engrave_emboss_depth,text_height_small,text_spacing,0]],
	//["S", "+X",			[10,0,0,5,0,"outside"], 			[text_engrave_emboss_depth,text_height_big,text_spacing,0]],
	//["N", "-X",			[0,0,0,0,0,"outside"], 				[text_engrave_emboss_depth,text_height_big,text_spacing,0]],
	//["W", "-Y",			[0,0,0,0,0,"outside"], 				[text_engrave_emboss_depth,text_height_big,text_spacing,0]],
	// ["E", "+Y",			[0,0,0,0,0,"outside"], 				[text_engrave_emboss_depth,text_height_big,text_spacing,0]],
	// ["T", "USB",		[21,4,0,0,270,"outside"], 			[text_engrave_emboss_depth,text_height_small,text_spacing,0]],
	// ["T", "O I",		[21,-10,0,0,90,"outside"], 			[text_engrave_emboss_depth,text_height_small,text_spacing,0]],
	// ["T", "uSD",		[-5,-14,0,0,0,"outside"], 			[text_engrave_emboss_depth,text_height_small,text_spacing,0]],
	];

//data structure defining external items such as .stl files to import
items =[//external items on faces [face_name, external_file, shape_position[x_pos,y_pos,x_offs,y_offs,rotate,align], shape_size[depth, scale_x,scale_y, scale_z, mirror]] Note: for silly reasons mirror must be 0 or 1 corresponding to false and true in this version
	//["B", "tyndall_logo_v0_2.stl",			[0,0,0,0,00,"outside"], 					[0.5,10/21.9,10/21.9,1.1/1.62,0]]
	];

//add external slotted flanges for say passing a belt or strap through in Z plane on up to 4 sides
has_flanges=true;//[true, false]
//how thick are the flanges in Z-direction
flange_t=wall_t;
//how "tall" is the slot in the flange i.e. thick is the material you will want to pass through the slot in the flange
slot_t=5;
//how wide is the slot in the flange
slot_w=5;
//define the flanges on each of the four sides
flanges=[
//flange_sides, flange_type, position[x_pos, y_pos], shape_size[flange_t, flange_case_gap, flange_wall_t,slot_b,slot_l,flange_sides]
	["N","rounded_slot",[0,0],	[flange_t,1,wall_t,slot_t,slot_w,corner_sides]],
	["S","rounded_slot",[0,0],	[flange_t,1,wall_t,slot_t,slot_w,corner_sides]],
	// ["E","rounded_slot",[0,0],	[flange_t,0,wall_t,slot_t,slot_w,corner_sides]],
	// ["W","rounded_slot",[0,0],	[flange_t,0,wall_t,slot_t,slot_w,corner_sides]],

	//["S","2_holes",		[0,0], 	[flange_t,0,wall_t,hole_center_sep,hole_r,box_s]],//[]
];
/* [Hidden] */
//a small number used for manifoldness
a_bit=0.01;
//x dimension of packaging
box_l=device_xyz[0]+2*(clearance_xyz[0]+wall_t); //box_l=device_xyz[0]+2*(clearance_xyz[0]+wall_thickness_xyz[0]);
//y dimension of packaging
box_b=device_xyz[1]+2*(clearance_xyz[1]+wall_t); //box_b=device_xyz[1]+2*(clearance_xyz[1]+wall_thickness_xyz[1]);
//z dimension of packaging
box_h=device_xyz[2]+2*(clearance_xyz[2]+wall_t);//box_h=device_xyz[2]+2*(clearance_xyz[2]+wall_thickness_xyz[2]);
//join together the 3 relevant mouse ear values
mouse_ears=[has_mouseears, mouse_ear_thickness, mouse_ear_radius];
//join together the 5 relevant box values
box=[box_l,box_b,box_h,corner_radius,corner_sides,wall_t];//

//choose if your packaging has a lockign feature between the lips
has_locking_feature=true;//true, false
//choose the shape of this locking feature
locking_feature_type="spheroid"; //["spheroid", "hexagonal", "groove"]

//for groove type locking features
locking_feature_r=lip_h/4;

//for hexagon type locking features
//radius 1 of locking feature for hexagon type locking features
locking_feature_r1=lip_h/4;
//radius 2 of locking feature for hexagon type locking features
locking_feature_r2=lip_h/6;
//height (actually more like length) of locking features along X-direction for hexagon type locking features
locking_feature_hx=20;
//height (actually more like length) of locking features along Y-direction for hexagon type locking features
locking_feature_hy=15;

//for spheroid type locking feature
//height of locking features above vertical surface for spheroid type locking features
locking_feature_max_h=lip_fit;
//depth of locking features from top to bottom in direction of lip h for spheroid type locking features
locking_feature_max_d=lip_h/2;
//length of locking features along X-direction for spheroid type locking features
locking_feature_max_lx=20;
//length of locking features along Y-direction for spheroid type locking features
locking_feature_max_ly=10;

//********************************includes******************//
use<OpenSCAD_Parametric_Packaging_Script_v2\write.scad>;

//******************************calls**********************//
	make_box(box,corner_radius, corner_sides, lip_h, lip_fit, top_bottom_ratio, mouse_ears, layout, flipped, separation, holes, posts, text, items, has_device, box_type, has_flanges, flanges);

include <OpenSCAD_Parametric_Packaging_Script_v2\make_box_v2_6k.scad>;

error: pathspec '3d-models/damper-mount/vent-cpu-mount.scad' did not match any file(s) known to git


cube made bigger, so that there will be anything to print at all... ;)

/*
 * small 3D cube for test prints
 */
cube([5, 10, 4]);

/*
 * small 3D cube for test prints
 */
cube([1, 2, 0.5]);


moineau: temporary change shaft to M8

moineau: temporary change shaft to M8

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/krasin/abc-cube.git/'


Minor changes to Z-axis

Minor changes to Z-axis

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Scalpel78/CNC-Machine.git/'


/ ‘Impression 3D/Mod Extruder Creatr/Maintien fil souple.scad’

error: pathspec 'Impression' did not match any file(s) known to git
error: pathspec '3D/Mod' did not match any file(s) known to git
error: pathspec 'Extruder' did not match any file(s) known to git
error: pathspec 'Creatr/Maintien' did not match any file(s) known to git
error: pathspec 'fil' did not match any file(s) known to git
error: pathspec 'souple.scad' did not match any file(s) known to git


Adjust nut to prevent middle strings slipping out

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/ehaskins/OpenSCAD.git/'


Add missed change

Add missed change


+ ‘Impression 3D/Mod Extruder Creatr/Maintien fil souple.scad’


[3d] Increase front offset 0.8->1.0, move probes back 0.6mm, decrease pic_ex 2->1.7

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/shmick/HeaterMeter.git/'


[3d] Return LCD screw holes to the case by request


[3d] Fix USB pillar reinforcements for walls <2.0mm


[3d] Add USB pillar reinforcements

[3d] Add USB pillar reinforcements


moineau: extract BOLT_MARGIN

moineau: extract BOLT_MARGIN


slice_r=4.4 for rotor. Still not air-tight


moineau: extract ROTOR_SLICE_R and REAL_ROTOR_SLICE_R = ROTOR_SLICE_R + ROTOR_SLICE_FIT.

This is a step towards reducing slice_r/rotate_r and making the rotor metallic.


moineau: implement nose with male luer fit (no threading). It's not great, but should be ok for now.


edge.scad: use r=1.8 mm hole to allow M3 bolt to rotate freely.


Add power hole and make channel larger

Add power hole and make channel larger


Create fret board mount screw test print


moineau: rotor now has a oldham coupling.


Test 1 time for dryer arrows

Test 1 time for dryer arrows


updates

updates

error: pathspec 'Misc' did not match any file(s) known to git
error: pathspec '3d/SpeakerMount.scad' did not match any file(s) known to git


base_10 removed

base_10 removed

Order of the Gilded Compass/base_10.scad

error: pathspec 'Order' did not match any file(s) known to git
error: pathspec 'of' did not match any file(s) known to git
error: pathspec 'the' did not match any file(s) known to git
error: pathspec 'Gilded' did not match any file(s) known to git
error: pathspec 'Compass/base_10.scad' did not match any file(s) known to git


Add left hinge for Ultimaker 2 door

Add left hinge for Ultimaker 2 door


moineau: extract outer_neck_r.

moineau: extract outer_neck_r.


edge.scad: add hinge hole (r=1.6)

edge.scad: add hinge hole (r=1.6)


left_hinge: increase space between hinges from 10 mm to 11 mm.


Fix manifoldness issue

Fix manifoldness issue


Added Center Mount

Added Center Mount

error: pathspec 'Misc' did not match any file(s) known to git
error: pathspec '3d/SpeakerCenterMount.scad' did not match any file(s) known to git


moineau: it can be rotated in the manual mode, but not perfect. Needs more trials.


added a few more connectors

added a few more connectors

error: pathspec 'raspberry' did not match any file(s) known to git
error: pathspec 'pi.scad' did not match any file(s) known to git


[3d] Reduce wall thickness by 0.14mm

[3d] Reduce wall thickness by 0.14mm


[3d] Reduce the size of the Pi right edge stop -0.5mm

It makes the case a little more difficult to assemble if the Pi jams up
on it


Update pontoon shape per Bill's request

Update pontoon shape per Bill's request


[3d] Make nuttraps less round on nut opening side for less overhang


[3d] Add small lips to front, left, and right sides to help with alignment

Also changes meaning of lip_tip_clip in locklip_n to clip the top edge
instead of the point


Improved Z-axis

Improved Z-axis


[3D] Remove all connectors from 1A+, increase nuttrap height 0.2,


moineau: extract RAIL_W and RAIL_H for Oldham couplings.


moineau: increase slice_r to 4+0.2 mm. Currently, it's close to be water-tight, but not quite yet. Also, the required torque is already beyond a regular NEMA17 motor


Pontoon tip draft sent to bill

Pontoon tip draft sent to bill


moineau: outer shape of stator is now a helix


moineau: extract OUTER_NECK_H

moineau: extract OUTER_NECK_H


moineau: slice_r=4+0.3 mm. At this point, it's nearly impossible to rotate the rotor. And it's still not watertight. Not even cream-tight. Some thought is required.


[3d] Add support for 3A+

[3d] Add support for 3A+

Just a mix of 3B+ and Zero configs.
USB port is NOT accessible from the outside.


Add first attempt at filling cap

Add first attempt at filling cap


Revert "[3d] Add a heatshield option to help trap heat"

This reverts commit 620e2271dc6e01db7f90105e22c5294c80951553.


[3d] Adjust LCD down ~0.5mm

[3d] Adjust LCD down ~0.5mm

The LCD is actually not centered on its PCB which I failed to recognize
when doing the design. This adjusts its window properly and also sets
its anchor based on the actual board layout. Overall this moves the
entire LCD/Button/LED section closer to the front by about 0.5mm and
seems to fit a little better.


Cleanup

Cleanup


moineau: water test failed again. Setting slice_r=4-0.1. Not tested yet


/ ‘Impression 3D/Mod Extruder Creatr/Maintien fil souple.scad’


Аденин и гуанин модель

Аденин и гуанин модель

/bin/sh: 1: T.scad: not found
error: pathspec '3D-models/SCAD/A' did not match any file(s) known to git


Adding engineering preview file.

Adding engineering preview file.

Teal Sport LED Strip Mod/teal_drone_plus_led_strips_assembled_preview.scad

error: pathspec 'Teal' did not match any file(s) known to git
error: pathspec 'Sport' did not match any file(s) known to git
error: pathspec 'LED' did not match any file(s) known to git
error: pathspec 'Strip' did not match any file(s) known to git
error: pathspec 'Mod/teal_drone_plus_led_strips_assembled_preview.scad' did not match any file(s) known to git


Fix warnings in Printrbot base

Fix warnings in Printrbot base


moineau: add stator_hollow

moineau: add stator_hollow


moineau: enlarge slice_r from 4-0.3 to 4-0.2. Still was not watertight


Initial check-in of Cooling Fan.  Has notches to hopefully help direct a little air towards the tip of the nozzle.

error: pathspec 'Cooling' did not match any file(s) known to git
error: pathspec 'Fan' did not match any file(s) known to git
error: pathspec 'Mount/cooling_fan_mount.scad' did not match any file(s) known to git


Improve bridge mount hole printability

Improve bridge mount hole printability


[3d] Refactor to not use rotate_extrude(angle)


Create bristle clamp for vacuum bracket

Create bristle clamp for vacuum bracket


moineau: correct oldham_byj_shaft.scad

moineau: correct oldham_byj_shaft.scad


moineau: factor out HELIX_H; make it longer 40mm -> 50 mm; now it's cream-tight at 30 psi.


moineau: merge _stator/stator and rigid analogs


Fixed bad include

Fixed bad include


moineau: introduce make_holes for flex stator. Rigid stator uses it and is now higher


Start hollowing chassis

Start hollowing chassis


moineau: rotate holes to have 3 holes on each side of the rigid stator. Note: stator is not yet splitted


Rebuild of Speaker Mount

Rebuild of Speaker Mount


Real measurements for Z-axis. Needs more work.


moineau: rotor now has a spacer. Slightly enlarge slice_r and rotate_r. Does not quite work yet.


Changes to the upper gantry

Changes to the upper gantry


Save the work in progress: support for the line tension measurement unit

error: pathspec 'Hardware/line_tension_measurement' did not match any file(s) known to git
error: pathspec 'support.scad' did not match any file(s) known to git


Update tuner holes after print

Update tuner holes after print


[3d] Move LCD/buttons/LEDs 0.695mm to right, etc

-- Most LCD didn't include 0.025in offset. Seems like it could need more?
-- Remove Pi alignment nubbies
-- Expand Pi ethernet jack cutout interior 0.5mm


Number plate 3 as printed

Number plate 3 as printed


[3d] Fix screw head mismatch between screwhole and nuttrap

The nuttrap() made a 6mm diameter 3.5mm deep hole and the screwhole()
only created a 3mm deep hole so the outer edge was angled internally for
0.5mm


Added Holder

Added Holder

error: pathspec 'Misc' did not match any file(s) known to git
error: pathspec '3d/3D' did not match any file(s) known to git
error: pathspec 'Printer/MoterHolder/Holder.scad' did not match any file(s) known to git


Added PCB mount

Added PCB mount

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Scalpel78/Ghost.git/'


[3d] Increased case height from 32mm to 32.5m, other tweaks

-- Increase case depth 1.0mm
-- Increase size of bottom wall chamfer to match pi mounting holes
-- Reduce size of top wall chamfer to match bottom
-- Pi Ethernet jack down 0.5mm
-- HeaterMeter output RJ45 up 0.6mm, 0.3mm thinner
-- Barrel power jack up 0.8mm
-- Thermocouple jack up 0.3mm
-- Thermocouple +/- up 1mm
-- Reduce size of nuttrap nut diameter by <0.01mm
-- Reduce button inset 0.25mm
-- Enable small Pi alignment nubs


[3d] Replace main cube fillet with new bead chamfer, round edges

-- Gives a round edge all the way around top and bottom lip instead of
pointy corners
-- Fix nuttrap to not be a centered block, only go to wall (makes it
0.25mm longer into case as well)


moineau: increase seal_r by 1 mm, increase distance between bolt holes and edge by 0.5 mm


[3d] Add option for mouselegs

[3d] Add option for mouselegs


moineau: extract RAIL_D for Oldham coupler


[3d] Add zero mounting hole supports

[3d] Add zero mounting hole supports


moineau: try to decrease the rotor size (does not work as a pump).

It's cream tight, but it does not push the paste to the nozzle. No idea what's wrong yet.


moineau: add neck to flex stator.

moineau: add neck to flex stator.


moineau: add neck to the rigid stator

moineau: add neck to the rigid stator


Create bar interlock dimensions test print


Correct number plate "3" with correct dimensions and text


Add missing stator.scad

Add missing stator.scad


[3d] Move power jack and ethernet jacks up slightly


moineau: remove neck_h argument from _stator. Use INNER_NECK_H.


Update

Update


moineau: fix period/twist calculation. Now, period is really a period.


moineau: reduce rotate_r for rotor twice. Otherwise, rotor and stator don't fit and the difference between them is a spiral instead of disconnected chunks.

Useful: always test difference between rotor and stator hollow in both ways:
  -- rotor should always be inside the stator hollow;
  -- stator hollow minus rotor should be disconnected chunks;


moineau: delete steel_rotor: too many hardcoded constants which are out of date


edge: 20 degrees

edge: 20 degrees


moineau: merge rail and _rail, since _rail does not have any parameters anymore.


left_hinge: extract hinge() subroutine.

left_hinge: extract hinge() subroutine.


moineau: slice_r = 4.5; still not water/air-tight


Increase slice_r, make rotor period twice smaller than rotor period


[3d] Offset HeaterMeter slightly from front edge of case

Guarantees at least one perimeter in front of front screw holes, as well
as allowing a small gap before the PCB starts which should make assembly
slightly easier and reduced chance of the front locklip intersecting the
closest components.


Labels

Labels

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/DanNixon/Alice.git/'


left_hinge: add actual hinges (2 parts, 5mm height, 10 mm spacing, r=1.6). The details is ugly yet.


Add a script for line tension measurement unit


Add teeth to the edge

Add teeth to the edge


moineau: make stator thicker. It will be printed with 20-25% infill, and it's expected to be more elastic.


Add cable chain mount to PSU base

Add cable chain mount to PSU base


Refactored chassis into plate module for main shape.


Added holder

Added holder

error: pathspec 'Misc' did not match any file(s) known to git
error: pathspec '3d/Lapplank/holder.scad' did not match any file(s) known to git


moineau: temporary switch rotor to M5 shaft

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/krasin/abc-cube.git/'


moineau: slice_r=4.9. It's still not water-tight, especially in the top. I should increase the distance between the material input and the top


syntax on scad

syntax on scad

fatal: /IAQ-Case.scad: '/IAQ-Case.scad' is outside repository


[3d] Extend top nuttrapp +e to be sure it is fully connected in the model


[3d] Enlarge button recesses, power jack hole


Créditos

Créditos

Order of the Gilded Compass/lib/prisma.scad

error: pathspec 'Order' did not match any file(s) known to git
error: pathspec 'of' did not match any file(s) known to git
error: pathspec 'the' did not match any file(s) known to git
error: pathspec 'Gilded' did not match any file(s) known to git
error: pathspec 'Compass/lib/prisma.scad' did not match any file(s) known to git


moineau: add material input path

moineau: add material input path


[3d] Fillet the case interior cube to create more thickness near top/bottom

-- Also increase the radius and height of the outside bchamfer


Add missed change

Add missed change

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/ehaskins/OpenSCAD.git/'


Fixed comment

Fixed comment

Teal Sport LED Strip Mod/teal_drone_top_cover_plain.scad

error: pathspec 'Teal' did not match any file(s) known to git
error: pathspec 'Sport' did not match any file(s) known to git
error: pathspec 'LED' did not match any file(s) known to git
error: pathspec 'Strip' did not match any file(s) known to git
error: pathspec 'Mod/teal_drone_top_cover_plain.scad' did not match any file(s) known to git


Began working on my own TSlot library for 8020's extrusions

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Scalpel78/CNC-Machine.git/'


Revise vacuum bracket for bristles and better mouting


Cap threads test 2

Cap threads test 2


[3d]  Add case 'connectorless' option and fix A+ split in a weird place

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/shmick/HeaterMeter.git/'


moineau: extract INNER_NECK_H

moineau: extract INNER_NECK_H


Update bridge interlock to match body hole


moineau: enlarge rotor, slice_r=4+0.4 mm. Now, it's water-tight, unless high pressure is applied. In this case, water will find its way out. I guess it's less of an issue with paste. Torque required to turn the rotor is high, that's a problem.


moineau: extract BOLT_NUM.

moineau: extract BOLT_NUM.


moineau: enlarge rotor slice_r by 0.1mm. Previous value was not watertight


Fix head overlab into neck

Fix head overlab into neck


moineau: adjust sizes to fit each other

moineau: adjust sizes to fit each other


First cap that threads on, but is difficult to start.


First version of 40mm fan duct for E3D hotend for Kossel

error: pathspec 'e3d' did not match any file(s) known to git
error: pathspec 'fan' did not match any file(s) known to git
error: pathspec 'duct/e3d-fan-duct.scad' did not match any file(s) known to git


Pickup Template for Lukas

Pickup Template for Lukas


Started battery tray

Started battery tray


Work on bridge with intonation adjustment


/ ‘Impression 3D/Mod Extruder Creatr/Maintien fil souple.scad’

error: pathspec 'Impression' did not match any file(s) known to git
error: pathspec '3D/Mod' did not match any file(s) known to git
error: pathspec 'Extruder' did not match any file(s) known to git
error: pathspec 'Creatr/Maintien' did not match any file(s) known to git
error: pathspec 'fil' did not match any file(s) known to git
error: pathspec 'souple.scad' did not match any file(s) known to git


edge: 30 degrees angle for easier snaps

edge: 30 degrees angle for easier snaps


Dust boot draft 2

Dust boot draft 2


[3d] Add 5 probe version of probewrap, smallerdefault wall

-- wall lowered from 2.5 to 2.0, remember to keep this a multiple of
trace width
-- Added 5 probe layout


Create pistol rack

Create pistol rack


Corrigido tamanho do tile, diminuído tamanho do dado e aumentado círculo para pegar o dado

Order of the Gilded Compass/6_iluminatti.scad

error: pathspec 'Order' did not match any file(s) known to git
error: pathspec 'of' did not match any file(s) known to git
error: pathspec 'the' did not match any file(s) known to git
error: pathspec 'Gilded' did not match any file(s) known to git
error: pathspec 'Compass/6_iluminatti.scad' did not match any file(s) known to git


Started on a lasercut sensorframe

Started on a lasercut sensorframe


some new stuff to test …

some new stuff to test …

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/trinamic/T-Bone.git/'


moineau: use $fn instead of $fs/$fa in stator.scad. Speed up STL generation 5x


Playing around

Playing around


[3d] Case LCD pins cutout isn't needed

[3d] Case LCD pins cutout isn't needed

The LCD pins aren't even as long as the shift register pins are!


Diminuído o tamanho do dado

Diminuído o tamanho do dado

error: pathspec 'Order' did not match any file(s) known to git
error: pathspec 'of' did not match any file(s) known to git
error: pathspec 'the' did not match any file(s) known to git
error: pathspec 'Gilded' did not match any file(s) known to git
error: pathspec 'Compass/common.scad' did not match any file(s) known to git


[3d] Move probe jacks back to calculated position, pi connector fix for v.thick walls

Seems that maybe the probe jacks were 0.6mm too far forward? Also the Pi
connectors wouldn't poke all the way through with a wall thickness of
0.25"


moineau: extract seal skip.

moineau: extract seal skip.


moineau: add bottom seal to stator

moineau: add bottom seal to stator


Correct support channel dimensions

Correct support channel dimensions


First draft of dryer top/bottom sign

First draft of dryer top/bottom sign


edge: make it longer for easier stick.

edge: make it longer for easier stick.


Minor animation changes

Minor animation changes


[3d] Add option for no probe holes, mousears back, center model

-- Adds a new Control_Probe = None which creates none of the 4 probe
holes
-- Readds MouseEarHeight. These do sort of work to help control ABS
warp. Set to one layer height.
-- Model is now centered straddling the X axis


Cap threads on easily. Marked 6.

Cap threads on easily. Marked 6.


[3d] Probe centerline moved up 0.3mm by math

2.25 - mount support
1.5? - Pi PCB thickness
2.54 - male header black bit
8.5 - female header
-5.5 - probe jack
= 9.29mm


Add trivial edge for 2.62 (~ 0.1") acrylic door for Ultimaker 2


moineau: extract FLEX_STATOR_SLICE_R and RIGID_STATOR_SLICE_R.


Fixed position of audio and composite video connector

error: pathspec 'raspberry' did not match any file(s) known to git
error: pathspec 'pi.scad' did not match any file(s) known to git


edge: set r = 1.7 mm because r = 1.8 mm was too large for M3 bolt.


moineau: extract HOLE_R.

moineau: extract HOLE_R.


moineau: extract BOLT_R.

moineau: extract BOLT_R.


Bal bot wheel

Bal bot wheel


[3d] Case adjust end stop and extra around phole

-- Raise the Pi endstop 1mm and shrink its length
-- Add small relief around probe holes to account for filament
accumulation
-- Reduce locklip_p height by 0.1mm


[3d] Expand the size of the LCD bezel inset by 1mm

Move lcd_neg down 0.5mm and increase the size of the inset by 1mm. The
LCD grab notch was kept in the same position allowing 0.5mm of vertical
slop.


[3d] Add optional mouseears to the case corners


Base - print attempt 2

Base - print attempt 2


moineau: add oldham shaft for BYJ48 stepper motor


moineau: extract RIGID_SEAL_H and FLEX_SEAL_H.


Extract STATOR_ROTATE_R and ROTOR_ROTATE_R = STATOR_ROTATE_R / 2.

This is another step towards reducing the size of the rotor.


Add oldham coupling. It seems to work, but has not yet been fully tested.


'nother test design …

'nother test design …


[3d] Move WALL from Advanced to normal options

WALL should be set to some sort of multiple of extrusion trace width to
prevent a hollow wall.


Delete OttoDIY_CUSTOM.scad

Delete OttoDIY_CUSTOM.scad

error: pathspec '3D' did not match any file(s) known to git
error: pathspec 'print/OttoDIY_CUSTOM.scad' did not match any file(s) known to git


LED controler for a dimension and sizing

error: pathspec 'led_controler_junction_box/controller.scad' did not match any file(s) known to git


XCarve dust boot draft 1

XCarve dust boot draft 1


[3d] One extended USB pillar was intersecting HM board


scad básico pros testes

scad básico pros testes

error: pathspec 'Order' did not match any file(s) known to git
error: pathspec 'of' did not match any file(s) known to git
error: pathspec 'the' did not match any file(s) known to git
error: pathspec 'Gilded' did not match any file(s) known to git
error: pathspec 'Compass/basic.scad' did not match any file(s) known to git


/ ‘Impression 3D/Mod Extruder Creatr/Maintien fil souple.scad’


Add Schmidt coupling experiments. I don't like the number of moving parts, and the fact that I can't produce it smaller than ~60 mm diameter, due to the size of ball bearings.


First major commit of dual extruder holder design.

Rostock Max V2 Dual Extruder Holder/extruder_constants.scad

error: pathspec 'Rostock' did not match any file(s) known to git
error: pathspec 'Max' did not match any file(s) known to git
error: pathspec 'V2' did not match any file(s) known to git
error: pathspec 'Dual' did not match any file(s) known to git
error: pathspec 'Extruder' did not match any file(s) known to git
error: pathspec 'Holder/extruder_constants.scad' did not match any file(s) known to git