variable length spacer placement and hd reverse, 180 z rotation, implemented

This commit is contained in:
Edward Kisiel
2025-04-17 15:53:56 -04:00
parent 53b242440f
commit f5793ea453
4 changed files with 352 additions and 51 deletions

View File

@@ -39,7 +39,7 @@ module cableholder_spacer(length) {
translate([size[0]/2,size[0]/2,0]) rotate([0,0,90]) long_slot(size[0],size[1],size[2]);
translate([-length,5,3]) rotate([0,90,0]) cylinder(d=6, h=length+1);
}
#translate([-length-adj,5,3]) rotate([0,90,0]) cylinder(d=3.2, h=length+size[0]+adj);
translate([-length-adj,5,3]) rotate([0,90,0]) cylinder(d=3.2, h=length+size[0]+adj);
translate([-1,8,-1]) cube([2,20,9]);
translate([5,9.5,-1]) rotate([0,0,90]) long_slot(4.5,11,9);
translate([3,20,-1]) rotate([0,0,45]) cube([2,6,9]);

View File

@@ -148,11 +148,11 @@ module case_side(case_design, side) {
cube([sidethick+(2*adj),wallthick,10]);
}
if(rear_fan == 1 || rear_fan == 2) {
translate([-1+(101.6-rear_fan_size)/2,-1,bottom_height+pcb_tmaxz+rear_fan_position])
translate([-1+(101.6-rear_fan_size)/2,-1,rear_fan_position])
rotate([90,0,0]) fan_mask(rear_fan_size, wallthick+2, rear_cooling);
}
if(rear_fan == 2) {
translate([-1+(101.6-rear_fan_size)/2,-1,bottom_height+pcb_tmaxz+rear_fan_position+3+rear_fan_size])
translate([-1+(101.6-rear_fan_size)/2,-1,rear_fan_position+3+rear_fan_size])
rotate([90,0,0]) fan_mask(rear_fan_size, wallthick+2, rear_cooling);
}
}
@@ -175,42 +175,80 @@ module case_side(case_design, side) {
translate([-sidethick-gap-adj,depth-(4*wallthick),case_z-30])
cube([sidethick+(2*adj),wallthick,10]);
}
// hex vent
translate([-gap+3,depth-3*(wallthick)+gap,5])
vent_hex(width/3.85,(case_z-6)/6,wallthick+4,5,1.5,"vertical");
// front cover pattern
if(front_cover_pattern != "solid" && case_design == "panel_nas") {
if(front_cover_pattern == "hex_5mm") {
translate([-gap+4,depth-3*(wallthick)+gap,5])
vent_hex(width/3.85,(case_z-6)/6,wallthick+4,5,1.5,"vertical");
}
if(front_cover_pattern == "hex_8mm") {
translate([-gap+5,depth-3*(wallthick)+gap,5])
vent_hex(width/5.5,(case_z-6)/9,floorthick+4,8,1.5,"vertical");
}
// vent(width, length, height, gap, rows, columns, orientation)
if(front_cover_pattern == "linear_vertical") {
translate([-gap+4,depth-3*(wallthick)+gap,5])
vent(wallthick,(case_z-2*(wallthick+gap)-20)/2,floorthick+4,1,2,(width-2*(wallthick+gap+sidethick))/4.2,"vertical");
}
if(front_cover_pattern == "linear_horizontal") {
translate([-gap+4,depth-3*(wallthick)+gap,5])
vent(width-2*(wallthick+gap+sidethick)-4,wallthick,floorthick+4,1,(case_z-2*(wallthick+gap)-10)/3,1,"vertical");
}
if(front_cover_pattern == "astroid") {
for(c=[3:12:depth-8]) {
for(r=[4:12:width-8]) {
translate([r,c,case_z-(2*floorthick)]) linear_extrude(floorthick+5) import("./dxf/astroid_8mm.dxf");
}
}
}
}
}
}
if(side == "right") {
difference() {
translate([width-2*sidethick,-(3*wallthick)-gap,-2*wallthick])
rotate([0,-90,0]) slab([case_z+(3*wallthick),depth+2*wallthick,sidethick],corner_fillet);
// rear edge top tab openings
translate([width-adj-(3*sidethick),-2*wallthick,case_z-30])
cube([sidethick+2*adj,wallthick+tol,20]);
translate([width-adj-(3*sidethick),-(4*wallthick),case_z-20-tol])
cube([sidethick+(2*adj),2*wallthick,10+tol]);
// rear edge bottom tab openings
translate([width-adj-(3*sidethick),-2*wallthick,20])
cube([sidethick+2*adj,wallthick+tol,20]);
translate([width-adj-(3*sidethick),-(4*wallthick),30-tol])
cube([sidethick+(2*adj),2*wallthick,10+tol]);
// front edge top tab openings
translate([width-(3*sidethick)-adj,depth-(4*wallthick),case_z-30])
cube([sidethick+(2*adj),wallthick,20]);
translate([width-(3*sidethick),depth-(4*wallthick),case_z-20-tol])
cube([sidethick+(2*adj)-adj,3*wallthick,10+tol]);
cube([sidethick+(2*adj),3*wallthick,10+tol]);
// front edge bottom tab openings
translate([width-(3*sidethick)-adj,depth-(4*wallthick),20])
cube([sidethick+(2*adj),wallthick,20]);
translate([width-(3*sidethick),depth-(4*wallthick),30-tol])
cube([sidethick+(2*adj)-adj,3*wallthick,10+tol]);
cube([sidethick+(2*adj),3*wallthick,10+tol]);
// hd holes for bays
for( i=[0:1:hd_bays-1]) {
translate([(width-101.6)-(3*sidethick)-gap,-(3*wallthick)-gap+hd_y_position,hd_z_position+(hd_space+27.1)*i])
rotate([0,0,0]) hd_holes(3.5, "portrait", "both", sidethick+2);
if(hd_reverse == false) {
for( i=[0:1:hd_bays-1]) {
translate([(width-101.6)-(3*sidethick)-gap,
-(3*wallthick)-gap+hd_y_position,hd_z_position+(hd_space+27.1)*i])
hd_holes(3.5, "portrait", "both", sidethick+2);
}
}
else {
for( i=[0:1:hd_bays-1]) {
translate([width-(3*sidethick)-adj,-(3*wallthick)-gap+hd_y_position+147,
hd_z_position+(hd_space+27.1)*i])
rotate([0,0,180]) hd_holes(3.5, "portrait", "both", sidethick+2);
}
}
// top edge front tab opening
translate([width-(3*sidethick)-adj,depth-(3*wallthick)-gap-adj-30,
case_z-(2*floorthick)])
@@ -245,33 +283,46 @@ module case_side(case_design, side) {
difference() {
translate([-gap,-(3*wallthick)-gap,-2*wallthick])
rotate([0,-90,0]) slab([case_z+(3*wallthick),depth+(2*wallthick),sidethick],corner_fillet);
// rear edge top tab openings
translate([-sidethick-gap-adj,-2*wallthick,case_z-30])
cube([sidethick+2*adj,wallthick+tol,20]);
translate([-sidethick-gap-adj,-(4*wallthick),case_z-20-tol])
cube([sidethick+(2*adj),2*wallthick,10+tol]);
// rear edge botom tab openings
translate([-sidethick-gap-adj,-2*wallthick,20])
cube([sidethick+2*adj,wallthick+tol,20]);
translate([-sidethick-gap-adj,-(4*wallthick),30-tol])
cube([sidethick+(2*adj),2*wallthick,10+tol]);
// front edge top tab openings
translate([-sidethick-gap-adj,depth-(4*wallthick),case_z-30])
cube([sidethick+(2*adj),wallthick,20]);
translate([-sidethick-gap-adj,depth-(4*wallthick),case_z-20-tol])
cube([sidethick+(2*adj)-adj,3*wallthick,10+tol]);
cube([sidethick+(2*adj),3*wallthick,10+tol]);
// front edge bottom tab openings
translate([-sidethick-gap-adj,depth-(4*wallthick),20])
cube([sidethick+(2*adj),wallthick,20]);
translate([-sidethick-gap-adj,depth-(4*wallthick),30-tol])
cube([sidethick+(2*adj)-adj,3*wallthick,10+tol]);
cube([sidethick+(2*adj),3*wallthick,10+tol]);
// hd holes for bays
for( i=[0:1:hd_bays-1]) {
translate([-gap+adj,-(3*wallthick)-gap+hd_y_position,hd_z_position+(hd_space+27.1)*i])
rotate([0,0,0]) hd_holes(3.5, "portrait", "both", sidethick+2);
if(hd_reverse == false) {
for( i=[0:1:hd_bays-1]) {
translate([-gap+adj,-(3*wallthick)-gap+hd_y_position,hd_z_position+(hd_space+27.1)*i])
rotate([0,0,0]) hd_holes(3.5, "portrait", "both", sidethick+2);
}
}
else {
for( i=[0:1:hd_bays-1]) {
translate([101.6-gap+adj,-(3*wallthick)-gap+hd_y_position+147,
hd_z_position+(hd_space+27.1)*i])
rotate([0,0,180]) hd_holes(3.5, "portrait", "both", sidethick+2);
}
}
// top edge front tab openings
translate([-gap-sidethick-adj,depth-(3*wallthick)-gap-adj-30,
case_z-(2*floorthick)])

View File

@@ -9584,7 +9584,7 @@
"view": "model",
"wallthick": "2"
},
"m2_panel_nas": {
"hc4_panel_nas": {
"$fn": "90",
"access_panel_location": "[10, 15]",
"access_panel_orientation": "landscape",
@@ -9623,7 +9623,7 @@
"bottom_standoff_type": "countersunk",
"case_design": "panel_nas",
"case_offset_bz": "0",
"case_offset_tz": "0",
"case_offset_tz": "-30",
"case_offset_x": "0",
"case_offset_y": "0",
"cooling": "default",
@@ -9682,12 +9682,13 @@
"fan_size": "0",
"flat_blank_section": "false",
"floorthick": "2",
"front_cover_pattern": "hex_5mm",
"gap": "1",
"gpio_opening": "default",
"hd_bays": "2",
"hd_space": "10",
"hd_y_position": "25",
"hd_z_position": "10",
"hd_y_position": "40",
"hd_z_position": "55",
"indents": "false",
"individual_part": "bottom",
"lower_bottom": "0",
@@ -9746,22 +9747,22 @@
"multipcb_top_standoff_support_size": "7",
"multipcb_top_standoff_type": "blind",
"multipcb_top_standoffs": "false",
"nas_sbc_location": "top",
"pcb_loc_x": "8",
"pcb_loc_y": "1",
"nas_sbc_location": "bottom",
"pcb_loc_x": "0",
"pcb_loc_y": "0",
"pcb_loc_z": "0",
"raise_top": "0",
"rear_cooling": "fan_hex",
"rear_fan": "1",
"rear_fan_position": "-20",
"rear_fan_position": "42",
"rear_fan_size": "80",
"rear_io_shield": "false",
"sbc_bottom_standoffs": "false",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_information": "false",
"sbc_model": "m2",
"sbc_model": "hc4",
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sbc_top_standoffs": "false",
"sidethick": "3",
"standard_motherboard_thickness": "0",
"text_color": "Green",
@@ -9792,7 +9793,7 @@
"top_standoff_support_height": "4",
"top_standoff_support_size": "10",
"top_standoff_type": "countersunk",
"uart_opening": "default",
"uart_opening": "none",
"view": "model",
"wallthick": "2"
},
@@ -9837,7 +9838,7 @@
"case_offset_bz": "0",
"case_offset_tz": "0",
"case_offset_x": "0",
"case_offset_y": "10",
"case_offset_y": "25",
"cooling": "fan_hex",
"corner_fillet": "3",
"edge_fillet": "0",
@@ -9894,12 +9895,14 @@
"fan_size": "80",
"flat_blank_section": "false",
"floorthick": "2",
"front_cover_pattern": "hex_5mm",
"gap": "1",
"gpio_opening": "default",
"gpio_opening": "none",
"hd_bays": "2",
"hd_reverse": "true",
"hd_space": "10",
"hd_y_position": "25",
"hd_z_position": "10",
"hd_y_position": "16",
"hd_z_position": "7",
"indents": "false",
"individual_part": "bottom",
"lower_bottom": "0",
@@ -9965,7 +9968,7 @@
"raise_top": "0",
"rear_cooling": "fan_hex",
"rear_fan": "1",
"rear_fan_position": "-50",
"rear_fan_position": "4",
"rear_fan_size": "80",
"rear_io_shield": "false",
"sbc_bottom_standoffs": "false",
@@ -10007,6 +10010,220 @@
"uart_opening": "default",
"view": "model",
"wallthick": "2"
},
"h4_panel_nas": {
"$fn": "90",
"access_panel_location": "[10, 15]",
"access_panel_orientation": "landscape",
"access_panel_rotation": "0",
"access_panel_size": "[70, 30]",
"accessory_highlight": "false",
"accessory_name": "none",
"adj": "0.01",
"bend_allowance": "1",
"bottom_access_panel_enable": "false",
"bottom_clearence": "3.5",
"bottom_cover_pattern": "solid",
"bottom_front_left_adjust": "0",
"bottom_front_left_enable": "true",
"bottom_front_left_support": "front",
"bottom_front_right_adjust": "0",
"bottom_front_right_enable": "true",
"bottom_front_right_support": "front",
"bottom_rear_left_adjust": "0",
"bottom_rear_left_enable": "true",
"bottom_rear_left_support": "rear",
"bottom_rear_right_adjust": "0",
"bottom_rear_right_enable": "true",
"bottom_rear_right_support": "rear",
"bottom_sidewall_support": "false",
"bottom_standoff_diameter": "5.75",
"bottom_standoff_hole_size": "3.4",
"bottom_standoff_insert": "false",
"bottom_standoff_insert_dia": "4.2",
"bottom_standoff_insert_height": "5.1",
"bottom_standoff_pillar": "hex",
"bottom_standoff_reverse": "false",
"bottom_standoff_size": "m3",
"bottom_standoff_support_height": "4",
"bottom_standoff_support_size": "10",
"bottom_standoff_type": "countersunk",
"case_design": "panel_nas",
"case_offset_bz": "6",
"case_offset_tz": "0",
"case_offset_x": "0",
"case_offset_y": "20",
"cooling": "fan_hex",
"corner_fillet": "3",
"edge_fillet": "0",
"ext_bottom_front_left_adjust": "0",
"ext_bottom_front_left_enable": "true",
"ext_bottom_front_left_support": "front",
"ext_bottom_front_right_adjust": "0",
"ext_bottom_front_right_enable": "true",
"ext_bottom_front_right_support": "front",
"ext_bottom_rear_left_adjust": "0",
"ext_bottom_rear_left_enable": "true",
"ext_bottom_rear_left_support": "rear",
"ext_bottom_rear_right_adjust": "0",
"ext_bottom_rear_right_enable": "true",
"ext_bottom_rear_right_support": "rear",
"ext_bottom_sidewall_support": "true",
"ext_bottom_standoff_diameter": "5.75",
"ext_bottom_standoff_hole_size": "3.4",
"ext_bottom_standoff_insert": "false",
"ext_bottom_standoff_insert_dia": "4.2",
"ext_bottom_standoff_insert_height": "5.1",
"ext_bottom_standoff_pillar": "hex",
"ext_bottom_standoff_reverse": "false",
"ext_bottom_standoff_size": "m3",
"ext_bottom_standoff_support_height": "4",
"ext_bottom_standoff_support_size": "10",
"ext_bottom_standoff_type": "countersunk",
"ext_bottom_standoffs": "false",
"ext_top_front_left_adjust": "0",
"ext_top_front_left_enable": "true",
"ext_top_front_left_support": "front",
"ext_top_front_right_adjust": "0",
"ext_top_front_right_enable": "true",
"ext_top_front_right_support": "front",
"ext_top_rear_left_adjust": "0",
"ext_top_rear_left_enable": "true",
"ext_top_rear_left_support": "rear",
"ext_top_rear_right_adjust": "0",
"ext_top_rear_right_enable": "true",
"ext_top_rear_right_support": "rear",
"ext_top_sidewall_support": "true",
"ext_top_standoff_diameter": "5.75",
"ext_top_standoff_hole_size": "2.75",
"ext_top_standoff_insert": "false",
"ext_top_standoff_insert_dia": "4.2",
"ext_top_standoff_insert_height": "5.1",
"ext_top_standoff_pillar": "hex",
"ext_top_standoff_reverse": "true",
"ext_top_standoff_size": "m3",
"ext_top_standoff_support_height": "4",
"ext_top_standoff_support_size": "10",
"ext_top_standoff_type": "blind",
"ext_top_standoffs": "false",
"fan_size": "80",
"flat_blank_section": "false",
"floorthick": "2",
"front_cover_pattern": "hex_5mm",
"gap": "1",
"gpio_opening": "none",
"hd_bays": "4",
"hd_reverse": "true",
"hd_space": "10",
"hd_y_position": "16",
"hd_z_position": "10",
"indents": "false",
"individual_part": "bottom",
"lower_bottom": "0",
"material_thickness": "0.5",
"move_front": "0",
"move_leftside": "0",
"move_rear": "0",
"move_rightside": "0",
"multipcb_bottom_front_left_adjust": "0",
"multipcb_bottom_front_left_enable": "true",
"multipcb_bottom_front_left_support": "front",
"multipcb_bottom_front_right_adjust": "0",
"multipcb_bottom_front_right_enable": "true",
"multipcb_bottom_front_right_support": "front",
"multipcb_bottom_rear_left_adjust": "0",
"multipcb_bottom_rear_left_enable": "true",
"multipcb_bottom_rear_left_support": "rear",
"multipcb_bottom_rear_right_adjust": "0",
"multipcb_bottom_rear_right_enable": "true",
"multipcb_bottom_rear_right_support": "rear",
"multipcb_bottom_sidewall_support": "false",
"multipcb_bottom_standoff_diameter": "5.75",
"multipcb_bottom_standoff_hole_size": "3.4",
"multipcb_bottom_standoff_insert": "false",
"multipcb_bottom_standoff_insert_dia": "4.2",
"multipcb_bottom_standoff_insert_height": "5.1",
"multipcb_bottom_standoff_pillar": "hex",
"multipcb_bottom_standoff_reverse": "false",
"multipcb_bottom_standoff_size": "m2.5",
"multipcb_bottom_standoff_support_height": "4",
"multipcb_bottom_standoff_support_size": "7",
"multipcb_bottom_standoff_type": "countersunk",
"multipcb_bottom_standoffs": "false",
"multipcb_top_front_left_adjust": "0",
"multipcb_top_front_left_enable": "true",
"multipcb_top_front_left_support": "front",
"multipcb_top_front_right_adjust": "0",
"multipcb_top_front_right_enable": "true",
"multipcb_top_front_right_support": "front",
"multipcb_top_rear_left_adjust": "0",
"multipcb_top_rear_left_enable": "true",
"multipcb_top_rear_left_support": "rear",
"multipcb_top_rear_right_adjust": "0",
"multipcb_top_rear_right_enable": "true",
"multipcb_top_rear_right_support": "rear",
"multipcb_top_sidewall_support": "false",
"multipcb_top_standoff_diameter": "5.75",
"multipcb_top_standoff_hole_size": "2.75",
"multipcb_top_standoff_insert": "false",
"multipcb_top_standoff_insert_dia": "4.2",
"multipcb_top_standoff_insert_height": "5.1",
"multipcb_top_standoff_pillar": "hex",
"multipcb_top_standoff_reverse": "true",
"multipcb_top_standoff_size": "m2.5",
"multipcb_top_standoff_support_height": "4",
"multipcb_top_standoff_support_size": "7",
"multipcb_top_standoff_type": "blind",
"multipcb_top_standoffs": "false",
"nas_sbc_location": "top",
"pcb_loc_x": "0",
"pcb_loc_y": "0",
"pcb_loc_z": "0",
"raise_top": "0",
"rear_cooling": "fan_hex",
"rear_fan": "2",
"rear_fan_position": "4",
"rear_fan_size": "80",
"rear_io_shield": "false",
"sbc_bottom_standoffs": "false",
"sbc_highlight": "false",
"sbc_information": "false",
"sbc_model": "h4+",
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "3",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
"top_cover_pattern": "solid",
"top_front_left_adjust": "0",
"top_front_left_enable": "true",
"top_front_left_support": "front",
"top_front_right_adjust": "0",
"top_front_right_enable": "true",
"top_front_right_support": "front",
"top_rear_left_adjust": "0",
"top_rear_left_enable": "true",
"top_rear_left_support": "rear",
"top_rear_right_adjust": "0",
"top_rear_right_enable": "true",
"top_rear_right_support": "rear",
"top_sidewall_support": "false",
"top_standoff_diameter": "5.75",
"top_standoff_hole_size": "2.75",
"top_standoff_insert": "false",
"top_standoff_insert_dia": "4.2",
"top_standoff_insert_height": "5.1",
"top_standoff_pillar": "hex",
"top_standoff_reverse": "true",
"top_standoff_size": "m3",
"top_standoff_support_height": "10",
"top_standoff_support_size": "10",
"top_standoff_type": "recessed",
"uart_opening": "default",
"view": "model",
"wallthick": "2"
}
},
"fileFormatVersion": "1"

View File

@@ -88,9 +88,9 @@ case_offset_tz = 0; //[-30:.01:300]
case_offset_bz = 0; //[0:.01:300]
// case wall thickness
wallthick = 2; //[1:.01:5]
// case floor thickness
// case floor and ceiling thickness
floorthick = 2; //[1:.01:5]
// side wall thickness for tray_side cases only
// side wall thickness for tray_side and panel_nas cases only
sidethick = 2; //[1:.01:5]
// distance between pcb and case
gap = 1; //[.5:.01:5]
@@ -104,17 +104,19 @@ tol = .25; //[-.5:.0625:.5]
/* [Fan and Vent Openings] */
// top cover pattern
top_cover_pattern = "solid"; //[solid,hex_5mm,hex_8mm,linear_vertical,linear_horizontal,astroid]
// front cover pattern for nas cases
front_cover_pattern = "solid"; //[solid,hex_5mm,hex_8mm,linear_vertical,linear_horizontal,astroid]
// bottom cover pattern
bottom_cover_pattern = "solid"; //[solid,hex_5mm,hex_8mm,linear_vertical,linear_horizontal,astroid]
// heatsink opening
cooling = "default"; // [default,none,open,fan_open,fan_1,fan_2,fan_hex,vent,vent_hex_5mm,vent_hex_8mm,custom]
fan_size = 0; // [0,25,30,40,50,60,70,80,92]
// rear fan number for nas cases
rear_fan = 1; // [1,2]
rear_fan = 1; // [1:2]
// rear fan opening
rear_cooling = "fan_hex"; // [fan_open,fan_1,fan_2,fan_hex,custom]
rear_fan_size = 80; // [0,25,30,40,50,60,70,80,92]
rear_fan_position = 0; // [-50:300]
rear_fan_position = 0; // [0:1:300]
/* [Bottom Access Panel] */
bottom_access_panel_enable = false;
@@ -132,10 +134,12 @@ uart_opening = "default"; // [default,none,open,knockout]
indents = true;
// nas sbc location
nas_sbc_location = "top"; // ["top","bottom"]
// rotate hd 180 degrees in the z-axis
hd_reverse = false; // [true, false]
// number of nas drive bays
hd_bays = 2; // [1:6]
hd_y_position = 25; // [1:300]
hd_z_position = 40; // [1:300]
hd_y_position = 25; // [0:300]
hd_z_position = 40; // [0:300]
hd_space = 10; // [1:50]
// case accessory group to load
@@ -665,22 +669,51 @@ if (view == "model") {
translate([pcb_loc_x ,pcb_loc_y,bottom_height-pcb_z+pcb_loc_z])
sbc(sbc_model, cooling, fan_size, gpio_opening, uart_opening, false);
}
if(sbc_off == false && nas_sbc_location == "top") {
if(sbc_off == false && nas_sbc_location == "top") {
translate([pcb_loc_x ,pcb_loc_y,case_z-(top_height+pcb_loc_z+(2*floorthick))+.5])
sbc(sbc_model, cooling, fan_size, gpio_opening, uart_opening, false);
}
for( i=[0:1:hd_bays-1]) {
translate([-gap,-(3*wallthick)-gap+hd_y_position,hd_z_position+(hd_space+27.1)*i])
rotate([0,0,0]) hd35("portrait", [false,0,0,"default"]);
if(pcb_width > 100) {
translate([101.6-gap+wallthick+(width-2*(sidethick+gap)-101.6)-11.4,28.5-(3*wallthick)-gap+hd_y_position+101.6,hd_z_position+6+(hd_space+27.1)*i])
rotate([0,0,0]) cableholder_spacer((width-2*(sidethick+gap)-101.6)-9.4);
if(hd_reverse == false) {
translate([-gap,-(3*wallthick)-gap+hd_y_position,hd_z_position+(hd_space+27.1)*i])
hd35("portrait", [false,0,0,"default"]);
if(pcb_width > 100) {
translate([101.6-gap+wallthick+(width-2*(sidethick+gap)-101.6)-11.4,
28.5-(3*wallthick)-gap+hd_y_position+101.6,
hd_z_position+6+(hd_space+27.1)*i])
cableholder_spacer((width-2*(sidethick+gap)-101.6)-9.4);
translate([101.6-gap+wallthick+(width-2*(sidethick+gap)-101.6)-11.4,-31-(3*wallthick)-gap+hd_y_position+101.6,hd_z_position+6+(hd_space+27.1)*i])
rotate([0,0,0]) cableholder_spacer((width-2*(sidethick+gap)-101.6)-9.4);
translate([101.6-gap+wallthick+(width-2*(sidethick+gap)-101.6)-11.4,
-31-(3*wallthick)-gap+hd_y_position+101.6,
hd_z_position+6+(hd_space+27.1)*i])
cableholder_spacer((width-2*(sidethick+gap)-101.6)-9.4);
translate([101.6-gap+wallthick+(width-2*(sidethick+gap)-101.6)-11.4,-73-(3*wallthick)-gap+hd_y_position+101.6,hd_z_position+6+(hd_space+27.1)*i])
rotate([0,0,0]) cableholder_spacer((width-2*(sidethick+gap)-101.6)-9.4);
translate([101.6-gap+wallthick+(width-2*(sidethick+gap)-101.6)-11.4,
-73-(3*wallthick)-gap+hd_y_position+101.6,
hd_z_position+6+(hd_space+27.1)*i])
cableholder_spacer((width-2*(sidethick+gap)-101.6)-9.4);
}
}
else {
translate([-gap+101.6,-(3*wallthick)-gap+hd_y_position+147,
hd_z_position+(hd_space+27.1)*i])
rotate([0,0,180]) hd35("portrait", [false,0,0,"default"]);
if(pcb_width > 100) {
translate([101.6-gap+wallthick+(width-2*(sidethick+gap)-101.6)-11.4,
17-(3*wallthick)-gap+hd_y_position+101.6,
hd_z_position+6.5+(hd_space+27.1)*i])
cableholder_spacer((width-2*(sidethick+gap)-101.6)-9.4);
translate([101.6-gap+wallthick+(width-2*(sidethick+gap)-101.6)-11.4,
-25-(3*wallthick)-gap+hd_y_position+101.6,
hd_z_position+6.5+(hd_space+27.1)*i])
cableholder_spacer((width-2*(sidethick+gap)-101.6)-9.4);
translate([101.6-gap+wallthick+(width-2*(sidethick+gap)-101.6)-11.4,
-84.5-(3*wallthick)-gap+hd_y_position+101.6,
hd_z_position+6.5+(hd_space+27.1)*i])
cableholder_spacer((width-2*(sidethick+gap)-101.6)-9.4);
}
}
}
}