From: Michael G. <gof...@us...> - 2007-08-20 05:26:55
|
Update of /cvsroot/octave/octave-forge/extra/jhandles/src/org/octave/graphics In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv11537/src/org/octave/graphics Modified Files: FigureObject.java GLRenderCanvas.java GLRenderer.java RenderCanvas.java Added Files: GL2PS.java Log Message: add support for GL2PS and initial PS output Index: FigureObject.java =================================================================== RCS file: /cvsroot/octave/octave-forge/extra/jhandles/src/org/octave/graphics/FigureObject.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- FigureObject.java 14 Aug 2007 08:01:51 -0000 1.14 +++ FigureObject.java 20 Aug 2007 05:26:54 -0000 1.15 @@ -84,7 +84,7 @@ RadioProperty Units; /* toolbar */ - JToggleButton cursorBtn; + JToggleButton editBtn; JToggleButton zoomBtn; JToggleButton rotateBtn; @@ -140,17 +140,20 @@ JToolBar tb = new JToolBar(); tb.setRollover(true); tb.setFloatable(false); - cursorBtn = new JToggleButton(Utils.loadIcon("edit")); - cursorBtn.setActionCommand("cursor"); - cursorBtn.setEnabled(false); - cursorBtn.addActionListener(this); + editBtn = new JToggleButton(Utils.loadIcon("edit")); + editBtn.setActionCommand("edit"); + editBtn.setEnabled(false); + editBtn.setToolTipText("Edit plot"); + editBtn.addActionListener(this); zoomBtn = new JToggleButton(Utils.loadIcon("zoom-original")); zoomBtn.setActionCommand("zoom"); + zoomBtn.setToolTipText("Zoom"); zoomBtn.addActionListener(this); rotateBtn = new JToggleButton(Utils.loadIcon("view-refresh")); rotateBtn.setActionCommand("rotate"); + rotateBtn.setToolTipText("3D roration"); rotateBtn.addActionListener(this); - tb.add(cursorBtn); + tb.add(editBtn); tb.add(zoomBtn); tb.add(rotateBtn); tbPanel.add(tb); @@ -260,10 +263,23 @@ { Color fcolor = FigColor.getColor(); FigColor.reset(Color.white); - BufferedImage img = canvas.toImage(); - FigColor.reset(fcolor); - javax.imageio.ImageIO.write(img, format, new java.io.File(filename)); - redraw(); + try + { + if (format .equals("postscript")) + { + canvas.toPostScript(filename); + } + else + { + BufferedImage img = canvas.toImage(); + javax.imageio.ImageIO.write(img, format, new java.io.File(filename)); + } + } + finally + { + FigColor.reset(fcolor); + redraw(); + } } private Buffer makeColormapTextureData() @@ -315,7 +331,7 @@ private int commandToOp(String cmd) { - if (cmd.equals("cursor")) return OP_NONE; + if (cmd.equals("edit")) return OP_NONE; else if (cmd.equals("zoom")) return OP_ZOOM; else if (cmd.equals("rotate")) return OP_ROTATE; else return OP_NONE; @@ -486,10 +502,10 @@ public void actionPerformed(ActionEvent e) { //System.out.println("action"); - if (e.getSource() == cursorBtn || e.getSource() == zoomBtn || e.getSource() == rotateBtn) + if (e.getSource() == editBtn || e.getSource() == zoomBtn || e.getSource() == rotateBtn) { - if (e.getSource() != cursorBtn) - cursorBtn.setSelected(false); + if (e.getSource() != editBtn) + editBtn.setSelected(false); if (e.getSource() != zoomBtn) zoomBtn.setSelected(false); if (e.getSource() != rotateBtn) --- NEW FILE: GL2PS.java --- package org.octave.graphics; public class GL2PS { static { System.loadLibrary("gl2ps_java"); } final static int GL2PS_MAJOR_VERSION = 1; final static int GL2PS_MINOR_VERSION = 3; final static int GL2PS_PATCH_VERSION = 2; final static String GL2PS_EXTRA_VERSION = ""; final static double GL2PS_VERSION = (GL2PS_MAJOR_VERSION + 0.01 * GL2PS_MINOR_VERSION + 0.0001 * GL2PS_PATCH_VERSION); final static String GL2PS_COPYRIGHT = "(C) 1999-2006 Christophe Geuzaine (ge...@ge...)"; final static int GL2PS_PS = 0; final static int GL2PS_EPS = 1; final static int GL2PS_TEX = 2; final static int GL2PS_PDF = 3; final static int GL2PS_SVG = 4; final static int GL2PS_PGF = 5; final static int GL2PS_NO_SORT = 1; final static int GL2PS_SIMPLE_SORT = 2; final static int GL2PS_BSP_SORT = 3; final static int GL2PS_SUCCESS = 0; final static int GL2PS_INFO = 1; final static int GL2PS_WARNING = 2; final static int GL2PS_ERROR = 3; final static int GL2PS_NO_FEEDBACK = 4; final static int GL2PS_OVERFLOW = 5; final static int GL2PS_UNINITIALIZED = 6; final static int GL2PS_NONE = 0; final static int GL2PS_DRAW_BACKGROUND = (1<<0); final static int GL2PS_SIMPLE_LINE_OFFSET = (1<<1); final static int GL2PS_SILENT = (1<<2); final static int GL2PS_BEST_ROOT = (1<<3); final static int GL2PS_OCCLUSION_CULL = (1<<4); final static int GL2PS_NO_TEXT = (1<<5); final static int GL2PS_LANDSCAPE = (1<<6); final static int GL2PS_NO_PS3_SHADING = (1<<7); final static int GL2PS_NO_PIXMAP = (1<<8); final static int GL2PS_USE_CURRENT_VIEWPORT = (1<<9); final static int GL2PS_COMPRESS = (1<<10); final static int GL2PS_NO_BLENDING = (1<<11); final static int GL2PS_TIGHT_BOUNDING_BOX = (1<<12); final static int GL2PS_POLYGON_OFFSET_FILL = 1; final static int GL2PS_POLYGON_BOUNDARY = 2; final static int GL2PS_LINE_STIPPLE = 3; final static int GL2PS_BLEND = 4; final static int GL2PS_TEXT_C = 1; final static int GL2PS_TEXT_CL = 2; final static int GL2PS_TEXT_CR = 3; final static int GL2PS_TEXT_B = 4; final static int GL2PS_TEXT_BL = 5; final static int GL2PS_TEXT_BR = 6; final static int GL2PS_TEXT_T = 7; final static int GL2PS_TEXT_TL = 8; final static int GL2PS_TEXT_TR = 9; public static native int gl2psBeginPage( String title, String producer, int[] viewport, int format, int sort, int options, int colormode, int colorsize, Object[] colortable, int nr, int ng, int nb, int buffersize, String outputname, String filename); public static native int gl2psEndPage(); public static native int gl2psText(String string, String fontname, int fontsize); public static native int gl2psTextopt(String string, String fontname, int fontsize, int align, float angle); public static native int gl2psEnable(int mode); public static native int gl2psDisable(int mode); } Index: RenderCanvas.java =================================================================== RCS file: /cvsroot/octave/octave-forge/extra/jhandles/src/org/octave/graphics/RenderCanvas.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- RenderCanvas.java 31 May 2007 14:44:23 -0000 1.2 +++ RenderCanvas.java 20 Aug 2007 05:26:54 -0000 1.3 @@ -40,6 +40,7 @@ public Renderer getRenderer(); public Component getComponent(); public BufferedImage toImage(); + public void toPostScript(String filename); public Font getFont(); public FontMetrics getFontMetrics(Font fnt); Index: GLRenderer.java =================================================================== RCS file: /cvsroot/octave/octave-forge/extra/jhandles/src/org/octave/graphics/GLRenderer.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- GLRenderer.java 3 Jul 2007 11:27:45 -0000 1.14 +++ GLRenderer.java 20 Aug 2007 05:26:54 -0000 1.15 @@ -48,6 +48,7 @@ private int lightSideMode = GL.GL_FRONT_AND_BACK; private AxesObject.Scaler sx, sy, sz; private float po = 1.0f; + private boolean isGL2PS = false; public GLRenderer(GLAutoDrawable d) { @@ -63,6 +64,11 @@ return gl; } + public void setGL2PS(boolean flag) + { + isGL2PS = flag; + } + public void end() { if (this.alphaPrimitives.size() > 0) @@ -1771,9 +1777,17 @@ gl.glLineStipple(1, (short)0x0000); if (solid && !forceStippling) + { gl.glDisable(GL.GL_LINE_STIPPLE); + if (isGL2PS) + GL2PS.gl2psDisable(GL2PS.GL2PS_LINE_STIPPLE); + } else + { gl.glEnable(GL.GL_LINE_STIPPLE); + if (isGL2PS) + GL2PS.gl2psEnable(GL2PS.GL2PS_LINE_STIPPLE); + } } public void drawQuads(List pts, double zoffset) Index: GLRenderCanvas.java =================================================================== RCS file: /cvsroot/octave/octave-forge/extra/jhandles/src/org/octave/graphics/GLRenderCanvas.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- GLRenderCanvas.java 8 Jul 2007 14:03:50 -0000 1.5 +++ GLRenderCanvas.java 20 Aug 2007 05:26:54 -0000 1.6 @@ -33,6 +33,7 @@ { private GLRenderer r; private java.util.List rListeners; + private String gl2psFileName = null; public GLRenderCanvas() { @@ -46,9 +47,28 @@ public void display(GLAutoDrawable d) { + if (gl2psFileName != null) + { + int result; + + result = GL2PS.gl2psBeginPage("Title", "JHandles", null, GL2PS.GL2PS_EPS, GL2PS.GL2PS_BSP_SORT, + /*GL2PS.GL2PS_SILENT|*/GL2PS.GL2PS_BEST_ROOT|GL2PS.GL2PS_USE_CURRENT_VIEWPORT|GL2PS.GL2PS_OCCLUSION_CULL, + GL.GL_RGBA, 0, null, 0, 0, 0, 1024*1024, + gl2psFileName, ""); + r.setGL2PS(true); + System.out.println("gl2psBeginPage: " + result); + } + Iterator it = rListeners.iterator(); while (it.hasNext()) ((RenderEventListener)it.next()).display(this); + + if (gl2psFileName != null) + { + int result = GL2PS.gl2psEndPage(); + r.setGL2PS(false); + System.out.println("gl2psEndPage: " + result); + } } public void init(GLAutoDrawable d) @@ -123,4 +143,11 @@ return img; } + + public void toPostScript(String filename) + { + gl2psFileName = filename; + display(); + gl2psFileName = null; + } } |