📄 lens.java
字号:
/* * Created on 7-Oct-2003 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */package AccordionDrawer;import gl4java.*;import java.awt.*;/** * @author hilde * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */public class Lens { static final int X = 0; static final int Y = 1; int[] texture = new int[1]; /** bottom left corner, in pixel coordinates */ public int min[] = new int[2]; /** top right corner, in pixel coordinates */ public int max[] = new int[2]; /** center point, in pixel coordinates */ public int center[] = new int[2]; public int size[] = new int[2]; public int pos[] = new int[2]; public int oldPos[] = new int[2]; /** * framebuffer pixels from last mouseover label drawn */ public float pixels[] = new float[2]; public float temp_min[] = new float[2]; public float temp_max[] = new float[2]; public int temp_size[] = new int[2]; float linewidth; float plane; AccordionDrawer d; public GridCell minc[] = new GridCell[2]; public GridCell maxc[] = new GridCell[2]; public CellGeom item; Color markCol; public Lens(int[] _pos, int[] _max, int _min[], int[] _center, int _size[], AccordionDrawer d) { System.out.println("lens initialized"); for (int xy = 0; xy < 2; xy++) { min[xy] = _min[xy]; max[xy] = _max[xy]; center[xy] = _center[xy]; pos[xy]= _pos[xy]; size[xy]= _size[xy]; temp_size[xy]= _size[xy]; } this.d = d; //init(); } public Lens(GridCell minc[], GridCell maxc[], int pos[], int _size[], CellGeom item, AccordionDrawer d) { for (int xy = 0; xy < 2; xy++ ) { this.min[xy] = pos[xy] - 50; this.max[xy] = pos[xy] + 50; center[xy] = (int)((max[xy]-min[xy])/2.0 + min[xy]); this.minc[xy]=minc[xy]; this.maxc[xy]=maxc[xy]; this.pos[xy] = pos[xy]; this.oldPos[xy] =0; this.size[xy] = _size[xy]; } this.d = d; this.item = item; } public void draw(Color col, float linewidth, float plane) { System.out.println("draw"); this.markCol = col; this.linewidth = linewidth; this.plane = plane; drawLens(); } public void undrawLens() { drawLens(); } public void init(){ System.out.println("lens init"); GLFunc gl = d.gl; GLUFunc glu = d.glu; //GLUTFunc glut = d.glut; GLCapabilities glc = d.glc; //int[] data = new int[(min[0] - max[0]) * (min[1] - max[1])]; int[] data = new int[(d.getWinsize(X) * d.getWinsize(Y))]; } public void drawLens() { GLFunc gl = d.gl; //GLUTFunc glut = d.glut; GLCapabilities glc = d.glc; //gl.glStencilFunc(GLEnum.GL_EQUAL, 1, ~0); //gl.glStencilOp(GLEnum.GL_KEEP, GLEnum.GL_KEEP, GLEnum.GL_KEEP); //glut.glutSolidCube(1.0); //gl.glDisable(GLEnum.GL_STENCIL_TEST); //System.out.println("lens with pos " + center[0] + " " + center[1]); //gl.glDrawBuffer(GLEnum.GL_FRONT); //gl.glDepthFunc(GLEnum.GL_ALWAYS); //gl.glDepthMask(false); //glc.setDoubleBuffered(false); //gl.glEnable(GLEnum.GL_COLOR_LOGIC_OP); //gl.glLogicOp(GLEnum.GL_XOR); //float thecol[] = new float[3]; //markCol.getRGBColorComponents(thecol); //gl.glColor3f(thecol[0], thecol[1], thecol[2]); //gl.glColor3f(1.0f,1.0f,1.0f); //gl.glLineWidth(linewidth); // gl.glPolygonMode(GLEnum.GL_FRONT_AND_BACK, GLEnum.GL_LINE);// gl.glBegin(GLEnum.GL_QUADS);// //gl.glTexCoord2d(0.0,1.0);// gl.glVertex3d(d.s2w(min[X], X), d.s2w(min[Y], Y), plane);// //gl.glTexCoord2d(1.0,1.0);// gl.glVertex3d(d.s2w(min[X], X), d.s2w(max[Y], Y), plane);// //gl.glTexCoord2d(1.0,.0);// gl.glVertex3d(d.s2w(max[X], X), d.s2w(max[Y], Y), plane);// //gl.glTexCoord2d(.0,.0);// gl.glVertex3d(d.s2w(max[X], X), d.s2w(min[Y], Y), plane);// // gl.glEnd();// //gl.glDisable(GLEnum.GL_TEXTURE_2D); //gl.glPointSize(linewidth + 2f); //gl.glDisable(GLEnum.GL_COLOR_LOGIC_OP); //gl.glDepthFunc(GLEnum.GL_LEQUAL); //gl.glDepthMask(true); // gl.glDisable(GLEnum.GL_TEXTURE_RECTANGLE_NV);// gl.glBindTexture(GLEnum.GL_TEXTURE_RECTANGLE_NV, 0); //drawFlowMenu(); } /* * draw flowmenu */ public void drawFlowMenu() { int i; float cosine, sine; GLFunc gl = d.gl; GLCapabilities glc = d.glc; gl.glColor4f(0.9f, 0.9f, 0.9f, 0.8f); String str1 = "zoom in"; String str2 = "zoom out"; String str3 = "context"; String str4 = "dist"; int a = str1.length(); int b = str2.length(); int c = str3.length(); int d = str4.length();/* for (int i = 0; i < a; i++) { gl.glRasterPos3f(25 + i * 7, 78, 0); gl.glutBitmapCharacter(GLUT_BITMAP_8_BY_13, str1.); } for (i = 0; i < b; i++) { gl.glRasterPos3f(-78 + i * 7, -70, 0); gl.glutBitmapCharacter(GLUT_BITMAP_8_BY_13, (char) * str2); * str2++; } for (i = 0; i < c; i++) { gl.glRasterPos3f(-78 + i * 7, 78, 0); gl.glutBitmapCharacter(GLUT_BITMAP_8_BY_13, (char) * str3); * str3++; } for (i = 0; i < d; i++) { gl.glRasterPos3f(25 + i * 7, -70, 0); gl.glutBitmapCharacter(GLUT_BITMAP_8_BY_13, (char) * str4); * str4++; } */ gl.glColor4f(0.8f, 0.8f, 0.8f, 0.4f); /* * go for Display lists man */ /* * middle polygon */ gl.glBegin(GLEnum.GL_POLYGON); gl.glVertex3d(-50.0f, -50.0f, plane); gl.glVertex3d(-50, 50, plane); gl.glVertex3d(50, 50, plane); gl.glVertex3d(50, -50, plane); gl.glEnd(); gl.glBegin(GLEnum.GL_POLYGON); gl.glVertex3d(-50, -50, plane); gl.glVertex3d(-50, 50, plane); gl.glVertex3d(50, 50, plane); gl.glVertex3d(50, -50, plane); gl.glEnd(); /* * because with polygon is it only possible to render convex points */ gl.glPolygonMode(GLEnum.GL_FRONT_AND_BACK, GLEnum.GL_FILL); gl.glBegin(GLEnum.GL_POLYGON); gl.glVertex3d(-80, 0, plane); gl.glVertex3d(-80, -80, plane); gl.glVertex3d(-50, -80, plane); gl.glVertex3d(-50, 0, plane); gl.glEnd(); gl.glBegin(GLEnum.GL_POLYGON); gl.glVertex3d(-50, -50, plane); gl.glVertex3d(-50, -80, plane); gl.glVertex3d(0, -80, plane); gl.glVertex3d(0, -50, plane); gl.glEnd(); gl.glPolygonMode(GLEnum.GL_FRONT_AND_BACK, GLEnum.GL_LINE); gl.glPolygonMode(GLEnum.GL_FRONT_AND_BACK, GLEnum.GL_FILL); gl.glBegin(GLEnum.GL_POLYGON); gl.glVertex3d(80, 0, plane); gl.glVertex3d(80, 80, plane); gl.glVertex3d(50, 80, plane); gl.glVertex3d(50, 0, plane); gl.glEnd(); gl.glBegin(GLEnum.GL_POLYGON); gl.glVertex3d(50, 50, plane); gl.glVertex3d(50, 80, plane); gl.glVertex3d(0, 80, plane); gl.glVertex3d(0, 50, plane); gl.glEnd(); gl.glPolygonMode(GLEnum.GL_FRONT_AND_BACK, GLEnum.GL_LINE); gl.glPolygonMode(GLEnum.GL_FRONT_AND_BACK, GLEnum.GL_FILL); gl.glBegin(GLEnum.GL_POLYGON); gl.glVertex3d(-80, 2, plane); gl.glVertex3d(-80, 80, plane); gl.glVertex3d(-50, 80, plane); gl.glVertex3d(-50, 2, plane); gl.glEnd(); gl.glBegin(GLEnum.GL_POLYGON); gl.glVertex3d(-50, 50, plane); gl.glVertex3d(-50, 80, plane); gl.glVertex3d(-2, 80, plane); gl.glVertex3d(-2, 50, plane); gl.glEnd(); gl.glPolygonMode(GLEnum.GL_FRONT_AND_BACK, GLEnum.GL_LINE); gl.glPolygonMode(GLEnum.GL_FRONT_AND_BACK, GLEnum.GL_FILL); gl.glBegin(GLEnum.GL_POLYGON); gl.glVertex3d(80, -2, plane); gl.glVertex3d(80, -80, plane); gl.glVertex3d(50, -80, plane); gl.glVertex3d(50, -2, plane); gl.glEnd(); gl.glBegin(GLEnum.GL_POLYGON); gl.glVertex3d(50, -50, plane); gl.glVertex3d(50, -80, plane); gl.glVertex3d(2, -80, plane); gl.glVertex3d(2, -50, plane); gl.glEnd(); gl.glPolygonMode(GLEnum.GL_FRONT_AND_BACK, GLEnum.GL_LINE); /* * if you like to use a circle then here */ // glBegin(GL_POLYGON); // for(i=0;i<100;i++){ // cosine=50*cos(i*2*PI/100.0); // sine=50*sin(i*2*PI/100.0); // glVertex3f(cosine,sine, 0); // } // glEnd(); /* * lines down */ gl.glBegin(GLEnum.GL_LINES); gl.glVertex3d(0, 50, plane); gl.glVertex3d(0, 80, plane); gl.glEnd(); gl.glBegin(GLEnum.GL_LINES); gl.glVertex3d(50, 0, plane); gl.glVertex3d(80, 0, plane); gl.glEnd(); /* * lines up */ gl.glBegin(GLEnum.GL_LINES); gl.glVertex3d(0, -50, plane); gl.glVertex3d(0, -80, plane); gl.glEnd(); gl.glBegin(GLEnum.GL_LINES); gl.glVertex3d(-50, 0, plane); gl.glVertex3d(-80, 0, plane); gl.glEnd(); } /* * top right corner */ public void setMax(int[] xy) { max[0] = xy[0]; max[1] = xy[1]; } /* * bottom left corner */ public void setMin(int[] xy) { min[0] = xy[0]; min[1] = xy[1]; } /* * center */ public void setCenter(int[] xy) { center[0] = xy[0]; center[1] = xy[1]; } /* * set lens size half of right and left * update min and max */ public void setSize(int[] _size){ this.size[0] = _size[0]; this.size[1] = _size[1]; this.min[0] = pos[0] - (_size[0] / 2); this.min[1] = pos[1] - (_size[1] / 2); this.max[0] = pos[0] + (_size[0] / 2); this.max[1] = pos[1] + (_size[1] / 2); } public int[] getSize(){ return this.size; } public int[] getMax() { return max; } public int[] getMin() { return min; } public int[] getCenter() { return center; }};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -