refined helix
This commit is contained in:
parent
f1c385f5dd
commit
9588b3fe8c
BIN
openscad/foreign/parametric-helix_haystack-mod/haystack_logo.png
Normal file
BIN
openscad/foreign/parametric-helix_haystack-mod/haystack_logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.6 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.9 KiB |
@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
width="501.33334"
|
||||
height="178.66667"
|
||||
viewBox="0 0 501.33334 178.66667"
|
||||
sodipodi:docname="haystack_logo_final.svg"
|
||||
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1" />
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showguides="true"
|
||||
inkscape:zoom="3.2546641"
|
||||
inkscape:cx="109.84236"
|
||||
inkscape:cy="69.899687"
|
||||
inkscape:window-width="5120"
|
||||
inkscape:window-height="1372"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g1">
|
||||
<sodipodi:guide
|
||||
position="154.87316,107.74798"
|
||||
orientation="0,-1"
|
||||
id="guide1"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="408.0677,50.320605"
|
||||
orientation="0,-1"
|
||||
id="guide3"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Image"
|
||||
id="g1">
|
||||
<path
|
||||
style="fill:#000000"
|
||||
d="m 125.31473,153.15745 c 0.32361,-24.84341 -1.74527,-36.06144 -15.89944,-59.045268 l -8.85996,-14.386967 7.07083,-9.514556 11.98249,18.707475 c 7.74992,12.099446 10.95559,19.597976 13.01655,26.841556 0,0 2.84053,10.88974 3.5787,16.45382 0.94049,7.08905 1.0643,21.42708 1.0643,21.42708 l -0.23925,21.48138 -12,-0.0257 z m 82.26852,-25.32179 c -6.79765,-2.22596 -13.88764,-8.07626 -13.88764,-8.07626 -0.0381,-0.0342 7.06667,-8.68224 7.06667,-8.68224 l 3.97035,2.82714 c 4.76565,3.39344 14.1229,5.58756 17.8505,4.92645 7.75546,-1.37545 11.77629,-9.95953 -6.04897,-13.2625 -8.90014,-1.64917 -18.51381,-7.201061 -20.27411,-13.076441 -1.91807,-6.401928 -0.98605,-10.686611 3.47881,-15.992791 4.2928,-5.101702 11.3218,-5.722837 18.4607,-5.622832 5.37668,0.07532 18.16272,6.300787 18.16272,6.300787 -1.16603,2.619741 -5.57525,9.875482 -5.52415,9.753794 l -5.18481,-2.64509 c -5.38579,-2.747624 -11.35893,-3.054762 -14.85768,-2.011576 -3.63087,1.08258 -4.75459,4.871973 -3.5225,7.684615 1.37813,3.146015 7.67926,3.591052 14.93801,6.045572 6.82697,2.308517 13.24941,4.392612 16.42394,10.862102 1.23243,2.51163 0.96349,9.02362 -0.96472,12.17885 -5.56569,9.10741 -17.21942,13.00406 -30.08712,8.79042 z m 166.0103,-21.46368 c -1.48309,-5.04618 -0.96418,-10.512542 0.0329,-13.776365 2.71295,-8.880641 8.85017,-17.298301 16.66143,-19.951358 10.42808,-3.541848 21.40674,-2.539274 30.4917,2.764525 l 4.96483,2.898471 -8.1308,9.863975 -4.81172,-3.265321 c -11.86273,-8.050262 -27.90952,0.261204 -26.96689,14.611162 1.02816,15.652231 18.50059,21.256421 27.6218,13.634681 l 3.94927,-3.30003 8.74709,8.96434 -3.70726,3.26268 c -7.06847,6.2208 -20.648,8.33008 -30.89871,4.70033 -5.42498,-1.92097 -14.3365,-8.0999 -17.95364,-20.40709 z M 1.6956149,99.640587 V 70.97392 h 6.666667 6.6666671 V 82.307253 93.640587 H 26.362282 37.695616 V 82.307253 70.97392 h 6.666667 6.666666 V 99.640587 128.30725 H 44.362283 37.695616 V 116.97392 105.64059 H 26.362282 15.028949 v 11.33333 11.33333 H 8.3622819 1.6956149 Z M 63.744232,123.30725 C 66.59586,106.25446 72.803233,91.979161 86.155074,71.7683 99.916134,50.938014 102.37972,46.387822 106.4375,34.307252 c 2.60391,-7.752186 3.60534,-13.490071 3.66513,-21.000001 l 0.0823,-10.3333329 h 5.75535 5.75536 V 13.360453 c 0,19.163686 -9.07772,38.383291 -27.068015,65.884254 -5.82228,8.900256 -7.72078,14.126075 -8.14179,14.284256 0,0 10.279841,0.111624 14.992315,0.111624 l 6.36555,11.794273 c -9.122675,0.28357 -18.252151,0.20573 -27.378076,0.20573 l -2.051657,6.90866 c -1.128409,3.79977 -2.231702,9.42558 -2.377543,10.69079 l -0.584097,5.06721 H 62.908115 Z m 87.284718,-5.92984 V 106.44756 L 140.36228,89.560489 C 134.49561,80.272597 129.6413,70.954628 129.6413,70.954628 c 3.02508,0.01727 3.48035,0.01929 14.21082,0.01929 l 6.52282,11.287817 c 3.58755,6.2083 6.78856,11.022071 7.11337,10.697268 4.54102,-6.974921 8.67985,-14.884864 12.95875,-22.024512 0,0 0.0136,-0.09172 14.09563,0.02395 -3.02169,6.848287 -7.33158,12.932566 -11.34972,19.234764 l -10.16402,15.885945 v 11.11405 11.11405 h -6 -6 z M 268.36228,105.64059 V 82.97392 h -8.66666 -8.66667 v -6 -6 h 24 24 v 6 6 h -8.66667 -8.66666 v 22.66667 22.66666 h -6.66667 -6.66667 z m 34.44941,22.64966 c 0,0 24.93638,-57.405468 24.88185,-57.405468 h 10.77302 l 25.05122,57.384868 -13.60161,0.0376 -4.40063,-11.8202 -25.49513,0.10667 -3.88035,11.71353 z m 30.04155,-42.965528 c -2.46505,6.333771 -4.90586,12.677133 -7.44293,18.982528 h 14.91306 c -2.51572,-6.317459 -5.04821,-12.628324 -7.47013,-18.982528 z M 443.02895,70.97392 h 12 l 0.1282,24.666667 23.20512,-24.68097 15.9444,0.0144 -22.50614,25.526067 c -0.008,-0.0046 6.09017,8.557266 12.1859,16.807266 l 11.08313,15 h -15.60774 l -17.09955,-23.8 -7.33334,6.96558 v 16.83432 h -12 z M 85.424934,47.905541 C 81.606985,36.351334 82.045145,35.705457 81.718464,29.562339 l -0.0228,-5.255087 h 6 6 l 0.0158,3.666666 c 0.009,2.016667 0.87911,6.910332 1.93423,10.874812 l 1.9184,7.208145 -8.445544,11.929437 -1.62963,-3.83456 z"
|
||||
id="path1"
|
||||
sodipodi:nodetypes="ssccssacccssccssssssccsssssssssssccsssccsssscccccccccccccccccccccccscsccccssscccssccsccsccssccsccccccccccccccccccccccccccccccccccccccccccccccccccccccccscccsc" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.6 KiB |
@ -91,7 +91,7 @@ translate([0,0,-base_platform_height/2])difference(){
|
||||
translate([-usb_mount_hole_spacing/2,base_platform_radius*0.75,- base_platform_height/6])rotate([90,0,0])cylinder(d = usb_mount_hole_dia, h = 10, center = true, $fn = base_platform_shape);
|
||||
}
|
||||
// baseplate with pry-hole:
|
||||
//translate([0,0,-15])difference(){
|
||||
// translate([0,0,(-base_platform_height/2+1-0.01)])cylinder(r = base_platform_inner_radius+2, h = 2-0.2, center = true, $fn = base_platform_shape);
|
||||
// for (x = [ base_platform_radius*0.75 , -base_platform_radius*0.75 ])translate([0,x,(-base_platform_height/2+1-0.01)])cube([10,2,2+0.01], center=true);
|
||||
//}
|
||||
translate([0,0,-15])difference(){
|
||||
translate([0,0,(-base_platform_height/2+1-0.01)])cylinder(r = base_platform_inner_radius+2, h = 2-0.2, center = true, $fn = base_platform_shape);
|
||||
for (x = [ base_platform_radius*0.75 , -base_platform_radius*0.75 ])translate([0,x,(-base_platform_height/2+1-0.01)])cube([10,2,2+0.01], center=true);
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,134 @@
|
||||
// number of fragments | a higher fragment count will result in slower render times '20' is sufficient.
|
||||
fn = 30; // [0:100]
|
||||
// "sugar phosphate backbones" | part of helix_base module | if adjusted also consider adjusting 'post_distance_apart' or 'center_bridge_length'.
|
||||
post_radius = 5; // [0:500]
|
||||
post_hole_radius = 1.75; // [0:500]
|
||||
// part of helix_base module | if adjusted also consider adjusting 'center_bridge_length'.
|
||||
post_distance_apart = 25; // [0:500]
|
||||
// "base pairs" length between "sugar phosphate backbones" | part of helix_base module | if adjusted also consider adjusting 'post_distance_apart'.
|
||||
center_bridge_length = 55; // [0:500]
|
||||
// part of helix_base module | thickness of "basepairs" in relevence to the the Y-axis of 'helix_base' before "linear_extrude" is implemented. further explanation is below.
|
||||
center_bridge_width = 1.6; // [0:0.1:500]
|
||||
// 'helix_height' adjusts the height of the linear_extruded 'helix_base' module | 'helix_height, helix_twists, helix_twists' all work hand in hand and should be experimented to fully understand the linear_extrude's nature.
|
||||
helix_height = 165; // [0:500]
|
||||
// 'helix_twists' adjusts the degree of twist in the linear_extruded 'helix_base' module.
|
||||
helix_twists = 400; // [0:3600]
|
||||
// 'helix_slices' adjusts the number of slices used in the linear_extruded 'helix_base' module | more slices = higher resolution and longer render times, less slices = the contrary | 200 is sufficient.
|
||||
helix_slices = 600; // [0:500]
|
||||
// this is fun try changing from 0-3 to scale 'helix_base' as it reaches its specified height in 'helix_height' | '1' = 1to1 scale, 0 = 1to0, 2 = 1to2 scale and so on in sequential order.
|
||||
helix_scale = 1; // [0:10]
|
||||
// the radius of the differenced circle that creates the spaces between each "base pair" | if adjusted you may also want to adjust 'center_bridge_length' and 'post_distance_apart'.
|
||||
spacer_radius = 20.25; // [0:500]
|
||||
// the height of the differenced circle changing this will result in a visual thickness change, in the Z-axis, of each "basepair".
|
||||
spacer_height = 6; // [0:550]
|
||||
// the point in the Z-axis at which the spacers will start appearing | 'spacer_start, spacer_increment_distance, and spacer_increment_height all work together to create the "base pairs/ bridges" that appear between each "sugar phosphate backbone/post".
|
||||
spacer_start = 0; // [0:550]
|
||||
// the distance between each spacer changing this will result in a visual thickness change, in the Z-axis, of each "basepair".
|
||||
spacer_increment_distance = 9; // [0:500]
|
||||
// the height to which the spacers ascend to and then stop being produced.
|
||||
spacer_increment_height = helix_height; // [0:500]
|
||||
// the radius of the circle where the standing platform is located at the base of the helix.
|
||||
base_platform_radius = 52.5; // [0:500]
|
||||
base_platform_inner_radius = 47.5;
|
||||
// the height of the above said platform.
|
||||
base_platform_height = 20; // [0:100]
|
||||
// the controls the number of sides the platform has, 0 defaults to 'fn'. 3, 4, 5, 6 ...
|
||||
base_platform_shape = 6; // [0:50]
|
||||
|
||||
usb_mount_hole_spacing = 15; // 19-(2*2) ?
|
||||
usb_mount_hole_dia = 2.0; // ?
|
||||
usb_height = 4.1;
|
||||
usb_rectangular_width = 11+1; //presumeably this is 19-4-4 = 11 plus one for wiggle room. needs testing.
|
||||
text=true;
|
||||
textdepth=2;
|
||||
usb=false;
|
||||
|
||||
module logo(path,scale){
|
||||
translate([0,0,0]){
|
||||
scale([scale,scale,1]){
|
||||
linear_extrude(textdepth){
|
||||
import(path,center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module helix_basic(){
|
||||
translate([-post_distance_apart,0,0]){
|
||||
difference(){
|
||||
circle(post_radius,$fn = fn);
|
||||
if(usb){
|
||||
circle(post_hole_radius,$fn = fn);
|
||||
}
|
||||
}
|
||||
}
|
||||
translate([post_distance_apart,0,0]){
|
||||
difference(){
|
||||
circle(post_radius, $fn = fn);
|
||||
if(usb){
|
||||
circle(post_hole_radius, $fn = fn);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
square([center_bridge_length,center_bridge_width],center = true);
|
||||
}
|
||||
// the basic 2D shape that the helix is extruded upon.
|
||||
union(){
|
||||
difference(){
|
||||
linear_extrude(height = helix_height, twist = helix_twists, slices = helix_slices, scale = helix_scale){
|
||||
helix_basic();
|
||||
}
|
||||
for (a = [ spacer_start : spacer_increment_distance : spacer_increment_height])
|
||||
translate([0, 0, a]) {
|
||||
linear_extrude(height = spacer_height, center = true){
|
||||
circle(spacer_radius, $fn = fn);
|
||||
}
|
||||
}
|
||||
}
|
||||
// elipsoids on top to cover up the led-holes:
|
||||
rotate([0,0,helix_twists+90+2.1*post_radius-0.5]){
|
||||
translate([post_distance_apart,0,helix_height])scale([1,1,0.25])sphere(r = post_radius, $fn = fn);
|
||||
translate([-post_distance_apart,0,helix_height])scale([1,1,0.25])sphere(r = post_radius, $fn = fn);
|
||||
}
|
||||
}
|
||||
translate([0,0,-base_platform_height/2])difference(){
|
||||
hull(){ // base
|
||||
translate([0,0,base_platform_height/3])cylinder(r = base_platform_radius-(base_platform_height/2), h = base_platform_height/3, center = true, $fn = base_platform_shape);
|
||||
translate([0,0,-base_platform_height/4])cylinder(r = base_platform_radius, h = base_platform_height/2, center = true, $fn = base_platform_shape);
|
||||
}
|
||||
if(usb){
|
||||
translate([post_distance_apart,0,(base_platform_height/2)-(base_platform_height/4)])cylinder(r1 = post_hole_radius*2, r2 = post_hole_radius, h = base_platform_height/2+0.2, center = true, $fn = fn);
|
||||
translate([-post_distance_apart,0,(base_platform_height/2)-(base_platform_height/4)])cylinder(r1 = post_hole_radius*2, r2 = post_hole_radius, h = base_platform_height/2+0.2, center = true, $fn = fn);
|
||||
|
||||
//bottom cutout narrow:
|
||||
translate([0,0,-base_platform_height/2+0.01])cylinder(r = base_platform_inner_radius, h = base_platform_height, center = true, $fn = base_platform_shape);
|
||||
//bottom cutout wide:
|
||||
translate([0,0,-base_platform_height/2+1-0.01])cylinder(r = base_platform_inner_radius+2, h = 2, center = true, $fn = base_platform_shape);
|
||||
// only draw usb-module-cutouts if desired:
|
||||
|
||||
// usb-module:
|
||||
translate([0,base_platform_radius*0.75,- base_platform_height/6])rotate([90,0,0])cube([usb_rectangular_width,usb_height,15],center=true); //cylinder(d = usb_height, h = 10, center = true, $fn = fn);
|
||||
// usb-screw-holes:
|
||||
translate([usb_mount_hole_spacing/2,base_platform_radius*0.75,- base_platform_height/6])rotate([90,0,0])cylinder(d = usb_mount_hole_dia, h = 15, center = true, $fn = base_platform_shape);
|
||||
translate([-usb_mount_hole_spacing/2,base_platform_radius*0.75,- base_platform_height/6])rotate([90,0,0])cylinder(d = usb_mount_hole_dia, h = 15, center = true, $fn = base_platform_shape);
|
||||
}
|
||||
if(text){
|
||||
rotate([49,0,0]){
|
||||
translate([0,-23.25,32.35]){
|
||||
#logo("haystack_logo_final.svg",0.2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// baseplate with pry-hole:
|
||||
if(usb){
|
||||
translate([0,0,-15]){
|
||||
difference(){
|
||||
translate([0,0,(-base_platform_height/2+1-0.01)])cylinder(r = base_platform_inner_radius+2, h = 2-0.2, center = true, $fn = base_platform_shape);
|
||||
for (x = [ base_platform_radius*0.80 , -base_platform_radius*0.80 ])translate([0,x,(-base_platform_height/2+1-0.01)])cube([10,2,2+0.01], center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user