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

📄 jfoperationrotate.java

📁 用Java开发的、实现类似Visio功能的应用程序源码
💻 JAVA
字号:
/**
 *    $Id:JFOperationRotate.java $
 *
 *    Copyright 2004 ~ 2005  JingFei International Cooperation LTD. All rights reserved. *
 */
package com.jfimagine.jfgraph.shape.action;


import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;

import com.jfimagine.jfgraph.geom.JFPoint;
import com.jfimagine.jfgraph.geom.Angle;

import com.jfimagine.jfgraph.shape.base.AbstractObject;
import com.jfimagine.jfgraph.shape.base.AbstractShape;
import com.jfimagine.jfgraph.shape.union.JFPage;

/**
 *  Class JFOperationRotate is used to record a move operation.
 */
public class JFOperationRotate extends JFOperationModifyPorts{
	
		
	/**  rotateCenter The rotate center point. */
	private JFPoint m_rotateCenter	=new JFPoint();

	/**  originalAngle An original angle of this object.*/
	private double m_originalAngle	=0;

	/**  finalAngle A final angle of this object.*/
	private double m_finalAngle	=0;

	/**  
	 *    Constructor.
	 *    @param page A page that used to do opeation.
	 *    @param obj The object has been moved(this object must be AbstractObject or a list of AbstractObject).
	 *    @param rotateCenter The rotate center point.
	 *    @param originalAngle Original angle of the object.
	 *    @param finalAngle Final angle of the object.
	 */        
        public JFOperationRotate(JFPage page,Object obj,JFPoint rotateCenter,double originalAngle, double finalAngle){
        	m_page	=page;
		setActionId(JFOperation.OPER_ROTATE);
		if (obj instanceof AbstractObject){
			AbstractObject aObj	=(AbstractObject)obj;
			setObjectId(aObj.getObjectId());
			List l	=new ArrayList();
			l.add(aObj);
			setModifyPortsList(l);			
		}else{
			List aList	=(List)obj;
			setObjectList(aList);    
			setModifyPortsList(aList);
		}
		m_rotateCenter.setValue(rotateCenter);
		m_originalAngle	=originalAngle;
		m_finalAngle	=finalAngle;
	}

	/**  
	 *    Constructor.
	 *    @param page A page that used to do opeation.
	 *    @param obj The object has been moved(this object must be AbstractObject or a list of AbstractObject).
	 *    @param rotateCenter The rotate center point.
	 *    @param x1,y1 The first reference point according to rotate center.
	 *    @param x2,y2 The second reference point according to rotate center.
	 */        
        public JFOperationRotate(JFPage page,Object obj,JFPoint rotateCenter,double x1, double y1, double x2, double y2){
        	m_page	=page;
		setActionId(JFOperation.OPER_ROTATE);

	
		if (obj instanceof AbstractObject){
			AbstractObject aObj	=(AbstractObject)obj;
			setObjectId(aObj.getObjectId()); 
			List l	=new ArrayList();
			l.add(aObj);
			setModifyPortsList(l);			
		}else{
			List aList	=(List)obj;
			setObjectList(aList);
			setModifyPortsList(aList);
		}

		m_rotateCenter.setValue(rotateCenter);
		double centerX		=rotateCenter.getX();
		double centerY		=rotateCenter.getY();
		m_originalAngle		=Angle.getAngle(centerX,centerY,x1,y1,false);
		m_finalAngle		=Angle.getAngle(centerX,centerY,x2,y2,false);
	}

	/** undo this operation
	 *  @return new objects selected
	 */
	public List undo(){
		JFPoint center	=m_rotateCenter;
		double angle	=m_finalAngle - m_originalAngle;
		
		List objList	=getObjectList();
		Iterator it	=objList.iterator();
		while (it!=null && it.hasNext()){
			AbstractShape	aShape	=(AbstractShape)it.next();
			aShape.rotateBy(center.getX(),center.getY(),-angle);
		}

	
		//restore ports list first.
		restorePorts();
		moveRelationalPorts();
				
		return objList;
	}

	/** redo this operation
	 *  @return new objects selected
	 */
	public List redo(){
		JFPoint center	=m_rotateCenter;
		double angle	=m_finalAngle - m_originalAngle;
		
		List objList	=getObjectList();
		Iterator it	=objList.iterator();
		while (it!=null && it.hasNext()){
			AbstractShape	aShape	=(AbstractShape)it.next();
			aShape.rotateBy(center.getX(),center.getY(),angle);
		}

		moveRelationalPorts();
		
		return objList;
	}

}

⌨️ 快捷键说明

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