// * This code is licensed under:
// * JHPlot License, Version 1.2
// * - for license details see http://hepforge.cedar.ac.uk/jhepwork/
// *
// * Copyright (c) 2007 by S.Chekanov (chekanov@mail.desy.de).
// * All rights reserved.
// * Statement: This package is rewrite of the Browser3D. It's free. I do not know
// * the author name.
package jhplot.v3d;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
// public class TestCanvas extends Applet
public class TestCanvas {
public static void main(String args[])
{
HViewPanel window = new HViewPanel();
JFrame f = new JFrame("A JFrame");
f.setSize(450, 450);
// f.setLocation(300,200);
f.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
f.getContentPane().add(BorderLayout.CENTER, window);
f.setVisible(true);
}
}
class HViewPanel extends JPanel
{
/**
*
*/
private static final long serialVersionUID = 1L;
private Canvas3d canv;
private Button but[];
private Matrix3d orot, otrans, oscale;
private float ominScale, omaxScale;
Model3d md = null;
public HViewPanel()
{
setLayout(new BorderLayout());
setBorder(BorderFactory.createEmptyBorder());
// this is necessary if you want to mix AWT with swing
JPopupMenu.setDefaultLightWeightPopupEnabled(false);
md = new Model3d(null, 400, 300);
orot = new Matrix3d(md.rot);
otrans = new Matrix3d(md.trans);
oscale = new Matrix3d(md.scale);
ominScale = md.minScale;
omaxScale = md.maxScale;
Vector3d vcyl = new Vector3d(40,0,0);
Cube cb3 = new Cube(md,40);
cb3.setRot(45,45,45);
cb3.setTrans(vcyl.x, vcyl.y, vcyl.z);
md.addObject(cb3);
cb3 = new Cube(md,40);
cb3.setRot(-25,25,40);
cb3.setTrans(10, 10, 10);
md.addObject(cb3);
// vcyl = new Vector3d(0,40,0);
Sphere oo = new Sphere(md, 30.0f, 20, 20);
oo.setTrans(vcyl.x, vcyl.y, vcyl.z);
// oo.setRot(0, 90, 0);
md.addObject(oo);
Cone o = new Cone(md, 30, 100, 50);
o.setTrans(-20, 40, 0);
// o.setRot(90, 0, 0);
o.setColor(Color.red);
md.addObject(o);
Vector3d v[] = new Vector3d[4];
v[0] = new Vector3d(0, 0, 0);
v[1] = new Vector3d(6, 0, 0);
v[2] = new Vector3d(6, 1, 0);
v[3] = new Vector3d(0, 1, 0);
Vector3d d = new Vector3d(0, 6, 6);
Prism o1 = new Prism(md, v, 4, d);
o1.setTrans(-50, 40, 0);
md.addObject(o1);
v[0] = new Vector3d(0, 0, 2);
v[1] = new Vector3d(6, 0, 2);
v[2] = new Vector3d(6, 1, 2);
v[3] = new Vector3d(0, 1, 2);
d = new Vector3d(3, 0.5f, 4);
Pyramid p3 = new Pyramid(md, v, 4, d);
p3.setTrans(30, 20, 0);
md.addObject(p3);
Cylinder o3 = new Cylinder(md, 40, 100, 2);
o3.setTrans(-1, 0, 0);
o3.setRot(0, 90, 0);
o3.setColor(Color.yellow);
md.addObject(o3);
canv = new Canvas3d(md);
add("Center", canv);
validate();
}
public boolean action(Event evt, Object what)
{
if (md == null)
return false;
String s = (String) evt.arg;
if (s.equals("Home"))
{
md.rot.copy(orot);
md.trans.copy(otrans);
if (md.persp)
{
md.minScale = ominScale;
md.maxScale = omaxScale;
md.computeMatrix();
}
else
md.scale.copy(oscale);
}
else if (s.equals("XRot"))
md.incRot(10,0,0);
else if (s.equals("YRot"))
md.incRot(0,10,0);
else if (s.equals("ZRot"))
md.incRot(0,0,10);
else if (s.equals("Left"))
md.incTrans(md.bb.getWidth()/10,0,0);
else if (s.equals("Right"))
md.incTrans(-md.bb.getWidth()/10,0,0);
else if (s.equals("Up"))
md.incTrans(0,-md.bb.getHeight()/10,0);
else if (s.equals("Down"))
md.incTrans(0,md.bb.getHeight()/10,0);
else if (s.equals("ZoomIn"))
{
if (md.persp)
{
md.minScale /= 1.1f;
md.maxScale /= 1.1f;
md.computeMatrix();
}
else
{
float f = 1 / 1.1f;
md.incScale(f, f, f);
}
}
else if (s.equals("ZoomOut"))
{
if (md.persp)
{
md.minScale *= 1.1f;
md.maxScale *= 1.1f;
md.computeMatrix();
}
else
{
float f = 1.1f;
md.incScale(f, f, f);
}
}
else
return false;
canv.repaint();
return true;
}
}
Ads help maintain this website.