/* * Project Info: http://jcae.sourceforge.net * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * * (C) Copyright 2007, by EADS France */ package org.jcae.viewer3d.test; import java.awt.BorderLayout; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.text.NumberFormat; import javax.media.j3d.BoundingSphere; import javax.media.j3d.BranchGroup; import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.vecmath.Point3d; import org.jcae.viewer3d.FPSBehavior; import org.jcae.viewer3d.View; import org.jcae.viewer3d.ViewBehavior; import org.jcae.viewer3d.fe.ViewableFE; /** * Test FPSBehavior and SquareMeshProvider class * @author Jerome Robert */ public class FPSCounterTest extends JFrame { private static final long serialVersionUID = -798859792379899301L; private FPSBehavior fpsCounter=new FPSBehavior(); private NumberFormat nf = NumberFormat.getNumberInstance(); private ViewableFE viewable; private SquareMeshProvider model=new SquareMeshProvider(1); private View view; public FPSCounterTest() { setSize(800,600); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); view = new View(this); viewable = new ViewableFE(model); viewable.setPickingMode(ViewableFE.PICK_DOMAIN); view.add(viewable); fpsCounter.setSchedulingBounds(new BoundingSphere(new Point3d(), 1000)); BranchGroup bgfps=new BranchGroup(); bgfps.addChild(fpsCounter); view.addBranchGroup(bgfps); getContentPane().add(view); final JSlider slider=new JSlider(1000, 100000); final JLabel nbLabel=new JLabel(); slider.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { updateMesgSize(slider.getValue()); nbLabel.setText("number of tria: "+model.getCellNumber()); } }); slider.setValue(1000); final JLabel fpsLabel=new JLabel(); JPanel bottom=new JPanel(); bottom.setLayout(new BorderLayout()); bottom.add(slider, BorderLayout.CENTER); bottom.add(fpsLabel, BorderLayout.EAST); bottom.add(nbLabel, BorderLayout.WEST); getContentPane().add(bottom, BorderLayout.SOUTH); fpsCounter.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { fpsLabel.setText("FPS: "+nf.format(fpsCounter.getFPS())); } }); view.setOriginAxisVisible(true); view.setFixedAxisVisible(true); updateMesgSize(slider.getValue()); view.addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent e) { if(e.getKeyChar()==' ') view.setMouseMode(ViewBehavior.CLIP_RECTANGLE_MODE); else view.setMouseMode(ViewBehavior.DEFAULT_MODE); } }); } protected void updateMesgSize(int value) { model.setCellNumber(value); viewable.domainsChanged(null); view.fitAll(); } public static void main(String[] args) { FPSCounterTest m=new FPSCounterTest(); m.setVisible(true); } }