?? buttonspanel.java
字號:
//===========================================================================// Java basic classesimport java.io.File;import java.io.FileReader;import java.io.FileOutputStream;import java.io.BufferedReader;import java.util.StringTokenizer;import java.util.ArrayList;// Java GUI classesimport java.awt.BorderLayout;import java.awt.Component;import java.awt.Color;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.FlowLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.border.Border;import javax.swing.BorderFactory;import javax.swing.BoxLayout;import javax.swing.JFrame;import javax.swing.JFileChooser;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JMenuBar;import javax.swing.JPanel;import javax.swing.JTabbedPane;import javax.swing.JScrollPane;import javax.swing.JSplitPane;import javax.swing.SwingUtilities;import javax.swing.UIManager;// JOGL Classesimport javax.media.opengl.GLCanvas;// VSDK Classesimport vsdk.toolkit.common.ColorRgb;import vsdk.toolkit.common.Matrix4x4;import vsdk.toolkit.common.Ray;import vsdk.toolkit.common.Vector3D;import vsdk.toolkit.common.VSDK;import vsdk.toolkit.gui.ProgressMonitorConsole;import vsdk.toolkit.media.Image;import vsdk.toolkit.media.IndexedColorImage;import vsdk.toolkit.media.RGBImage;import vsdk.toolkit.media.RGBAImage;import vsdk.toolkit.media.RGBColorPalette;import vsdk.toolkit.environment.Camera;import vsdk.toolkit.environment.Material;import vsdk.toolkit.environment.Light;import vsdk.toolkit.environment.geometry.Arrow;import vsdk.toolkit.environment.geometry.VoxelVolume;import vsdk.toolkit.environment.geometry.Box;import vsdk.toolkit.environment.geometry.Cone;import vsdk.toolkit.environment.geometry.Geometry;import vsdk.toolkit.environment.geometry.ParametricCurve;import vsdk.toolkit.environment.geometry.ParametricBiCubicPatch;import vsdk.toolkit.environment.geometry.PolyhedralBoundedSolid;import vsdk.toolkit.environment.geometry.Sphere;import vsdk.toolkit.environment.geometry.InfinitePlane;import vsdk.toolkit.environment.geometry.FunctionalExplicitSurface;import vsdk.toolkit.environment.geometry.TriangleMesh;import vsdk.toolkit.environment.geometry.TriangleMeshGroup;import vsdk.toolkit.environment.scene.SimpleBody;import vsdk.toolkit.environment.scene.SimpleBodyGroup;import vsdk.toolkit.environment.scene.SimpleScene;import vsdk.toolkit.io.XmlException;import vsdk.toolkit.io.geometry.EnvironmentPersistence;import vsdk.toolkit.io.image.RGBColorPalettePersistence;import vsdk.toolkit.io.image.ImagePersistence;// Internal classesimport vsdk.transition.gui.GuiCache;import vsdk.transition.io.presentation.GuiCachePersistence;import vsdk.transition.render.swing.SwingGuiCacheRenderer;public class ButtonsPanel extends JPanel implements ActionListener{ private SceneEditorApplication parent; private String currentFilePathForReading; private String currentFilePathForWriting; public ButtonsPanel(SceneEditorApplication parent, int group) { //------------------------------------------------------------------- this.parent = parent; if ( group < 100 ) { // This is a button group inside right tab panels this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); Border empty = BorderFactory.createEmptyBorder(10, 10, 10, 10); this.setBorder(empty); } else { // This is a button group part of an icon bar this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); Border empty = BorderFactory.createEmptyBorder(0, 0, 0, 0); this.setBorder(empty); } currentFilePathForReading = (new File("")).getAbsolutePath() + "/../../../etc/geometry"; currentFilePathForWriting = "."; //------------------------------------------------------------------- JPanel internal = null; switch ( group ) { case 1: internal = SwingGuiCacheRenderer.buildButtonGroup(parent.gui, "CREATION", this); break; case 2: internal = SwingGuiCacheRenderer.buildButtonGroup(parent.gui, "GUI", this); break; case 3: internal = SwingGuiCacheRenderer.buildButtonGroup(parent.gui, "OTHER", this); break; case 4: internal = SwingGuiCacheRenderer.buildButtonGroup(parent.gui, "RENDER", this); break; case 101: internal = SwingGuiCacheRenderer.buildButtonGroup(parent.gui, "GLOBAL", this); break; } if ( internal != null ) { this.add(internal, BorderLayout.WEST); } //------------------------------------------------------------------- } private SimpleBody addDebugSphere(SimpleBody voxelBody, int groupIndex, Vector3D cm, double averageDistance) { double r = (((double)groupIndex) / 31.0) * (2 * averageDistance); VoxelVolume vv = (VoxelVolume)voxelBody.getGeometry(); Sphere sphere; RGBAImage texture; SimpleBody body; double tetha, phi; int s, t; int voxelValue; Vector3D p = new Vector3D(); Vector3D pos; Vector3D scale, cm2; Matrix4x4 S = new Matrix4x4(); sphere = new Sphere(r); body = new SimpleBody(); body.setGeometry(sphere); body.setMaterial(parent.theScene.defaultMaterial()); body.getMaterial().setDoubleSided(true); scale = voxelBody.getScale(); S.scale(scale.x, scale.y, scale.z); scale = scale.multiply(r); body.setScale(scale); cm2 = S.multiply(cm); pos = voxelBody.getPosition().add(cm2); body.setPosition(pos); body.setRotation(new Matrix4x4()); body.setRotationInverse(new Matrix4x4()); body.setName("Debug sphere for harmonics " + groupIndex); texture = new RGBAImage(); texture.init(64, 64); //- Build sphere's texture map from voxel grid -------------------- for ( s = 0; s < texture.getXSize(); s++ ) { for ( t = 0; t < texture.getYSize(); t++ ) { tetha = ((double)s) / ((double)texture.getXSize()) * Math.PI * 2; phi = ((double)t) / ((double)texture.getYSize()) * Math.PI; p.setSphericalCoordinates(r, tetha, phi); p = cm.add(p); voxelValue = vv.getVoxelAtPosition(p.x, p.y, p.z); if ( voxelValue < 128 ) { texture.putPixel(s, t, (byte)0, (byte)0, (byte)0, (byte)0); } else { texture.putPixel(s, t, (byte)0, (byte)0, (byte)0, (byte)255); } } } //----------------------------------------------------------------- body.setTexture(texture); return body; } private static PolyhedralBoundedSolid createCircle( double cx, double cy, double rad, double h, int n) { PolyhedralBoundedSolid solid; solid = new PolyhedralBoundedSolid(); solid.mvfs(new Vector3D(cx + rad, cy, h), 1, 1); addArc(solid, 1, 1, cx, cy, rad, h, 0, ((double)(n-1))*360.0/((double)n), n-1); solid.smef(1, n, 1, 2); solid.validateModel(); return solid; } private static void addArc(PolyhedralBoundedSolid solid, int faceId, int vertexId, double cx, double cy, double rad, double h, double phi1, double phi2, int n) { double x, y, angle, inc; int prev, i, nextVertexId; angle = Math.toRadians(phi1); inc = Math.toRadians(((phi2 - phi1) / ((double)n))); prev = vertexId; for ( i = 0; i < n; i++ ) { angle += inc; x = cx + rad * Math.cos(angle); y = cy + rad * Math.sin(angle); nextVertexId = solid.getMaxVertexId() + 1; solid.smev(faceId, prev, nextVertexId, new Vector3D(x, y, h)); prev = nextVertexId; } solid.validateModel(); } public void actionPerformed(ActionEvent ev) { String label = ev.getActionCommand(); // This makes event compatible with ButtonGroup scheme of event // handling if ( ev.getSource() instanceof JButton ) { JButton origin = (JButton)ev.getSource(); label = origin.getName(); } executeCommand(label); } public void executeCommand(String label) { Light light; //- FILE ---------------------------------------------------------- if ( label.equals("IDC_FILE_QUIT") ) { System.exit(0); } //- EDIT ---------------------------------------------------------- //- CREATE -------------------------------------------------------- else if ( label.equals("IDC_CREATE_SPHERE") ) { parent.theScene.addThing(new Sphere(1)); } else if ( label.equals("IDC_CREATE_CONE") ) { parent.theScene.addThing(new Cone(1, 0, 2)); } else if ( label.equals("IDC_CREATE_CYLINDER") ) { parent.theScene.addThing(new Cone(1, 1, 2)); } else if ( label.equals("IDC_CREATE_CUBE") ) { parent.theScene.addThing(new Box(1, 1, 1)); } else if ( label.equals("IDC_CREATE_BOX") ) { parent.theScene.addThing(new Box(1, 3, 2)); } else if ( label.equals("IDC_CREATE_ARROW") ) { parent.theScene.addThing(new Arrow(0.7, 0.3, 0.05, 0.1));
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -