📄 jflayer.java
字号:
/**
* $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 + -