chiark / gitweb /
sleepphone-cable-box: reinforce keeper
[reprap-play.git] / poster-tube-lid-parametric.scad.pl
index a6ffaf2..64d4d00 100755 (executable)
@@ -16,9 +16,9 @@ my $slope_angle = 45 * TAU/360;
 my $jcurverad = 5;
 my $tall = 50;
 
-my $lin_len = 4;
+my $lin_len = 2;
 my $sine_size = 5;
-my $sine_angle = 1.2 * TAU/8;
+my $sine_angle = 1.20 * TAU/8;
 
 my $ballend_xr = $thick/2;
 
@@ -26,12 +26,10 @@ my $skew_slope = 0.7;
 
 my @i_sections = qw(ball0  -6
                    sine0  -10
-                   -
-                   lin0    2
-                   circle 20
+                   lin0    -2
+                   circle 40
                    lin1    2
                    sine1  10
-                   -
                    ball2   6
                    -
                    );
@@ -81,18 +79,18 @@ sub point ($$$$) {
        $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,
+       $i_offset = V( -$lin_len -$sine_len - $dx * cos($sine_angle),
                       0,
-                      +$sine_height
+                      +$sine_height + $dx * sin($sine_angle)
                     );
        $i_thickscale = cos($angle);
     } else {
        die "$ip ?";
     }
 
-    $i_j_y_vect = V( sin($i_j_y_angle),
-                    0,
-                    cos($i_j_y_angle ));
+    my $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;
 
@@ -171,20 +169,29 @@ our @points;
 our %point_indices;
 our @triangles;
 
+my @ipts;
+my @jpts;
+
+my $qi;
+my $qj;
+
 sub triangle {
     my @pixs;
     foreach my $pval (@_) {
        my $pix = $point_indices{$pval}
            //= ((push @points, $pval), $#points);
-       return if grep { $pix eq $_ } @pixs;
+       if (grep { $pix eq $_ } @pixs) {
+           print "// elide @{ $ipts[$qi] } @{ $jpts[$qj] }\n";
+           return;
+       }
        push @pixs, $pix;
     }
-    push @triangles, \@pixs;
+    push @triangles, [ $qi,$qj, \@pixs ];
 }
 
 sub make_sheet () {
-    my @ipts = get_sections_ptvals(@i_sections);
-    my @jpts = get_sections_ptvals(@j_sections);
+    @ipts = get_sections_ptvals(@i_sections);
+    @jpts = get_sections_ptvals(@j_sections);
     my @sheet;
     foreach my $ipt (@ipts) {
        my @row = ();
@@ -193,9 +200,9 @@ sub make_sheet () {
        }
        push @sheet, \@row;
     }
-    foreach (my $qi=0; $qi<$#ipts; $qi++) { # i direction does not wrap
+    foreach ($qi=0; $qi<$#ipts; $qi++) { # i direction does not wrap
        my $qi2 = $qi+1;
-       foreach (my $qj=0; $qj<@jpts; $qj++) { # j direction does wrap
+       foreach ($qj=0; $qj<@jpts; $qj++) { # j direction does wrap
            my $qj2 = ($qj+1) % @jpts;
            my $p0 = $sheet[$qi][$qj];
            triangle($p0, $sheet[$qi2][$qj], $sheet[$qi2][$qj2]);
@@ -213,7 +220,9 @@ sub write_out () {
     print "module ImplHeadCup(){ polyhedron(points=[\n" or die $!;
     print pv($_),",\n" or die $! foreach @points;
     print "],faces=[\n" or die $!;
-    print pv($_),",\n" or die $! foreach @triangles;
+    foreach (@triangles) {
+       print pv($_->[2]),", // @{ $ipts[$_->[0]] } @{ $jpts[$_->[1]] }\n" or die $!;
+    }
     print "],convexity=10); }\n" or die $!;
     print <<END or die $!;
 implheadcup_large_dia = $large_dia;