/*
* 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.ActionEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.xml.parsers.ParserConfigurationException;
import org.jcae.viewer3d.ScreenshotListener;
import org.jcae.viewer3d.SelectionListener;
import org.jcae.viewer3d.View;
import org.jcae.viewer3d.cad.ViewableCAD;
import org.jcae.viewer3d.cad.occ.OCCProvider;
import org.jcae.viewer3d.fd.DefaultFDProvider;
import org.jcae.viewer3d.fd.ViewableFD;
import org.jcae.viewer3d.fe.ViewableFE;
import org.jcae.viewer3d.fe.amibe.AmibeNodeSelection;
import org.jcae.viewer3d.fe.amibe.AmibeOverlayProvider;
import org.jcae.viewer3d.fe.amibe.AmibeProvider;
import org.jcae.viewer3d.fe.unv.UNVProvider;
import org.xml.sax.SAXException;
/**
* @author Jerome Robert
*
*/
public class Main
{
private final static Logger LOGGER=Logger.getLogger(Main.class.getName());
static
{
LOGGER.setLevel(Level.ALL);
ConsoleHandler cd=new ConsoleHandler();
cd.setLevel(Level.ALL);
LOGGER.addHandler(cd);
}
public static void testCAD()
{
//Test CAD visu in 1 view
JFrame cadFrame=new JFrame("jcae-viewer3d-cad demo");
cadFrame.setSize(800,600);
cadFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
final View cadView=new View(cadFrame);
ViewableCAD fcad=new ViewableCAD(new OCCProvider("/home/jerome/Models/F1.brep"));
cadView.add(fcad);
cadView.fitAll();
cadFrame.getContentPane().add(cadView);
cadFrame.getContentPane().add(new JButton(new AbstractAction(){
public void actionPerformed(ActionEvent e)
{
cadView.fitAll();
}}), BorderLayout.NORTH);
cadFrame.setVisible(true);
cadView.setOriginAxisVisible(true);
fcad.domainsChanged(null);
cadView.setOriginAxisVisible(false);
cadView.setOriginAxisVisible(true);
//cadView.showFloatAxis(true);
}
public static void testUNV() throws IOException
{
//Test UNV Loader
JFrame feFrame=new JFrame();
feFrame.setSize(800,600);
feFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
View feView=new View(feFrame);
UNVProvider unvProvider=new UNVProvider();
unvProvider.load(new FileInputStream("/home/jerome/Models/unv/flight_solid.unv"));
ViewableFE vfe=new ViewableFE(unvProvider);
vfe.setPickingMode(ViewableFE.PICK_DOMAIN);
feView.add(vfe);
feFrame.getContentPane().add(feView);
feView.setOriginAxisVisible(false);
feView.setFixedAxisVisible(false);
feView.fitAll();
feFrame.setVisible(true);
/*feView.setOriginAxisVisible(true);
feView.setFixedAxisVisible(true);*/
}
public static void testAmibe()
throws ParserConfigurationException, SAXException, IOException
{
//Test FE visu in 1 view
JFrame feFrame=new JFrame("jcae-viewer3d-fe demo");
feFrame.setSize(800,600);
feFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
View feView=new View(feFrame);
final AmibeProvider ap=new AmibeProvider(new File("/var/tmp/mesh"));
final ViewableFE fev=new ViewableFE(ap);
ViewableFE ffe=new ViewableFE(new AmibeOverlayProvider(new File("/var/tmp/mesh"), AmibeOverlayProvider.FREE_EDGE));
feView.add(ffe);
feView.add(fev);
feView.fitAll();
fev.setPickingMode(ViewableFE.PICK_NODE);
feFrame.getContentPane().add(feView);
feFrame.setVisible(true);
feView.setOriginAxisVisible(true);
feView.setCurrentViewable(fev);
fev.addSelectionListener(new SelectionListener()
{
public void selectionChanged()
{
try
{
System.out.println(new AmibeNodeSelection(ap, fev.getSelectedNodes()));
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
static void testOffscreen() throws ParserConfigurationException, SAXException, IOException
{
//Test offscreen screenshot
View feView2=new View(null, true);
ViewableFE fev2=new ViewableFE(new AmibeProvider(new File("/var/tmp/mesh")));
//ViewableFE fev=new ViewableFE(new AmibeProvider(new File("/tmp")));
feView2.add(fev2);
feView2.fitAll();
feView2.setOriginAxisVisible(true);
ImageIO.write(feView2.takeSnapshot(4096,4096), "png",
File.createTempFile("jcae-viewer3d-snap",".png"));
}
static public void testFD() throws InterruptedException
{
JFrame f=new JFrame("jcae-viewer3d-fd demo");
JSplitPane splitPane=new JSplitPane();
f.setSize(800,600);
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setContentPane(splitPane);
//Test visualisation of FD in 2 different view
final View view=new View(f);
final ViewableFD fdv=new ViewableFD(new DefaultFDProvider());
fdv.addSelectionListener(new SelectionListener()
{
public void selectionChanged()
{
System.out.println("new selection: "+Arrays.asList(fdv.getSelection()));
}
});
view.add(fdv);
view.setOriginAxisVisible(true);
view.fitAll();
splitPane.add(view, JSplitPane.RIGHT);
View view2=new View(f);
view2.add(fdv);
view2.setOriginAxisVisible(true);
view2.setFixedAxisVisible(true);
view2.fitAll();
view.setNavigationMaster(view2);
splitPane.add(view2, JSplitPane.LEFT);
f.setVisible(true);
splitPane.setDividerLocation(0.5);
fdv.domainsChanged(fdv.getDomainProvider().getDomainIDs());
//Test view can be removed and added.
view.remove(fdv);
view.add(fdv);
view.add(fdv);
view.setOrientation(View.LEFT);
fdv.setPlatePicking(false);
fdv.setWirePicking(false);
//fdv.setPlatePicking(true);
//fdv.setWirePicking(true);
fdv.setMarkPicking(true);
//take a snaphshot of the view
Thread.sleep(1000);
view.takeScreenshot(new ScreenshotListener()
{
public void shot(BufferedImage snapshot)
{
try
{
ImageIO.write(snapshot, "png",
File.createTempFile("jcae-viewer3d-snap",".png"));
} catch (IOException e)
{
e.printStackTrace();
}
}
});
}
public static void main(String[] args)
{
try
{
//testCAD();
testUNV();
//testAmibe();
//testOffscreen();
//testFD();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}