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

📄 view3dwindow.java

📁 The ElectricTM VLSI Design System is an open-source Electronic Design Automation (EDA) system that c
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
	 * @param ep the ElectricPrinter object.	 * @param pageFormat information about the print job.     * @return false for now.	 */    public boolean initializePrinting(ElectricPrinter ep, PageFormat pageFormat) { return false;}	/**	 * Method to print window using offscreen canvas.	 * @param ep printable object.	 * @return the image to print (null on error).	 */	public BufferedImage getPrintImage(ElectricPrinter ep)    {		BufferedImage bImage = ep.getBufferedImage();        //int OFF_SCREEN_SCALE = 3;		// might have problems if visibility of some layers is switched off		if (bImage == null)		{            //Forcint the repaint            canvas.writePNG_ = true;            canvas.repaint();            bImage = canvas.img;//			// Create the off-screen Canvas3D object//			if (offScreenCanvas3D == null)//			{//				offScreenCanvas3D = new J3DUtils.OffScreenCanvas3D(SimpleUniverse.getPreferredConfiguration(), true);//				// attach the offscreen canvas to the view//				u.getViewer().getView().addCanvas3D(offScreenCanvas3D);//				// Set the off-screen size based on a scale3D factor times the//				// on-screen size//				Screen3D sOn = canvas.getScreen3D();//				Screen3D sOff = offScreenCanvas3D.getScreen3D();//				Dimension dim = sOn.getSize();//				dim.width *= OFF_SCREEN_SCALE;//				dim.height *= OFF_SCREEN_SCALE;//				sOff.setSize(dim);//				sOff.setPhysicalScreenWidth(sOn.getPhysicalScreenWidth() * OFF_SCREEN_SCALE);//				sOff.setPhysicalScreenHeight(sOn.getPhysicalScreenHeight() * OFF_SCREEN_SCALE);//				bImage = new BufferedImage(dim.width, dim.height, BufferedImage.TYPE_INT_ARGB);//				ImageComponent2D buffer = new ImageComponent2D(ImageComponent.FORMAT_RGBA, bImage);////				offScreenCanvas3D.setOffScreenBuffer(buffer);//			}//			offScreenCanvas3D.renderOffScreenBuffer();//			offScreenCanvas3D.waitForOffScreenRendering();//			bImage = offScreenCanvas3D.getOffScreenBuffer().getImage();			ep.setBufferedImage(bImage);			//Need to remove offscreen after that			//u.getViewer().getView().removeCanvas3D(offScreenCanvas3D);		}		Graphics2D g2d = (Graphics2D)ep.getGraphics();		// In case of printing		if (g2d != null)		{			AffineTransform t2d = new AffineTransform();			t2d.translate(ep.getPageFormat().getImageableX(), ep.getPageFormat().getImageableY());			double xscale  = ep.getPageFormat().getImageableWidth() / (double)bImage.getWidth();			double yscale  = ep.getPageFormat().getImageableHeight() / (double)bImage.getHeight();			double scale = Math.min(xscale, yscale);			t2d.scale(scale, scale);			try {				ImageObserver obj = ep;				g2d.drawImage(bImage, t2d, obj);			}			catch (Exception ex) {				ex.printStackTrace();				return null;			}		}        return bImage;    }	// ************************************* EVENT LISTENERS *************************************	//private int lastXPosition, lastYPosition;	/**	 * Respond to an action performed, in this case change the current cell	 * when the user clicks on an entry in the upHierarchy popup menu.	 */	public void actionPerformed(ActionEvent e)	{		JMenuItem source = (JMenuItem)e.getSource();		// extract library and cell from string		Cell cell = (Cell)Cell.findNodeProto(source.getText());		if (cell == null) return;		setCell(cell, VarContext.globalContext, null);	}	// the MouseListener events	public void mousePressed(MouseEvent evt)	{		//lastXPosition = evt.getX();   lastYPosition = evt.getY();		/*		View3DWindow wnd = (View3DWindow)evt.getSource();		WindowFrame.setCurrentWindowFrame(wnd.wf);		WindowFrame.curMouseListener.mousePressed(evt);		*/	}	public void mouseReleased(MouseEvent evt)	{		//lastXPosition = evt.getX();   lastYPosition = evt.getY();		//WindowFrame.curMouseListener.mouseReleased(evt);	}    /**     * Method to rotate individual groups     * @param values array of values     */    public J3DUtils.ThreeDDemoKnot moveAndRotate(double[] values)    {        Vector3f newPos = new Vector3f((float)values[0], (float)values[1], (float)values[2]);        double factor = 10;        Quat4f quaf = J3DUtils.createQuaternionFromEuler(factor*values[3], factor*values[4], factor*values[5]);        Transform3D currXform = new Transform3D();        for (Iterator<NodeInst> it = cell.getNodes(); it.hasNext();)        {            NodeInst ni = it.next();            Variable var = ni.getVar("3D_NODE_DEMO");            if (var == null) continue;            List<Node> list = electricObjectMap.get(ni);            for (int i = 0; i < list.size(); i++)            {                Node obj = list.get(i);                TransformGroup grp = transformGroupMap.get(obj);                grp.getTransform(currXform);                currXform.setTranslation(newPos);//                tmpVec.set(newPos);//                boolean invert = true;//                if (invert) {//                    currXform.mul(currXform, tmpVec);//                } else {//                    currXform.mul(tmpVec, currXform);//                }                grp.setTransform(currXform);                grp.getTransform(currXform);                Matrix4d mat = new Matrix4d();                // Remember old matrix                currXform.get(mat);                //tmpVec.setEuler(rotation);                // Translate to rotation point                currXform.setTranslation(new Vector3d(values[6], values[7], values[8]));                currXform.setRotation(quaf);//                if (invert) {//                currXform.mul(currXform, tmpVec);//                } else {//                currXform.mul(tmpVec, currXform);//                }                // Set old translation back                Vector3d translation = new                Vector3d(mat.m03, mat.m13, mat.m23);                currXform.setTranslation(translation);                // Update xform                grp.setTransform(currXform);            }        }        return(new J3DUtils.ThreeDDemoKnot(1, newPos, quaf, null));    }	public void mouseClicked(MouseEvent evt)	{		//lastXPosition = evt.getX();   lastYPosition = evt.getY();		//WindowFrame.curMouseListener.mouseClicked(evt);		pickCanvas.setShapeLocation(evt);//		Transform3D t = new Transform3D();//		Transform3D t1 = new Transform3D();//		canvas.getImagePlateToVworld(t);//		canvas.getVworldToImagePlate(t1);		PickResult result = pickCanvas.pickClosest();		// Clean previous selection		selectObject(false, true);		if (result != null)		{		   Shape3D s = (Shape3D)result.getNode(PickResult.SHAPE3D);						if (s != null)			{				highlighter.addObject(new HighlightShape3D(s), cell);				selectObject(true, true);			}		}        WindowFrame.curMouseListener.mouseClicked(evt);	}	public void mouseEntered(MouseEvent evt)	{		//lastXPosition = evt.getX();   lastYPosition = evt.getY();		//showCoordinates(evt);		//WindowFrame.curMouseListener.mouseEntered(evt);	}	public void mouseExited(MouseEvent evt)	{		//lastXPosition = evt.getX();   lastYPosition = evt.getY();		//WindowFrame.curMouseListener.mouseExited(evt);	}	// the MouseMotionListener events	public void mouseMoved(MouseEvent evt)	{		//lastXPosition = evt.getX();   lastYPosition = evt.getY();		//showCoordinates(evt);		//WindowFrame.curMouseMotionListener.mouseMoved(evt);	}	public void mouseDragged(MouseEvent evt)	{		//lastXPosition = evt.getX();   lastYPosition = evt.getY();		//showCoordinates(evt);		//WindowFrame.curMouseMotionListener.mouseDragged(evt);	}	public void showCoordinates(MouseEvent evt)	{		View3DWindow wnd = (View3DWindow)evt.getSource();		if (wnd.getCell() == null) StatusBar.setCoordinates(null, wnd.wf); else		{			Point2D pt = wnd.screenToDatabase(evt.getX(), evt.getY());			UserInterface ui = Job.getUserInterface();			ui.alignToGrid(pt);			StatusBar.setCoordinates("(" + TextUtils.formatDouble(pt.getX(), 2) + ", " + TextUtils.formatDouble(pt.getY(), 2) + ")", wnd.wf);		}	}	// the MouseWheelListener events	public void mouseWheelMoved(MouseWheelEvent evt) { WindowFrame.curMouseWheelListener.mouseWheelMoved(evt); }	// the KeyListener events	public void keyPressed(KeyEvent evt) {		System.out.println("Here keyPressed");WindowFrame.curKeyListener.keyPressed(evt); }	public void keyReleased(KeyEvent evt) {		System.out.println("Here keyReleased");WindowFrame.curKeyListener.keyReleased(evt); }	public void keyTyped(KeyEvent evt) {		System.out.println("Here keyTyped");WindowFrame.curKeyListener.keyTyped(evt); }	public Point getLastMousePosition()	{		//return new Point(lastXPosition, lastYPosition);		return new Point(0,0);	}	// ************************************* COORDINATES *************************************	/**	 * Method to convert a screen coordinate to database coordinates.	 * @param screenX the X coordinate (on the screen in this EditWindow).	 * @param screenY the Y coordinate (on the screen in this EditWindow).	 * @return the coordinate of that point in database units.	 */	public Point2D screenToDatabase(int screenX, int screenY)	{		double dbX = 0, dbY = 0;		/*		= (screenX - sz.width/2) / scale3D + offx;		double dbY = (sz.height/2 - screenY) / scale3D + offy;		*/		return new Point2D.Double(dbX, dbY);	}    /*****************************************************************************     *          To navigate in tree and create 3D objects                           *     *****************************************************************************/	private class View3DEnumerator extends HierarchyEnumerator.Visitor    {        public View3DEnumerator(Cell cell)		{            // Checking if field poly and gate poly are not aligned.            // If not, the extra polyhedra are generated to build like a LoCos shape            Technology tech = cell.getTechnology();            Layer poly = tech.findLayerFromFunction(Layer.Function.POLY1, -1);            Layer gate = tech.findLayerFromFunction(Layer.Function.GATE, -1);            if (poly != null && gate != null && !DBMath.areEquals(poly.getDistance(), gate.getDistance()))            {                locosShape = true;            }        }		/**		 */		public boolean enterCell(HierarchyEnumerator.CellInfo info)		{            if (job != null && job.checkAbort()) return false;            if (!isSizeLimitOK(info.getCell().getNumArcs() + objTrans.numChildren())) return false;  // limit reached            AffineTransform rTrans = info.getTransformToRoot();			for(Iterator<ArcInst> it = info.getCell().getArcs(); it.hasNext(); )			{				addArc(it.next(), rTrans, objTrans);			}			return true;		}		/**		 */		public void exitCell(HierarchyEnumerator.CellInfo info) {}		/**		 */		public boolean visitNodeInst(Nodable no, HierarchyEnumerator.CellInfo info)		{            if (reachLimit) return false;            if (job != null && job.checkAbort()) return false;			NodeInst ni = no.getNodeInst();			AffineTransform trans = ni.rotateOutAboutTrueCenter();			AffineTransform root = info.getTransformToRoot();			if (root.getType() != AffineTransform.TYPE_IDENTITY)				trans.preConcatenate(root);            TransformGroup grp = objTrans;            if (oneTransformPerNode)            {                grp = new TransformGroup();                grp.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);		        grp.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);                grp.setCapability(TransformGroup.ALLOW_CHILDREN_EXTEND);                grp.setCapability(TransformGroup.ALLOW_CHILDREN_READ);                grp.setCapability(TransformGroup.ALLOW_CHILDREN_WRITE);                objTrans.addChild(grp);            }			addNode(ni, trans, grp);            if (!isSizeLimitOK(grp.numChildren())) return false;  // limit reached			// For cells, it should go into the hierarchy            return ni.isExpanded();

⌨️ 快捷键说明

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