// $Id: LineObstruction.java,v 1.7.4.4 2003/09/10 03:41:52 mdwelsh Exp $ /** * line (wall) obstruction for use by the ObstructRadioModelPlugin class * * @author Jeff Rupp */ package net.tinyos.sim.plugins; import java.util.*; public class LineObstruction implements ObstructionIF { private double m_x1 = 0.0; private double m_y1 = 0.0; private double m_x2 = 0.0; private double m_y2 = 0.0; private double m_atten = 0.0; private java.awt.geom.Line2D.Double m_asLine2d=null; private java.awt.geom.Line2D.Double m_pixelLine2d=null; protected net.tinyos.sim.CoordinateTransformer m_coordTx; /** * ctor used when loading from file, expect a comma separated list of appropriate * values, where the first value is this class name */ public LineObstruction(String params, net.tinyos.sim.CoordinateTransformer cT) { m_coordTx = cT; System.out.println("constructing a LineObstruction with params: " + params); // parse out the params, and construct ourselves StringTokenizer tok = new StringTokenizer(params, ","); // skip first string, since it is our class name String nextToken = tok.nextToken(); try { m_x1 = Double.parseDouble(tok.nextToken()); m_y1 = Double.parseDouble(tok.nextToken()); m_x2 = Double.parseDouble(tok.nextToken()); m_y2 = Double.parseDouble(tok.nextToken()); m_atten = Double.parseDouble(tok.nextToken()); m_asLine2d = new java.awt.geom.Line2D.Double(m_x1,m_y1,m_x2,m_y2); m_pixelLine2d = new java.awt.geom.Line2D.Double(m_coordTx.simXToGUIX(m_x1), m_coordTx.simXToGUIX(m_y1), m_coordTx.simXToGUIX(m_x2), m_coordTx.simXToGUIX(m_y2)); } catch(Exception ex) { ex.printStackTrace(); System.out.println("x1: "+m_x1+" y1: "+m_y1+" x2: "+m_x2+" y2: "+m_y2+ " atten: "+m_atten); } } public LineObstruction(double x1,double y1,double x2,double y2, double atten, net.tinyos.sim.CoordinateTransformer cT) { m_x1 = x1; m_y1 = y1; m_x2 = x2; m_y2 = y2; m_atten = atten; m_asLine2d = new java.awt.geom.Line2D.Double(x1,y1,x2,y2); m_coordTx = cT; } /** * returns true if the given line intersects this object */ public boolean Intersects(double x1,double y1,double x2,double y2) { if(m_asLine2d != null) { /* no more accurate than as mote coordinates return m_pixelLine2d.intersectsLine(m_coordTx.simXToGUIX(x1), m_coordTx.simXToGUIX(y1), m_coordTx.simXToGUIX(x2), m_coordTx.simXToGUIX(y2)); */ return m_asLine2d.intersectsLine(x1,y1,x2,y2); } return false; } /** * draws this object to the provided context */ public void draw(java.awt.Graphics g) { java.awt.Color origClr = g.getColor(); g.setColor(java.awt.Color.black); g.drawLine((int)m_coordTx.simXToGUIX(m_x1),(int)m_coordTx.simXToGUIX(m_y1), (int)m_coordTx.simXToGUIX(m_x2),(int)m_coordTx.simXToGUIX(m_y2)); g.setColor(origClr); } /** * returns the amount of attenuation in dB associated with the obstruction */ public double GetAttenuation() { return m_atten; } }