oaBlockage.h

Go to the documentation of this file.
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

Return to top of page