offSetLaser=0.15; segmentSize=75; //mm tickness = 3.18; //mm material resolution=50; connectorLength=10; deepBump=0.5; widthBump=0.2; chamfer=1; chamferOffset=1; chamferConnector=1; chamferConnectorOffset=0.5; laserCutterMode=1; nbConnector=24; module OrcasConnector(a=[0,90],r=[0,90,0]){ rotate(r){ difference(){ union(){ for(j=a) rotate([0,0,j]){ for(i=[1,-1]){ translate([connectorLength,i*tickness-i*deepBump,0]) scale([1+widthBump,1,1]) cylinder(d=tickness,h=tickness,$fn=resolution,center=true); translate([connectorLength/2,i*tickness*1.25-i*deepBump,0]) cube([connectorLength,tickness/2,tickness],center=true); } translate([deepBump,0,0]) scale([1,(3*tickness-deepBump*2)/(3*tickness),1]) cylinder(d=3*tickness,h=tickness,$fn=resolution,center=true); } } for(j=a) rotate([0,0,j]){ translate([1.5*tickness,0,0]) cube([tickness-offSetLaser*2,tickness-offSetLaser*2,tickness+1],center=true); if(chamferConnector==1) for(i=[1,-1]) translate([1.5*tickness+deepBump+0.3-chamferConnectorOffset,i*tickness/3+0.1,0]) rotate([0,0,45]) cube([tickness/2,tickness/2,tickness+1],center=true); } } } } module OrcasHole(v){ for(i=[0,v[0]/4,-v[0]/4]){ translate([i,v[1]/2-connectorLength+tickness/2,0],center=true) cube([tickness-offSetLaser*2,tickness,tickness*2],center=true); translate([i,v[1]/2+tickness/2,0],center=true) cube([tickness-offSetLaser*2,tickness*2,tickness*2],center=true); if(chamfer==1){ for(k=[tickness,-tickness]) translate([i+k/(3.4-chamferOffset),v[1]/2+tickness/2,0],center=true) rotate([0,0,45]) cube([tickness,tickness,tickness*2],center=true); } } } module OrcasCube(v){ difference(){ cube([v[0]+offSetLaser,v[1]+offSetLaser,v[2]],center=true); OrcasHole(v); mirror([0,1,0])OrcasHole(v); rotate([0,0,90]){ OrcasHole([v[1],v[0],v[2]]); mirror([0,1,0])OrcasHole([v[1],v[0],v[2]]); } } } module OrcasCubeBoxe(x=segmentSize,y=segmentSize,z=segmentSize){ for(i=[1,2,3,4]) rotate([90*i,0,0]) translate([0,0,z/2+tickness/2]) OrcasCube([x,y,tickness]); } module OrcasConnectorBoxe(){ for(i=[1,2,3,4]) rotate([90*i,0,0]) translate([0,-segmentSize/2-tickness/2,segmentSize/2+tickness/2]) OrcasConnector([0,90]); } if(laserCutterMode==0){ OrcasCubeBoxe(segmentSize,segmentSize,segmentSize); OrcasConnectorBoxe(); } else{ /* projection(){ for(i=[0:3]) rotate([0,0,i*90]) translate([-segmentSize/1.7,-segmentSize/1.7]) OrcasConnector(r=[0,0,0]); OrcasCube([segmentSize,segmentSize,tickness]); } translate([2*segmentSize,0,0]) projection(){ for(i=[0:3]) rotate([0,0,i*90]) translate([-2*segmentSize/1.7,-segmentSize/1.7]) OrcasConnector(r=[0,0,0]); OrcasCube([2*segmentSize,segmentSize,tickness]); } */ projection() rotate([0,90,0]) { translate([0,2*10,0]) OrcasConnector(a=[0,90,180]); translate([0,-2*20,0]) OrcasConnector(a=[0,90,180,270]); } } //translate([0,-segmentSize/2-tickness/2,0]) // OrcasConnector(tickness,[0,90]);