- 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);
+ left_cnr = ci[2];
+ bigr= round_cnr_rad - round_edge_rad;
+ l_uvec = unitvector2d(left_cnr - this_cnr);
+ r_uvec = unitvector2d(right_cnr - this_cnr);
+ lp1 = left_cnr + clockwise2d(l_uvec) * bigr;
+ lp2 = this_cnr + clockwise2d(l_uvec) * bigr;
+ lp3 = this_cnr - clockwise2d(r_uvec) * bigr;
+ lp4 = right_cnr - clockwise2d(r_uvec) * bigr;
+ ctr = line_intersection_2d(lp1,lp2,lp3,lp4)
+')
+
+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);