// Bioinspired intratumoral infusion port catheter improves local drug delivery in the liver // units: mm $fn=128; // should be divisible by 4, max 128, use lower values for speed outer_diameter=8/3; // 8 Fr inner_diameter=1; cut_angle=15; barb_angle=25; cut_height=1.5; barb_height=1.8; barb_radial_shift=0.1; side_hole_diameter=0.4; side_hole_angle=40; barb_position_height = [ for (i=[0:17]) 1*i+10 ]; barb_position_angle= [ for (i=[0:17]) 100*i ]; module notch(catheter_angle, catheter_height, notch_height) { // notch at position given by catheter_angle and catheter_height // the notch is a right triangle with height = notch_height, angle = cut_angle, and hypotenuse = notch_height/cos(cut_angle) rotate(catheter_angle,[0,0,1]) translate([-notch_height, -outer_diameter/2, catheter_height]) render() intersection() { rotate(-cut_angle,[1,0,0]) translate([0,-notch_height/cos(cut_angle),0]) cube([2*notch_height/cos(cut_angle), notch_height/cos(cut_angle), notch_height/cos(cut_angle)], center=false); cube([2*notch_height, notch_height, notch_height], center=false); } } module catheter() { difference() { union () { cylinder(h=30,d=outer_diameter); translate([0,0,30]) cylinder(h=10, d1=outer_diameter,d2=inner_diameter); // taper tip } translate([0,0,-5]) cylinder(h=50,d=inner_diameter); } } // cut notches in catheter module catheter_with_notches() { difference() { catheter(); for (i=[0: len(barb_position_height)-1]) { notch(barb_position_angle[i],barb_position_height[i],cut_height); } } } // rotate the cut notches to create barbs module catheter_barbs() { for (i=[0: len(barb_position_height)-1]) { translate([outer_diameter/2*sin(barb_position_angle[i]), -outer_diameter/2*cos(barb_position_angle[i]), barb_position_height[i]+barb_height]) rotate(barb_position_angle[i],[0,0,1]) translate([0,barb_radial_shift,0]) rotate(-barb_angle,[1,0,0]) rotate(-barb_position_angle[i],[0,0,1]) translate([-outer_diameter/2*sin(barb_position_angle[i]), outer_diameter/2*cos(barb_position_angle[i]), -barb_position_height[i]-barb_height]) render() intersection() { catheter(); notch(barb_position_angle[i],barb_position_height[i],barb_height); } } } difference() { union() { catheter_with_notches(); catheter_barbs(); } for (i=[0: len(barb_position_height)-1]) { rotate(barb_position_angle[i],[0,0,1]) translate([0, 0, barb_position_height[i]+1.62*barb_height]) rotate(180-side_hole_angle,[1,0,0]) scale(v = [1, 0.5, 1]) cylinder(h=outer_diameter*5, d=side_hole_diameter); } //translate([0,-5,-5]) cube([5,10,50]); }