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

📄 oadefoutvia.cpp

📁 openaccess读def,lef文件所用的源代码
💻 CPP
字号:
// *****************************************************************************// *****************************************************************************// DefOutVias.cpp//// Functions to handle DEF VIA constructs for the 'DefOut' translator.//// *****************************************************************************// Except as specified in the OpenAccess terms of use of Cadence or Silicon// Integration Initiative, this material may not be copied, modified,// re-published, uploaded, executed, or distributed in any way, in any medium,// in whole or in part, without prior written permission from Cadence.////                Copyright 2002-2005 Cadence Design Systems, Inc.//                           All Rights Reserved.////  $Author: sailajad $//  $Revision: 1.46 $//  $Date: 2005/07/17 01:55:02 $//  $State: Exp $// *****************************************************************************// *****************************************************************************#include "oaLefDef.h"BEGIN_LEFDEF_NAMESPACE// *****************************************************************************// DefOutVia::DefOutVia()// DefOutVia::~DefOutVia()//// This is the constructor for the DefOutVia class. // *****************************************************************************DefOutVia::DefOutVia(DefOut &translator):   defOut(translator){    translator.defOutVia = this;}DefOutVia::~DefOutVia(){}// *****************************************************************************// DefOutVia::write()//// This function writes the via construct for this viaHeader.// *****************************************************************************voidDefOutVia::write(oaViaHeader	*viaHeaderIn){    viaHeader = viaHeaderIn;        oaUInt4	num = defOut.addGenVia(viaHeader);    oaString	name;    viaHeader->getViaDefName(name);    if (viaHeader->getType() == oacStdViaHeaderType) {	// Add a unique number to the end of the name	oaString    buf(64);	buf.format("_%d", num);	name += buf;    }    defOut.output("- %s", (const char *) name);    defOut.incIndent();    if (viaHeader->getType() == oacStdViaHeaderType) {	if (defOut.getOptions()->getVersion() > cLefDefVersion55) {	    writeStdVia();	} else {	    oaViaParam param;	    ((oaStdViaHeader *) viaHeader)->getParams(param);	    writePattern(param);	    writeShapes();	}    } else {	writeShapes();    }    defOut.decIndent();    defOut.outNoIndent(" ;\n");}voidDefOutVia::writeStdVia(){    oaString	viaRuleName;    viaHeader->getViaDefName(viaRuleName);    defOut.outNoIndent("\n");    defOut.output("+ VIARULE %s\n", (const char*) viaRuleName);    oaViaParam	params;    ((oaStdViaHeader*) viaHeader)->getParams(params);    defOut.output("+ CUTSIZE %i %i\n", 		  params.getCutWidth(), 		  params.getCutHeight());    oaViaDef	*viaDef = viaHeader->getViaDef();    oaString	layer1Name;    oaString	layerCutName;    oaString	layer2Name;    viaDef->getLayer1()->getName(layer1Name);    defOut.getLayer(params.getCutLayer())->getName(layerCutName);    viaDef->getLayer2()->getName(layer2Name);    defOut.output("+ LAYERS %s %s %s\n", (const char*) layer1Name, 		  (const char*) layerCutName, (const char*) layer2Name);    defOut.output("+ CUTSPACING %d %d\n", 		  params.getCutSpacing().x(), 		  params.getCutSpacing().y());    defOut.output("+ ENCLOSURE %d %d %d %d\n", 		  params.getLayer1Enc().x(), 		  params.getLayer1Enc().y(), 		  params.getLayer2Enc().x(), 		  params.getLayer2Enc().y());    defOut.output("+ ROWCOL %d %d", params.getCutRows(), params.getCutColumns());        if (params.getOriginOffset() != oaVector(0, 0)) {	defOut.outNoIndent("\n");	defOut.output("+ ORIGIN %d %d", 		      params.getOriginOffset().x(), 		      params.getOriginOffset().y());    }    if (params.getLayer1Offset() != oaVector(0, 0)	|| params.getLayer2Offset() != oaVector(0, 0)) {	defOut.outNoIndent("\n");	defOut.output("+ OFFSET %d %d %d %d", 		      params.getLayer1Offset().x(), 		      params.getLayer1Offset().y(), 		      params.getLayer2Offset().x(), 		      params.getLayer2Offset().y());    }    if (!params.hasDefaultCutPattern()) {	defOut.outNoIndent("\n");	defOut.output("+ PATTERN ");	defOut.writeCutPattern(params);    }}// *****************************************************************************// DefOutVia::writePattern()//// This function writes the via pattern name for this viaHeader.// *****************************************************************************voidDefOutVia::writePattern(const oaViaParam &params){    oaString pattern(128);    viaHeader->getViaDefName(pattern);    defOut.outNoIndent(" + PATTERNNAME %s", (const char *) pattern);}// *****************************************************************************// DefOutVia::writeShapes()//// This function writes the via cut rectangles for the given via parameters.// *****************************************************************************voidDefOutVia::writeShapes(){    oaDesign	*viaDesign = viaHeader->getMaster();    if (!viaDesign || !viaDesign->getTopBlock()) {	oaString viaName;	viaHeader->getViaDefName(viaName);	throw LefDefError(cViaMasterNotFound, (const char*) viaName);    }        oaIter<oaShape> shapeIter(viaDesign->getTopBlock()->getShapes());    while (oaShape *shape = shapeIter.getNext()) {	oaString layerName;	defOut.getLayer(shape->getLayerNum())->getName(layerName);    	if (shape->getType() == oacPolygonType) {	    oaPointArray    points;	    ((oaPolygon*) shape)->getPoints(points);	    defOut.outNoIndent("\n");	    defOut.output("+ POLYGON %s", (const char*) layerName);	    for (oaUInt4 i = 0; i < points.getNumElements(); i++) {		defOut.outNoIndent(" ( %i %i )",				   points[i].x(), points[i].y());	    }	} else if (shape->getType() == oacRectType) {	    oaBox   bBox;	    shape->getBBox(bBox);	    defOut.outNoIndent("\n");	    defOut.output("+ RECT %s ( %i %i ) ( %i %i )",			  (const char *) layerName,			  bBox.left(), bBox.bottom(), bBox.right(), bBox.top());	}   }    viaDesign->close();}END_LEFDEF_NAMESPACE

⌨️ 快捷键说明

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