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

📄 sizeoffset.java

📁 The ElectricTM VLSI Design System is an open-source Electronic Design Automation (EDA) system that c
💻 JAVA
字号:
/* -*- tab-width: 4 -*- * * Electric(tm) VLSI Design System * * File: SizeOffset.java * * Copyright (c) 2003 Sun Microsystems and Static Free Software * * Electric(tm) is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Electric(tm) is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Electric(tm); see the file COPYING.  If not, write to * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, Mass 02111-1307, USA. */package com.sun.electric.technology;import com.sun.electric.database.geometry.DBMath;import java.awt.geom.Rectangle2D;import java.io.Serializable;/** * The SizeOffset object describes the difference between the stored bounds of * a NodeInst and the displayed/selected bounds. * <P> * In Electric, extra space may surround a NodeInst, in order to leave room * for expansion of the definition.  For example, in the MOCMOS technology, * a metal-1/metal-2 contact is 5x5 (in memory) but when displayed, it is only * 4x4.  The extra space does not scale, meaning that if you stretch the node * so that it appears to be 10x10, then it will be 11x11 in memory. * <P> * The distance from each edge is stored in a SizeOffset object.  For the * Via described above, all four offsets would be 0.5 to indicate a half-unit * surround between the stored and displayed/selected bounds. */public class SizeOffset implements Serializable{	/** Offset with all zero distances. */	public static final SizeOffset ZERO_OFFSET = new SizeOffset(0, 0, 0, 0);	private final double lx, hx, ly, hy;    private final int gridLx, gridHx, gridLy, gridHy;	/**	 * Constructor to create a SizeOffset from the specified parameters.	 * @param lx the low-X offset (distance from left side to actual bounds).	 * @param hx the high-X offset (distance from left side to actual bounds).	 * @param ly the low-Y offset (distance from bottom side to actual bounds).	 * @param hy the high-Y offset (distance from top side to actual bounds).	 */	public SizeOffset(double lx, double hx, double ly, double hy)	{        gridLx = (int)DBMath.lambdaToGrid(lx);        gridHx = (int)DBMath.lambdaToGrid(hx);        gridLy = (int)DBMath.lambdaToGrid(ly);        gridHy = (int)DBMath.lambdaToGrid(hy);        		this.lx = DBMath.gridToLambda(gridLx);		this.hx = DBMath.gridToLambda(gridHx);		this.ly = DBMath.gridToLambda(gridLy);		this.hy = DBMath.gridToLambda(gridHy);	}	/**	 * Method to return the low-X offset of this SizeOffset.	 * The low-X offset is the distance from the left side to the acutal bounds.	 * @return the low-X offset of this SizeOffset.	 */	public double getLowXOffset() { return lx; }	/**	 * Method to return the high-X offset of this SizeOffset.	 * The high-X offset is the distance from the right side to the acutal bounds.	 * @return the high-X offset of this SizeOffset.	 */	public double getHighXOffset() { return hx; }	/**	 * Method to return the low-Y offset of this SizeOffset.	 * The low-Y offset is the distance from the bottom side to the acutal bounds.	 * @return the low-Y offset of this SizeOffset.	 */	public double getLowYOffset() { return ly; }	/**	 * Method to return the high-Y offset of this SizeOffset.	 * The high-Y offset is the distance from the top side to the acutal bounds.	 * @return the high-Y offset of this SizeOffset.	 */	public double getHighYOffset() { return hy; }	/**	 * Method to return the low-X offset of this SizeOffset in grid units.	 * The low-X offset is the distance from the left side to the acutal bounds.	 * @return the low-X offset of this SizeOffset.	 */	public long getLowXGridOffset() { return gridLx; }	/**	 * Method to return the high-X offset of this SizeOffset in grid units.	 * The high-X offset is the distance from the right side to the acutal bounds.	 * @return the high-X offset of this SizeOffset.	 */	public long getHighXGridOffset() { return gridHx; }	/**	 * Method to return the low-Y offset of this SizeOffset in grid units.	 * The low-Y offset is the distance from the bottom side to the acutal bounds.	 * @return the low-Y offset of this SizeOffset.	 */	public long getLowYGridOffset() { return gridLy; }	/**	 * Method to return the high-Y offset of this SizeOffset in grid units.	 * The high-Y offset is the distance from the top side to the acutal bounds.	 * @return the high-Y offset of this SizeOffset.	 */	public long getHighYGridOffset() { return gridHy; }	/**	 * Returns a printable version of this SizeOffset.	 * @return a printable version of this SizeOffset.	 */	public String toString()	{		return "SizeOffset {X:[" + lx + "," + hx + "] Y:[" + ly + "," + hy + "]}";	}    /**     * Returns a Rectangle2D representing bounds modified by     * this size offset.  Note here that I use the convention that     * +x is to the left and +y is up, whereas in Java components     * +y is down.     * @param bounds the bounds to be modified     * @return the modified bounds     */    public Rectangle2D modifyBounds(Rectangle2D bounds)    {        return new Rectangle2D.Double(bounds.getX()+lx, bounds.getY()+ly,                bounds.getWidth()-lx-hx, bounds.getHeight()-ly-hy);    }}

⌨️ 快捷键说明

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