// shape5p.java plot 3d data Utah Graphics to shape5p.dat shape5p.stl // javac -cp . shape5p.java // _ java -cp . shape5p > shape5p_java.out // 8 copies around dang = 2Pi/8 = Pi/4 45 degrees // arcs aang = Pi/32 import java.io.*; public class shape5p // only 2d lines first cut, z=0 { boolean debug = true; int pts, pt, np, j; int k = 0; // index into newpts k++ datread DR; // = new datread(filename); // defines data structures int new_points = 0; // for each x,y,z point kept int new_polys = 0; // k/4 for datwrite int npouta1 = 0; int npouta2 = 0; int npoutb1 = 0; int npoutb2 = 0; int pta1, pta2, ptb1, ptb2; double xyz[][] = new double[10000][3]; // x, y, z for output int newpts[] = new int[40000]; // 2, xyz1, xyz2 for output String fileout = "shape5p.dat"; double Pi = Math.PI; double pxy[] = new double[2]; double xca[] = new double[9]; // rotated double yca[] = new double[9]; // rotated double pt1xa[] = new double[9]; // rotated double pt1ya[] = new double[9]; // rotated use double pt2xa[] = new double[9]; // rotated use double pt2ya[] = new double[9]; // rotated use public shape5p() { double xc, yc, r, ang1, ang2, rxc, ryc; double pt1x, pt1y, pt2x, pt2y, dx, dy; int ca0, ca1, ca2, ca3, ca4, ca5, ca6, ca7; // inner arcs System.out.println("shape5p.java running"); new_polys = 0; new_points = 0; System.out.println(" "); System.out.println("generate 8 copies of pattern, inside"); xc = 0.0; xca[0] = xc; yc = -10.0; yca[0] = yc; r = 4.1; pt1x = 4.0; pt1xa[0] = pt1x; pt1y = -10.0; pt1ya[0] = pt1y; pt2x = -4.0; pt2xa[0] = pt2x; pt2y = -10.0; pt2ya[0] = pt2y; for(int i=1; i<9; i++) { rotate(xca[i-1],yca[i-1],pxy); xca[i] = pxy[0]; yca[i] = pxy[1]; rotate(pt1xa[i-1],pt1ya[i-1],pxy); pt1xa[i] = pxy[0]; pt1ya[i] = pxy[1]; rotate(pt2xa[i-1],pt2ya[i-1],pxy); pt2xa[i] = pxy[0]; pt2ya[i] = pxy[1]; } // end i for(int i=0; i<9; i++) { System.out.println("i="+i+" xc="+xca[i]+" yc="+yca[i]); } // end i System.out.println(" "); for(int i=0; i<9; i++) { System.out.println("i="+i+" pt1x="+pt1xa[i]+" pt1y="+pt1ya[i]); } // end i System.out.println(" "); for(int i=0; i<9; i++) { System.out.println("i="+i+" pt2x="+pt2xa[i]+" pt2y="+pt2ya[i]); } // end i System.out.println(" "); // a System.out.println("a "); npouta1 = new_points; for(int i=0; i<8; i++) { arc(xca[i], yca[i], r, pt1xa[i], pt1ya[i], pt2xa[i], pt2ya[i]); } // end i System.out.println(" "); System.out.println("generate 8 copies of pattern, inside 2"); xc = 0.0; xca[0] = xc; yc = -10.0; yca[0] = yc; r = 4.6; pt1x = 5.0; pt1xa[0] = pt1x; pt1y = -11.0; pt1ya[0] = pt1y; pt2x = -5.0; pt2xa[0] = pt2x; pt2y = -11.0; pt2ya[0] = pt2y; for(int i=1; i<8; i++) { rotate(xca[i-1],yca[i-1],pxy); xca[i] = pxy[0]; yca[i] = pxy[1]; rotate(pt1xa[i-1],pt1ya[i-1],pxy); pt1xa[i] = pxy[0]; pt1ya[i] = pxy[1]; rotate(pt2xa[i-1],pt2ya[i-1],pxy); pt2xa[i] = pxy[0]; pt2ya[i] = pxy[1]; } // end i // a2 System.out.println("a 2 "); npouta2 = new_points; for(int i=0; i<8; i++) { arc(xca[i], yca[i], r, pt1xa[i], pt1ya[i], pt2xa[i], pt2ya[i]); } // end i System.out.println("generate 8 copies of pattern, outside"); xc = 4.0; xca[0] = xc; yc = -10.0; yca[0] = yc; r = 4.5; pt1x = 0.0; pt1xa[0] = pt1x; pt1y = -8.0; pt1ya[0] = pt1y; pt2x = 5.7; pt2xa[0] = pt2x; pt2y = -5.7; pt2ya[0] = pt2y; for(int i=1; i<8; i++) { rotate(xca[i-1],yca[i-1],pxy); xca[i] = pxy[0]; yca[i] = pxy[1]; rotate(pt1xa[i-1],pt1ya[i-1],pxy); pt1xa[i] = pxy[0]; pt1ya[i] = pxy[1]; rotate(pt2xa[i-1],pt2ya[i-1],pxy); pt2xa[i] = pxy[0]; pt2ya[i] = pxy[1]; } // end i // b System.out.println("b "); npoutb1 = new_points; for(int i=0; i<8; i++) { arc(xca[i], yca[i], r, pt1xa[i], pt1ya[i], pt2xa[i], pt2ya[i]); } // end i System.out.println("generate 8 copies of pattern, outside 2"); xc = 4.0; xca[0] = xc; yc = -10.0; yca[0] = yc; r = 5.0; pt1x = 0.0; pt1xa[0] = pt1x; pt1y = -7.3; pt1ya[0] = pt1y; pt2x = 4.9; pt2xa[0] = pt2x; pt2y = -4.9; pt2ya[0] = pt2y; for(int i=1; i<8; i++) { rotate(xca[i-1],yca[i-1],pxy); xca[i] = pxy[0]; yca[i] = pxy[1]; rotate(pt1xa[i-1],pt1ya[i-1],pxy); pt1xa[i] = pxy[0]; pt1ya[i] = pxy[1]; rotate(pt2xa[i-1],pt2ya[i-1],pxy); pt2xa[i] = pxy[0]; pt2ya[i] = pxy[1]; } // end i // b 2 System.out.println("b 2 "); npoutb2 = new_points; for(int i=0; i<8; i++) { arc(xca[i], yca[i], r, pt1xa[i], pt1ya[i], pt2xa[i], pt2ya[i]); } // end i System.out.println(" "); System.out.println("npouta1="+npouta1+" npouta2="+npouta2); System.out.println("npoutb1="+npoutb1+" npoutb2="+npoutb2); System.out.println(" "); // cover surface with triangles for .stl pta1 = npouta1+1; pta2 = npouta2+1; for(int i=0; i<127; i++) // a 0 to z { if(i==15 || i==31 || i==47 || i==63 || i==79 || i==95 || i==111) { pta1 = pta1+2; pta2 = pta2+2; continue; } // end if newpts[k++] = 3; // inside a 0 to z newpts[k++] = pta1; newpts[k++] = pta1+1; newpts[k++] = pta1+2; newpts[k++] = 3; newpts[k++] = pta1+2; newpts[k++] = pta1+3; newpts[k++] = pta1+1; newpts[k++] = 3; // a outside 0 to z newpts[k++] = pta2; newpts[k++] = pta2+1; newpts[k++] = pta2+2; newpts[k++] = 3; newpts[k++] = pta2+2; newpts[k++] = pta2+3; newpts[k++] = pta2+1; newpts[k++] = 3; // a z=0 newpts[k++] = pta1; newpts[k++] = pta1+2; newpts[k++] = pta2; newpts[k++] = 3; newpts[k++] = pta1+2; newpts[k++] = pta2; newpts[k++] = pta2+2; newpts[k++] = 3; // a z=10 newpts[k++] = pta1+1; newpts[k++] = pta1+3; newpts[k++] = pta2+1; newpts[k++] = 3; newpts[k++] = pta1+3; newpts[k++] = pta2+1; newpts[k++] = pta2+3; pta1 = pta1+2; pta2 = pta2+2; } // end i ptb1 = npoutb1+1; ptb2 = npoutb2+1; for(int i=0; i<127; i++) // b 0 to z { if(i==15 || i==31 || i==47 || i==63 || i==79 || i==95 || i==111) { ptb1 = ptb1+2; ptb2 = ptb2+2; continue; } // end if newpts[k++] = 3; // inside b 0 to z newpts[k++] = ptb1; newpts[k++] = ptb1+1; newpts[k++] = ptb1+2; newpts[k++] = 3; newpts[k++] = ptb1+2; newpts[k++] = ptb1+3; newpts[k++] = ptb1+1; newpts[k++] = 3; // b outside 0 to z newpts[k++] = ptb2; newpts[k++] = ptb2+1; newpts[k++] = ptb2+2; newpts[k++] = 3; newpts[k++] = ptb2+2; newpts[k++] = ptb2+3; newpts[k++] = ptb2+1; newpts[k++] = 3; // b z=0 newpts[k++] = ptb1; newpts[k++] = ptb1+2; newpts[k++] = ptb2; newpts[k++] = 3; newpts[k++] = ptb1+2; newpts[k++] = ptb2; newpts[k++] = ptb2+2; newpts[k++] = 3; // b z=10 newpts[k++] = ptb1+1; newpts[k++] = ptb1+3; newpts[k++] = ptb2+1; newpts[k++] = 3; newpts[k++] = ptb1+3; newpts[k++] = ptb2+1; newpts[k++] = ptb2+3; ptb1 = ptb1+2; ptb2 = ptb2+2; } // end i System.out.println("new_points="+new_points+" np="+np); new_polys = k/4; System.out.println("new_polys="+new_polys); new datwrite(fileout, xyz, new_points, newpts, new_polys); System.out.println("shape5p.java finished"); } // shape5p constructor void arc(double xc, double yc, double r, double pt1x, double pt1y, double pt2x, double pt2y) { int n = 16; double ang1, ang2, dx, dy; double dang; double ang; double x, y, z; System.out.println("arc "); System.out.println("xc="+xc+" yc="+yc+" r="+r); System.out.println("pt1x="+pt1x+" pt1y="+pt1y); dx = pt1x-xc; dy = pt1y-yc; System.out.println("dx="+dx+" dy="+dy); ang1 = Math.atan2(dy,dx); System.out.println("ang1="+ang1+" deg="+(180.0*ang1/Pi)); System.out.println("pt2x="+pt2x+" pt2y="+pt2y); dx = pt2x-xc; dy = pt2y-yc; System.out.println("dx="+dx+" dy="+dy); ang2 = Math.atan2(dy,dx); System.out.println("ang2="+ang2+" deg="+(180.0*ang2/Pi)); ang = ang1; if(ang1>ang2) { ang2 = ang2 + 2.0*Pi; } dang = (ang2-ang1)/(double)(n-1); for(int i=0; i