📄 transition.java
字号:
//###################################################################################### package pipe.dataLayer;//###################################################################################### import java.awt.BasicStroke;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.RenderingHints;import java.awt.Shape;import java.awt.geom.AffineTransform;import java.awt.geom.GeneralPath;import java.awt.geom.Point2D;import java.awt.geom.Rectangle2D;import java.util.ArrayList;import java.util.Collections;import java.util.Iterator;import pipe.gui.Constants;import pipe.gui.CreateGui;//###################################################################################### /** * <b>Transition</b> - Petri-Net Transition Class * * @see <p><a href="..\PNMLSchema\index.html">PNML - Petri-Net XMLSchema (stNet.xsd)</a> * @see </p><p><a href="..\..\..\UML\dataLayer.html">UML - PNML Package </a></p> * @version 1.0 * @author James D Bloom *///###################################################################################### public class Transition extends PlaceTransitionObject implements Constants {//###################################################################################### public final static String type = "Transition"; /** Transition is of Rectangle2D.Double*/ private GeneralPath transition; private Shape proximityTransition; /** Place Width */ public static final int TRANSITION_HEIGHT = PLACE_TRANSITION_HEIGHT; /** Place Width */ public static final int TRANSITION_WIDTH = TRANSITION_HEIGHT/3; private int angle; private boolean enabled = false; private boolean enabledBackwards = false; public boolean highlighted = false; /** The transition rate */ private double rate = 1; /** Is this a timed transition or not?*/ private boolean timed = false; private static final double rootThreeOverTwo = 0.5 * Math.sqrt(3); /** The transform */// private AffineTransform transform; private ArrayList arcAngleList = new ArrayList(); /** Counter for the Objects */ // private static int count = 0; /** Used for a unique id */ //private static int idCount = 0;//###################################################################################### /** * Create Petri-Net Transition object * * @param positionXInput X-axis Position * @param positionYInput Y-axis Position * @param idInput Transition id * @param nameInput Name * @param nameOffsetXInput Name X-axis Position * @param nameOffsetYInput Name Y-axis Position * @param color Color */ public Transition(double positionXInput, double positionYInput, String idInput, String nameInput, double nameOffsetXInput, double nameOffsetYInput, double aRate ,boolean timedTransition, int angleInput){ super(positionXInput, positionYInput, idInput, nameInput, nameOffsetXInput, nameOffsetYInput); componentWidth = TRANSITION_HEIGHT; //sets width componentHeight = TRANSITION_HEIGHT;//sets height rate = aRate; timed = timedTransition; constructTransition(); angle = 0; setCentre((int)positionX, (int)positionY); rotate(angleInput); updateBounds(); //rotate(0); } // /** // * Create Petri-Net Transition object // * // * @param positionXInput X-axis Position // * @param positionYInput Y-axis Position // * @param idInput Transition id // * @param color Color // */ // public Transition(double positionXInput, double positionYInput, String idInput){ // super(positionXInput, positionYInput, idInput); // // width = WIDTH; //sets width // height = HEIGHT;//sets height // // transition = new Rectangle2D.Double(0, 0, width, height); // // enabled = true; //this is for testing purposes only // // // //transition = new Rectangle2D.Double(0, 0, width, height); // transition = new Rectangle2D.Double( (boundsWidth()-width)/2, (boundsHeight()-height)/2, width, height); // // } //###################################################################################### /** * Create Petri-Net Transition object * * @param positionXInput X-axis Position * @param positionYInput Y-axis Position * @param color Color */ public Transition(double positionXInput, double positionYInput) { super(positionXInput, positionYInput); componentWidth = TRANSITION_HEIGHT; //sets width componentHeight = TRANSITION_HEIGHT;//sets height constructTransition(); setCentre((int)positionX, (int)positionY); updateBounds(); }//###################################################################################### /** * Create Petri-Net Transition object * */ public Transition(){ }//###################################################################################### public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; g2.translate(COMPONENT_DRAW_OFFSET, COMPONENT_DRAW_OFFSET); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); if(selected && !ignoreSelection) g2.setColor(SELECTION_FILL_COLOUR); else g2.setColor(ELEMENT_FILL_COLOUR); if (timed) g2.fill(transition); if (highlighted) g2.setPaint(ENABLED_TRANSITION_COLOUR); else if (selected && !ignoreSelection) g2.setPaint(SELECTION_LINE_COLOUR); else g2.setPaint(ELEMENT_LINE_COLOUR); g2.draw(transition); if (!timed) g2.fill(transition); }//###################################################################################### /** Rotates the Transition through the specified angle around the midpoint */ public void rotate(int angleInc) { angle = (angle + angleInc) % 360; transition.transform(AffineTransform.getRotateInstance(Math.toRadians(angleInc), componentWidth/2,componentHeight/2)); outlineTransition(); Iterator arcIterator = arcAngleList.iterator(); while (arcIterator.hasNext()) ((ArcAngleCompare)arcIterator.next()).calcAngle(); Collections.sort(arcAngleList); updateEndPoints(); repaint(); }//###################################################################################### private void outlineTransition() { proximityTransition = (new BasicStroke(PLACE_TRANSITION_PROXIMITY_RADIUS)).createStrokedShape(transition); }//###################################################################################### /** * Determines whether Transition is enabled * @param animationStatus Anamation status * @return True if enabled */ public boolean isEnabled(boolean animationStatus){ if(animationStatus==true){ // System.out.println("is Enabled called within Transition"); if(enabled==true){ highlighted = true; return true; } else { highlighted = false; return false; } } else return false; }//###################################################################################### /** * Determines whether Transition is enabled backwards * @return True if enabled */ public boolean isEnabledBackwards(){ return enabledBackwards; }//###################################################################################### /** * Determines whether Transition is enabled * @return True if enabled */ public boolean isEnabled(){ return enabled; }//###################################################################################### /** * Sets whether Transition is enabled * @return enabled if True */ public void setEnabled(boolean status){ enabled = status; }//###################################################################################### /** * Sets whether Transition is enabled * @return enabled if True */ public void setEnabledBackwards(boolean status){ enabledBackwards = status; }//###################################################################################### /* called at the end of animation to reset Transitions to false*/ public void setEnabledFalse(){ enabled = false; highlighted = false; }//###################################################################################### /** Returns the width bounds we want to use when initially creating the place on the gui */ public int boundsWidth() { return WIDTH+25;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -