package ddddbb.math; import ddddbb.comb.DCell; import ddddbb.gen.AChangeListener; import ddddbb.gen.IntModel; public class D4Graphics { protected D3Graphics g3; // private double blobRadius = 0.2; protected Camera4d c4; public D4Graphics(D3Graphics _g,final IntModel<Camera4d> perspective) { g3 = _g; new AChangeListener() { public void stateChanged() { c4 = perspective.sel(); }}.addTo(perspective); } /** dot is a center (i.e c=2*o+1) */ public void drawBlob(Point4d p) { Point3d dot3 = new Point3d(); c4.proj3d(p,dot3); g3.drawBlob(dot3); // D2Tupel l = new D2Tupel(); // D2Tupel r = new D2Tupel(); // proj(dot[0]+0.5,dot[1]+0.5,dot[2]+0.5,dot[3]+0.5,l,r); // g.setColor(lColor); // g.draw // g.setColor(rColor); } public void drawMark(Point4d p,double r) { // for (int i=0;i<4;i++) { // double[] a = new double[4]; // for (int ix=0;ix<4;ix++) { // a[ix]=0; //// if (((i >> ix) & 1) == 1) { //// a[ix] -= blobRadius; //// b[ix] += blobRadius; //// } //// else { //// a[ix] += blobRadius; //// b[ix] -= blobRadius; //// } // if (ix==i) { // a[ix]=r; // } // } // drawLine( // new Point4d(p.x[0]-a[0],p.x[1]-a[1],p.x[2]-a[2],p.x[3]-a[3]), // new Point4d(p.x[0]+a[0],p.x[1]+a[1],p.x[2]+a[2],p.x[3]+a[3])); // } drawBlob(p); } public void drawLine(int[] a,int[] b) { drawLine(new Point4d(a),new Point4d(b)); } public void drawLine(DCell l) { drawLine(new Point4d(l.facets[0][0].location.origin),new Point4d(l.facets[1][0].location.origin)); } public void drawString(String s,Point4d p4d) { assert p4d.dim() == 4; Point3d pd3 = new Point3d(); c4.proj3d(p4d,pd3); g3.drawString(s,pd3); // D2Tupel l=new D2Tupel(),r=new D2Tupel(); // proj(x[0],x[1],x[2],x[3],l,r); // g.setColor(lColor); // g.drawString(s,l.x[0],l.x[1]); // g.setColor(rColor); // g.drawString(s,r.x[0],r.x[1]); } // public boolean screenProj(Point p, Point2d pl, Point2d pr) { // Point3d pd3=Main.scene.camera.proj(p); // if (pd3==null) { return false; } // return screenProj(pd3,pl,pr); // } // // public boolean proj(double x[0],double x2,double x[2],double x[3],D2Tupel l,D2Tupel r) { // Point p = new Point(x[0],x[1],x[2],x[3]); // Point2d pl=new Point2d(),pr=new Point2d(); // if (!screenProj(p,pl,pr)) { return false; } // l.x[0] = x0+(int)Math.round(pl.x[0]*xcm); // l.x[1] = y0-(int)Math.round(pl.x[1]*ycm); // r.x[0] = x0+(int)Math.round(pr.x[0]*xcm); // r.x[1] = y0-(int)Math.round(pr.x[1]*ycm); // return true; // } public void drawLine(Point4d a,Point4d b) { // Point a = new Point(a1,a2,a3,a4); // Point b = new Point(b1,b2,b3,b4); Point3d a3d = new Point3d(); c4.proj3d(a,a3d); Point3d b3d = new Point3d(); c4.proj3d(b,b3d); g3.drawLine(a3d,b3d); // D2Tupel p1l,p1r,p2l,p2r; // p1l = new D2Tupel(); // p1r = new D2Tupel(); // p2l = new D2Tupel(); // p2r = new D2Tupel(); // if (proj(a1,a2,a3,a4,p1l,p1r) & proj(b1,b2,b3,b4,p2l,p2r)) { // g.setColor(lColor); // g.drawLine(p1l.x[0],p1l.x[1],p2l.x[0],p2l.x[1]); // g.setColor(rColor); // g.drawLine(p1r.x[0],p1r.x[1],p2r.x[0],p2r.x[1]); // } } public void drawArrow(Point4d a,Point4d b) { Point3d a3d = new Point3d(); c4.proj3d(a,a3d); Point3d b3d = new Point3d(); c4.proj3d(b,b3d); g3.drawArrow(a3d,b3d); } public void drawArrow(Point4d a, Point4d b, String label) { Point3d a3d = new Point3d(); c4.proj3d(a,a3d); Point3d b3d = new Point3d(); c4.proj3d(b,b3d); g3.drawArrow(a3d,b3d,label); } public void drawTetrahedral(Point4d o,double s) { Point4d o1,o2,o3,o4; o1 = new Point4d(s,0,0,0); o1.add(o); o2 = new Point4d(0,s,0,0); o1.add(o); o3 = new Point4d(0,0,s,0); o1.add(o); o4 = new Point4d(0,0,0,s); o1.add(o); drawArrow(o,o1,"x"); drawArrow(o,o2,"y"); drawArrow(o,o3,"z"); drawArrow(o,o4,"w"); } public void drawTetrahedral(double s) { drawTetrahedral(new Point4d(0,0,0,0),s); } public void drawTetrahedral() { drawTetrahedral(4); } public D3Graphics getGraphics() { return g3; } public void setGraphics(D3Graphics _g3) { g3 = _g3; } }