chiark / gitweb /
poster-tube-lid-parametric: fix diameter
[reprap-play.git] / poster-tube-lid-parametric.pl
index d538a29f58d09c19d815cfceef97704f4802f2c9..fc10667b2b4cea563cfc95697cccadfa40f0bb3c 100755 (executable)
@@ -23,13 +23,15 @@ my $sine_height = 6;
 
 my $ballend_xr = $thick/2;
 
-my @i_sections = qw(ball0   6
+my @i_sections = qw(ball0  -6
                    sine0  -10
+                   -
                    lin0    2
                    circle 20
                    lin1    2
                    sine1  10
-                   lin2    2
+                   -
+                   lin2   -2
                    ball2   6
                    -
                    );
@@ -40,7 +42,7 @@ my @j_sections = qw(lin0    2
                    -
                    curveE 20
                    -
-                   curve2 10
+                   curve2 -10
                    -
                    );
 
@@ -56,7 +58,7 @@ sub point ($$$$) {
     my $i_thickscale = 1.0;
 
     if ($ip =~ m/^lin[01]$/) {
-       $i_offset = V( -$lin_len * ($ip =~ m/1/ ? $it : 1-$it),
+       $i_offset = V( -$lin_len * $it,
                       0,
                       0 );
     } elsif ($ip =~ m/^circle$/) {
@@ -74,13 +76,14 @@ sub point ($$$$) {
                       $sine_height * ( 0.5 - 0.5*cos( $it*TAU/2 ) )
                     );
     } elsif ($ip =~ m/^ball[02]$/) {
-       my $angle = ($ip =~ m/0/ ? (1-$it) : $it) * TAU/4;
+       my $angle = $it * TAU/4;
        $i_offset = V( -$lin_len -$sine_len
                       -($ip =~ m/2/ ? $lin2_len : 0)
                       -sin($angle) * $ballend_xr,
                       0,
                       +$sine_height
                     );
+       $i_thickscale = cos($angle);
     } else {
        die "$ip ?";
     }
@@ -88,8 +91,8 @@ sub point ($$$$) {
     my $j_plus_th = $jp =~ m/2$/ ? $thick : 0;
 
     my $i_thick = $thick * $i_thickscale;
-    my $j_p_x = $small_dia/2 + $thick;
-    my $j_rs_x = $large_dia/2 + $thick;
+    my $j_p_x = $small_dia/2 + $thick/2;
+    my $j_rs_x = $large_dia/2 + $thick/2;
     my $j_dqr_x = (1-cos($slope_angle)) * $jcurverad;
     my $j_q_x = $j_rs_x - $j_dqr_x;
     my $j_dpq = ($j_q_x - $j_p_x) / asin($slope_angle);
@@ -109,13 +112,14 @@ sub point ($$$$) {
        $j_x = $j_p_x + $i_thick/2 * cos($angle);
        $j_y = $j_p_y + $i_thick/2 * sin($angle);
     } elsif ($jp =~ m/^curve[12]$/) {
-       my $angle = $slope_angle * ($jp =~ m/1/ ? $jt : (1-$jt));
+       my $angle = $slope_angle * $jt;
        my $outwards = $jp =~ m/1/ ? -1 : +1;
        $j_x = $j_qrc_x + cos($angle) * ($jcurverad + $outwards * $i_thick/2);
        $j_y = $j_qrc_y - sin($angle) * ($jcurverad + $outwards * $i_thick/2);
     } elsif ($jp =~ m/^lin0$/) {
        $j_x = $j_rs_x + $i_thick * (+0.5 - $jt);
        $j_y = $j_s_y;
+       $i_offset->[2] = 0;
     } else {
        die "$jp ?";
     }
@@ -124,7 +128,8 @@ sub point ($$$$) {
     return
        $i_offset +
        $j_x * $i_outward +
-       V(0,0,1) * $j_y;
+       V(0,0,1) * $j_y +
+       V(0,0,-$tall) ;
 }
 
 sub get_sections_ptvals {