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

📄 jflayer.java

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

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.awt.Graphics;  
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;

import com.jfimagine.jfdom.Document;
import com.jfimagine.jfdom.Element;

import com.jfimagine.jfgraph.shape.base.AbstractObject;
import com.jfimagine.jfgraph.shape.base.AbstractShape;
import com.jfimagine.jfgraph.shape.base.ObjectList;
import com.jfimagine.jfgraph.shape.base.Port;
import com.jfimagine.jfgraph.shape.base.PortList;
import com.jfimagine.jfgraph.shape.base.ShapeConst;
import com.jfimagine.jfgraph.shape.base.JFVersion;

import com.jfimagine.jfgraph.shape.rectangle.JFImage;

import com.jfimagine.jfgraph.shape.union.JFGroup;

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


import com.jfimagine.utils.log.*;
 /**
 * JFLayer class.  
 * A layer is a cad layer, for multi-views of a cad graph design.
 *
 * @author     CookieMaker    
 *
 * @version $Revision: 1.00 $
 */  
 public class JFLayer extends AbstractObject{

   public static final String   LAYER_NAME_DEFAULT	=com.jfimagine.jfdraw.gui.resource.CADResource.getString("label.layer.title")+"1";


   /**
    *   A XML string tag represents a Layer
    */
   public  static final String	 XML_LAYER	="Layer";
   /**
    *   A XML string tag represents if this layer is visible
    */
   public  static final String	 XML_VISIBLE	="Visible";
   /**
    *   A XML string tag represents name of this layer.
    */
   public  static final String	 XML_NAME	="LayerName";

   /**an internal log utility*/
   private JFLogger m_logger=JFLogManager.getLogger(this.getClass());
   
      
   /**
    *   shape list.
    *   All of the shapes within this layer should store in this list.
    */
   private ObjectList m_shapeList	=new ObjectList();    
   
   /**
    *   If this layer is visible or invisible.
    */
   private boolean   m_visible		=true;

   /**
    *   Get if this layer is visible or invisible.
    */
   public boolean getVisible(){
   	return m_visible;
   }

   /**
    *   Set if this layer is visible or invisible.
    */
   public void setVisible(boolean visible){
   	m_visible	=visible;
   }


   /**
    *   Constructor for Layer
    */
   public JFLayer(){
   	setObjectType(ShapeConst.OBJECTTYPE_LAYER);
   	setXMLTag(XML_LAYER);
   	
   	//set default name to a layer
   	setName(LAYER_NAME_DEFAULT);
   }	

   /**
    *   Get the shape list.
    * 
    *   @return  The shape list.
    *
    */ 	
   public ObjectList getShapeList(){
   	return m_shapeList;
   }

   /**
    *   Get the bounds of this layer.
    *
    *   @return The bounds rectangle.
    *
    */ 	
   public Rect getBounds(){
	return m_shapeList.getBounds();   	
   }	
   	
   /**
    *   Draw current object on graphic canvas.
    * 
    *   @param  g  A graphic canvas.	
    *   @param  isXorMode If is in xor mode now.
    *
    */ 	
   public void  draw(Graphics g,boolean isXorMode){
   	if (g==null)
   		return;

   	AbstractObject	obj;
   	for (int i=0; i<m_shapeList.size(); i++){
   		try{
   			obj	=m_shapeList.getByIndex(i);
   			if (obj!=null && obj instanceof AbstractShape)
   				((AbstractShape)obj).draw(g,isXorMode);
   		}catch(Exception e){
   		}
   	}
   }

   /** set if show or hide current object's design info
    */
   public void setShowDesign(boolean showDesign){
   	super.setShowDesign(showDesign);
   	m_shapeList.setShowDesign(showDesign);
   }
 

   /**
    *   pick up shape object by a position point.
    * 
    *   @param  g A graphics context used to pick some graphics sensitive shapes(e.g. label)
    *   @param  pnt A JFPoint that intersect or contained in an AbstractObject.
    *
    */ 	
   public AbstractObject  pickBy(Graphics g,JFPoint pnt){

   	AbstractObject	obj;
	AbstractShape	drawObj;   	


   	//pick closed shape.
   	for (int i=m_shapeList.size()-1; i>=0; i--){

   		try{
   			obj	=m_shapeList.getByIndex(i);
   			if (obj!=null && obj instanceof AbstractShape){
   				drawObj	=(AbstractShape)obj;
   				if (drawObj.intersects(pnt))
   					return obj;
   			}
   		}catch(Exception e){
   		}
   	}
  	

   	//pick open shape or label firstly
   	for (int i=m_shapeList.size()-1; i>=0; i--){

   		try{
   			obj	=m_shapeList.getByIndex(i);
   			if (obj!=null && obj instanceof AbstractShape){
   				drawObj	=(AbstractShape)obj;
   				if (drawObj.labelIntersects(g,pnt)!=null){
   					return obj;
   				}
   			}
   		}catch(Exception e){
   		}
   	}

  	
   	return null;
   }
  	
   /**
    *   pick up shape object by a rectangle.
    * 
    *   @param  g A graphics context used to pick some graphics sensitive shapes(e.g. label)
    *   @param  rect A Rect that intersects or contains one or move AbstractObjects.
    *
    */ 	
   public ObjectList  pickBy(Graphics g,Rect rect){
   	ObjectList objList	=new ObjectList();
   	AbstractObject		obj=null;
   	AbstractShape		drawObj=null;
   	for (int i=0; i<m_shapeList.size(); i++){
   		try{
   			obj	=(AbstractObject)m_shapeList.getByIndex(i);
   			if (obj!=null)   
   				drawObj	=(AbstractShape)obj;
   				if (drawObj!=null && drawObj.labelIntersects(g,rect)!=null || drawObj.intersects(rect)){
   					objList.add(obj);
   				}
   		}catch(Exception e){
   		}
   	}
   	return objList;
   }

   /**
    *   Get which port of current shape that intersects with point pnt.
    * 
    *   @param  pnt A JFPoint used to test intersection.
    *
    *   @param  avoidParent A specified avoided parent to avoid connected to self.
    *   @return A port of current shape.
    *
    */ 	
   public Port  portIntersects(JFPoint pnt,AbstractObject avoidParent){
   	AbstractObject	obj;
   	for (int i=0; i<m_shapeList.size(); i++){
   		try{
   			obj	=m_shapeList.getByIndex(i);
   			if (obj!=null && obj instanceof AbstractShape){
   				Port port	=((AbstractShape)obj).portIntersects(pnt,avoidParent);
   				if (port!=null)
   					return port;
   			}
   		}catch(Exception e){
   		}
   	}
   	return null;
   }

   /**
    *   Get a ports list of alls hapes that intersects with point pnt.
    * 
    *   @param  pnt A JFPoint used to test intersection.
    *
    *   @return A port list.
    *
    */ 	
   public List  portIntersectsList(JFPoint pnt){
        List ret        =new ArrayList();
   	AbstractObject	obj;
   	for (int i=0; i<m_shapeList.size(); i++){
   		try{
   			obj	=m_shapeList.getByIndex(i);
   			if (obj!=null && obj instanceof AbstractShape){
   				Port port	=((AbstractShape)obj).portIntersects(pnt,null);
   				if (port!=null)
   					ret.add(port);
   			}
   		}catch(Exception e){
   		}
   	}
   	return ret;
   }
   

   /**
    *   Clear access times, Clear all objects access times.
    */ 	
   public void clearAccessTimes(){
   	AbstractObject	obj;
   	for (int i=0; i<m_shapeList.size(); i++){
   		try{
   			obj	=m_shapeList.getByIndex(i);
   			if (obj!=null && obj instanceof AbstractShape){
   				((AbstractShape)obj).clearAccessTimes();
   			}
   		}catch(Exception e){
   		}
   	}
   }


    /** set zoom scale
     *  @param zoomScale A new zoom scale.
     */	
    public void setZoomScale(double zoomScale){
    	super.setZoomScale(zoomScale);
    	m_shapeList.setZoomScale(zoomScale);

    }


   /**
    *   Group a selection to one JFGroup object.
    * 
    *   @param objList a sub collection of this object list.
    *   @return A group object.
    */ 	
  public AbstractObject groupShapes(List objList,boolean showDesign){ 

⌨️ 快捷键说明

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