Initial commit
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
*.gcode
|
||||
*.cxprj
|
||||
*.zip
|
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
[submodule "nutsnbolts"]
|
||||
path = nutsnbolts
|
||||
url = https://github.com/JohK/nutsnbolts
|
BIN
Carbon_Filter_Grid.STL
Normal file
BIN
FP4 back.blend
Normal file
BIN
FP4 back.blend1
Normal file
BIN
Fox_-_Voronoi.stl
Normal file
BIN
K1 door base 3.stl
Normal file
BIN
PETE.stl
Normal file
BIN
Peg_winder_10x25mm.stl
Normal file
BIN
SaturnV_ver3_print.stl
Normal file
BIN
Stock_Holder.stl
Normal file
48
bag hanger.scad
Normal file
|
@ -0,0 +1,48 @@
|
|||
// Bag hanger
|
||||
// length units are millimeters
|
||||
|
||||
rodDiameter = 32;//31.74;
|
||||
rodRadius = rodDiameter / 2;
|
||||
hangerThickness = 6.00;
|
||||
outerHangerRadius = rodRadius + hangerThickness;
|
||||
fullHeight = 50.00;
|
||||
hookThickness = 15.00;
|
||||
hookStemLength = rodRadius * 2;
|
||||
hookStopperRadius = hangerThickness + 1;
|
||||
|
||||
circleResolution=360*4; // faces per rotation
|
||||
|
||||
include <ng_common/hollow_cylinder.scad>;
|
||||
|
||||
// hanger pole wrapper
|
||||
difference() {
|
||||
hollowCylinder(rodRadius, outerHangerRadius, fullHeight);
|
||||
translate([-rodRadius, 0, -0.01])
|
||||
cube([rodRadius * 2, outerHangerRadius + 0.01, fullHeight + 0.02]);
|
||||
translate([-outerHangerRadius, rodRadius - (hangerThickness * 1.5), -0.01])
|
||||
cube([outerHangerRadius * 2, outerHangerRadius + 0.01, fullHeight + 0.02]);
|
||||
}
|
||||
|
||||
// connector from hanger cylinder to hook
|
||||
translate([rodRadius, 0, 0])
|
||||
cube([hangerThickness, hookStemLength + outerHangerRadius, hookThickness]);
|
||||
|
||||
// quarter cylinder for hook
|
||||
translate([0, hookStemLength + outerHangerRadius, 0]) difference() {
|
||||
hollowCylinder(rodRadius, outerHangerRadius, hookThickness);
|
||||
translate([-(outerHangerRadius + 0.01),-(outerHangerRadius + 0.01),-0.01])
|
||||
cube([outerHangerRadius + 0.01, (outerHangerRadius * 2) + 0.02, hookThickness + 0.02]);
|
||||
translate([-(outerHangerRadius + 0.01),-(outerHangerRadius + 0.01),-0.01])
|
||||
cube([(outerHangerRadius * 2) + 0.02, outerHangerRadius + 0.02, hookThickness + 0.02]);
|
||||
}
|
||||
|
||||
// hook
|
||||
translate([0, outerHangerRadius + hookStemLength + outerHangerRadius - (hangerThickness/2)]) {
|
||||
cylinder(h=fullHeight, r=hangerThickness, $fn=circleResolution);
|
||||
translate([0,0,fullHeight])
|
||||
difference() {
|
||||
cylinder(h=hangerThickness / 2, r=hookStopperRadius, $fn=circleResolution);
|
||||
translate([- (hookStopperRadius + 0.01),-0.01,-0.01])
|
||||
cube([(hookStopperRadius * 2) + 0.02, hookStopperRadius + 0.02, hangerThickness / 2+ 0.02]);
|
||||
}
|
||||
}
|
BIN
bag hanger.stl
Normal file
62
bb_q10_disassembled.scad
Normal file
|
@ -0,0 +1,62 @@
|
|||
// Blackberry Q10 frame backing and parts mounts
|
||||
// length units are millimeters
|
||||
|
||||
frameHeight = 202.00;
|
||||
frameWidth = frameHeight;
|
||||
frameDepth = 14.00;
|
||||
frameBorder = 5.00;
|
||||
|
||||
screwThreadRadius = 0.7;
|
||||
screwSupportRadius = 2.00;
|
||||
|
||||
include <ng_common/hollow_cylinder.scad>;
|
||||
|
||||
// base
|
||||
cube([frameWidth, 0.4, frameHeight]);
|
||||
|
||||
// side frame and loudspeaker
|
||||
translate([frameWidth - (15 + frameBorder), 0, frameHeight - (30 + frameBorder)]) {
|
||||
rotate([90,0,0])
|
||||
hollowCylinder(screwThreadRadius, screwSupportRadius, 2.80);
|
||||
}
|
||||
translate([frameWidth - (73.1 + frameBorder), 0, frameHeight - (30 + frameBorder)]) {
|
||||
rotate([90,0,0])
|
||||
hollowCylinder(screwThreadRadius, screwSupportRadius, 2.80);
|
||||
}
|
||||
|
||||
// mainboard
|
||||
translate([frameWidth - (30 + frameBorder), 0, 120 - frameBorder]) {
|
||||
rotate([90,0,0])
|
||||
hollowCylinder(screwThreadRadius, screwSupportRadius, 12);
|
||||
}
|
||||
translate([frameWidth - (30 + frameBorder), 0, 22.5 - frameBorder]) {
|
||||
rotate([90,0,0])
|
||||
hollowCylinder(screwThreadRadius, screwSupportRadius, 12);
|
||||
}
|
||||
|
||||
// keyboard
|
||||
translate([frameWidth - (85 + frameBorder), 0, 40 + frameBorder]) {
|
||||
rotate([90,0,0])
|
||||
hollowCylinder(screwThreadRadius, screwSupportRadius, 7.80);
|
||||
}
|
||||
|
||||
// display and midframe
|
||||
translate([frameWidth - (95 + frameBorder), 0, 90 + frameBorder]) {
|
||||
rotate([90,0,0])
|
||||
hollowCylinder(screwThreadRadius, screwSupportRadius, 7.80);
|
||||
}
|
||||
|
||||
// top back cover
|
||||
translate([60 + frameBorder, 0, 130 + frameBorder]) {
|
||||
rotate([90,0,0])
|
||||
hollowCylinder(screwThreadRadius, screwSupportRadius, 3.00);
|
||||
}
|
||||
translate([33.1 + frameBorder, 0, 130 + frameBorder]) {
|
||||
rotate([90,0,0])
|
||||
hollowCylinder(screwThreadRadius, screwSupportRadius, 3.00);
|
||||
}
|
||||
|
||||
// bottom back cover
|
||||
translate([40 + frameBorder, -5, 15 + frameBorder]) {
|
||||
cube([10, 5, 2]);
|
||||
}
|
BIN
bb_q10_disassembled.stl
Normal file
BIN
benchy/3DBenchy.3mf
Normal file
BIN
benchy/3DBenchy.stl
Normal file
603
benchy/benchy_silk_pla.cxprofile
Normal file
|
@ -0,0 +1,603 @@
|
|||
[Default]
|
||||
acceleration_breaking=50
|
||||
acceleration_breaking_enable=true
|
||||
acceleration_enabled=false
|
||||
acceleration_infill=12000
|
||||
acceleration_ironing=5000
|
||||
acceleration_layer_0=500
|
||||
acceleration_limit_mess="[[0.5,1.0,100,6000,210],[1.0,1.5,80,5500,200],[1.5,2.0,60,5000,190]]"
|
||||
acceleration_limit_mess_enable=false
|
||||
acceleration_prime_tower=12000
|
||||
acceleration_print=12000
|
||||
acceleration_print_layer_0=500
|
||||
acceleration_roofing=5000
|
||||
acceleration_skirt_brim=500
|
||||
acceleration_support=12000
|
||||
acceleration_support_bottom=12000
|
||||
acceleration_support_infill=12000
|
||||
acceleration_support_interface=12000
|
||||
acceleration_support_roof=12000
|
||||
acceleration_topbottom=5000
|
||||
acceleration_travel=12000
|
||||
acceleration_travel_layer_0=500
|
||||
acceleration_wall=5000
|
||||
acceleration_wall_0=5000
|
||||
acceleration_wall_x=5000
|
||||
adaptive_layer_height_enabled=false
|
||||
adaptive_layer_height_threshold=0.20000000298023224
|
||||
adaptive_layer_height_variation=0.03999999910593033
|
||||
adaptive_layer_height_variation_step=0.03999999910593033
|
||||
adhesion_type=autobrim
|
||||
alternate_carve_order=true
|
||||
alternate_extra_perimeter=false
|
||||
anti_overhang_mesh=false
|
||||
arc_configure_enable=true
|
||||
arc_tolerance=10.00
|
||||
belt_enable=false
|
||||
bottom_layers=2
|
||||
bottom_skin_expand_distance=0.80
|
||||
bottom_skin_preshrink=0.80
|
||||
bottom_thickness=0.8
|
||||
bridge_enable_more_layers=true
|
||||
bridge_settings_enabled=true
|
||||
bridge_skin_density=100
|
||||
bridge_skin_density_2=75
|
||||
bridge_skin_density_3=80
|
||||
bridge_skin_material_flow=100
|
||||
bridge_skin_material_flow_2=100
|
||||
bridge_skin_material_flow_3=110
|
||||
bridge_skin_speed=125.00
|
||||
bridge_skin_speed_2=125.00
|
||||
bridge_skin_speed_3=125.00
|
||||
bridge_skin_support_threshold=50
|
||||
bridge_sparse_infill_max_density=0.00
|
||||
bridge_wall_coast=100
|
||||
bridge_wall_material_flow=80
|
||||
bridge_wall_min_length=2
|
||||
bridge_wall_speed=125.00
|
||||
brim_gap=0.1
|
||||
brim_line_count=19
|
||||
brim_outside_only=true
|
||||
brim_replaces_support=false
|
||||
brim_width=8
|
||||
carve_multiple_volumes=false
|
||||
change_color=false
|
||||
change_color_mode=back_list
|
||||
clean_between_layers=false
|
||||
coasting_enable=false
|
||||
coasting_min_volume=0.800000011920929
|
||||
coasting_speed=90
|
||||
coasting_volume=0.06
|
||||
conical_overhang_angle=50
|
||||
conical_overhang_enabled=false
|
||||
connect_infill_polygons=false
|
||||
connect_skin_polygons=false
|
||||
cross_infill_density_image=
|
||||
cross_infill_pocket_size=4.00
|
||||
cross_support_density_image=
|
||||
cutting_mesh=false
|
||||
draft_shield_dist=10
|
||||
draft_shield_enabled=false
|
||||
draft_shield_height=10
|
||||
draft_shield_height_limitation=full
|
||||
expand_skins_expand_distance=0.80
|
||||
export_format=gcode
|
||||
exposure_time=6
|
||||
extruder_prime_pos_x=0
|
||||
extruder_prime_pos_y=0
|
||||
fill_outline_gaps=true
|
||||
fill_perimeter_gaps=nowhere
|
||||
filter_out_tiny_gaps=true
|
||||
first_change_color=0
|
||||
flow_rate_extrusion_offset_factor=100
|
||||
flow_rate_max_extrusion_offset=0
|
||||
gcode_offset_zadjust=-0.05
|
||||
gradual_infill_step_height=1.5
|
||||
gradual_infill_steps=1
|
||||
gradual_support_infill_step_height=1
|
||||
gradual_support_infill_steps=0
|
||||
has_preview_img=true
|
||||
hole_xy_offset=0
|
||||
infill_angles=[]
|
||||
infill_before_walls=false
|
||||
infill_combination=false
|
||||
infill_enable_travel_optimization=false
|
||||
infill_extruder_nr=-1
|
||||
infill_has_default_inset=false
|
||||
infill_line_distance=4.00
|
||||
infill_mesh=false
|
||||
infill_mesh_order=0
|
||||
infill_multiplier=1
|
||||
infill_offset_x=0
|
||||
infill_offset_y=0
|
||||
infill_overlap=10.00
|
||||
infill_overlap_mm=0.04
|
||||
infill_pattern=lines
|
||||
infill_randomize_start_location=false
|
||||
infill_sparse_density=10.00
|
||||
infill_sparse_thickness=0.25
|
||||
infill_step_layers=1
|
||||
infill_support_angle=40
|
||||
infill_support_enabled=false
|
||||
infill_wall_line_count=0
|
||||
infill_wipe_dist=0.10
|
||||
initial_bottom_layers=2
|
||||
initial_layer_reserve=0
|
||||
inset_direction=inside_out
|
||||
ironing_enabled=false
|
||||
ironing_flow=10
|
||||
ironing_inset=0.38
|
||||
ironing_line_spacing=0.10000000149011612
|
||||
ironing_monotonic=false
|
||||
ironing_only_highest_layer=false
|
||||
ironing_pattern=zigzag
|
||||
jerk_enabled=true
|
||||
jerk_infill=8
|
||||
jerk_ironing=8
|
||||
jerk_layer_0=8
|
||||
jerk_prime_tower=8
|
||||
jerk_print=8
|
||||
jerk_print_layer_0=8
|
||||
jerk_roofing=8
|
||||
jerk_skirt_brim=8
|
||||
jerk_support=8
|
||||
jerk_support_bottom=8
|
||||
jerk_support_infill=8
|
||||
jerk_support_interface=8
|
||||
jerk_support_roof=8
|
||||
jerk_topbottom=8
|
||||
jerk_travel=30
|
||||
jerk_travel_layer_0=30
|
||||
jerk_wall=8
|
||||
jerk_wall_0=8
|
||||
jerk_wall_x=8
|
||||
klipper_time_estimate_enable=false
|
||||
laser_close_type=
|
||||
laser_work_speed=1800
|
||||
layer_0_z_overlap=0.12999999523162842
|
||||
layer_height=0.25
|
||||
layer_height_0=0.25
|
||||
machine_support_slicer_type=FDM
|
||||
magic_fuzzy_skin_enabled=false
|
||||
magic_fuzzy_skin_outside_only=false
|
||||
magic_fuzzy_skin_point_density=1.25
|
||||
magic_fuzzy_skin_point_dist=0.800000011920929
|
||||
magic_fuzzy_skin_thickness=0.30000001192092896
|
||||
magic_mesh_surface_mode=normal
|
||||
magic_spiralize=false
|
||||
material_shrinkage_percentage_x=100.0
|
||||
material_shrinkage_percentage_y=100.0
|
||||
max_extrusion_before_wipe=10
|
||||
max_part_outline_num=1000
|
||||
max_skin_angle_for_expansion=75
|
||||
mesh_rotation_matrix="[[1,0,0], [0,1,0], [0,0,1]]"
|
||||
meshfix_extensive_stitching=false
|
||||
meshfix_keep_open_polygons=false
|
||||
meshfix_maximum_deviation=0.05000000074505806
|
||||
meshfix_maximum_resolution=0.25
|
||||
meshfix_maximum_travel_resolution=0.42
|
||||
meshfix_union_all=true
|
||||
meshfix_union_all_remove_holes=false
|
||||
min_even_wall_line_width=0.3
|
||||
min_infill_area=35
|
||||
min_odd_wall_line_width=0.3
|
||||
min_skin_width_for_expansion=0.13
|
||||
min_wall_line_width=0.3
|
||||
minimum_bottom_area=10
|
||||
minimum_interface_area=10
|
||||
minimum_polygon_circumference=1
|
||||
minimum_roof_area=10
|
||||
minimum_support_area=2
|
||||
mold_angle=40
|
||||
mold_enabled=false
|
||||
mold_roof_height=0.5
|
||||
mold_width=5
|
||||
multiple_mesh_overlap=0.15000000596046448
|
||||
ooze_shield_angle=60
|
||||
ooze_shield_dist=2
|
||||
ooze_shield_enabled=false
|
||||
optimize_wall_printing_order=true
|
||||
power_slowdown_layers=12
|
||||
preImg_h=200
|
||||
preImg_w=200
|
||||
preview_img_type=jpg
|
||||
prime_blob_enable=false
|
||||
prime_tower_brim_enable=false
|
||||
prime_tower_enable=false
|
||||
prime_tower_min_volume=15
|
||||
prime_tower_position_x=20
|
||||
prime_tower_position_y=20
|
||||
prime_tower_size=20
|
||||
prime_tower_type=single
|
||||
prime_tower_wipe_enabled=true
|
||||
print_sequence=all_at_once
|
||||
raft_acceleration=500
|
||||
raft_airgap=0.25
|
||||
raft_base_acceleration=500
|
||||
raft_base_extruder_nr=0
|
||||
raft_base_fan_speed=0
|
||||
raft_base_jerk=8
|
||||
raft_base_line_spacing=1.600000023841858
|
||||
raft_base_line_width=0.800000011920929
|
||||
raft_base_speed=20
|
||||
raft_base_thickness=0.30
|
||||
raft_fan_speed=0
|
||||
raft_init_flow_ratio=110
|
||||
raft_init_layer_num=1
|
||||
raft_interface_acceleration=500
|
||||
raft_interface_extruder_nr=0
|
||||
raft_interface_fan_speed=0
|
||||
raft_interface_jerk=8
|
||||
raft_interface_line_spacing=1.0800000429153442
|
||||
raft_interface_line_width=0.8
|
||||
raft_interface_speed=30
|
||||
raft_interface_thickness=0.38
|
||||
raft_jerk=8
|
||||
raft_margin=10
|
||||
raft_smoothing=5
|
||||
raft_speed=60
|
||||
raft_surface_acceleration=500
|
||||
raft_surface_extruder_nr=0
|
||||
raft_surface_fan_speed=0
|
||||
raft_surface_jerk=8
|
||||
raft_surface_layers=2
|
||||
raft_surface_line_spacing=0.4
|
||||
raft_surface_speed=40
|
||||
raft_surface_thickness=0.25
|
||||
raft_top_layer_num=2
|
||||
relative_extrusion=false
|
||||
remove_empty_first_layers=true
|
||||
retract_speed=150
|
||||
roofing_angles=[ ]
|
||||
roofing_extruder_nr=-1
|
||||
roofing_layer_count=1
|
||||
roofing_monotonic=true
|
||||
roofing_only_one_wall=false
|
||||
roofing_pattern=zigzag
|
||||
screen_size=Sermoon D3
|
||||
second_change_color=0
|
||||
set_small_feature_grading=false
|
||||
set_wall_overhang_grading=false
|
||||
single_extrusion_walls=false
|
||||
single_wall_model=false
|
||||
skin_angles=[ ]
|
||||
skin_edge_support_layers=0
|
||||
skin_edge_support_thickness=0
|
||||
skin_no_small_gaps_heuristic=false
|
||||
skin_outline_count=1
|
||||
skin_overlap=0.00
|
||||
skin_overlap_mm=0.00
|
||||
skin_preshrink=0.80
|
||||
skirt_brim_minimal_length=250
|
||||
skirt_brim_speed=60
|
||||
skirt_gap=3
|
||||
skirt_line_count=1
|
||||
slice_accelerate_enabled=false
|
||||
slicing_tolerance=middle
|
||||
small_feature_grading=A_First
|
||||
small_feature_max_length=25
|
||||
small_feature_speed_factor=80.00
|
||||
small_feature_speed_factor_0=80.00
|
||||
small_hole_max_size=6
|
||||
smooth_spiralized_contours=true
|
||||
spaghetti_flow=100
|
||||
spaghetti_infill_enabled=false
|
||||
spaghetti_infill_extra_volume=20
|
||||
spaghetti_infill_stepped=true
|
||||
spaghetti_inset=0.20000000298023224
|
||||
spaghetti_max_height=2
|
||||
spaghetti_max_infill_angle=10
|
||||
special_advance_enable=false
|
||||
special_angle_per_step=0
|
||||
special_cool_min_layer_time_1=5
|
||||
special_cool_min_layer_time_2=5
|
||||
special_cool_min_layer_time_3=5
|
||||
special_cool_min_layer_time_4=5
|
||||
special_dynamic_point_flow=false
|
||||
special_dynamic_point_flow_angle=45
|
||||
special_dynamic_point_flow_factor=100
|
||||
special_exact_flow_enable=false
|
||||
special_material_flow_travel=20
|
||||
special_mold_evacuation=false
|
||||
special_mold_support_Xnumbers=6
|
||||
special_mold_support_Ynumbers=8
|
||||
special_mold_support_infill_line_distance=30
|
||||
special_mold_top_layers=32
|
||||
special_narrow_area_concentric_infill=false
|
||||
special_object_cancel=false
|
||||
special_slope_slice_angle=0
|
||||
special_slope_slice_axis=Y
|
||||
special_small_feature_max_length_1=18.850000381469727
|
||||
special_small_feature_max_length_2=18.850000381469727
|
||||
special_small_feature_max_length_3=18.850000381469727
|
||||
special_small_feature_max_length_4=18.850000381469727
|
||||
special_small_feature_speed_factor_0_1=35
|
||||
special_small_feature_speed_factor_0_2=35
|
||||
special_small_feature_speed_factor_0_3=35
|
||||
special_small_feature_speed_factor_0_4=35
|
||||
special_small_feature_speed_factor_1=35
|
||||
special_small_feature_speed_factor_2=35
|
||||
special_small_feature_speed_factor_3=35
|
||||
special_small_feature_speed_factor_4=35
|
||||
speed_infill=300.00
|
||||
speed_ironing=166.67
|
||||
speed_layer_0=60
|
||||
speed_limit_to_height="[[100,150,100,6000,210],[150,200,80,5500,200],[200,250,60,5000,190]]"
|
||||
speed_limit_to_height_enable=false
|
||||
speed_min_travel_speed_length=1.0
|
||||
speed_prime_tower=300.00
|
||||
speed_print=300
|
||||
speed_print_layer_0=100.00
|
||||
speed_roofing=250.00
|
||||
speed_slowdown_layers=2
|
||||
speed_support=300.00
|
||||
speed_support_bottom=200.00
|
||||
speed_support_infill=300.00
|
||||
speed_support_interface=200.00
|
||||
speed_support_roof=200.00
|
||||
speed_topbottom=250.00
|
||||
speed_travel=500
|
||||
speed_travel_layer_0=200.00
|
||||
speed_wall=150.00
|
||||
speed_wall_0=250.00
|
||||
speed_wall_x=240.00
|
||||
speed_z_hop=10
|
||||
sub_div_rad_add=0.40
|
||||
support_angle=60
|
||||
support_bottom_angles=[ ]
|
||||
support_bottom_density=33.29999923706055
|
||||
support_bottom_distance=0.4000000059604645
|
||||
support_bottom_enable=true
|
||||
support_bottom_extruder_nr=0
|
||||
support_bottom_height=0.800000011920929
|
||||
support_bottom_line_distance=1.3200000524520874
|
||||
support_bottom_offset=0
|
||||
support_bottom_pattern=zigzag
|
||||
support_bottom_stair_step_height=0.30000001192092896
|
||||
support_bottom_stair_step_width=5
|
||||
support_brim_enable=true
|
||||
support_brim_line_count=14
|
||||
support_brim_width=6
|
||||
support_conical_angle=30
|
||||
support_conical_enabled=false
|
||||
support_conical_min_width=5
|
||||
support_connect_zigzags=true
|
||||
support_enable=false
|
||||
support_extruder_nr=0
|
||||
support_extruder_nr_layer_0=0
|
||||
support_fan_enable=false
|
||||
support_infill_angles=[ ]
|
||||
support_infill_extruder_nr=0
|
||||
support_infill_rate=15
|
||||
support_infill_sparse_thickness=0.25
|
||||
support_initial_layer_line_distance=2.2
|
||||
support_interface_angles=[ ]
|
||||
support_interface_density=33.29999923706055
|
||||
support_interface_enable=true
|
||||
support_interface_extruder_nr=0
|
||||
support_interface_height=0.800000011920929
|
||||
support_interface_offset=0
|
||||
support_interface_pattern=zigzag
|
||||
support_interface_skip_height=0.20000000298023224
|
||||
support_join_distance=2
|
||||
support_line_distance=2.67
|
||||
support_mesh=false
|
||||
support_mesh_clip=false
|
||||
support_mesh_drop_down=true
|
||||
support_offset=2
|
||||
support_pattern=zigzag
|
||||
support_roof_angles=[ ]
|
||||
support_roof_density=33.29999923706055
|
||||
support_roof_enable=true
|
||||
support_roof_extruder_nr=0
|
||||
support_roof_height=0.800000011920929
|
||||
support_roof_line_distance=1.3200000524520874
|
||||
support_roof_offset=0
|
||||
support_roof_pattern=zigzag
|
||||
support_skip_some_zags=false
|
||||
support_skip_zag_per_mm=20
|
||||
support_structure=normal
|
||||
support_top_distance=0.20000000298023224
|
||||
support_tower_diameter=3
|
||||
support_tower_maximum_supported_diameter=3
|
||||
support_tower_roof_angle=65
|
||||
support_tree_angle=40
|
||||
support_tree_branch_diameter=5
|
||||
support_tree_branch_diameter_angle=5
|
||||
support_tree_branch_distance=1
|
||||
support_tree_collision_resolution=0.2199999988079071
|
||||
support_tree_enable=false
|
||||
support_tree_max_diameter=15
|
||||
support_tree_top_rate=10
|
||||
support_type=everywhere
|
||||
support_use_towers=false
|
||||
support_wall_count=0
|
||||
support_xy_distance=0.800000011920929
|
||||
support_xy_distance_overhang=0.20000000298023224
|
||||
support_xy_overrides_z=xy_overrides_z
|
||||
support_z_distance=0.1
|
||||
support_zag_skip_count=5
|
||||
switch_extruder_retraction_speeds=20
|
||||
third_change_color=0
|
||||
thumbnail_h=48
|
||||
thumbnail_w=48
|
||||
top_bottom_extruder_nr=-1
|
||||
top_bottom_pattern=zigzag
|
||||
top_bottom_pattern_0=zigzag
|
||||
top_bottom_thickness=0.8
|
||||
top_layers=2
|
||||
top_skin_expand_distance=0.80
|
||||
top_skin_preshrink=0.80
|
||||
top_thickness=0.8
|
||||
travel_compensate_overlapping_walls_0_enabled=true
|
||||
travel_compensate_overlapping_walls_enabled=true
|
||||
travel_compensate_overlapping_walls_x_enabled=true
|
||||
unify_walls_print_direction=true
|
||||
wall_0_extruder_nr=-1
|
||||
wall_0_inset=0.00
|
||||
wall_0_wipe_dist=0.2
|
||||
wall_extruder_nr=-1
|
||||
wall_hole_speed_factor=100
|
||||
wall_line_count=2
|
||||
wall_min_flow=0
|
||||
wall_min_flow_retract=false
|
||||
wall_ordering_overhang_angle=45
|
||||
wall_overhang_angle=60
|
||||
wall_overhang_speed_1=0
|
||||
wall_overhang_speed_2=50.00
|
||||
wall_overhang_speed_3=35.00
|
||||
wall_overhang_speed_4=10.00
|
||||
wall_overhang_speed_factor=50
|
||||
wall_thickness=0.87
|
||||
wall_x_extruder_nr=-1
|
||||
wipe_brush_pos_x=100
|
||||
wipe_hop_amount=0.20000000298023224
|
||||
wipe_hop_enable=false
|
||||
wipe_hop_speed=10
|
||||
wipe_move_distance=20
|
||||
wipe_pause=0
|
||||
wipe_repeat_count=5
|
||||
wipe_retraction_amount=0.800000011920929
|
||||
wipe_retraction_enable=true
|
||||
wipe_retraction_extra_prime_amount=0
|
||||
wipe_retraction_prime_speed=25
|
||||
wipe_retraction_retract_speed=25
|
||||
wipe_retraction_speed=25
|
||||
wireframe_bottom_delay=0
|
||||
wireframe_drag_along=0.6000000238418579
|
||||
wireframe_enabled=false
|
||||
wireframe_fall_down=0.5
|
||||
wireframe_flat_delay=0.10000000149011612
|
||||
wireframe_flow=100
|
||||
wireframe_flow_connection=100
|
||||
wireframe_flow_flat=100
|
||||
wireframe_height=3
|
||||
wireframe_nozzle_clearance=1
|
||||
wireframe_printspeed=5
|
||||
wireframe_printspeed_bottom=5
|
||||
wireframe_printspeed_down=5
|
||||
wireframe_printspeed_flat=5
|
||||
wireframe_printspeed_up=5
|
||||
wireframe_roof_drag_along=0.800000011920929
|
||||
wireframe_roof_fall_down=2
|
||||
wireframe_roof_inset=3
|
||||
wireframe_roof_outer_delay=0.20000000298023224
|
||||
wireframe_straight_before_down=20
|
||||
wireframe_strategy=compensate
|
||||
wireframe_top_delay=0
|
||||
wireframe_top_jump=0.6000000238418579
|
||||
wireframe_up_half_speed=0.30000001192092896
|
||||
xy_offset=0
|
||||
xy_offset_enable=false
|
||||
xy_offset_layer_0=0
|
||||
z_offset=0
|
||||
z_seam_corner=z_seam_corner_inner
|
||||
z_seam_max_angle=162
|
||||
z_seam_min_angle_diff=36
|
||||
z_seam_position=back
|
||||
z_seam_relative=true
|
||||
z_seam_type=sharpest_corner
|
||||
z_seam_x=110.0
|
||||
z_seam_y=220.0
|
||||
zadjust_enable=false
|
||||
zig_zaggify_infill=false
|
||||
zig_zaggify_support=false
|
||||
|
||||
[Extruder]
|
||||
before_wipe_retraction_amount_percent=70
|
||||
infill_line_width=0.4
|
||||
initial_layer_line_width=0.44
|
||||
initial_layer_line_width_factor=110
|
||||
layer_start_x=0.0
|
||||
layer_start_y=0.0
|
||||
limit_support_retractions=true
|
||||
line_width=0.4
|
||||
raft_surface_line_width=0.4
|
||||
retract_at_layer_change=false
|
||||
retraction_amount=0.5
|
||||
retraction_combing=no_outer_surfaces
|
||||
retraction_combing_max_distance=15
|
||||
retraction_count_max=100
|
||||
retraction_during_traveling=false
|
||||
retraction_enable=true
|
||||
retraction_extra_prime_amount=0
|
||||
retraction_extrusion_window=0.80
|
||||
retraction_hop=0.2
|
||||
retraction_hop_after_extruder_switch=true
|
||||
retraction_hop_after_extruder_switch_height=1
|
||||
retraction_hop_enabled=false
|
||||
retraction_hop_only_when_collides=false
|
||||
retraction_hop_type=directlift
|
||||
retraction_min_travel=2.00
|
||||
retraction_prime_speed=40
|
||||
retraction_retract_speed=40
|
||||
retraction_speed=40
|
||||
retraction_wipe=true
|
||||
roofing_line_width=0.4
|
||||
skin_line_width=0.4
|
||||
skirt_brim_line_width=0.4
|
||||
support_line_width=0.4
|
||||
switch_extruder_extra_prime_amount=0
|
||||
switch_extruder_prime_speed=20
|
||||
switch_extruder_retraction_amount=16
|
||||
switch_extruder_retraction_speed=20
|
||||
travel_avoid_distance=0.625
|
||||
travel_avoid_other_parts=true
|
||||
travel_avoid_supports=true
|
||||
travel_retract_before_outer_wall=true
|
||||
wall_line_width_0=0.4
|
||||
wall_line_width_x=0.4
|
||||
wipe_length=2
|
||||
|
||||
[Material]
|
||||
bridge_fan_speed=20
|
||||
bridge_fan_speed_2=0
|
||||
bridge_fan_speed_3=0
|
||||
build_volume_temperature=28
|
||||
cool_cds_fan_enable=true
|
||||
cool_cds_fan_speed=50
|
||||
cool_cds_fan_start_at_height=0.5
|
||||
cool_chamber_fan_enable=true
|
||||
cool_fan_enabled=true
|
||||
cool_fan_full_layer=2
|
||||
cool_fan_speed_0=0
|
||||
cool_fan_speed_max=100
|
||||
cool_fan_speed_min=50
|
||||
cool_infill_speed_slowdown_first=false
|
||||
cool_lift_head=false
|
||||
cool_min_layer_time=2.00
|
||||
cool_min_layer_time_fan_speed_max=15
|
||||
cool_min_speed=20
|
||||
cool_overhang_bridge_force_cooling=true
|
||||
cool_overhang_fan_speed=100
|
||||
cool_overhang_threshold=50
|
||||
cool_small_feature_fan_speed_factor=50
|
||||
cool_special_cds_fan_speed=80
|
||||
infill_material_flow=100
|
||||
material_bed_temperature=45
|
||||
material_bed_temperature_layer_0=45
|
||||
material_final_print_temperature=225.00
|
||||
material_flow_dependent_temperature=false
|
||||
material_flow_layer_0=100
|
||||
material_flow_ratio=100
|
||||
material_flow_temp_graph="[[5.0,220],[10.0,230]]"
|
||||
material_initial_print_temperature=230.00
|
||||
material_print_temperature=240.00
|
||||
material_shrinkage_percentage_z=100.0
|
||||
material_standby_temperature=180
|
||||
material_type=Castable
|
||||
prime_tower_flow=100
|
||||
skin_material_flow=100
|
||||
skirt_brim_material_flow=100
|
||||
speed_slowtofast_slowdown=false
|
||||
speed_slowtofast_slowdown_revise_acceleration=1500
|
||||
speed_slowtofast_slowdown_revise_distance=55
|
||||
speed_slowtofast_slowdown_revise_speed_factor=30
|
||||
support_bottom_material_flow=100
|
||||
support_interface_material_flow=100
|
||||
support_material_flow=80
|
||||
support_roof_material_flow=100
|
||||
support_supported_skin_fan_speed=100
|
||||
wall_0_material_flow=95
|
||||
wall_material_flow=100
|
||||
wall_x_material_flow=100
|
BIN
bike trainer dial mount BASE.stl
Normal file
88
bike trainer dial mount.scad
Normal file
|
@ -0,0 +1,88 @@
|
|||
// Tube mount for bike trainer control dial
|
||||
// length units are millimeters
|
||||
// built on its side, so depth is x-axis, height is y-axiz, width is z-axis
|
||||
|
||||
mountWidth = 25.83;
|
||||
mountDepth = 36.7;
|
||||
mountHeight = 6.69;
|
||||
|
||||
rubberHoleWidth = 5.20;
|
||||
rubberHoleSunkWidth = 8.20;
|
||||
rubberHoleDepth = 8.92;
|
||||
rubberHoleSunkDepth = rubberHoleDepth;
|
||||
rubberHoleSunkHeight = 1.5;
|
||||
|
||||
screwHoleRadius = 3.50/2;
|
||||
screwHoleDepthOffset = 4.67 + screwHoleRadius;
|
||||
|
||||
screwSpikeWidthOffset = 7.10;
|
||||
screwSpikeWidth = 2.30;
|
||||
screwSpikeDepthOffset = 2.00;
|
||||
screwSpikeDepth = 5.5;
|
||||
|
||||
ledgeGapHeightOffset = 2.80;
|
||||
ledgeGapHeight = mountHeight + 0.01 - ledgeGapHeightOffset;//3.18;
|
||||
ledgeGapDepth = 5.41;
|
||||
ledgeGapWidth = 9.02;
|
||||
|
||||
handlebarStemRadius = 33.45 / 2;
|
||||
handlebarRadius = 32.07 / 2;
|
||||
clampRadius = handlebarRadius + 1.5;
|
||||
clampInnerRadius = handlebarRadius;
|
||||
clampHeightOffset = 3.75;
|
||||
clampEndHeightOffset = clampRadius * 1.85;
|
||||
|
||||
circleResolution=360*2; // faces per rotation
|
||||
|
||||
difference() {
|
||||
union() {
|
||||
// mount base
|
||||
cube([mountDepth, mountHeight, mountWidth]);
|
||||
// circular clamp
|
||||
translate([mountDepth/2, clampRadius + clampHeightOffset, mountWidth/2]) {
|
||||
rotate([0, 0, 0]) {
|
||||
difference() {
|
||||
cylinder(h = mountWidth, r = clampRadius, center=true, $fn=circleResolution);
|
||||
union() {
|
||||
cylinder(h = mountWidth * 1.1, r = clampInnerRadius, center=true, $fn=circleResolution);
|
||||
translate([-(clampRadius + 0.01), clampEndHeightOffset - clampRadius, -(mountWidth/2 + 0.01)]) {
|
||||
cube([(clampRadius * 2) + 0.02, clampRadius * 2.02, mountWidth + 0.02]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
union() {
|
||||
// hole for rubber grip to clip in
|
||||
translate([(mountDepth/2)-(rubberHoleDepth/2), -0.01, (mountWidth/2) - (rubberHoleWidth/2)]) {
|
||||
cube([rubberHoleDepth, 10, rubberHoleWidth]);
|
||||
}
|
||||
// slightly larger hole so rubber grip clip can clip
|
||||
translate([(mountDepth/2)-(rubberHoleSunkDepth/2), -0.01, (mountWidth/2) - (rubberHoleSunkWidth/2)]) {
|
||||
cube([rubberHoleSunkDepth, mountHeight- rubberHoleSunkHeight, rubberHoleSunkWidth]);
|
||||
}
|
||||
// screw hole
|
||||
translate([screwHoleDepthOffset, -0.01, (mountWidth/2)]) {
|
||||
rotate([-90,0,0]) {
|
||||
cylinder(h = mountHeight + 0.02, r = screwHoleRadius, $fn=circleResolution);
|
||||
}
|
||||
}
|
||||
// lower hole for spikes on each side of screw
|
||||
translate([screwSpikeDepthOffset, -0.01, screwSpikeWidthOffset]) {
|
||||
cube([screwSpikeDepth, 5, screwSpikeWidth]);
|
||||
}
|
||||
// higher hole for spikes on each side of screw
|
||||
translate([screwSpikeDepthOffset, -0.01, mountWidth - (screwSpikeWidth + screwSpikeWidthOffset)]) {
|
||||
cube([screwSpikeDepth, 5, screwSpikeWidth]);
|
||||
}
|
||||
// lower ledge at x-axis high end for dial's clip
|
||||
translate([mountDepth - ledgeGapDepth, ledgeGapHeightOffset, -0.01]) {
|
||||
cube([ledgeGapDepth + 0.01, ledgeGapHeight, ledgeGapWidth + 0.01]);
|
||||
}
|
||||
// higher ledge at x-axis high end for dial's clip
|
||||
translate([mountDepth - ledgeGapDepth, ledgeGapHeightOffset, mountWidth + 0.01 -ledgeGapWidth]) {
|
||||
cube([ledgeGapDepth + 0.01, ledgeGapHeight, ledgeGapWidth + 0.01]);
|
||||
}
|
||||
}
|
||||
}
|
BIN
bike trainer dial mount.stl
Normal file
BIN
bulbasaur_voronoi.stl
Normal file
BIN
charmander_voronoi.stl
Normal file
646480
eeveesupportfinal.stl
Normal file
20
fp4 back.scad
Normal file
|
@ -0,0 +1,20 @@
|
|||
// Fairphone 4 back cover
|
||||
// length units are millimeters
|
||||
rimWidth = 2.375;
|
||||
coverWidth = 74;
|
||||
coverHeight = 160;
|
||||
coverThickness = 2.71;
|
||||
plasticThickness = 0.87;
|
||||
|
||||
union() {
|
||||
difference() {
|
||||
cube([coverWidth, coverHeight, coverThickness]);
|
||||
translate ([rimWidth, rimWidth, -0.01]) {
|
||||
cube([coverWidth - (2*rimWidth), coverHeight - (2*rimWidth), plasticThickness]);
|
||||
}
|
||||
}
|
||||
|
||||
translate([33.59 + rimWidth, 4.39 + rimWidth, coverThickness - plasticThickness]) {
|
||||
cube([32, 32, 3.58]);
|
||||
}
|
||||
}
|
BIN
framework/Framework Module Base Slot.stl
Normal file
BIN
framework/Framework Module Base.stl
Normal file
BIN
framework/Framework Module Cover Logo.stl
Normal file
BIN
framework/Framework Module Cover.stl
Normal file
BIN
framework/Framework Module MMU.STL
Normal file
BIN
framework/Framework Module Tray.SLDPRT
Normal file
BIN
framework/Framework Module.SLDPRT
Normal file
BIN
framework/framework_blank.stl
Normal file
|
@ -0,0 +1 @@
|
|||
This thing was created by Thingiverse user the1maximus, and is licensed under Creative Commons - Attribution - Non-Commercial
|
|
@ -0,0 +1 @@
|
|||
Creality K1 / K1 Max Spool Roller by the1maximus on Thingiverse: https://www.thingiverse.com/thing:6316092
|
After Width: | Height: | Size: 2.7 MiB |
After Width: | Height: | Size: 2.4 MiB |
After Width: | Height: | Size: 2.6 MiB |
After Width: | Height: | Size: 255 KiB |
After Width: | Height: | Size: 172 KiB |
After Width: | Height: | Size: 1.6 MiB |
After Width: | Height: | Size: 2 MiB |
After Width: | Height: | Size: 154 KiB |
After Width: | Height: | Size: 1.8 MiB |
After Width: | Height: | Size: 2.2 MiB |
243143
grouped/Fairphone 4/BumperCase.obj
Normal file
BIN
grouped/Fairphone 4/FP4 V2 Bumper Only.3mf
Normal file
BIN
grouped/Fairphone 4/FP4 wavy back cover.stl
Normal file
BIN
grouped/Fairphone 4/FairPhone 4 - Default Rearcover.stl
Normal file
6617
grouped/Fairphone 4/FairPhone 4 - Default Rearcover.stp
Normal file
BIN
grouped/Fairphone 4/FairPhone 4 - Flat Rearcover.stl
Normal file
5388
grouped/Fairphone 4/FairPhone 4 - Flat Rearcover.stp
Normal file
BIN
grouped/Fairphone 4/Fairphone_4 Body1.3mf
Normal file
BIN
grouped/Fairphone 4/Fairphone_4 Body2.3mf
Normal file
BIN
grouped/Fairphone 4/Fairphone_4_Dummy_and_bumper_only.f3d
Normal file
BIN
grouped/Fairphone 4/Fairphone_4_bumper_slim_v2.stl
Normal file
241542
grouped/Fairphone 4/fPhBumper_minimal.obj
Normal file
64
hole_size_test.scad
Normal file
|
@ -0,0 +1,64 @@
|
|||
include <ng_common/hollow_cylinder.scad>;
|
||||
|
||||
// first row (1mm outer)
|
||||
translate([0,0,0]) {
|
||||
rotate([0,0,0])
|
||||
hollowCylinder(0.6, 1, 5);
|
||||
}
|
||||
|
||||
translate([4,0,0]) {
|
||||
rotate([0,0,0])
|
||||
hollowCylinder(0.5, 1, 5);
|
||||
}
|
||||
|
||||
translate([8,0,0]) {
|
||||
rotate([0,0,0])
|
||||
hollowCylinder(0.4, 1, 5);
|
||||
}
|
||||
|
||||
translate([12,0,0]) {
|
||||
rotate([0,0,0])
|
||||
hollowCylinder(0.3, 1, 5);
|
||||
}
|
||||
|
||||
// second row (1.5mm outer)
|
||||
translate([0,4,0]) {
|
||||
rotate([0,0,0])
|
||||
hollowCylinder(0.6, 1.5, 5);
|
||||
}
|
||||
|
||||
translate([4,4,0]) {
|
||||
rotate([0,0,0])
|
||||
hollowCylinder(0.5, 1.5, 5);
|
||||
}
|
||||
|
||||
translate([8,4,0]) {
|
||||
rotate([0,0,0])
|
||||
hollowCylinder(0.4, 1.5, 5);
|
||||
}
|
||||
|
||||
translate([12,4,0]) {
|
||||
rotate([0,0,0])
|
||||
hollowCylinder(0.3, 1.5, 5);
|
||||
}
|
||||
|
||||
// third row (2mm outer, inner increasing)
|
||||
translate([0,8,0]) {
|
||||
rotate([0,0,0])
|
||||
hollowCylinder(0.6, 2, 5);
|
||||
}
|
||||
|
||||
translate([4,8,0]) {
|
||||
rotate([0,0,0])
|
||||
hollowCylinder(0.7, 2, 5);
|
||||
}
|
||||
|
||||
translate([8,8,0]) {
|
||||
rotate([0,0,0])
|
||||
hollowCylinder(0.8, 2, 5);
|
||||
}
|
||||
|
||||
translate([12,8,0]) {
|
||||
rotate([0,0,0])
|
||||
hollowCylinder(0.9, 2, 5);
|
||||
}
|
BIN
hole_size_test.stl
Normal file
BIN
monitor headphone mount BASE.stl
Normal file
79
monitor headphone mount.scad
Normal file
|
@ -0,0 +1,79 @@
|
|||
// LG Ultrawide monitor headphone mount
|
||||
// Mounted on back of monitor instead of monitor stand
|
||||
// length units are millimeters
|
||||
|
||||
mountHeightEnd = 22.52;
|
||||
mountHeightStart = 26.46;
|
||||
mountWidthEnd = 15.00;
|
||||
mountWidthStart = 14.52;
|
||||
mountWidthScrewInset = 8.43;
|
||||
screwHoleDistanceInner = 8.56;
|
||||
screwHoleDistanceOuter = 14.68;
|
||||
screwHoleToMountBottom = 4.27;
|
||||
screwHoleToMountTop = 4.16;
|
||||
screwDiameter = 4.50;
|
||||
screwRadius = screwDiameter / 2;
|
||||
mountToScreenBottomHeight = 30.00; //27.55;
|
||||
screenBaseThickness = 45.00;
|
||||
mountProtrusionFromScreenBack = 33.10;
|
||||
headphoneArmLength = 50.00;
|
||||
|
||||
miscThickness = 6.00;
|
||||
|
||||
circleResolution=360*4; // faces per rotation
|
||||
|
||||
union() {
|
||||
translate([0, 0, mountToScreenBottomHeight + miscThickness]) mountEnd(miscThickness);
|
||||
headphoneMount(miscThickness);
|
||||
//mountEnd(miscThickness);
|
||||
}
|
||||
|
||||
|
||||
module mountEnd(thickness) {
|
||||
difference() {
|
||||
cube([mountWidthEnd, thickness, mountHeightEnd]);
|
||||
union() {
|
||||
translate([mountWidthEnd / 2, thickness / 2, screwHoleToMountBottom + screwRadius])
|
||||
rotate([-90, 0, 0])
|
||||
cylinder(r = screwRadius, h = thickness + 0.02, center=true, $fn=circleResolution);
|
||||
translate([mountWidthEnd / 2, thickness / 2, screwHoleToMountBottom])
|
||||
rotate([-90, 0, 0])
|
||||
cylinder(r = screwRadius, h = thickness + 0.02, center=true, $fn=circleResolution);
|
||||
translate([mountWidthEnd / 2, thickness / 2, screwHoleToMountBottom + screwRadius/2])
|
||||
rotate([-90, 0, 0])
|
||||
cylinder(r = screwRadius, h = thickness + 0.02, center=true, $fn=circleResolution);
|
||||
translate([mountWidthEnd / 2, thickness / 2, mountHeightEnd - (screwHoleToMountTop + screwRadius)])
|
||||
rotate([-90, 0, 0])
|
||||
cylinder(r = screwRadius, h = thickness + 0.02, center=true, $fn=circleResolution);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module headphoneMount(thickness) {
|
||||
// stock down from monitor mount to clear bottom of monitor
|
||||
cube([mountWidthEnd, thickness, mountToScreenBottomHeight + thickness]);
|
||||
//color("red") cube([mountWidthEnd, thickness + screenBaseThickness + mountProtrusionFromScreenBack, thickness]);
|
||||
// quarter circle under monitor
|
||||
translate ([mountWidthEnd/2, screenBaseThickness + mountProtrusionFromScreenBack, 0]) difference() {
|
||||
cylinder(r = screenBaseThickness + mountProtrusionFromScreenBack, h = thickness, $fn=circleResolution);
|
||||
translate([0,0,-0.01])
|
||||
cylinder(r = (screenBaseThickness + mountProtrusionFromScreenBack) - (mountWidthEnd), h = thickness + 0.02, $fn=circleResolution);
|
||||
translate([-(screenBaseThickness + mountProtrusionFromScreenBack) - 0.01, thickness, -0.01])
|
||||
cube([(screenBaseThickness + mountProtrusionFromScreenBack) * 2.01, (screenBaseThickness + mountProtrusionFromScreenBack), thickness + 0.02]);
|
||||
translate([mountWidthEnd/2, -(screenBaseThickness + mountProtrusionFromScreenBack)-0.01, -0.01])
|
||||
cube([screenBaseThickness + mountProtrusionFromScreenBack, screenBaseThickness + mountProtrusionFromScreenBack + thickness+0.02, thickness + 0.02]);
|
||||
}
|
||||
// right angle connection reinforcement quarter circle
|
||||
difference() {
|
||||
cube([mountWidthEnd, mountWidthEnd + 0.25, mountWidthEnd + thickness]);
|
||||
translate([-0.01, mountWidthEnd + thickness, mountWidthEnd + thickness])
|
||||
rotate([0,90,0])
|
||||
cylinder(r = mountWidthEnd * 1.02, h = mountWidthEnd + 0.02, $fn=circleResolution);
|
||||
}
|
||||
// headphone arm
|
||||
translate([-(screenBaseThickness + mountProtrusionFromScreenBack) + (mountWidthEnd / 2), (screenBaseThickness + mountProtrusionFromScreenBack + thickness), 0]) {
|
||||
cube([mountWidthEnd,headphoneArmLength + thickness,thickness]);
|
||||
translate([0, headphoneArmLength + thickness, 0])
|
||||
cube([mountWidthEnd, thickness, thickness * 2]);
|
||||
}
|
||||
}
|
BIN
monitor headphone mount.stl
Normal file
8
ng_common/hollow_cylinder.scad
Normal file
|
@ -0,0 +1,8 @@
|
|||
module hollowCylinder(innerRadius, outerRadius, height, $fn = 360) {
|
||||
difference() {
|
||||
cylinder(r=outerRadius, h = height, $fn=$fn);
|
||||
translate([0, 0, -0.01]) cylinder(r=innerRadius, h = height + 0.02, $fn=$fn);
|
||||
}
|
||||
}
|
||||
|
||||
//hollowCylinder(1, 2, 10);
|
1
nutsnbolts
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit c16d745606ff3d069021809289137d77e19281d8
|
BIN
pikachu_voronoi.stl
Normal file
BIN
plateholder.stl
Normal file
135
server sbc mount.scad
Normal file
|
@ -0,0 +1,135 @@
|
|||
// Modular Single Board Computer mount for server rack
|
||||
// length units are millimeters
|
||||
rackFunctionalWidth = 450.85; // distance between server rack side rails
|
||||
sbcFullThickness = 34.0; // full height of board including PoE HAT and GPIO extensions
|
||||
boardThicknessExactSBC = 1.40;
|
||||
boardThicknessExactPoEHAT = 1.69;
|
||||
boardThickness = 2.0; // approximate thickness of circuit boards (HAT and SBC)
|
||||
sbcInterBoardThickness = 21.20; // distance between PoE HAT board and SBC board
|
||||
sbcPinToEdgeDistanceExact = 1.40;
|
||||
sbcPinToEdgeDistance = 1.5; // approximate lip between GPIO pins and edge of circuit board
|
||||
sbcGPIOPinHeight = 7.60; // distance from HAT top to top of GPIO pins
|
||||
sbcDepth = 85.00;
|
||||
moduleMultiplier = 11; // modules per server rack width
|
||||
mountWidth = 450.85 / moduleMultiplier;
|
||||
mountHeight = 16;//63.5; // 2U height
|
||||
mountStructuralQuantum = 1.5; // minimum unit for structural components
|
||||
mountStructuralDepth = sbcDepth / 4;
|
||||
sideWallWidth = (mountWidth - sbcFullThickness) / 2;
|
||||
clipThicknessMultiplier = 6;
|
||||
clipDepthMultiplier = 1.1;
|
||||
unsupportedMaxExtension = mountStructuralQuantum * 2;
|
||||
|
||||
circleResolution=360*2; // faces per rotation
|
||||
|
||||
union() {
|
||||
// SBC slot
|
||||
translate ([(mountWidth / 2) - (sbcFullThickness / 2), 0, 0]) {
|
||||
union() {
|
||||
cube([
|
||||
sbcFullThickness,
|
||||
mountStructuralDepth,
|
||||
mountStructuralQuantum
|
||||
]);
|
||||
translate([
|
||||
sbcGPIOPinHeight + boardThickness,
|
||||
0,
|
||||
0
|
||||
]) {
|
||||
difference() {
|
||||
cube([
|
||||
sbcInterBoardThickness,
|
||||
mountStructuralDepth,
|
||||
mountStructuralQuantum + sbcPinToEdgeDistance
|
||||
]);
|
||||
translate([-0.4, mountStructuralDepth - 3, -0.01]) {
|
||||
rotate([0,0,-45])
|
||||
#linear_extrude(height=(mountStructuralQuantum + sbcPinToEdgeDistance) * 1.01) {
|
||||
text("α4·NG", size=6, font="Noto Sans Mono:style=Bold");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// left side panel and mount
|
||||
translate([0, 0, 0]) {
|
||||
difference() {
|
||||
cube([
|
||||
sideWallWidth,
|
||||
mountStructuralDepth,
|
||||
mountHeight,
|
||||
]);
|
||||
translate([-0.01, -0.01, -0.01]) {
|
||||
// front clip (female)
|
||||
cube([
|
||||
sideWallWidth * 1.01,
|
||||
mountStructuralQuantum * 1.11,
|
||||
mountHeight * 1.01
|
||||
]);
|
||||
translate([mountStructuralQuantum, mountStructuralQuantum, 0]) {
|
||||
cube([
|
||||
sideWallWidth,
|
||||
mountStructuralQuantum * (0.01 + clipDepthMultiplier),
|
||||
mountHeight * 1.01
|
||||
]);
|
||||
}
|
||||
// back rod (female)
|
||||
translate([-0.01, mountStructuralDepth - (mountStructuralQuantum * ((clipThicknessMultiplier / 2) + 1)), mountStructuralQuantum * 8]) {
|
||||
rotate([0, 90, 0]) {
|
||||
cylinder(h=sideWallWidth * 4, r=mountStructuralQuantum * clipThicknessMultiplier / 2, $fn=circleResolution, center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// right side panel and mount
|
||||
translate([sbcFullThickness + sideWallWidth, 0, 0]) {
|
||||
cube([
|
||||
sideWallWidth,
|
||||
mountStructuralDepth,
|
||||
mountHeight,
|
||||
]);
|
||||
// front clip (male)
|
||||
translate([0, 0, 0]) {
|
||||
cube([
|
||||
sideWallWidth + mountStructuralQuantum * 1.15,
|
||||
mountStructuralQuantum,
|
||||
mountStructuralQuantum * clipThicknessMultiplier
|
||||
]);
|
||||
translate([sideWallWidth + mountStructuralQuantum * 1.15,0,0]) {
|
||||
cube([
|
||||
mountStructuralQuantum / 2,
|
||||
mountStructuralQuantum * (clipDepthMultiplier + 1),
|
||||
mountStructuralQuantum * clipThicknessMultiplier
|
||||
]);
|
||||
}
|
||||
translate([sideWallWidth + mountStructuralQuantum * 1.65, 0, 0]) {
|
||||
polyhedron(points = [
|
||||
// y-plane points
|
||||
[0,0,0],
|
||||
[sideWallWidth - (mountStructuralQuantum * 1.55), 0, 0],
|
||||
[0,0,mountStructuralQuantum * clipThicknessMultiplier],
|
||||
[sideWallWidth - (mountStructuralQuantum * 1.55), 0, mountStructuralQuantum * clipThicknessMultiplier],
|
||||
// x-plane points
|
||||
[0, mountStructuralQuantum * (clipDepthMultiplier + 1), 0],
|
||||
[0, mountStructuralQuantum * (clipDepthMultiplier + 1), mountStructuralQuantum * clipThicknessMultiplier]
|
||||
], faces = [
|
||||
[0, 2, 3, 1], //[0, 1, 2, 3],
|
||||
[0, 4, 5, 2], //[0, 2, 4, 5],
|
||||
[1, 3, 5, 4], //[1, 3, 4, 5],
|
||||
[0, 1, 4],
|
||||
[2, 5, 3]
|
||||
]);
|
||||
}
|
||||
}
|
||||
// back rod (male)
|
||||
translate([sideWallWidth, mountStructuralDepth - (mountStructuralQuantum * ((clipThicknessMultiplier / 2) + 1)), mountStructuralQuantum * 8]) {
|
||||
rotate([0, 90, 0]) {
|
||||
cylinder(h=unsupportedMaxExtension * 2, r=mountStructuralQuantum * clipThicknessMultiplier * 0.48, $fn=circleResolution, center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
BIN
server sbc mount.stl
Normal file
BIN
squirtle_pokemon_voronoi.stl
Normal file
98
valve index desk mount.scad
Normal file
|
@ -0,0 +1,98 @@
|
|||
// Valve Index headset and controllers mount
|
||||
// length units are millimeters
|
||||
tableLegDiameter = 44.5;
|
||||
screwToLeg = 15.42;
|
||||
screwHeadDiameter = 9.00;
|
||||
screwThreadHole = 5.00;
|
||||
headsetBottomSupportWidth = 25.40;
|
||||
legWrapperWidth = 5.00;
|
||||
clampHeight = 100.0;
|
||||
circleResolution=360*2; // faces per rotation
|
||||
|
||||
difference() {
|
||||
union() {
|
||||
// leg clamp
|
||||
difference() {
|
||||
cylinder(h=100, r=tableLegDiameter/2 + legWrapperWidth, $fn=circleResolution);
|
||||
union() {
|
||||
translate([0,0,-0.05]) {
|
||||
cylinder(h=clampHeight + 0.1, r=tableLegDiameter/2, $fn=circleResolution);
|
||||
}
|
||||
translate([-clampHeight,screwHeadDiameter, -0.05]) {
|
||||
cube([clampHeight*2, clampHeight, clampHeight + 0.1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
// leg screw connection
|
||||
translate([-screwHeadDiameter,-(screwToLeg+screwHeadDiameter+tableLegDiameter/2),clampHeight-27.0]) {
|
||||
difference() {
|
||||
cube([screwHeadDiameter * 2, screwToLeg + screwHeadDiameter, 27.0]);
|
||||
union() {
|
||||
rotate([0, 90, 0]) {
|
||||
translate([42, -45, screwHeadDiameter+0.1
|
||||
]) {
|
||||
cylinder(h=screwHeadDiameter*2.5, r=78.0, center=true, $fn=circleResolution);
|
||||
}
|
||||
}
|
||||
// space for screw head
|
||||
translate([screwHeadDiameter, screwHeadDiameter/2, 15]) {
|
||||
cylinder(h=12.0, r=screwHeadDiameter*0.55, center=true, $fn=circleResolution);
|
||||
translate([-screwHeadDiameter*0.55,-screwHeadDiameter,-6])
|
||||
cube([screwHeadDiameter*1.1, 10, 12]);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// headset hook
|
||||
translate([-screwHeadDiameter,-(legWrapperWidth+headsetBottomSupportWidth*1.5+tableLegDiameter/2),0]) {
|
||||
union() {
|
||||
cube([screwHeadDiameter*2, legWrapperWidth+headsetBottomSupportWidth*1.5, legWrapperWidth*1.5]);
|
||||
translate([0, -legWrapperWidth*0.99, 0]) {
|
||||
cube([screwHeadDiameter*2, legWrapperWidth, legWrapperWidth*3]);
|
||||
}
|
||||
translate([0, (headsetBottomSupportWidth*1.5)-14, legWrapperWidth*1.5]) {
|
||||
difference() {
|
||||
cube([screwHeadDiameter*2, 12+legWrapperWidth,10]);
|
||||
translate([-50,0,12+legWrapperWidth]) {
|
||||
rotate([0,90,0]) {
|
||||
cylinder(h=100, r=12+legWrapperWidth, $fn=circleResolution);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// left controller hook
|
||||
translate([-(legWrapperWidth+legWrapperWidth+tableLegDiameter/2), 0, 0]) {
|
||||
cube([legWrapperWidth+legWrapperWidth, screwHeadDiameter, legWrapperWidth]);
|
||||
translate([-legWrapperWidth*0.99,0,0]){
|
||||
cube([legWrapperWidth, screwHeadDiameter, legWrapperWidth*2]);
|
||||
}
|
||||
}
|
||||
|
||||
// right controller hook
|
||||
translate([tableLegDiameter/2, 0, 0]) {
|
||||
cube([legWrapperWidth+legWrapperWidth, screwHeadDiameter, legWrapperWidth]);
|
||||
translate([legWrapperWidth+legWrapperWidth*0.99,0,0]){
|
||||
cube([legWrapperWidth, screwHeadDiameter, legWrapperWidth*2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
// extra critical space deletion
|
||||
union() {
|
||||
// table leg
|
||||
translate([0,0,-0.05]) {
|
||||
cylinder(h=clampHeight + 0.1, r=tableLegDiameter/2, $fn=circleResolution);
|
||||
}
|
||||
translate([-clampHeight,10, -0.05]) {
|
||||
cube([clampHeight*2, clampHeight, clampHeight + 0.1]);
|
||||
}
|
||||
// screw hole
|
||||
translate([0, -(screwToLeg+screwHeadDiameter/2 + tableLegDiameter/2), 200]) {
|
||||
cylinder(h=250.0, r=screwThreadHole/2, center=true, $fn=circleResolution);
|
||||
}
|
||||
}
|
||||
}
|
BIN
valve index desk mount.stl
Normal file
63
voronoi/voronoi.scad
Normal file
|
@ -0,0 +1,63 @@
|
|||
// (c)2013 Felipe Sanches <juca@members.fsf.org>
|
||||
// licensed under the terms of the GNU GPL version 3 (or later)
|
||||
|
||||
function normalize(v) = v/(sqrt(v[0]*v[0] + v[1]*v[1]));
|
||||
|
||||
module voronoi(points, L=200, thickness=1, round=6, nuclei=true){
|
||||
for (p=points){
|
||||
difference(){
|
||||
minkowski(){
|
||||
intersection_for(p1=points){
|
||||
if (p!=p1){
|
||||
translate((p+p1)/2 - normalize(p1-p) * (thickness+round))
|
||||
assign(angle=90+atan2(p[1]-p1[1], p[0]-p1[0])){
|
||||
rotate([0,0,angle])
|
||||
translate([-L,-L])
|
||||
square([2*L, L]);
|
||||
}
|
||||
}
|
||||
}
|
||||
circle(r=round, $fn=20);
|
||||
}
|
||||
if (nuclei)
|
||||
translate(p) circle(r=1, $fn=20);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module random_voronoi(n=20, nuclei=true, L=200, thickness=1, round=6, min=0, max=100, seed=42){
|
||||
|
||||
x = rands(min, max, n, seed);
|
||||
y = rands(min, max, n, seed+1);
|
||||
|
||||
for (i=[0:n-1]){
|
||||
difference(){
|
||||
minkowski(){
|
||||
intersection_for(j=[0:n-1]){
|
||||
if (i!=j){
|
||||
assign(p=[x[i],y[i]], p1=[x[j],y[j]]){
|
||||
translate((p+p1)/2 - normalize(p1-p) * (thickness+round))
|
||||
assign(angle=90+atan2(p[1]-p1[1], p[0]-p1[0])){
|
||||
rotate([0,0,angle])
|
||||
translate([-L,-L])
|
||||
square([2*L, L]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
circle(r=round, $fn=20);
|
||||
}
|
||||
if (nuclei)
|
||||
translate([x[i],y[i]]) circle(r=1, $fn=20);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// example with an explicit list of points:
|
||||
// point_set = [[0,0],[30,0],[20,10],[50,20],[15,30],[85,30],[35,30],[12,60], [45,50],[80,80],[20,-40],[-20,20],[-15,10],[-15,50]];
|
||||
// voronoi(points=point_set, round=4, nuclei=false);
|
||||
|
||||
|
||||
// example with randomly generated set of points
|
||||
random_voronoi(n=64, round=6, min=0, max=300);
|