📄 oadefoutvia.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 ¶ms){ 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 + -