View Javadoc

1   /*
2    * @(#) Editable.java Aug 3, 2004
3    * 
4    * Copyright (c) 2003 Delft University of Technology Jaffalaan 5, 2628 BX Delft,
5    * the Netherlands All rights reserved.
6    * 
7    * This software is proprietary information of Delft University of Technology
8    * The code is published under the General Public License
9    */
10  package nl.tudelft.simulation.dsol.animation;
11  
12  import java.util.HashMap;
13  import java.util.Map;
14  import java.util.Properties;
15  
16  import javax.media.j3d.BoundingSphere;
17  import javax.media.j3d.Bounds;
18  
19  import nl.tudelft.simulation.dsol.simulators.SimulatorInterface;
20  import nl.tudelft.simulation.event.EventProducer;
21  import nl.tudelft.simulation.event.EventType;
22  import nl.tudelft.simulation.language.d3.DirectedPoint;
23  import nl.tudelft.simulation.language.d3.CartesianPoint;
24  import nl.tudelft.simulation.language.io.URLResource;
25  import nl.tudelft.simulation.logger.Logger;
26  
27  /***
28   * An Editable object is a simulation object that can be edited by the user.
29   * That means that the user is capable of instantiating, moving, rotating, and
30   * editing the vertices that span up the shape of this object during the
31   * simulation.
32   * <p>
33   * (c) copyright 2003 <a href="http://www.simulation.tudelft.nl">Delft
34   * University of Technology </a>, the Netherlands. <br>
35   * See for project information <a
36   * href="http://www.simulation.tudelft.nl">www.simulation.tudelft.nl </a> <br>
37   * License of use: <a href="http://www.gnu.org/copyleft/gpl.html">General Public
38   * License (GPL) </a>, no warranty <br>
39   * 
40   * @author <a href="http://www.tbm.tudelft.nl/webstaf/peterja/index.htm">Peter
41   *         Jacobs </a>
42   * @version 1.2 Aug 3, 2004
43   * @since 1.4
44   */
45  public abstract class Editable extends EventProducer implements
46          LocatableInterface
47  {
48      /*** the static map of editables */
49      private static Map editables = new HashMap();
50  
51      // We read editables from a file called editable.properties
52      // Editables read from this file will be made available to the user
53      // for instantiation (e.g. in the Editor2D of the DSOL-GUI).
54      static
55      {
56          try
57          {
58              Properties properties = new Properties();
59              properties.load(URLResource
60                      .getResourceAsStream("/editable.properties"));
61              Editable.editables.putAll(properties);
62          } catch (Exception exception)
63          {
64              Logger.severe(Editable.class, "<clinit>", exception);
65          }
66      }
67  
68      /*** LOCATION_CHANGED_EVENT the LOCATION_CHANGED_EVENT */
69      public static final EventType LOCATION_CHANGED_EVENT = new EventType(
70              "LOCATION_CHANGED_EVENT");
71  
72      /*** the simulator to use */
73      protected SimulatorInterface simulator = null;
74  
75      /*** the location of the editable */
76      protected DirectedPoint location = null;
77  
78      /*** the location of the bounds */
79      protected Bounds bounds = new BoundingSphere();
80  
81      /*** the vertices */
82      protected CartesianPoint[] vertices = new CartesianPoint[0];
83  
84      /***
85       * returns the editables as a list of name=class
86       * 
87       * @return the map
88       */
89      public static Map listEditables()
90      {
91          return Editable.editables;
92      }
93  
94      /***
95       * constructs a new Editable
96       * 
97       * @param simulator
98       *            the simulator to schedule on
99       * @param location
100      *            the initial location
101      */
102     public Editable(final SimulatorInterface simulator,
103             final DirectedPoint location)
104     {
105         super();
106         this.simulator = simulator;
107         this.location = location;
108     }
109 
110     /***
111      * @return @throws
112      *         RemoteException
113      */
114     public CartesianPoint[] getVertices()
115     {
116         return this.vertices;
117     }
118 
119     /***
120      * @param bounds
121      */
122     public void setBounds(final Bounds bounds)
123     {
124         this.bounds = bounds;
125     }
126 
127     /***
128      * @param location
129      */
130     public void setLocation(final DirectedPoint location)
131     {
132         this.location = location;
133     }
134 
135     /***
136      * @param vertices
137      */
138     public void setVertices(final CartesianPoint[] vertices)
139     {
140         this.vertices = vertices;
141     }
142 
143     /***
144      * @see nl.tudelft.simulation.dsol.animation.LocatableInterface#getBounds()
145      */
146     public Bounds getBounds()
147     {
148         return this.bounds;
149     }
150 
151     /***
152      * @see nl.tudelft.simulation.dsol.animation.LocatableInterface#getLocation()
153      */
154     public DirectedPoint getLocation()
155     {
156         return this.location;
157     }
158 }