00001 // ***************************************************************************** 00002 // ***************************************************************************** 00003 // oaBlockage.h 00004 // 00005 // This file contains the definition for the oaBlockage and related classes. 00006 // 00007 // oaBlockageType 00008 // This class indicates a the usage of the blockage 00009 // 00010 // oaBlockage 00011 // The oaBlockage class is the base class for the blockages types below. 00012 // oaBlockage objects are used to indicate the area in which certain 00013 // objects may not be located. 00014 // 00015 // oaAreaBlockage 00016 // The oaAreaBlockage is a blockage for which the shape is specified by 00017 // a point array. 00018 // 00019 // oaAreaHalo 00020 // The oaAreaHalo is a blockage for which the shape is derived from a 00021 // prBoundary shape and a set of offsets. 00022 // 00023 // oaLayerBlockage 00024 // The oaLayerBlockage is a blockage that has an associated layer. The 00025 // blockage shape is specified by a point array. 00026 // 00027 // oaLayerHalo 00028 // The oaLayerHalo is a blockage that has an associated prBoundary. The 00029 // blockage shape is derived from the prBoundry shape and a set of offsets. 00030 // 00031 // oaLayerRangeBlockage 00032 // The oaLayerRangeBlockage is a blockage that has an associated set of 00033 // layers. The blockage shape is specified by a point array. 00034 // 00035 // oaLayerRangeHalo 00036 // The oaLayerRangeHalo is a blockage that has an associated prBoundary. 00037 // Its shape is derived from the prBoundry shape and a set of offsets. It 00038 // is associated with a set of layers. 00039 // 00040 // ***************************************************************************** 00041 // Except as specified in the OpenAccess terms of use of Cadence or Silicon 00042 // Integration Initiative, this material may not be copied, modified, 00043 // re-published, uploaded, executed, or distributed in any way, in any medium, 00044 // in whole or in part, without prior written permission from Cadence. 00045 // 00046 // Copyright 2002-2008 Cadence Design Systems, Inc. 00047 // All Rights Reserved. 00048 // 00049 // $Author: icftcm $ 00050 // $Revision: #1 $ 00051 // $Date: 2010/08/09 $ 00052 // $State: Exp $ 00053 // ***************************************************************************** 00054 // ***************************************************************************** 00055 00056 00057 00058 #if !defined(oaBlockage_P) 00059 #define oaBlockage_P 00060 00061 00062 00063 // ***************************************************************************** 00064 // Nested includes 00065 // ***************************************************************************** 00066 #include "oaPointArray.h" 00067 #include "oaFig.h" 00068 #include "oaLayerHeader.h" 00069 00070 00071 00072 // ***************************************************************************** 00073 // Declare and define types in the OpenAccess namespace. 00074 // ***************************************************************************** 00075 BEGIN_OA_NAMESPACE 00076 00077 00078 00079 // ***************************************************************************** 00080 // oaBlockageTypeEnum 00081 // ***************************************************************************** 00082 #define oavNumBlockageTypes 9 00083 00084 enum oaBlockageTypeEnum { 00085 oacRoutingBlockageType = 0, 00086 oacViaBlockageType = 1, 00087 oacPlacementBlockageType = 2, 00088 oacWiringBlockageType = 3, 00089 oacFillBlockageType = 4, 00090 oacSlotBlockageType = 5, 00091 oacPinBlockageType = 6, 00092 oacFeedthruBlockageType = 7, 00093 oacScreenBlockageType = 8 00094 }; 00095 00096 00097 00098 // ***************************************************************************** 00099 // oaBlockageType 00100 // ***************************************************************************** 00101 class OA_DESIGN_DLL_API oaBlockageType { 00102 public: 00103 oaBlockageType(oaBlockageTypeEnum valueIn); 00104 oaBlockageType(const oaString &name); 00105 00106 #if !defined(OA_DEPRECATED) 00107 const oaString &getName(); 00108 #endif 00109 operator oaBlockageTypeEnum() const; 00110 const oaString &getName() const; 00111 00112 private: 00113 oaBlockageTypeEnum value; 00114 00115 static const oaString names[]; 00116 }; 00117 00118 00119 00120 // ***************************************************************************** 00121 // oaBlockage 00122 // ***************************************************************************** 00123 class OA_DESIGN_DLL_API oaBlockage : public oaFig { 00124 public: 00125 oaBlockageType getBlockageType() const; 00126 oaBlockObject *getOwner() const; 00127 oaUInt4 getNumPoints() const; 00128 void getPoints(oaPointArray &points) const; 00129 oaFloat getDensity() const; 00130 00131 void setOwner(oaBlockObject *owner); 00132 void setPushedDown(oaBoolean flag); 00133 void setDensity(oaFloat density); 00134 00135 oaBoolean isPushedDown() const; 00136 00137 enum {dtIndex = oacBlockageDataType}; 00138 }; 00139 00140 00141 00142 // ***************************************************************************** 00143 // oaAreaBlockage 00144 // ***************************************************************************** 00145 class OA_DESIGN_DLL_API oaAreaBlockage : public oaBlockage { 00146 public: 00147 static oaAreaBlockage *create(oaBlock *block, 00148 const oaPointArray &points, 00149 oaBlockObject *owner = NULL); 00150 00151 oaBoolean isSoft() const; 00152 00153 void setPoints(const oaPointArray &points); 00154 void setSoft(oaBoolean soft); 00155 00156 void transform(oaDouble scale, 00157 oaDouble angle); 00158 }; 00159 00160 00161 00162 // ***************************************************************************** 00163 // oaAreaHalo 00164 // ***************************************************************************** 00165 class OA_DESIGN_DLL_API oaAreaHalo : public oaBlockage { 00166 public: 00167 static oaAreaHalo *create(oaBlockObject *owner, 00168 oaDist left = 0, 00169 oaDist bottom = 0, 00170 oaDist right = 0, 00171 oaDist top = 0); 00172 static oaAreaHalo *find(const oaBlockObject *owner); 00173 00174 void getOffsets(oaDist &left, 00175 oaDist &bottom, 00176 oaDist &right, 00177 oaDist &top) const; 00178 oaBoolean isSoft() const; 00179 00180 void setOffsets(oaDist left, 00181 oaDist bottom, 00182 oaDist right, 00183 oaDist top); 00184 void setSoft(oaBoolean soft); 00185 }; 00186 00187 00188 00189 // ***************************************************************************** 00190 // oaLayerBlockage 00191 // ***************************************************************************** 00192 class OA_DESIGN_DLL_API oaLayerBlockage : public oaBlockage { 00193 public: 00194 static oaLayerBlockage *create(oaBlock *block, 00195 oaBlockageType type, 00196 oaLayerNum layer, 00197 const oaPointArray &points, 00198 oaBlockObject *owner = NULL); 00199 00200 oaLayerNum getLayerNum() const; 00201 oaLayerHeader *getLayerHeader() const; 00202 oaDist getEffectiveWidth() const; 00203 oaBoolean hasEffectiveWidth() const; 00204 oaDist getSpacing() const; 00205 oaBoolean hasSpacing() const; 00206 oaBoolean allowPGNet() const; 00207 00208 void setLayerNum(oaLayerNum layerNum); 00209 void setPoints(const oaPointArray &points); 00210 void setEffectiveWidth(oaDist width); 00211 void unsetEffectiveWidth(); 00212 void setSpacing(oaDist spacing); 00213 void unsetSpacing(); 00214 void setAllowPGNet(oaBoolean allowPGNet); 00215 00216 void transform(oaDouble scale, 00217 oaDouble angle); 00218 }; 00219 00220 00221 00222 // ***************************************************************************** 00223 // oaLayerHalo 00224 // ***************************************************************************** 00225 class OA_DESIGN_DLL_API oaLayerHalo : public oaBlockage { 00226 public: 00227 static oaLayerHalo *create(oaBlockObject *owner, 00228 oaBlockageType type, 00229 oaLayerNum layer, 00230 oaDist left = 0, 00231 oaDist bottom = 0, 00232 oaDist right = 0, 00233 oaDist top = 0); 00234 00235 oaLayerNum getLayerNum() const; 00236 oaLayerHeader *getLayerHeader() const; 00237 void getOffsets(oaDist &left, 00238 oaDist &bottom, 00239 oaDist &right, 00240 oaDist &top) const; 00241 00242 void setLayerNum(oaLayerNum layerNum); 00243 void setOffsets(oaDist left, 00244 oaDist bottom, 00245 oaDist right, 00246 oaDist top); 00247 }; 00248 00249 00250 00251 // ***************************************************************************** 00252 // oaLayerRangeBlockage 00253 // ***************************************************************************** 00254 class OA_DESIGN_DLL_API oaLayerRangeBlockage : public oaBlockage { 00255 public: 00256 static oaLayerRangeBlockage *create(oaBlock *block, 00257 oaBlockageType type, 00258 const oaIntRange &maskRange, 00259 const oaPointArray &points, 00260 oaBlockObject *owner = NULL); 00261 00262 void getMaskRange(oaIntRange &maskRange) const; 00263 void getLayerHeaders(oaLayerHeaderArray &layerHeaders) const; 00264 00265 void setMaskRange(const oaIntRange &maskRange); 00266 void setPoints(const oaPointArray &points); 00267 void transform(oaDouble scale, 00268 oaDouble angle); 00269 }; 00270 00271 00272 00273 // ***************************************************************************** 00274 // oaLayerRangeHalo 00275 // ***************************************************************************** 00276 class OA_DESIGN_DLL_API oaLayerRangeHalo : public oaBlockage { 00277 public: 00278 static oaLayerRangeHalo *create(oaBlockObject *owner, 00279 oaBlockageType type, 00280 const oaIntRange &maskRange, 00281 oaDist left = 0, 00282 oaDist bottom = 0, 00283 oaDist right = 0, 00284 oaDist top = 0); 00285 00286 void getMaskRange(oaIntRange &maskRange) const; 00287 void getLayerHeaders(oaLayerHeaderArray &layerHeaders) const; 00288 void getOffsets(oaDist &left, 00289 oaDist &bottom, 00290 oaDist &right, 00291 oaDist &top) const; 00292 00293 void setMaskRange(const oaIntRange &maskRange); 00294 void setOffsets(oaDist left, 00295 oaDist bottom, 00296 oaDist right, 00297 oaDist top); 00298 }; 00299 00300 00301 00302 // ***************************************************************************** 00303 // Design Traits. 00304 // ***************************************************************************** 00305 template<> 00306 class oaTraits<oaBlockage> { 00307 public: 00308 typedef oaFig parentType; 00309 typedef oaBlockageModTypeEnum modTypeType; 00310 enum {domain = oacBlockDomain}; 00311 enum {dbType = oacDesignDBType}; 00312 enum {isMultiDomain = false}; 00313 enum {isConcrete = false}; 00314 enum {dtIndex = oacBlockageDataType}; 00315 enum {dataTypeEnumVal = oacBlockageDataType}; 00316 enum {abstractTypeEnumVal = oacBlockageType}; 00317 }; 00318 00319 template<> 00320 class oaTraits<oaAreaBlockage> { 00321 public: 00322 typedef oaBlockageModTypeEnum modTypeType; 00323 typedef oaBlockage parentType; 00324 enum {dtIndex = oacBlockageDataType}; 00325 enum {dataTypeEnumVal = oacBlockageDataType}; 00326 enum {domain = oacBlockDomain}; 00327 enum {dbType = oacDesignDBType}; 00328 enum {isMultiDomain = false}; 00329 enum {isConcrete = true}; 00330 enum {objectTypeEnumVal = oacAreaBlockageType}; 00331 }; 00332 00333 template<> 00334 class oaTraits<oaAreaHalo> { 00335 public: 00336 typedef oaBlockageModTypeEnum modTypeType; 00337 typedef oaBlockage parentType; 00338 enum {dtIndex = oacBlockageDataType}; 00339 enum {dataTypeEnumVal = oacBlockageDataType}; 00340 enum {domain = oacBlockDomain}; 00341 enum {dbType = oacDesignDBType}; 00342 enum {isMultiDomain = false}; 00343 enum {isConcrete = true}; 00344 enum {objectTypeEnumVal = oacAreaHaloType}; 00345 }; 00346 00347 template<> 00348 class oaTraits<oaLayerBlockage> { 00349 public: 00350 typedef oaBlockageModTypeEnum modTypeType; 00351 typedef oaBlockage parentType; 00352 enum {dtIndex = oacBlockageDataType}; 00353 enum {dataTypeEnumVal = oacBlockageDataType}; 00354 enum {domain = oacBlockDomain}; 00355 enum {dbType = oacDesignDBType}; 00356 enum {isMultiDomain = false}; 00357 enum {isConcrete = true}; 00358 enum {objectTypeEnumVal = oacLayerBlockageType}; 00359 }; 00360 00361 template<> 00362 class oaTraits<oaLayerHalo> { 00363 public: 00364 typedef oaBlockageModTypeEnum modTypeType; 00365 typedef oaBlockage parentType; 00366 enum {dtIndex = oacBlockageDataType}; 00367 enum {dataTypeEnumVal = oacBlockageDataType}; 00368 enum {domain = oacBlockDomain}; 00369 enum {dbType = oacDesignDBType}; 00370 enum {isMultiDomain = false}; 00371 enum {isConcrete = true}; 00372 enum {objectTypeEnumVal = oacLayerHaloType}; 00373 }; 00374 00375 template<> 00376 class oaTraits<oaLayerRangeBlockage> { 00377 public: 00378 typedef oaBlockageModTypeEnum modTypeType; 00379 typedef oaBlockage parentType; 00380 enum {dtIndex = oacBlockageDataType}; 00381 enum {dataTypeEnumVal = oacBlockageDataType}; 00382 enum {domain = oacBlockDomain}; 00383 enum {dbType = oacDesignDBType}; 00384 enum {isMultiDomain = false}; 00385 enum {isConcrete = true}; 00386 enum {objectTypeEnumVal = oacLayerRangeBlockageType}; 00387 }; 00388 00389 template<> 00390 class oaTraits<oaLayerRangeHalo> { 00391 public: 00392 typedef oaBlockageModTypeEnum modTypeType; 00393 typedef oaBlockage parentType; 00394 enum {dtIndex = oacBlockageDataType}; 00395 enum {dataTypeEnumVal = oacBlockageDataType}; 00396 enum {domain = oacBlockDomain}; 00397 enum {dbType = oacDesignDBType}; 00398 enum {isMultiDomain = false}; 00399 enum {isConcrete = true}; 00400 enum {objectTypeEnumVal = oacLayerRangeHaloType}; 00401 }; 00402 00403 00404 00405 END_OA_NAMESPACE 00406 00407 #endif
Copyright © 2002 - 2010 Cadence Design Systems, Inc.
All Rights Reserved.