package org.jcae.viewer3d.test;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
import org.jcae.viewer3d.View;
import org.jcae.viewer3d.ViewBehavior;
import org.jcae.viewer3d.cad.ViewableCAD;
import org.jcae.viewer3d.cad.occ.OCCProvider;
/** A "getting started" example */
public class RectangleSelection
{
public static void main(String[] args)
{
try
{
// The swing frame where we will put the view
JFrame feFrame=new JFrame();
feFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
feFrame.setSize(800,600);
// Put it all in a view
final View feView=new View(feFrame);
feView.setFrontClipDistance(100.);
// Fit the view to the object
feView.fitAll();
// Put it all in a Swing frame
feFrame.getContentPane().add(feView);
feFrame.setVisible(true);
// let's add a CAD viewable loaded from an Opencascade file.
final ViewableCAD fcad=
new ViewableCAD(new OCCProvider("/home/ibarz/models/axe.brep"));
feView.add(fcad);
// Fit again as we have added a new object
feView.fitAll();
feView.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e)
{
if(e.getKeyChar()=='r')
feView.setMouseMode(ViewBehavior.RECTANGLE_MODE);
if(e.getKeyChar()=='n')
feView.setMouseMode(ViewBehavior.DEFAULT_MODE);
if(e.getKeyChar()=='a')
fcad.setSelectionAction(ViewableCAD.SELECTION_ADD);
if(e.getKeyChar()=='d')
fcad.setSelectionAction(ViewableCAD.SELECTION_REMOVE);
if(e.getKeyChar()=='i')
fcad.setSelectionAction(ViewableCAD.SELECTION_INVERT);
if(e.getKeyChar()=='t')
fcad.setSelectionAction(ViewableCAD.SELECTION_INTERSECT);
if(e.getKeyChar()=='v')
fcad.setSelectionMode(ViewableCAD.VERTEX_SELECTION);
if(e.getKeyChar()=='f')
fcad.setSelectionMode(ViewableCAD.FACE_SELECTION);
if(e.getKeyChar()=='e')
fcad.setSelectionMode(ViewableCAD.EDGE_SELECTION);
if(e.getKeyChar()=='n') {
System.out.println("FRONT DISTANCE : " + feView.getFrontClipDistance());
feView.setFrontClipDistance(1.);
float[] zbuffer = feView.getDepthBuffer(feView.getWidth() / 2,feView.getHeight() / 2,feView.getWidth() / 4, feView.getHeight() / 4);
float min = Float.MAX_VALUE, max = Float.MIN_VALUE;
for(float z : zbuffer)
{
min = Math.min(min,z);
max = Math.max(min,z);
}
System.out.println("MIN Z : " + min + " and MAX Z : " + max);
}
if(e.getKeyChar()=='s')
{
BufferedImage imageBuffer = feView.getScreenshot(feView.getWidth() / 2, feView.getHeight() / 2, feView.getWidth() - (feView.getWidth() /2) , feView.getHeight() - feView.getHeight() / 2);
try
{
ImageIO.write(imageBuffer, "PNG", File.createTempFile("screen", "png"));
} catch (IOException ex)
{
Logger.getLogger(RectangleSelection.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
});
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}