}
}
-module RoundCornerCut(ci) {
- // ci should be [this_cnr, right_cnr, left_cnr]
- // where right_cnr is to the right (ie, anticlockwise)
+m4_define(`ROUNDCORNER_VARS',`
this_cnr = ci[0];
right_cnr = ci[1];
left_cnr = ci[2];
- offr= round_cnr_rad - round_edge_rad;
- INREFFRAME(this_cnr, right_cnr) INREFFRAME_EDGE {
- difference(){
- cube(offr*2 - 0.1, center=true);
- translate([offr, offr, 0])
- cylinder(center=true, h=20, r= offr);
+ bigr= round_cnr_rad - round_edge_rad;
+ l_uvec = unitvector2d(left_cnr - this_cnr);
+ r_uvec = unitvector2d(right_cnr - this_cnr);
+ ctr = line_intersection_2d(
+ left_cnr - clockwise2d(r_uvec) * round_cnr_rad,
+ this_cnr - clockwise2d(r_uvec) * round_cnr_rad,
+ this_cnr + clockwise2d(l_uvec) * round_cnr_rad,
+ right_cnr + clockwise2d(l_uvec) * round_cnr_rad )
+')
+
+module RoundCorner_selector(ci, adj) {
+ ROUNDCORNER_VARS;
+ echo("RCS",l_uvec,ctr);
+ union(){
+ INREFFRAME(this_cnr, right_cnr) {
+ cube(bigr*2 + adj, center=true);
+ }
+ }
+ %translate(concat(ctr,[0])) circle(1);
+ if(0){
+ union(){
+ INREFFRAME(this_cnr, right_cnr) {
+// %translate([ -bigr,-bigr,0 ])
+// cube([bigr*2 + adj, bigr*3, bigr*2]);
+ }
+ }
+ union(){
+ INREFFRAME(this_cnr, left_cnr) {
+ %translate([ -bigr,-bigr,0 ])
+ cube(bigr*2 + adj);
+ }
+ }}
+}
+
+module RoundCornerCut(ci) {
+ // ci should be [this_cnr, right_cnr, left_cnr]
+ // where right_cnr is to the right (ie, anticlockwise)
+ ROUNDCORNER_VARS;
+ difference(){
+ RoundCorner_selector(ci, -0.1);
+ INREFFRAME(this_cnr, right_cnr) INREFFRAME_EDGE {
+ translate([bigr, bigr, 0])
+ cylinder(center=true, h=20, r= bigr);
}
}
}
module RoundCornerAdd(ci) {
- this_cnr = ci[0];
- right_cnr = ci[1];
- left_cnr = ci[2];
- bigr = round_cnr_rad - round_edge_rad;
- INREFFRAME(this_cnr, right_cnr) INREFFRAME_EDGE {
- intersection(){
- cube(bigr*2 + 0.1, center=true);
+ ROUNDCORNER_VARS;
+ intersection(){
+ RoundCorner_selector(ci, +0.1);
+ INREFFRAME(this_cnr, right_cnr) INREFFRAME_EDGE {
translate([bigr, bigr, 0])
rotate_extrude(convexity=10, $fn=50)
translate([bigr, 0])
}
module RoundCornerDemo(){ ////toplevel
- cnr = [ [0,0], [15,0], [-10,10] ];
+ cnr = [ [0,0], [15,0], [-10,12] ];
translate([0,25,0]) RoundCornerDemo_plat(cnr);
translate([25,0,0]) RoundCornerAdd(cnr);
translate([-25,0,0]) RoundCornerCut(cnr);
+ translate([0,-25,0]) RoundCorner_selector(cnr, 0);
difference(){
RoundCornerDemo_plat(cnr);
RoundCornerCut(cnr);