View Javadoc
1   package org.opentrafficsim.core.network.animation;
2   
3   import java.awt.Color;
4   import java.awt.Graphics2D;
5   import java.awt.geom.Ellipse2D;
6   import java.awt.image.ImageObserver;
7   import java.io.Serializable;
8   import java.rmi.RemoteException;
9   
10  import javax.naming.NamingException;
11  
12  import org.opentrafficsim.core.animation.ClonableRenderable2DInterface;
13  import org.opentrafficsim.core.animation.TextAlignment;
14  import org.opentrafficsim.core.animation.TextAnimation;
15  import org.opentrafficsim.core.network.Node;
16  
17  import nl.tudelft.simulation.dsol.animation.Locatable;
18  import nl.tudelft.simulation.dsol.animation.D2.Renderable2D;
19  import nl.tudelft.simulation.dsol.simulators.SimulatorInterface;
20  
21  /**
22   * <p>
23   * Copyright (c) 2013-2018 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
24   * BSD-style license. See <a href="http://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>.
25   * <p>
26   * $LastChangedDate: 2018-09-19 13:55:45 +0200 (Wed, 19 Sep 2018) $, @version $Revision: 4006 $, by $Author: averbraeck $,
27   * initial version Oct 17, 2014 <br>
28   * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
29   */
30  public class NodeAnimation extends Renderable2D implements ClonableRenderable2DInterface, Serializable
31  {
32      /** */
33      private static final long serialVersionUID = 20140000L;
34  
35      /** the Text object to destroy when the animation is destroyed. */
36      private Text text;
37  
38      /**
39       * @param node n
40       * @param simulator s
41       * @throws NamingException when animation context cannot be found.
42       * @throws RemoteException on communication failure
43       */
44      public NodeAnimation(final Node node, final SimulatorInterface.TimeDoubleUnit simulator)
45              throws NamingException, RemoteException
46      {
47          super(node, simulator);
48          this.text = new Text(node, node.getId(), 0.0f, 3.0f, TextAlignment.CENTER, Color.BLACK, simulator);
49      }
50  
51      /** {@inheritDoc} */
52      @Override
53      public final void paint(final Graphics2D graphics, final ImageObserver observer)
54      {
55          graphics.setColor(Color.BLACK);
56          graphics.draw(new Ellipse2D.Double(-1.0, -1.0, 2.0, 2.0));
57      }
58  
59      /** {@inheritDoc} */
60      @Override
61      public final void destroy() throws NamingException
62      {
63          super.destroy();
64          this.text.destroy();
65      }
66  
67      /** {@inheritDoc} */
68      @Override
69      @SuppressWarnings("checkstyle:designforextension")
70      public ClonableRenderable2DInterface clone(final Locatable newSource, final SimulatorInterface.TimeDoubleUnit newSimulator)
71              throws NamingException, RemoteException
72      {
73          // the constructor also constructs the corresponding Text object
74          return new NodeAnimation((Node) newSource, newSimulator);
75      }
76  
77      /** {@inheritDoc} */
78      @Override
79      public final String toString()
80      {
81          return "NodeAnimation [node=" + super.getSource() + "]";
82      }
83  
84      /**
85       * Text animation for the Node. Separate class to be able to turn it on and off...
86       * <p>
87       * Copyright (c) 2013-2018 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
88       * <br>
89       * BSD-style license. See <a href="http://opentrafficsim.org/docs/current/license.html">OpenTrafficSim License</a>.
90       * </p>
91       * $LastChangedDate: 2018-09-19 13:55:45 +0200 (Wed, 19 Sep 2018) $, @version $Revision: 4006 $, by $Author: averbraeck $,
92       * initial version Dec 11, 2016 <br>
93       * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
94       * @author <a href="http://www.tudelft.nl/pknoppers">Peter Knoppers</a>
95       * @author <a href="http://www.transport.citg.tudelft.nl">Wouter Schakel</a>
96       */
97      public class Text extends TextAnimation
98      {
99          /** */
100         private static final long serialVersionUID = 20161211L;
101 
102         /**
103          * @param source the object for which the text is displayed
104          * @param text the text to display
105          * @param dx the horizontal movement of the text, in meters
106          * @param dy the vertical movement of the text, in meters
107          * @param textPlacement where to place the text
108          * @param color the color of the text
109          * @param simulator the simulator
110          * @throws NamingException when animation context cannot be created or retrieved
111          * @throws RemoteException - when remote context cannot be found
112          */
113         public Text(final Locatable source, final String text, final float dx, final float dy,
114                 final TextAlignment textPlacement, final Color color, final SimulatorInterface.TimeDoubleUnit simulator)
115                 throws RemoteException, NamingException
116         {
117             super(source, text, dx, dy, textPlacement, color, simulator);
118             setFlip(false);
119             setRotate(false);
120         }
121 
122         /** {@inheritDoc} */
123         @Override
124         @SuppressWarnings("checkstyle:designforextension")
125         public TextAnimation clone(final Locatable newSource, final SimulatorInterface.TimeDoubleUnit newSimulator)
126                 throws RemoteException, NamingException
127         {
128             return new Text(newSource, getText(), getDx(), getDy(), getTextAlignment(), getColor(), newSimulator);
129         }
130 
131         /** {@inheritDoc} */
132         @Override
133         public final String toString()
134         {
135             return "NodeAnimation.Text []";
136         }
137     }
138 
139 }