my @i_sections = qw(ball0 -6
sine0 -10
- -
- lin0 2
+ lin0 -2
circle 40
lin1 2
sine1 10
- -
ball2 6
-
);
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 = ();
}
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]);
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;