chiark / gitweb /
poster-tube-lid: wip new shape (unfinished, ball[02] is wrong)
[reprap-play.git] / poster-tube-lid-parametric.scad.pl
index bbe70d93ad7c195288fdbf1066ceedc62c748333..a6ffaf2aafe0d3911ff03cf2572417ffb5bec452 100755 (executable)
@@ -17,7 +17,7 @@ my $jcurverad = 5;
 my $tall = 50;
 
 my $lin_len = 4;
-my $sine_size = 10;
+my $sine_size = 5;
 my $sine_angle = 1.2 * TAU/8;
 
 my $ballend_xr = $thick/2;
@@ -49,11 +49,13 @@ my @j_sections = qw(lin0    2
 sub point ($$$$) {
     my ($ip,$it, $jp,$jt) = @_;
 
-    my ($i_offset, $i_outward);
+    my ($i_offset);
 
-    $i_outward = V( 0,
-                   ($ip =~ m/0$/ ? -1 : +1),
-                   0 );
+    my $i_outward = V( 0,
+                      ($ip =~ m/0$/ ? -1 : +1),
+                      0 );
+
+    my $i_j_y_angle = 0;
 
     my $i_thickscale = 1.0;
     my $sine_len = $sine_size * sin($sine_angle);
@@ -70,22 +72,28 @@ sub point ($$$$) {
                         0 );
     } elsif ($ip =~ m/^sine[01]$/) {
        my $angle = $it * $sine_angle;
-       $i_offset = V( -$sine_size * sin($angle) -$lin_len,
+       $i_offset = V( -$lin_len -$sine_size * sin($angle),
                       0,
                       +$sine_size * (1 - cos($angle))
                     );
+       $i_j_y_angle = $angle;
     } elsif ($ip =~ m/^ball[02]$/) {
+       $i_j_y_angle = $sine_angle;
        my $angle = $it * TAU/4;
        my $dx = sin($angle) * $ballend_xr;
        $i_offset = V( -$lin_len -$sine_len - $dx,
                       0,
-                      +$sine_height + $dx * tan($sine_angle)
+                      +$sine_height
                     );
        $i_thickscale = cos($angle);
     } else {
        die "$ip ?";
     }
 
+    $i_j_y_vect = V( sin($i_j_y_angle),
+                    0,
+                    cos($i_j_y_angle ));
+
     my $j_plus_th = $jp =~ m/2$/ ? $thick : 0;
 
     my $i_thick = $thick * $i_thickscale;
@@ -122,18 +130,18 @@ sub point ($$$$) {
        die "$jp ?";
     }
 
-    if ($i_offset->[0] < 0) {
-       my $base = $large_dia/2 + 3.0*($large_dia - $small_dia)/2;
-       $i_offset->[0] *=
-           ($base - $j_x) /
-           ($base - $small_dia/2);
+    $j_y -= $j_qrc_y;
+
+    if ($j_y > 0) {
+       $i_j_y_vect = V(0,0,1);
     }
 
 #    print STDERR "@_ $j_x $j_y $i_offset $i_outward\n";
     return
        $i_offset +
        $j_x * $i_outward +
-       V(0,0,1) * $j_y +
+       $i_j_y_vect * $j_y +
+       V(0,0,1) * $j_qrc_y +
        V(0,0,-$tall) ;
 }