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

📄 arc.java

📁 Petri网分析工具PIPE is open-source
💻 JAVA
字号:
package pipe.dataLayer;import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;//import java.awt.Rectangle;import java.awt.RenderingHints;import java.awt.geom.Point2D;//import java.awt.Shape;//import java.awt.geom.Line2D;import pipe.gui.ArrowHead;import pipe.gui.Constants;import pipe.gui.GuiView;import pipe.gui.CreateGui;/** * <b>Arc</b> - Petri-Net Arc 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 Arc extends PetriNetObject implements Constants {		public final static String type = "Arc";	/** Current Marking */	private int weight = 1;	/** Initial Marking X-axis Offset */	private Double weightOffsetX = null;	/** Initial Marking Y-axis Offset */	private Double weightOffsetY = null;	/** Inscription *///	private String inscription = null;	/** Inscription X-axis Offset *///	private Double inscriptionOffsetX = null;	/** Inscription Y-axis Offset *///	private Double inscriptionOffsetY = null;	/** Arc is of type Line2D.Double *///	private Line2D.Double arc = new Line2D.Double(0, 0, 0, 0);//	private Line2D.Double realarc;		private ArrowHead arrow = new ArrowHead();	private NameLabel weightLabel = new NameLabel();	//	private Rectangle bounds = new Rectangle();		private static Point2D.Double point;		/** references to the objects this arc connects */	private PlaceTransitionObject source = null;	private PlaceTransitionObject target = null;	private boolean deleted = false;			// Used for cleanup purposes		private ArcPath myPath = new ArcPath(this);		/**	 * Create Petri-Net Arc object	 *	 * @param startPositionXInput Start X-axis Position	 * @param startPositionYInput Start Y-axis Position	 * @param endPositionXInput End X-axis Position	 * @param endPositionYInput End Y-axis Position	 * @param sourceInput Arc source	 * @param targetInput Arc target	 * @param idInput Arc id	 * @param colorInput Color	 */	public Arc(double startPositionXInput, double startPositionYInput, double endPositionXInput,			double endPositionYInput, PlaceTransitionObject sourceInput, PlaceTransitionObject targetInput,			int weightInput, String idInput, Color colorInput){			this(startPositionXInput,startPositionYInput,endPositionXInput,endPositionYInput,				sourceInput, targetInput, idInput, colorInput);    setWeight(weightInput);	}			/**	 * Create Petri-Net Arc object	 *	 * @param startPositionXInput Start X-axis Position	 * @param startPositionYInput Start Y-axis Position	 * @param endPositionXInput End X-axis Position	 * @param endPositionYInput End Y-axis Position	 * @param sourceInput Arc source	 * @param targetInput Arc target	 * @param idInput Arc id	 * @param colorInput Color	 */	public Arc(double startPositionXInput, double startPositionYInput, double endPositionXInput,			double endPositionYInput, PlaceTransitionObject sourceInput, PlaceTransitionObject targetInput,			String idInput, Color colorInput){			this(startPositionXInput,startPositionYInput,endPositionXInput,endPositionYInput);				id = idInput;		setSource(sourceInput);		setTarget(targetInput);		updateArcPosition();		updateArcPosition();	}			/**	 * Create Petri-Net Arc object	 *	 * @param startPositionXInput Start X-axis Position	 * @param startPositionYInput Start Y-axis Position	 * @param endPositionXInput End X-axis Position	 * @param endPositionYInput End Y-axis Position	 * @param idInput Arc id	 * @param colorInput Color	 */	public Arc(double startPositionXInput, double startPositionYInput, double endPositionXInput,			double endPositionYInput, String idInput){		this(startPositionXInput, startPositionYInput,endPositionXInput,endPositionYInput);		id = idInput;			}		/**	 * Create Petri-Net Arc object	 *	 * @param startPositionXInput Start X-axis Position	 * @param startPositionYInput Start Y-axis Position	 * @param endPositionXInput End X-axis Position	 * @param endPositionYInput End Y-axis Position	 * @param colorInput Color	 */	public Arc(double startPositionXInput, double startPositionYInput, double endPositionXInput,			double endPositionYInput) {//		arc.setLine(startPositionXInput, startPositionYInput, endPositionXInput, endPositionYInput);		arrow.setLocation(startPositionXInput, startPositionYInput, endPositionXInput, endPositionYInput);		myPath.addPoint((float)startPositionXInput, (float)startPositionYInput, ArcPathPoint.STRAIGHT);//		myPath.addPoint(100,100, ArcPath.ArcPathPoint.STRAIGHT);		myPath.addPoint((float)endPositionXInput, (float)endPositionYInput, ArcPathPoint.STRAIGHT);		myPath.createPath();		updateBounds();			}		/**	 * Create Petri-Net Arc object	 *	 */	public Arc(PlaceTransitionObject newSource) {		source = newSource;		myPath.addPoint();		myPath.addPoint();		myPath.createPath();	}		/**	 * Set id	 *	 * @param idInput String value for Arc id;	 */	public void setId(String idInput) {		id = idInput;	}		/**	 * Set source	 *	 * @param sourceInput PlaceTransitionObject value for Arc source;	 */	public void setSource(PlaceTransitionObject sourceInput) {		source = sourceInput;	}		/**	 * Set target	 *	 * @param targetInput PlaceTransitionObject value for Arc target;	 */	public void setTarget(PlaceTransitionObject targetInput) {		target = targetInput;		updateArcPosition();	}			/**	 * Set weight	 *	 * @param weightInput String value for Arc weight;	 */	public void setWeight(int weightInput) {		weight = weightInput;		weightLabel.setText(Integer.toString(weight));		setWeightLabelPosition();				if (weight != 1){			addWeightLabelToContainer();			weightLabel.updateSize();		}							//    try {		//      if(arrow != null)		//        arrow.getNameLabel().setText(String.valueOf(Weight));		//    } catch (Exception e) {		//      e.printStackTrace();		//    }	}		public void setWeightLabelPosition(){//		Point2D.Float p = null;				if(myPath.getEndIndex() > 0){			Point2D.Float firstPoint  = myPath.getPathPoint(1).getControl1();			Point2D.Float secondPoint = myPath.getPathPoint(1).getControl2();//			double angle = myPath.getStartAngle();      //			weightLabel.setPosition((int)(firstPoint.x + (Math.cos(angle + Math.PI/24)*30)),//								    (int)(firstPoint.y + (Math.sin(angle + Math.PI/24)*30)) );			      weightLabel.setPosition(      		(int)((secondPoint.x+firstPoint.x)*0.5),			(int)((secondPoint.y+firstPoint.y)*0.5)      );		}					}		public void addWeightLabelToContainer() {		if (getParent() != null) {	  		getParent().add(weightLabel);	  		//weightLabel.setPosition((int)((myPath.getPoint(1).x) - (myPath.getPoint(0).x)), (int)((myPath.getPoint(1).y) - (myPath.getPoint(0).y)));	  	}	}		/**	 * Set X-axis offset for weight position	 *	 * @param weightOffsetXInput Double value for weight X-axis offset	 */	public void setWeightOffsetX(double weightOffsetXInput) {		weightOffsetX = new Double(weightOffsetXInput);	}		/**	 * Set Y-axis offset for weight position	 *	 * @param weightOffsetYInput Double value for weight Y-axis offset	 */	public void setWeightOffsetY(double weightOffsetYInput) {		weightOffsetY = new Double(weightOffsetYInput);	}		/**	 * Set inscription	 *	 * @param inscriptionInput String value for Arc inscription;	 *///	public void setInscription(String inscriptionInput) {//		inscription = inscriptionInput;//	}		/**	 * Set X-axis offset for inscription position	 *	 * @param inscriptionOffsetXInput Double value for inscription X-axis offset	 *///	public void setInscriptionOffsetX(double inscriptionOffsetXInput) {//		inscriptionOffsetX = new Double(inscriptionOffsetXInput);//	}		/**	 * Set Y-axis offset for inscription position	 *	 * @param inscriptionOffsetYInput Double value for inscription Y-axis offset	 *///	public void setInscriptionOffsetY(double inscriptionOffsetYInput) {//		inscriptionOffsetY = new Double(inscriptionOffsetYInput);//	}		/**	 * Get id	 *	 * @return String value for Arc id;	 */	public String getId() {		if(id != null) {			return id;		} else {			if(source != null && target != null) {				return source.getId() + " to " + target.getId();			} else {				return "";			}		}	}		/**	 * Get source returns null if value not yet entered	 *	 * @return String value for Arc source;	 */	public PlaceTransitionObject getSource() {		return source;	}		/**	 * Get target returns null if value not yet entered	 *	 * @return String value for Arc target;	 */	public PlaceTransitionObject getTarget() {		return target;	}		/**	 * Get X-axis value of start position	 *	 * @return Double value for X-axis of start position	 */	public double getStartPositionX() {		return myPath.getPoint(0).getX();	}		/**	 * Get Y-axis value of start position	 *	 * @return Double value for Y-axis of start position	 */	public double getStartPositionY() {		return myPath.getPoint(0).getY();	}		/**	 * Get X-axis value of end position	 *	 * @return Double value for X-axis of end position	 */	public double getEndPositionX() {		return myPath.getPoint(myPath.getEndIndex()).getX();	}		/**	 * Get Y-axis value of end position	 *	 * @return Double value for Y-axis of end position	 */	public double getEndPositionY() {		return myPath.getPoint(myPath.getEndIndex()).getY();	}		/**	 * Get weight	 *	 * @return Integer value for Arc weight;	 */	public int getWeight() {		return weight;	}		/**	 * Get X-axis offset for weight position	 *	 * @return Double value for weight X-axis offset	 */	public double getWeightOffsetX() {		if(weightOffsetX == null)			return 0;		return weightOffsetX.doubleValue();	}		/**	 * Get Y-axis offset for weight position	 *	 * @return Double value for weight Y-axis offset	 */	public double getWeightOffsetY() {		if(weightOffsetY == null)			return 0;		return weightOffsetY.doubleValue();	}		/**	 * Get inscription returns null if value not yet entered	 *	 * @return String value for Arc inscription;	 *///	public String getInscription() {//		return inscription;//	}		/**	 * Get X-axis offset for inscription position	 *	 * @return Double value for inscription X-axis offset	 *///	public double getInscriptionOffsetX() {//		if(inscriptionOffsetX == null)//			return 0;//		return inscriptionOffsetX.doubleValue();//	}		/**	 * Get Y-axis offset for inscription position	 *	 * @return Double value for inscription Y-axis offset	 *///	public double getInscriptionOffsetY() {//		if(inscriptionOffsetY == null)//			return 0;//		return inscriptionOffsetY.doubleValue();//	}			/**	 * Get weight returns null if value not yet entered	 *	 *	 * @return Integer value for Arc weight;	 */	public int getWeightObject() {		return weight;	}		/**	 * Get X-axis offset for weight position	 * returns null if value not yet entered	 *	 * @return Double value for weight X-axis offset	 */	public Double getWeightOffsetXObject() {		return weightOffsetX;	}		/**	 * Get Y-axis offset for weight position	 * returns null if value not yet entered	 *	 * @return Double value for weight Y-axis offset	 */	public Double getWeightOffsetYObject() {		return weightOffsetY;	}		/**	 * Get X-axis offset for inscription position	 * returns null if value not yet entered	 *	 * @return Double value for inscription X-axis offset	 *///	public Double getInscriptionOffsetXObject() {//		return inscriptionOffsetX;//	}		/**	 * Get Y-axis offset for inscription position	 * returns null if value not yet entered	 *	 * @return Double value for inscription Y-axis offset	 *///	public Double getInscriptionOffsetYObject() {//		return inscriptionOffsetY;//	}			public void paintComponent(Graphics g) {		super.paintComponent(g);		Graphics2D g2 = (Graphics2D)g;		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);//		g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_NORMALIZE);				g2.translate(COMPONENT_DRAW_OFFSET-myPath.getBounds().getX(),				COMPONENT_DRAW_OFFSET-myPath.getBounds().getY());		if (selected && !ignoreSelection)			g2.setPaint(SELECTION_LINE_COLOUR);		else			g2.setPaint(ELEMENT_LINE_COLOUR);				g2.fill(arrow);		g2.draw(myPath);				//		if (selected)//		{//			myPath.createSelection();//			g2.fill(myPath.getArcSelection());//			g2.setPaint(SELECTION_LINE_COLOUR);//			g2.fill(myPath.getPointSelection());//		}			}	/** Updates the start position of the arc, resets the arrowhead and updates the bounds*/	public void updateArcPosition() {		if (source != null)			source.updateEndPoint(this);				if (target != null)			target.updateEndPoint(this);        myPath.createPath();	}		public void updateArrow() {    if(myPath.getEndIndex()!=-1) arrow.setLocation(myPath.getPoint(myPath.getEndIndex()).getX(),				  		  myPath.getPoint(myPath.getEndIndex()).getY(), myPath.getEndAngle()+Math.PI);		}		public void setEndPoint(double x, double y, boolean type) {		myPath.setPointLocation(myPath.getEndIndex(),x,y);		myPath.setPointType(myPath.getEndIndex(),type);		updateArcPosition();	}		public void setTargetLocation(double x, double y) {		myPath.setPointLocation(myPath.getEndIndex(),x,y);		updateArrow();		myPath.createPath();		updateBounds();		repaint();	}	public void setSourceLocation(double x, double y) {		myPath.setPointLocation(0,x,y);		updateArrow();		myPath.createPath();		updateBounds();		repaint();	}		/** Updates the bounding box of the arc component based on the arcs bounds*/	public void updateBounds() {		bounds = myPath.getBounds();		bounds.grow(COMPONENT_DRAW_OFFSET,COMPONENT_DRAW_OFFSET);		setBounds(bounds);	}		public ArcPath getArcPath() {		return myPath;	}		public boolean contains(int x, int y) {		point = new Point2D.Double(x+myPath.getBounds().getX()-COMPONENT_DRAW_OFFSET,				   y+myPath.getBounds().getY()-COMPONENT_DRAW_OFFSET);		if (CreateGui.getApp().getMode() == SELECT)		{			if (myPath.proximityContains(point) || selected)	// show also if Arc itself selected				myPath.showPoints();			else				myPath.hidePoints();		}		return myPath.contains(point);	}//######################################################################################	public void addedToGui()	// called by GuiView upon adding component.	{		myPath.addPointsToGui((GuiView)getParent());		myPath.createPath();		updateArcPosition();	}//######################################################################################	public void delete() {		if (!deleted)		{			myPath.delete();			super.delete();			deleted = true;		}	}//######################################################################################	public void setPathToTransitionAngle(int angle){		myPath.setTransitionAngle(angle);	}//######################################################################################}//######################################################################################

⌨️ 快捷键说明

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