⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simbad.java

📁 一款机器人仿真软件,功能上与microsoft robotics studio有些相似,但基于Java平台.突出特点是给出了传感器仿真,如声纳,激光等.
💻 JAVA
字号:
/*
 *  Simbad - Robot Simulator
 *  Copyright (C) 2004 Louis Hugues
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 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 General Public License for more details.
 *
 *  You should have received a copy of the GNU 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
 *
 -----------------------------------------------------------------------------
 * $Author: sioulseuguh $ 
 * $Date: 2005/08/07 12:24:56 $
 * $Revision: 1.14 $
 * $Source: /cvsroot/simbad/src/simbad/gui/Simbad.java,v $
 */

package simbad.gui;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.util.ArrayList;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import simbad.demo.DemoManager;
import simbad.sim.Agent;
import simbad.sim.EnvironmentDescription;
import simbad.sim.SimpleAgent;
import simbad.sim.Simulator;
import simbad.sim.World;
//import javax.swing.UIManager;

/**
 * This is the Simbad application mainframe.
 *  
 */
public class Simbad extends JFrame implements ActionListener {

	private static final long serialVersionUID = 1L;
	
	static final String version="1.4";
	static int SIZEX = 800;
	static int SIZEY = 700;
	JMenuBar menubar;
    JDesktopPane desktop;
    WorldWindow worldWindow=null;
    ControlWindow controlWindow=null;
    World world;
    Simulator simulator;
    Console console=null;
    AgentInspector agentInspector=null;
    boolean backgroundMode;
   
    static  Simbad simbadInstance=null;
    
    
    
    /** Construct Simbad application with the given environement description */
    public Simbad(EnvironmentDescription ed, boolean backgroundMode) {
        super("Simbad  - version "+ version);
        simbadInstance = this;
        this.backgroundMode = backgroundMode;
        desktop = new JDesktopPane();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(SIZEX, SIZEY);
        createGUI();
        start(ed);
        setVisible(true);
       
          }
 

    /** Create the main GUI. Only called once.*/
    private void createGUI() {
        desktop.setFocusable(true);
        getContentPane().add(desktop);
        menubar = new JMenuBar();
        menubar.add(DemoManager.createMenu(this));
        setJMenuBar(menubar);
    }
    
    /** Starts (or Restarts after releaseRessources) the world and simulator.*/
    private void start(EnvironmentDescription ed){
        System.out.println("Starting environmentDescription: "+ed.getClass().getName());
        world = new World(ed);
        simulator = new Simulator(desktop, world, ed);
        createInternalFrames();
        if (backgroundMode) {
            runBackgroundMode();
        }
    }
    
    /** Release all ressources. */
    private void releaseRessources(){
        simulator.dispose();
        world.dispose();
        disposeInternalFrames();
    }
    


    /**
     * Creates the windows as Swing InternalFrames
     */
    private void createInternalFrames() {
        worldWindow = new WorldWindow(world);
        desktop.add(worldWindow);
        worldWindow.show();
        worldWindow.setLocation(300, 20);
        agentInspector = createAgentInspector(simulator, 20, 20);
        if (!backgroundMode){
        controlWindow = new ControlWindow(world, simulator);
        desktop.add(controlWindow);
        controlWindow.show();
        controlWindow.setLocation(300, 450);
        }
    }
    /**
     * Dispose the windows- used before restart.
     */
    private void disposeInternalFrames() {
        simulator.dispose();
        worldWindow.dispose();
        if (agentInspector != null) agentInspector.dispose();
        if (controlWindow != null){
            controlWindow.dispose();
        }
    }
  
    /**
     * creates agent inspector window
     */
    private AgentInspector createAgentInspector(Simulator simulator, int x,
            int y) {
        ArrayList agents = simulator.getAgentList();
        SimpleAgent a = ((SimpleAgent) agents.get(0));
        if (a instanceof Agent) {
            AgentInspector ai = new AgentInspector((Agent) a, !backgroundMode,simulator);
            desktop.add(ai);
            ai.show();
            ai.setLocation(x, y);
            return ai;
        } else
            return null;
    }
    
    public void actionPerformed(ActionEvent event) {
       if (event.getActionCommand()=="demo"){
            releaseRessources();
            start( DemoManager.getDemoFromActionEvent(event));
       }
    }
    /** 
     * Runs Simbad in background mode for computation intensive application. 
     * Minimize graphic display and renderer computation.
     */
    private void runBackgroundMode(){
        //TODO pb with collision , pb with camera in this mode.
        setTitle(this.getTitle()+" - Background Mode");
        System.out.println("---------------------------------------------");
        System.out.println("Simbad is running in 'Background Mode");
        System.out.println("World is rendered very rarely. UI is disabled");
        System.out.println("--------------------------------------------");
        // slow down
        agentInspector.setFramesPerSecond(0.5f);
        // Show a small indication window
        JInternalFrame frame = new JInternalFrame();
        JPanel p = new JPanel();
        p.add(new JLabel("BACKGROUND MODE"));
        frame.setContentPane(p); frame.setClosable(false);
        frame.pack();frame.setLocation(SIZEX/2,SIZEY*3/4);
        desktop.add(frame);
        frame.show();
        world.changeViewPoint(World.VIEW_FROM_TOP,null);
        // start
        simulator.startBackgroundMode();
    }
    
    /** The simbad main. Process command line arguments and launch simbad.*/
    public static void main(String[] args) {
        // process options
        boolean backgroundMode = false;
        for (int i = 0; i < args.length;i++)
        {
            if ("-bg".compareTo(args[i])==0) backgroundMode = true;
        }        
        // Check java3d presence
        try {
            Class.forName("javax.media.j3d.VirtualUniverse");
        } catch (ClassNotFoundException e1) {
            JOptionPane.showMessageDialog(null,  "Simbad requires Java 3D", "Simbad 3D",JOptionPane.ERROR_MESSAGE);
            System.exit(-1);
        }

        //request antialising 
        System.setProperty("j3d.implicitAntialiasing", "true");

        new Simbad(new simbad.demo.BaseDemo() ,backgroundMode);
     }


    public JDesktopPane getDesktopPane() {
        return desktop;
    }

    /////////////////////////
    // Class methods
    public static Simbad getSimbadInstance() {
        return simbadInstance;
    }



}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -