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

📄 motelayoutplugin.java

📁 无线通信的主要编程软件,是无线通信工作人员的必备工具,关天相关教程我会在后续传上.
💻 JAVA
字号:
// $Id: MoteLayoutPlugin.java,v 1.5 2004/06/11 21:30:14 mikedemmer Exp $/*									tab:2 * * * "Copyright (c) 2004 and The Regents of the University  * of California.  All rights reserved. * * Permission to use, copy, modify, and distribute this software and * its documentation for any purpose, without fee, and without written * agreement is hereby granted, provided that the above copyright * notice and the following two paragraphs appear in all copies of * this software. *  * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL * DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS * DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *  * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, * UPDATES, ENHANCEMENTS, OR MODIFICATIONS." * * Authors:	Michael Demmer * Date:        January 9, 2004 * Desc:        Mote Layout plugin  *              Handles position management of motes independant of the GUI * *//** * @author Michael Demmer */package net.tinyos.sim;import java.util.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.*;import net.tinyos.sim.event.*;public class MoteLayoutPlugin extends Plugin implements SimConst {  private SimDebug dbg = SimDebug.get("layout");    private static final double GRID_RANDOM_DEVIATION = 5;  public static final int LAYOUT_RANDOM = 0;  public static final int LAYOUT_GRID = 1;  public static final int LAYOUT_GRID_RANDOM = 2;  public static final int LAYOUT_FILE = 3;  private int layout = LAYOUT_RANDOM;  private SimState state;  private Random rand;  private SpatialReader spatialReader;  public void initialize(SimDriver driver) {    super.initialize(driver);    this.state = driver.getSimState();    this.rand = driver.getSimRandom().getRandom();  }  public void register() {  }  public void deregister() {  }  public void createMote(int id) {    // check to make sure the mote doesn't already exist since this    // gets called on each TossimEvent    if (state.getMoteSimObject(id) != null) {      dbg.out.println("layout: mote " + id + " already exists");      return;    }        dbg.out.println("layout: creating mote "+id);        double x = rand.nextDouble()*(MOTE_SCALE_WIDTH * 0.8);    double y = rand.nextDouble()*(MOTE_SCALE_WIDTH * 0.8);    x += (MOTE_SCALE_WIDTH * 0.1);    y += (MOTE_SCALE_WIDTH * 0.1);    MoteSimObject m = new MoteSimObject(driver, x, y, id);    state.addSimObject(m);  }  public void handleEvent (SimEvent event) {    if (event instanceof OptionSetEvent) {      OptionSetEvent ose = (OptionSetEvent)event;      if (!ose.name.equals("layout")) return;            if (ose.value.equals("grid")) {	this.layout = LAYOUT_GRID;      } else if (ose.value.equals("random")) {	this.layout = LAYOUT_RANDOM;      } else if (ose.value.equals("gridrandom")) {	this.layout = LAYOUT_GRID_RANDOM;      } else if (ose.value.startsWith("file ")) {        try {          loadLocationFile(new File(ose.value.substring(5)));        } catch (Exception e) {	  System.err.println("Can't load location file '" +                             ose.value.substring(5)+"': "+e);	}      } else {	System.err.println("Bad value for layout option: "+ose.value);      }            doLayout();      driver.refreshMotePanel();    } else if (event instanceof SimObjectEvent) {      SimObjectEvent soEvent = (SimObjectEvent)event;      SimObject simObject = soEvent.getSimObject();      switch (soEvent.getType()) {	case (SimObjectEvent.OBJECT_ADDED):	  if (simObject instanceof MoteSimObject) {	    // XXX MDW: Assume motes aren't added on the fly	    //if (layout == LAYOUT_GRID || layout == LAYOUT_GRID_RANDOM) 	    //  doLayout();            driver.refreshMotePanel();	  }	  break;	case (SimObjectEvent.OBJECT_REMOVED):	  if (simObject instanceof MoteSimObject) {	    if (layout == LAYOUT_GRID || layout == LAYOUT_GRID_RANDOM) 	      doLayout();            driver.refreshMotePanel();	  }	  break;      }    } else if (event instanceof TossimInitEvent) {        /*         * Note: this is the only hook by which MoteSimObject's are         * created. In previous versions, each TossimEvent would check         * for a corresponding MoteSimObject and if it wasn't there,         * would create it.         */	TossimInitEvent tiEvent = (TossimInitEvent)event;	int numMotes = tiEvent.get_numMotes();	for (int i = 0; i < numMotes; i++) {          createMote(i);	}	if (layout != LAYOUT_RANDOM) doLayout();        driver.refreshMotePanel();    }  }  public String toString() {    return "MoteLayoutPlugin";  }  public void loadLocationFile(File locfile) throws IOException {    dbg.out.println("layout: Loading location file "+locfile);    int oldlayout = layout;    layout = LAYOUT_FILE;    try {      spatialReader = new SpatialReader(locfile);      Iterator it = state.getMoteSimObjects().iterator();      while (it.hasNext()) {        MoteSimObject mote = (MoteSimObject)it.next();        SpatialReader.SREntry sEntry = spatialReader.getEntry(mote.getID());        if (sEntry != null) {          dbg.out.println("layout: Setting "+mote+" location to "+                          sEntry.getX()+","+sEntry.getY());          mote.moveSimObjectTo(sEntry.getX(), sEntry.getY());        }      }    } catch (IOException e) {      layout = oldlayout;      throw(e);    }  }  public void saveLocationFile(File locfile) throws IOException {    SpatialWriter sWriter = new SpatialWriter(locfile);    Iterator it = state.getMoteSimObjects().iterator();    while (it.hasNext()) {      MoteSimObject mote = (MoteSimObject)it.next();      CoordinateAttribute coordAttrib = mote.getCoordinate();      sWriter.writeEntry(mote.getID(), coordAttrib.getX(), coordAttrib.getY());    }    sWriter.done();  }      private void doLayout() {    int nummotes = state.getMoteSimObjects().size();    dbg.out.println("layout: doing layout of "+nummotes+" motes");    //if (nummotes == 0) return;    if (layout == LAYOUT_FILE) {      if (spatialReader == null) return;      Iterator it = state.getMoteSimObjects().iterator();      while (it.hasNext()) {	MoteSimObject mote = (MoteSimObject)it.next();	SpatialReader.SREntry sEntry = spatialReader.getEntry(mote.getID());	if (sEntry != null) {          mote.moveSimObjectTo(sEntry.getX(), sEntry.getY());	}      }      return;    }    int num_rows = 1, num_columns = 1;    double xspacing = 0, yspacing = 0;    int MAX_SPACING = 4*SimConst.MOTE_OBJECT_SIZE;    double realwidth = MOTE_SCALE_WIDTH * 0.9;    double realheight = MOTE_SCALE_HEIGHT * 0.9;    double xbase = 0.0, ybase = 0.0;    if (layout == LAYOUT_GRID || layout == LAYOUT_GRID_RANDOM) {      int side = (int)(Math.ceil(Math.sqrt(nummotes * 1.0)));      num_rows = side;      num_columns = side;      xspacing = realwidth / num_columns;      yspacing = realheight / num_rows;      if (xspacing > MAX_SPACING) xspacing = MAX_SPACING;      if (yspacing > MAX_SPACING) yspacing = MAX_SPACING;      if (nummotes > 2) {	xbase = 50.0 - xspacing  * ((side-1) / 2.0);	ybase = 50.0 - yspacing  * ((side-1) / 2.0);      } else {	xbase = 50.0 - xspacing  * ((side-1) / 2.0);	ybase = 50.0;      }    }    Iterator it = state.getMoteSimObjects().iterator();    while (it.hasNext()) {      MoteSimObject mote = (MoteSimObject)it.next();      if (layout == LAYOUT_RANDOM) {	        double x = rand.nextDouble()*(MOTE_SCALE_WIDTH * 0.8);        double y = rand.nextDouble()*(MOTE_SCALE_HEIGHT * 0.8);        x += (MOTE_SCALE_WIDTH * 0.1);        y += (MOTE_SCALE_HEIGHT * 0.1);        mote.moveSimObjectTo(x, y);              } else if (layout == LAYOUT_GRID || layout == LAYOUT_GRID_RANDOM) {	int rownum = mote.getID() / num_columns;	int colnum = mote.getID() % num_columns;	double x = (xspacing * colnum) + xbase;	double y = (yspacing * rownum) + ybase;	if (layout == LAYOUT_GRID_RANDOM) {	  x += ((rand.nextDouble() * GRID_RANDOM_DEVIATION*2.0) -                GRID_RANDOM_DEVIATION);	  y += ((rand.nextDouble() * GRID_RANDOM_DEVIATION*2.0) -                GRID_RANDOM_DEVIATION);	}	mote.moveSimObjectTo(x, y);      }    }  }      public void setLayout(int thelayout) {    if (thelayout != LAYOUT_GRID &&	thelayout != LAYOUT_RANDOM &&	thelayout != LAYOUT_GRID_RANDOM &&	thelayout != LAYOUT_FILE) {      throw new IllegalArgumentException("Invalid setting for layout: "+                                         layout);    }    this.layout = thelayout;    doLayout();  }}

⌨️ 快捷键说明

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