+
+ 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_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);
+ my $j_p_y = 0;
+ my $j_q_y = $j_p_y + $j_dpq * cos($slope_angle);
+ my $j_r_y = $j_q_y + sin($slope_angle) * $jcurverad;
+ my $j_s_y = $tall;
+ my $j_qrc_x = $j_rs_x - $jcurverad;
+ my $j_qrc_y = $j_r_y;
+
+ if ($jp =~ m/^curveE$/) {
+ my $angle = ($jt + 1) * TAU/2 - $slope_angle;
+ $j_x = $j_p_x + $i_thick * cos($angle);
+ $j_y = $j_p_y + $i_thick * sin($angle);
+ } elsif ($jp =~ m/^curve[12]E$/) {
+ my $angle = $slope_angle * ($jp =~ m/1/ ? $jt : (1-$jt));
+ my $outwards = $jp =~ m/1/ ? -1 : +1;
+ $j_x = $j_qrc_x + cos($angle) * ($jcurverad + $outwards * $i_thick);
+ $j_y = $j_qrc_y + sin($angle) * ($jcurverad + $outwards * $i_thick);
+ } elsif ($jp =~ m/^lin0$/) {
+ $j_x = $j_rs_x + $i_thick * (-0.5 + 0.5 * jt);
+ $j_y = $j_s_y;
+ } else {
+ die "$jp ?";
+ }
+
+ return
+ $i_offset +
+ $i_outward * $j_x +
+ [0,0,1] * $j_y;
+}