mirror of https://github.com/KLayout/klayout.git
Merge remote-tracking branch 'remotes/origin/master' into dvb
This commit is contained in:
commit
52fb8b0f65
43
.travis.yml
43
.travis.yml
|
|
@ -265,7 +265,7 @@ matrix:
|
|||
packages:
|
||||
- ccache
|
||||
env:
|
||||
- MATRIX_EVAL="brew update; brew install sashkab/python/python36; brew link --force --overwrite python36; shopt -s expand_aliases; alias python='/usr/local/opt/python36/bin/python3.6'; alias pip='/usr/local/opt/python36/bin/pip3.6';"
|
||||
- MATRIX_EVAL="brew update; brew tap sashkab/python; brew install sashkab/python/python36; brew link --force --overwrite python36; shopt -s expand_aliases; alias python='/usr/local/opt/python36/bin/python3.6'; alias pip='/usr/local/opt/python36/bin/pip3.6';"
|
||||
- ARCHFLAGS="-std=c++11"
|
||||
- PIP_UPDATE="1"
|
||||
- PYTHON_BUILD=true
|
||||
|
|
@ -280,25 +280,25 @@ matrix:
|
|||
packages:
|
||||
- ccache
|
||||
env:
|
||||
- MATRIX_EVAL="brew update; brew install sashkab/python/python35; brew link --force --overwrite python35; shopt -s expand_aliases; alias python='/usr/local/opt/python35/bin/python3.5'; alias pip='/usr/local/opt/python35/bin/pip3.5';"
|
||||
- MATRIX_EVAL="brew update; brew tap sashkab/python; brew install sashkab/python/python35; brew link --force --overwrite python35; shopt -s expand_aliases; alias python='/usr/local/opt/python35/bin/python3.5'; alias pip='/usr/local/opt/python35/bin/pip3.5';"
|
||||
- ARCHFLAGS="-std=c++11"
|
||||
- PIP_UPDATE="1"
|
||||
- PYTHON_BUILD=true
|
||||
|
||||
# - name: "klayout python3.4.9 osx10.13"
|
||||
- name: "cp34-cp34m-macosx_10_13_x86_64.whl"
|
||||
os: osx
|
||||
osx_image: xcode9.4 # macOS 10.13
|
||||
cache: ccache
|
||||
addons:
|
||||
homebrew:
|
||||
packages:
|
||||
- ccache
|
||||
env:
|
||||
- MATRIX_EVAL="brew update; brew install sashkab/python/python34; brew link --force --overwrite python34; shopt -s expand_aliases; alias python='/usr/local/opt/python34/bin/python3.4'; alias pip='/usr/local/opt/python34/bin/pip3.4';"
|
||||
- ARCHFLAGS="-std=c++11"
|
||||
- PIP_UPDATE="1"
|
||||
- PYTHON_BUILD=true
|
||||
# # - name: "klayout python3.4.9 osx10.13"
|
||||
# - name: "cp34-cp34m-macosx_10_13_x86_64.whl"
|
||||
# os: osx
|
||||
# osx_image: xcode9.4 # macOS 10.13
|
||||
# cache: ccache
|
||||
# addons:
|
||||
# homebrew:
|
||||
# packages:
|
||||
# - ccache
|
||||
# env:
|
||||
# - MATRIX_EVAL="brew update; brew tap sashkab/python; brew install sashkab/python/python34; brew link --force --overwrite python34; shopt -s expand_aliases; alias python='/usr/local/opt/python34/bin/python3.4'; alias pip='/usr/local/opt/python34/bin/pip3.4';"
|
||||
# - ARCHFLAGS="-std=c++11"
|
||||
# - PIP_UPDATE="1"
|
||||
# - PYTHON_BUILD=true
|
||||
|
||||
# - name: "klayout python3 osx10.12"
|
||||
- name: "cp37-cp37m-macosx_10_12_x86_64.whl"
|
||||
|
|
@ -555,6 +555,7 @@ script:
|
|||
python testdata/pymod/import_db.py;
|
||||
python testdata/pymod/import_rdb.py;
|
||||
python testdata/pymod/import_tl.py;
|
||||
python testdata/pymod/import_lib.py;
|
||||
python testdata/pymod/pya_tests.py;
|
||||
fi
|
||||
fi
|
||||
|
|
@ -565,6 +566,7 @@ script:
|
|||
python testdata/pymod/import_db.py;
|
||||
python testdata/pymod/import_rdb.py;
|
||||
python testdata/pymod/import_tl.py;
|
||||
python testdata/pymod/import_lib.py;
|
||||
python testdata/pymod/pya_tests.py;
|
||||
klayout_version=$(python -c 'import setup; print(setup.Config().version())');
|
||||
mkdir -p deploy/dist-pymod/$klayout_version;
|
||||
|
|
@ -578,4 +580,13 @@ script:
|
|||
fi
|
||||
|
||||
after_success:
|
||||
# upload to dropbox
|
||||
# need DROPBOX_OAUTH_BEARER environment variable
|
||||
- dropbox-deployment
|
||||
|
||||
# uploading to pypi using twine
|
||||
# need TWINE_USERNAME, TWINE_PASSWORD and TWINE_REPOSITORY_URL env variable
|
||||
- if [ "$PYTHON_BUILD" = true ] || [ "$DOCKER_BUILD" = true ]; then
|
||||
pip install -U twine || sudo pip install -U twine;
|
||||
twine upload --skip-existing deploy/dist-pymod/$klayout_version/*;
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -1315,7 +1315,7 @@
|
|||
* The net tracer now allows to use layer combinations (derived by boolean operations)
|
||||
for the conductive and via layers. See The Net Tracing Feature for details.
|
||||
* A technology management is integrated into Klayout.
|
||||
That allows to switch various settings depending on the choosen technology.
|
||||
That allows to switch various settings depending on the chosen technology.
|
||||
See About Technology Management for details about this feature.
|
||||
* The drawing can now be rotated or flipped without having to modify the layout.
|
||||
This function can be found in the "Display" menu under "Global Transformation".
|
||||
|
|
@ -1865,7 +1865,7 @@
|
|||
* The instance browser now has a "Choose cell" button where the cell can be
|
||||
chosen whose instances will be presented.
|
||||
* For most editing operations, the status bar will now indicate more detailed
|
||||
informations such as move distance.
|
||||
information such as move distance.
|
||||
* Pasted shapes and instances now are selected initially.
|
||||
* Enhanced OASIS compression mode (can be chosen from the options dialog on
|
||||
saving). Reduces file size considerably by creating regular shape arrays if
|
||||
|
|
|
|||
|
|
@ -84,6 +84,7 @@ jobs:
|
|||
python testdata/pymod/import_db.py
|
||||
python testdata/pymod/import_rdb.py
|
||||
python testdata/pymod/import_tl.py
|
||||
python testdata/pymod/import_lib.py
|
||||
python testdata/pymod/pya_tests.py
|
||||
displayName: 'Test KLayout pymod'
|
||||
|
||||
|
|
@ -101,7 +102,7 @@ jobs:
|
|||
artifactName: 'wheel-$(python.version).$(python.architecture)'
|
||||
|
||||
- job: 'Deploy'
|
||||
displayName: 'Combine Windows wheels'
|
||||
displayName: 'Combine Windows wheels and deploy to PyPI'
|
||||
dependsOn: Build
|
||||
pool:
|
||||
vmImage: 'vs2017-win2016' # other options: 'macOS-10.13', 'ubuntu-16.04'
|
||||
|
|
@ -149,4 +150,12 @@ jobs:
|
|||
inputs:
|
||||
pathtoPublish: '$(Build.ArtifactStagingDirectory)'
|
||||
artifactName: 'windows_wheels'
|
||||
- bash: |
|
||||
pip install -U twine
|
||||
twine upload --skip-existing $BUILD_ARTIFACTSTAGINGDIRECTORY/*
|
||||
env:
|
||||
TWINE_USERNAME: $(TWINE_USERNAME)
|
||||
TWINE_PASSWORD: $(TWINE_PASSWORD)
|
||||
TWINE_REPOSITORY_URL: $(TWINE_REPOSITORY_URL)
|
||||
displayName: 'Uploading to PyPI'
|
||||
|
||||
|
|
|
|||
|
|
@ -41,5 +41,7 @@
|
|||
<string>NSApplication</string>
|
||||
<key>NSSupportsAutomaticGraphicsSwitching</key>
|
||||
<true/>
|
||||
<key>NSRequiresAquaSystemAppearance</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,71 @@
|
|||
#!/usr/bin/ruby
|
||||
|
||||
files = []
|
||||
|
||||
glyph_dir = File.join(File.dirname($0), "..", "src", "db", "db", "glyphs")
|
||||
Dir::new(glyph_dir).each do |file|
|
||||
if file !~ /^\./
|
||||
files << file
|
||||
end
|
||||
end
|
||||
|
||||
ccfile = File.join(File.dirname($0), "..", "src", "db", "db", "glyphs.cc")
|
||||
File.open(ccfile, "w") do |out|
|
||||
|
||||
out.puts <<"END"
|
||||
/**
|
||||
* THIS FILE HAS BEEN CREATED AUTOMATICALLY BY "compile_glyphs.rb"
|
||||
* DO NOT EDIT!
|
||||
*/
|
||||
END
|
||||
|
||||
nfile = 0
|
||||
|
||||
files.each do |f|
|
||||
|
||||
nfile += 1
|
||||
|
||||
name = f.sub(/\..*$/, "")
|
||||
|
||||
out.puts("\n// File: #{f}")
|
||||
out.puts("static const char *name_#{nfile} = \"#{name}\";")
|
||||
out.puts("static const char *description_#{nfile} = \"#{f}\";")
|
||||
out.puts("static const uint8_t data_#{nfile}[] = {");
|
||||
|
||||
File.open(File.join(glyph_dir, f), "rb") do |ly|
|
||||
|
||||
bytes = ly.read
|
||||
hex = ""
|
||||
bytes.size.times do |i|
|
||||
hex += "0x%02x, " % bytes[i].ord
|
||||
if i % 8 == 7
|
||||
out.puts " " + hex
|
||||
i = 0
|
||||
hex = ""
|
||||
end
|
||||
end
|
||||
|
||||
if hex != ""
|
||||
out.puts " " + hex
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
out.puts(" 0xff // dummy")
|
||||
out.puts("};")
|
||||
|
||||
end
|
||||
|
||||
out.puts("\nstatic void load_glyphs (std::vector<db::TextGenerator> &generators)\n{\n")
|
||||
|
||||
nfile.times do |n|
|
||||
|
||||
out.puts(" generators.push_back (db::TextGenerator ());")
|
||||
out.puts(" generators.back ().load_from_data ((const char *) data_#{n + 1}, sizeof (data_#{n + 1}) - 1, name_#{n + 1}, description_#{n + 1});\n")
|
||||
|
||||
end
|
||||
|
||||
out.puts("}")
|
||||
|
||||
end
|
||||
|
||||
Binary file not shown.
|
|
@ -1693,7 +1693,7 @@ END
|
|||
|
||||
if ia < n_min_args || !t.init
|
||||
|
||||
ofile.puts(" #{tn} = args.read<#{ta} > (heap);")
|
||||
ofile.puts(" #{tn} = gsi::arg_reader<#{ta} >() (args, heap);")
|
||||
|
||||
else
|
||||
|
||||
|
|
@ -1704,7 +1704,7 @@ END
|
|||
init_expr = init_expr.gsub("%HEAP%", "heap")
|
||||
end
|
||||
|
||||
ofile.puts(" #{tn} = args ? args.read<#{ta} > (heap) : (#{ta})(#{init_expr});")
|
||||
ofile.puts(" #{tn} = args ? gsi::arg_reader<#{ta} >() (args, heap) : gsi::arg_maker<#{ta} >() (#{init_expr}, heap);")
|
||||
|
||||
end
|
||||
|
||||
|
|
|
|||
44
setup.py
44
setup.py
|
|
@ -310,6 +310,10 @@ class Config(object):
|
|||
else:
|
||||
loader_path = '$ORIGIN/..'
|
||||
args += ['-Wl,-rpath,' + loader_path]
|
||||
# default linux shared object compilation uses the '-g' flag,
|
||||
# which generates unnecessary debug information
|
||||
# removing with strip-all during the linking stage
|
||||
args += ['-Wl,--strip-all']
|
||||
return args
|
||||
|
||||
def macros(self):
|
||||
|
|
@ -322,7 +326,7 @@ class Config(object):
|
|||
"""
|
||||
Gets the version string
|
||||
"""
|
||||
return "0.26.0.dev11"
|
||||
return "0.26.0.dev14"
|
||||
|
||||
|
||||
config = Config()
|
||||
|
|
@ -389,11 +393,6 @@ config.add_extension(_pya)
|
|||
_db_path = os.path.join("src", "db", "db")
|
||||
_db_sources = set(glob.glob(os.path.join(_db_path, "*.cc")))
|
||||
|
||||
# Not a real source:
|
||||
# Caveat, in source distribution tarballs from pypi, these files will
|
||||
# not exist. So we need an error-free discard method instead of list's remove.
|
||||
_db_sources.discard(os.path.join(_db_path, "fonts.cc"))
|
||||
|
||||
_db = Library(config.root + '._db',
|
||||
define_macros=config.macros() + [('MAKE_DB_LIBRARY', 1)],
|
||||
include_dirs=[_tl_path, _gsi_path, _db_path],
|
||||
|
|
@ -404,6 +403,22 @@ _db = Library(config.root + '._db',
|
|||
sources=list(_db_sources))
|
||||
config.add_extension(_db)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# _lib dependency library
|
||||
|
||||
_lib_path = os.path.join("src", "lib", "lib")
|
||||
_lib_sources = set(glob.glob(os.path.join(_lib_path, "*.cc")))
|
||||
|
||||
_lib = Library(config.root + '._lib',
|
||||
define_macros=config.macros() + [('MAKE_LIB_LIBRARY', 1)],
|
||||
include_dirs=[_tl_path, _gsi_path, _db_path, _lib_path],
|
||||
extra_objects=[config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_db', _db_path)],
|
||||
language='c++',
|
||||
extra_link_args=config.link_args('_lib'),
|
||||
extra_compile_args=config.compile_args('_lib'),
|
||||
sources=list(_lib_sources))
|
||||
config.add_extension(_lib)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# _rdb dependency library
|
||||
|
||||
|
|
@ -473,6 +488,19 @@ db = Extension(config.root + '.dbcore',
|
|||
extra_link_args=config.link_args('dbcore'),
|
||||
sources=list(db_sources))
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# lib extension library
|
||||
|
||||
lib_path = os.path.join("src", "pymod", "lib")
|
||||
lib_sources = set(glob.glob(os.path.join(lib_path, "*.cc")))
|
||||
|
||||
lib = Extension(config.root + '.libcore',
|
||||
define_macros=config.macros(),
|
||||
include_dirs=[_lib_path, _tl_path, _gsi_path, _pya_path],
|
||||
extra_objects=[config.path_of('_lib', _lib_path), config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_pya', _pya_path)],
|
||||
extra_link_args=config.link_args('libcore'),
|
||||
sources=list(lib_sources))
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# rdb extension library
|
||||
|
||||
|
|
@ -482,7 +510,7 @@ rdb_sources = set(glob.glob(os.path.join(rdb_path, "*.cc")))
|
|||
rdb = Extension(config.root + '.rdbcore',
|
||||
define_macros=config.macros(),
|
||||
|
||||
include_dirs=[_rdb_path, _db_path, _tl_path, _gsi_path, _pya_path],
|
||||
include_dirs=[_rdb_path, _tl_path, _gsi_path, _pya_path],
|
||||
extra_objects=[config.path_of('_rdb', _rdb_path), config.path_of('_tl', _tl_path), config.path_of('_gsi', _gsi_path), config.path_of('_pya', _pya_path)],
|
||||
extra_link_args=config.link_args('rdbcore'),
|
||||
sources=list(rdb_sources))
|
||||
|
|
@ -512,4 +540,4 @@ if __name__ == '__main__':
|
|||
url='https://github.com/klayoutmatthias/klayout',
|
||||
packages=find_packages('src/pymod/distutils_src'),
|
||||
package_dir={'': 'src/pymod/distutils_src'}, # https://github.com/pypa/setuptools/issues/230
|
||||
ext_modules=[_tl, _gsi, _pya, _db, _rdb] + db_plugins + [tl, db, rdb])
|
||||
ext_modules=[_tl, _gsi, _pya, _db, _lib, _rdb] + db_plugins + [tl, db, lib, rdb])
|
||||
|
|
|
|||
|
|
@ -892,16 +892,18 @@ void
|
|||
Service::drag_cancel ()
|
||||
{
|
||||
if (m_drawing) {
|
||||
|
||||
widget ()->ungrab_mouse (this);
|
||||
|
||||
if (mp_active_ruler) {
|
||||
delete mp_active_ruler;
|
||||
mp_active_ruler = 0;
|
||||
}
|
||||
|
||||
m_drawing = false;
|
||||
}
|
||||
|
||||
if (mp_active_ruler) {
|
||||
delete mp_active_ruler;
|
||||
mp_active_ruler = 0;
|
||||
}
|
||||
|
||||
if (mp_transient_ruler) {
|
||||
delete mp_transient_ruler;
|
||||
mp_transient_ruler = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1047,7 +1049,7 @@ Service::begin_move (lay::Editable::MoveMode mode, const db::DPoint &p, lay::ang
|
|||
double l = double (search_range) / widget ()->mouse_event_trans ().mag ();
|
||||
db::DBox search_dbox = db::DBox (p, p).enlarged (db::DVector (l, l));
|
||||
|
||||
// test, wether we are moving a handle of one selected object
|
||||
// test, whether we are moving a handle of one selected object
|
||||
for (std::map<obj_iterator, unsigned int>::const_iterator r = m_selected.begin (); r != m_selected.end (); ++r) {
|
||||
|
||||
obj_iterator ri = r->first;
|
||||
|
|
|
|||
|
|
@ -897,7 +897,7 @@ gsi::Class<AnnotationRef> decl_Annotation (decl_BasicAnnotation, "lay", "Annotat
|
|||
),
|
||||
"@brief A layout annotation (i.e. ruler)\n"
|
||||
"\n"
|
||||
"Annotation objects provide a way to attach measurements or descriptive informations to a layout view. "
|
||||
"Annotation objects provide a way to attach measurements or descriptive information to a layout view. "
|
||||
"Annotation objects can appear as rulers for example. Annotation objects can be configured in "
|
||||
"different ways using the styles provided. By configuring an annotation object properly, it can appear "
|
||||
"as a rectangle or a plain line for example.\n"
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ GenericWriterOptions::add_options (tl::CommandLineOptions &cmd, const std::strin
|
|||
)
|
||||
<< tl::arg (group +
|
||||
"#--multi-xy-records", &m_gds2_multi_xy_records, "Allows unlimited number of points",
|
||||
"If this option is given, multiple XY records will be written to accomodate an unlimited number "
|
||||
"If this option is given, multiple XY records will be written to accommodate an unlimited number "
|
||||
"of points per polygon or path. However, such files may not be compatible with some consumers."
|
||||
)
|
||||
<< tl::arg (group +
|
||||
|
|
@ -169,7 +169,7 @@ GenericWriterOptions::add_options (tl::CommandLineOptions &cmd, const std::strin
|
|||
<< tl::arg (group +
|
||||
"#!--no-timestamps", &m_gds2_write_timestamps, "Don't write timestamps",
|
||||
"Writes a dummy time stamp instead of the actual time. With this option, GDS2 files become "
|
||||
"bytewise indentical even if written at different times. This option is useful if binary "
|
||||
"bytewise identical even if written at different times. This option is useful if binary "
|
||||
"identity is important (i.e. in regression scenarios)."
|
||||
)
|
||||
<< tl::arg (group +
|
||||
|
|
|
|||
|
|
@ -624,7 +624,7 @@ struct DB_PUBLIC_TEMPLATE box
|
|||
* @brief Conversion to string
|
||||
*
|
||||
* If dbu is set, it determines the factor by which the coordinates are multiplied to render
|
||||
* micron units. In addition, a micron format is choosen for output of these coordinates.
|
||||
* micron units. In addition, a micron format is chosen for output of these coordinates.
|
||||
*/
|
||||
std::string to_string (double dbu) const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -960,7 +960,7 @@ private:
|
|||
*
|
||||
* Whenever the cluster receiver gets noticed of an interaction, it will
|
||||
* create new clusters or extend or join existing clusters. When a cluster
|
||||
* is finished, it's finish method is called. That allows to take any
|
||||
* is finished, it's finish method is called. That allows one to take some
|
||||
* final actions on the cluster.
|
||||
*/
|
||||
template <class Obj, class Prop, class Cluster>
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ class ImportLayerMapping;
|
|||
* @brief The cell object
|
||||
*
|
||||
* A cell object consists of a set of shape containers (called layers),
|
||||
* a set of child cell instances and auxiliary informations such as
|
||||
* a set of child cell instances and auxiliary information such as
|
||||
* the parent instance list.
|
||||
* A cell is identified through an index given to the cell upon instantiation.
|
||||
* The cell index is valid in the context of a cell graph object which
|
||||
|
|
@ -126,7 +126,7 @@ public:
|
|||
/**
|
||||
* @brief Return the const shapes list of the given layer
|
||||
*
|
||||
* This method allows to access the shapes list on a certain layer.
|
||||
* This method allows one to access the shapes list on a certain layer.
|
||||
* If the layer does not exist yet, a reference to an empty list is
|
||||
* returned.
|
||||
*
|
||||
|
|
@ -139,7 +139,7 @@ public:
|
|||
/**
|
||||
* @brief Return the shapes list of the given layer
|
||||
*
|
||||
* This method allows to access the shapes list on a certain layer.
|
||||
* This method allows one to access the shapes list on a certain layer.
|
||||
* If the layer does not exist yet, it is created.
|
||||
*
|
||||
* @param index The layer index of the shapes list to retrieve
|
||||
|
|
@ -601,7 +601,7 @@ public:
|
|||
/**
|
||||
* @brief The parent instance list begin iterator
|
||||
*
|
||||
* The begin_parent_insts() allows to access to the parent instance list.
|
||||
* The begin_parent_insts() allows one to access to the parent instance list.
|
||||
*/
|
||||
parent_inst_iterator begin_parent_insts () const;
|
||||
|
||||
|
|
@ -725,7 +725,7 @@ public:
|
|||
* call this cell to the set given. It is assumed that the if the set contains a cell, it
|
||||
* will also contain all called cells, so it may act as a cache.
|
||||
*
|
||||
* This version allows to restrict the search to a cone of the hierarchy tree, that is
|
||||
* This version allows one to restrict the search to a cone of the hierarchy tree, that is
|
||||
* a set of cells which are collected from another call of "collect_called_cells" with another initial cell.
|
||||
*
|
||||
* @param callers The set of called cells (used as cache)
|
||||
|
|
@ -1007,7 +1007,7 @@ private:
|
|||
* @brief Sort the child instance list
|
||||
*
|
||||
* The child instances are first sorted by cell index, then by raw transformation
|
||||
* (excluding displacement). This allows to simplify the bbox computation by
|
||||
* (excluding displacement). This allows one to simplify the bbox computation by
|
||||
* convolution of the displacements bboxes with the object bboxes.
|
||||
*/
|
||||
void sort_child_insts ();
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ public:
|
|||
/**
|
||||
* @brief Instantiate a counter object with a reference to the given cell graph
|
||||
*
|
||||
* This version allows to specify a initial (starting) cell where only the cell tree below the
|
||||
* This version allows one to specify a initial (starting) cell where only the cell tree below the
|
||||
* staring cell is considered. Multiplicity refers to the number of instances below the
|
||||
* initial cell.
|
||||
*/
|
||||
|
|
@ -159,7 +159,7 @@ public:
|
|||
/**
|
||||
* @brief Instantiate a counter object with a reference to the given cell graph
|
||||
*
|
||||
* This version allows to specify a initial (starting) cell where only the cell tree below the
|
||||
* This version allows one to specify a initial (starting) cell where only the cell tree below the
|
||||
* staring cell is considered. Multiplicity refers to the number of instances below the
|
||||
* initial cell.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ public:
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief The dtor is virtual to allow to exploit RTTI
|
||||
* @brief The dtor is virtual to exploit RTTI
|
||||
*/
|
||||
virtual ~ClipboardObject ()
|
||||
{
|
||||
|
|
@ -114,7 +114,7 @@ private:
|
|||
/**
|
||||
* @brief The clipboard class
|
||||
*
|
||||
* The clipboard allows to store objects from the ClipboardObject
|
||||
* The clipboard allows one to store objects from the ClipboardObject
|
||||
* class. These objects are owned by the clipboard class and must
|
||||
* be passed after have being newed to the += operator.
|
||||
* There is a static instance of the clipboard that should be used
|
||||
|
|
|
|||
|
|
@ -598,7 +598,7 @@ public:
|
|||
* @brief Conversion to a string.
|
||||
*
|
||||
* If dbu is set, it determines the factor by which the coordinates are multiplied to render
|
||||
* micron units. In addition, a micron format is choosen for output of these coordinates.
|
||||
* micron units. In addition, a micron format is chosen for output of these coordinates.
|
||||
*/
|
||||
std::string to_string (double dbu) const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -306,7 +306,7 @@ public:
|
|||
* @brief Conversion to a string.
|
||||
*
|
||||
* If dbu is set, it determines the factor by which the coordinates are multiplied to render
|
||||
* micron units. In addition, a micron format is choosen for output of these coordinates.
|
||||
* micron units. In addition, a micron format is chosen for output of these coordinates.
|
||||
*/
|
||||
std::string to_string (double dbu) const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -312,7 +312,7 @@ public:
|
|||
/**
|
||||
* @brief Constructor from a RecursiveShapeIterator
|
||||
*
|
||||
* Creates an edge pair set from a recursive shape iterator. This allows to feed an edge pair set
|
||||
* Creates an edge pair set from a recursive shape iterator. This allows one to feed an edge pair set
|
||||
* from a hierarchy of cells.
|
||||
*/
|
||||
explicit EdgePairs (const RecursiveShapeIterator &si);
|
||||
|
|
@ -320,7 +320,7 @@ public:
|
|||
/**
|
||||
* @brief Constructor from a RecursiveShapeIterator with a transformation
|
||||
*
|
||||
* Creates an edge pair set from a recursive shape iterator. This allows to feed an edge pair set
|
||||
* Creates an edge pair set from a recursive shape iterator. This allows one to feed an edge pair set
|
||||
* from a hierarchy of cells. The transformation is useful to scale to a specific
|
||||
* DBU for example.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -513,7 +513,7 @@ private:
|
|||
* @brief Boolean operations
|
||||
*
|
||||
* This class implements a boolean operation similar to BooleanOp, but
|
||||
* in addition it allows to specify the merge mode for the two inputs.
|
||||
* in addition it allows one to specify the merge mode for the two inputs.
|
||||
* See "SimpleMergeOp" for the definition of the merge modes.
|
||||
* This operator is especially useful to implement boolean operations
|
||||
* with sized polygons which required a >0 interpretation.
|
||||
|
|
@ -540,8 +540,8 @@ private:
|
|||
* @brief Merge operation
|
||||
*
|
||||
* This incarnation of the evaluator class implements a merge operation
|
||||
* which allows to distinguish polygons (through edge properties) and
|
||||
* allows to specify a overlap value. Default is 0 which means that the
|
||||
* which allows one to distinguish polygons (through edge properties) and
|
||||
* allows one to specify a overlap value. Default is 0 which means that the
|
||||
* merge is equivalent to producing all polygins. A overlap value of 1 means
|
||||
* that at least two polygons must overlap to produce a result.
|
||||
*/
|
||||
|
|
@ -695,7 +695,7 @@ public:
|
|||
* The other merge operation provided for this purpose is "merge" which normalizes each polygon individually before
|
||||
* merging them. "simple_merge" is somewhat faster and consumes less memory.
|
||||
*
|
||||
* This method produces polygons and allows to fine-tune the parameters for that purpose.
|
||||
* This method produces polygons and allows fine-tuning the parameters for that purpose.
|
||||
*
|
||||
* This is a convenience method that bundles filling of the edges, processing with
|
||||
* a SimpleMerge operator and puts the result into an output vector.
|
||||
|
|
@ -711,7 +711,7 @@ public:
|
|||
/**
|
||||
* @brief Merge the given edges in a simple "non-zero wrapcount" fashion
|
||||
*
|
||||
* The egdes provided must form valid closed contours. Contours oriented differently "cancel" each other.
|
||||
* The edges provided must form valid closed contours. Contours oriented differently "cancel" each other.
|
||||
* Overlapping contours are merged when the orientation is the same.
|
||||
*
|
||||
* The result is presented as a set of edges forming closed contours. Hulls are oriented clockwise while
|
||||
|
|
@ -729,10 +729,10 @@ public:
|
|||
/**
|
||||
* @brief Merge the given edges in a simple "non-zero wrapcount" fashion into polygons
|
||||
*
|
||||
* The egdes provided must form valid closed contours. Contours oriented differently "cancel" each other.
|
||||
* The edges provided must form valid closed contours. Contours oriented differently "cancel" each other.
|
||||
* Overlapping contours are merged when the orientation is the same.
|
||||
*
|
||||
* This method produces polygons and allows to fine-tune the parameters for that purpose.
|
||||
* This method produces polygons and allows fine-tuning the parameters for that purpose.
|
||||
*
|
||||
* This is a convenience method that bundles filling of the edges, processing with
|
||||
* a SimpleMerge operator and puts the result into an output vector.
|
||||
|
|
@ -750,7 +750,7 @@ public:
|
|||
*
|
||||
* In contrast to "simple_merge", this merge implementation considers each polygon individually before merging them.
|
||||
* Thus self-overlaps are effectively removed before the output is computed and holes are correctly merged with the
|
||||
* hull. In addition, this method allows to select areas with a higher wrap count which allows to compute overlaps
|
||||
* hull. In addition, this method allows one to select areas with a higher wrap count which allows one to compute overlaps
|
||||
* of polygons on the same layer. Because this method merges the polygons before the overlap is computed, self-overlapping
|
||||
* polygons do not contribute to higher wrap count areas.
|
||||
*
|
||||
|
|
@ -771,11 +771,11 @@ public:
|
|||
*
|
||||
* In contrast to "simple_merge", this merge implementation considers each polygon individually before merging them.
|
||||
* Thus self-overlaps are effectively removed before the output is computed and holes are correctly merged with the
|
||||
* hull. In addition, this method allows to select areas with a higher wrap count which allows to compute overlaps
|
||||
* hull. In addition, this method allows one to select areas with a higher wrap count which allows one to compute overlaps
|
||||
* of polygons on the same layer. Because this method merges the polygons before the overlap is computed, self-overlapping
|
||||
* polygons do not contribute to higher wrap count areas.
|
||||
*
|
||||
* This method produces polygons and allows to fine-tune the parameters for that purpose.
|
||||
* This method produces polygons and allows one to fine-tune the parameters for that purpose.
|
||||
*
|
||||
* This is a convenience method that bundles filling of the edges, processing with
|
||||
* a Merge operator and puts the result into an output vector.
|
||||
|
|
@ -795,7 +795,7 @@ public:
|
|||
* on the individual result polygons of the merge step. The result may contain overlapping contours, but no self-overlaps.
|
||||
*
|
||||
* dx and dy describe the sizing. A positive value indicates oversize (outwards) while a negative one describes undersize (inwards).
|
||||
* The sizing applied can be choosen differently in x and y direction. In this case, the sign must be identical for both
|
||||
* The sizing applied can be chosen differently in x and y direction. In this case, the sign must be identical for both
|
||||
* dx and dy.
|
||||
*
|
||||
* The result is presented as a set of edges forming closed contours. Hulls are oriented clockwise while
|
||||
|
|
@ -820,10 +820,10 @@ public:
|
|||
* Polygon overlap occures if the polygons are close enough, so a positive sizing makes polygons overlap.
|
||||
*
|
||||
* dx and dy describe the sizing. A positive value indicates oversize (outwards) while a negative one describes undersize (inwards).
|
||||
* The sizing applied can be choosen differently in x and y direction. In this case, the sign must be identical for both
|
||||
* The sizing applied can be chosen differently in x and y direction. In this case, the sign must be identical for both
|
||||
* dx and dy.
|
||||
*
|
||||
* This method produces polygons and allows to fine-tune the parameters for that purpose.
|
||||
* This method produces polygons and allows one to fine-tune the parameters for that purpose.
|
||||
*
|
||||
* This is a convenience method that bundles filling of the edges, processing with
|
||||
* a SimpleMerge operator and puts the result into an output vector.
|
||||
|
|
@ -891,7 +891,7 @@ public:
|
|||
* @brief Boolean operation for a set of given polygons, creating polygons
|
||||
*
|
||||
* This method computes the result for the given boolean operation on two sets of polygons.
|
||||
* This method produces polygons on output and allows to fine-tune the parameters for that purpose.
|
||||
* This method produces polygons on output and allows one to fine-tune the parameters for that purpose.
|
||||
*
|
||||
* This is a convenience method that bundles filling of the edges, processing with
|
||||
* a Boolean operator and puts the result into an output vector.
|
||||
|
|
@ -932,7 +932,7 @@ public:
|
|||
* The input edges must form closed contours where holes and hulls must be oriented differently.
|
||||
* The input edges are processed with a simple non-zero wrap count rule as a whole.
|
||||
*
|
||||
* This method produces polygons on output and allows to fine-tune the parameters for that purpose.
|
||||
* This method produces polygons on output and allows one to fine-tune the parameters for that purpose.
|
||||
*
|
||||
* This is a convenience method that bundles filling of the edges, processing with
|
||||
* a Boolean operator and puts the result into an output vector.
|
||||
|
|
|
|||
|
|
@ -332,7 +332,7 @@ public:
|
|||
/**
|
||||
* @brief Constructor from a RecursiveShapeIterator
|
||||
*
|
||||
* Creates an edge set from a recursive shape iterator. This allows to feed an edge set
|
||||
* Creates an edge set from a recursive shape iterator. This allows feeding an edge set
|
||||
* from a hierarchy of cells.
|
||||
*/
|
||||
explicit Edges (const RecursiveShapeIterator &si, bool as_edges = true);
|
||||
|
|
@ -340,7 +340,7 @@ public:
|
|||
/**
|
||||
* @brief Constructor from a RecursiveShapeIterator with a transformation
|
||||
*
|
||||
* Creates an edge set from a recursive shape iterator. This allows to feed an edge set
|
||||
* Creates an edge set from a recursive shape iterator. This allows feeding an edge set
|
||||
* from a hierarchy of cells. The transformation is useful to scale to a specific
|
||||
* DBU for example.
|
||||
*/
|
||||
|
|
@ -976,7 +976,7 @@ public:
|
|||
/**
|
||||
* @brief Returns edges (point-like) representing the start part of the edges
|
||||
*
|
||||
* The length of the part can be choosen by length or a fraction of the original length.
|
||||
* The length of the part can be chosen by length or a fraction of the original length.
|
||||
* If length and fraction are 0, a point at the beginning of the edge will be created.
|
||||
* If length is non-zero and fraction is 0, a segment in the direction of the edge
|
||||
* with the given length is created, even if the length is larger than the original
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ class PolygonSink;
|
|||
*
|
||||
* This filter has two parameters: lmin and lmax.
|
||||
* It will filter all edges for which the length is >= lmin and < lmax.
|
||||
* There is an "invert" flag which allows to select all edges not
|
||||
* There is an "invert" flag which allows selecting all edges not
|
||||
* matching the criterion.
|
||||
*/
|
||||
|
||||
|
|
@ -108,7 +108,7 @@ private:
|
|||
* This filter has two parameters: amin and amax.
|
||||
* It will filter all edges for which the orientation angle is >= amin and < amax.
|
||||
* The orientation angle is measured in degree against the x axis in the mathematical sense.
|
||||
* There is an "invert" flag which allows to select all edges not
|
||||
* There is an "invert" flag which allows selecting all edges not
|
||||
* matching the criterion.
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -36,6 +36,9 @@
|
|||
|
||||
#include <cctype>
|
||||
|
||||
// compiled with "scripts/compile_glyphs.rb":
|
||||
#include "glyphs.cc_gen"
|
||||
|
||||
namespace db
|
||||
{
|
||||
|
||||
|
|
@ -155,13 +158,21 @@ TextGenerator::load_from_resource (const std::string &name)
|
|||
|
||||
QByteArray data = qUncompress (QByteArray ((const char *) res.data (), int (res.size ())));
|
||||
|
||||
load_from_data (data.constData (), data.size (), tl::to_string (QFileInfo (tl::to_qstring (name)).baseName ()), name);
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
TextGenerator::load_from_data (const char *data, size_t ndata, const std::string &name, const std::string &description)
|
||||
{
|
||||
db::Layout layout;
|
||||
tl::InputMemoryStream memory_stream (data.constData (), data.size ());
|
||||
tl::InputMemoryStream memory_stream (data, ndata);
|
||||
tl::InputStream stream (memory_stream);
|
||||
db::Reader reader (stream);
|
||||
db::LayerMap map = reader.read (layout);
|
||||
|
||||
m_description = name;
|
||||
m_description = description;
|
||||
m_name = name;
|
||||
|
||||
std::pair<bool, unsigned int> l1 = map.logical (db::LDPair (1, 0));
|
||||
std::pair<bool, unsigned int> l2 = map.logical (db::LDPair (2, 0));
|
||||
|
|
@ -170,10 +181,7 @@ TextGenerator::load_from_resource (const std::string &name)
|
|||
if (l1.first && l2.first) {
|
||||
read_from_layout (layout, l1.second, l2.second, l3.second);
|
||||
}
|
||||
|
||||
m_name = tl::to_string (QFileInfo (tl::to_qstring (name)).baseName ());
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
TextGenerator::load_from_file (const std::string &filename)
|
||||
|
|
@ -323,22 +331,8 @@ TextGenerator::generators ()
|
|||
|
||||
s_fonts.clear ();
|
||||
|
||||
#if defined(HAVE_QT)
|
||||
const char *resources[] = {
|
||||
":/fonts/std_font.gds"
|
||||
};
|
||||
|
||||
for (size_t i = 0 ; i < sizeof (resources) / sizeof (resources [0]); ++i) {
|
||||
try {
|
||||
tl::log << "Loading font from resource " << resources [i] << " ..";
|
||||
s_fonts.push_back (TextGenerator ());
|
||||
s_fonts.back ().load_from_resource (resources [i]);
|
||||
} catch (tl::Exception &ex) {
|
||||
tl::error << ex.msg ();
|
||||
s_fonts.pop_back ();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// load the compiled-in glyphs
|
||||
load_glyphs (s_fonts);
|
||||
|
||||
// scan for font files
|
||||
for (std::vector<std::string>::const_iterator p = s_font_paths.begin (); p != s_font_paths.end (); ++p) {
|
||||
|
|
|
|||
|
|
@ -83,6 +83,11 @@ public:
|
|||
void load_from_resource (const std::string &name);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Loads from the given binary data
|
||||
*/
|
||||
void load_from_data (const char *data, size_t ndata, const std::string &name, const std::string &description);
|
||||
|
||||
/**
|
||||
* @brief Loads the font from the given file
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ struct HersheyFont
|
|||
int width, height;
|
||||
};
|
||||
|
||||
#include "fonts.cc"
|
||||
#include "fonts.cc_gen"
|
||||
|
||||
const int line_spacing = 4;
|
||||
|
||||
|
|
|
|||
|
|
@ -306,7 +306,7 @@ public:
|
|||
/**
|
||||
* @brief Adds the given attribute to the attribute set
|
||||
*
|
||||
* Attributes are arbitary IDs attached to clusters.
|
||||
* Attributes are arbitrary IDs attached to clusters.
|
||||
* The attribute value 0 is reserved for "no attribute" and is not
|
||||
* put into the set.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ template <>
|
|||
class shape_reference_translator<db::Edge>
|
||||
{
|
||||
public:
|
||||
typedef typename db::Edge shape_type;
|
||||
typedef db::Edge shape_type;
|
||||
|
||||
shape_reference_translator (db::Layout * /*target_layout*/)
|
||||
{
|
||||
|
|
@ -476,7 +476,13 @@ local_processor_cell_contexts<TS, TI, TR>::compute_results (const local_processo
|
|||
CRONOLOGY_COMPUTE_BRACKET(event_propagate)
|
||||
c->second->propagate (res);
|
||||
|
||||
// gcc 4.4.7 (at least) doesn't have an operator== in std::unordered_set, so we skip this
|
||||
// optimization
|
||||
#if defined(__GNUC__) && __GNUC__ == 4
|
||||
} else {
|
||||
#else
|
||||
} else if (res != common) {
|
||||
#endif
|
||||
|
||||
CRONOLOGY_COMPUTE_BRACKET(event_propagate)
|
||||
|
||||
|
|
|
|||
|
|
@ -1262,7 +1262,7 @@ private:
|
|||
* The generic iterators are used to access these
|
||||
*
|
||||
* Internally, the instance list uses a box tree which treats empty cells as single point boxes when a all-layer search is performed.
|
||||
* That allows to retrieve such instances with a search.
|
||||
* That allows retrieving such instances with a search.
|
||||
*/
|
||||
|
||||
class DB_PUBLIC Instances
|
||||
|
|
@ -1655,7 +1655,7 @@ public:
|
|||
/**
|
||||
* @brief The parent instance list begin iterator
|
||||
*
|
||||
* The begin_ParentInsts() allows to access to the parent instance list.
|
||||
* The begin_parent_insts() method gives access to the parent instance list.
|
||||
*/
|
||||
ParentInstIterator begin_parent_insts (const layout_type *g) const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ struct LPLogicalLessFunc
|
|||
* @brief A layer offset
|
||||
*
|
||||
* This struct defines a layer offset which can be "added" to a LayerProperties object
|
||||
* If the layer offset is defined with a name, any occurance of '*' in the string
|
||||
* If the layer offset is defined with a name, any occurrence of '*' in the string
|
||||
* is replaced with the original name. This way, applying "*_A" with "+" yields a
|
||||
* postfix "_A" to the original layer name (if it is named).
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1304,7 +1304,7 @@ Layout::do_update ()
|
|||
try {
|
||||
|
||||
// if the hierarchy has been changed so far, update
|
||||
// the hierarchy management informations
|
||||
// the hierarchy management information
|
||||
if (hier_dirty ()) {
|
||||
{
|
||||
tl::SelfTimer timer (tl::verbosity () > layout_base_verbosity + 10, "Updating relations");
|
||||
|
|
@ -1324,7 +1324,7 @@ Layout::do_update ()
|
|||
|
||||
// if something on the bboxes (either on shape level or on
|
||||
// cell bbox level - i.e. by child instances) has been changed,
|
||||
// update the bbox informations. In addition sort the shapes
|
||||
// update the bbox information. In addition sort the shapes
|
||||
// lists of region queries, since they might have changed once
|
||||
// the bboxes are dirty.
|
||||
if (bboxes_dirty ()) {
|
||||
|
|
|
|||
|
|
@ -512,7 +512,7 @@ public:
|
|||
Layout (db::Manager *manager = 0);
|
||||
|
||||
/**
|
||||
* @brief Standard constructor which allows to specify the editable mode
|
||||
* @brief Standard constructor which allows one to specify editable mode
|
||||
*/
|
||||
Layout (bool editable, db::Manager *manager = 0);
|
||||
|
||||
|
|
@ -1433,7 +1433,7 @@ public:
|
|||
* @brief Forces an update even if the layout is under construction
|
||||
*
|
||||
* This method behaves like "update" but forces and update even if the
|
||||
* "under_construction" state is active. This allows to do the update
|
||||
* "under_construction" state is active. This allows one to do the update
|
||||
* in certain stages without triggering the update automatically and
|
||||
* too frequently.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -187,7 +187,7 @@ bool DB_PUBLIC compare_layouts (const db::Layout &a, const db::Layout &b, unsign
|
|||
/**
|
||||
* @brief Compare two layouts using the specified top cells
|
||||
*
|
||||
* This function basically works like the previous one but allows to specify top cells which
|
||||
* This function basically works like the previous one but allows one to specify top cells which
|
||||
* are compared hierarchically.
|
||||
*/
|
||||
bool DB_PUBLIC compare_layouts (const db::Layout &a, db::cell_index_type top_a, const db::Layout &b, db::cell_index_type top_b, unsigned int flags, db::Coord tolerance, DifferenceReceiver &r);
|
||||
|
|
|
|||
|
|
@ -551,7 +551,7 @@ public:
|
|||
/**
|
||||
* @brief Increment the iterator: deliver the next state
|
||||
*
|
||||
* This method is equivalent to operator++, but it allows to specify
|
||||
* This method is equivalent to operator++, but it allows one to specify
|
||||
* a boolean parameter telling whether the operation requested shall be
|
||||
* skipped. This only applies to queries with an action like "delete" or "with".
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ public:
|
|||
* @brief Invalidate the bounding boxes
|
||||
*
|
||||
* This method is supposed to be called by shape containers for example if
|
||||
* some event has occured that changed the bounding boxes.
|
||||
* some event has occurred that changed the bounding boxes.
|
||||
*
|
||||
* If the index is std::numeric_limits<unsigned int>::max, this method
|
||||
* applies to all layers.
|
||||
|
|
|
|||
|
|
@ -471,7 +471,7 @@ public:
|
|||
* * No connection indicated (circuit_cell_name_prefix == 0: the net shapes are simply put into their
|
||||
* respective circuits. The connections are not indicated.
|
||||
* * Subnet hierarchy (circuit_cell_name_prefix != 0): for each root net, a full hierarchy is built
|
||||
* to accomodate the subnets (see build_net in recursive mode).
|
||||
* to accommodate the subnets (see build_net in recursive mode).
|
||||
*
|
||||
* If a device cell name prefix is given, cells will be produced for each device abstract
|
||||
* using a name like device_cell_name_prefix + device name.
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ private:
|
|||
};
|
||||
|
||||
/**
|
||||
* @brief A property mapper based on a dynamic propery id generation
|
||||
* @brief A property mapper based on a dynamic property id generation
|
||||
*
|
||||
* This class can be used as property mapper for certain "insert" flavors of
|
||||
* the Instance and Shapes class.
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ BoolAndOrNotLocalOperation::BoolAndOrNotLocalOperation (bool is_and)
|
|||
local_operation<db::PolygonRef, db::PolygonRef, db::PolygonRef>::on_empty_intruder_mode
|
||||
BoolAndOrNotLocalOperation::on_empty_intruder_hint () const
|
||||
{
|
||||
return m_is_and ? local_operation::Drop : local_operation::Copy;
|
||||
return m_is_and ? Drop : Copy;
|
||||
}
|
||||
|
||||
std::string
|
||||
|
|
@ -166,7 +166,7 @@ void SelfOverlapMergeLocalOperation::compute_local (db::Layout *layout, const sh
|
|||
|
||||
SelfOverlapMergeLocalOperation::on_empty_intruder_mode SelfOverlapMergeLocalOperation::on_empty_intruder_hint () const
|
||||
{
|
||||
return m_wrap_count > 1 ? local_operation::Drop : local_operation::Copy;
|
||||
return m_wrap_count > 1 ? Drop : Copy;
|
||||
}
|
||||
|
||||
std::string SelfOverlapMergeLocalOperation::description () const
|
||||
|
|
@ -186,7 +186,7 @@ EdgeBoolAndOrNotLocalOperation::EdgeBoolAndOrNotLocalOperation (bool is_and)
|
|||
local_operation<db::Edge, db::Edge, db::Edge>::on_empty_intruder_mode
|
||||
EdgeBoolAndOrNotLocalOperation::on_empty_intruder_hint () const
|
||||
{
|
||||
return m_is_and ? local_operation::Drop : local_operation::Copy;
|
||||
return m_is_and ? Drop : Copy;
|
||||
}
|
||||
|
||||
std::string
|
||||
|
|
@ -253,7 +253,7 @@ EdgeToPolygonLocalOperation::EdgeToPolygonLocalOperation (bool outside, bool inc
|
|||
local_operation<db::Edge, db::PolygonRef, db::Edge>::on_empty_intruder_mode
|
||||
EdgeToPolygonLocalOperation::on_empty_intruder_hint () const
|
||||
{
|
||||
return m_outside ? local_operation::Copy : local_operation::Drop;
|
||||
return m_outside ? Copy : Drop;
|
||||
}
|
||||
|
||||
std::string
|
||||
|
|
|
|||
|
|
@ -144,7 +144,7 @@ public:
|
|||
* @brief Undo the current transaction
|
||||
*
|
||||
* The current transaction is undone with this method.
|
||||
* The 'available_undo' method can be used to determine wether
|
||||
* The 'available_undo' method can be used to determine whether
|
||||
* there are transactions to undo.
|
||||
*/
|
||||
void undo ();
|
||||
|
|
@ -153,7 +153,7 @@ public:
|
|||
* @brief Redo the next available transaction
|
||||
*
|
||||
* The next transaction is redone with this method.
|
||||
* The 'available_redo' method can be used to determine wether
|
||||
* The 'available_redo' method can be used to determine whether
|
||||
* there are transactions to undo.
|
||||
*/
|
||||
void redo ();
|
||||
|
|
@ -204,7 +204,7 @@ public:
|
|||
/**
|
||||
* @brief Get the last queued db::Op object
|
||||
*
|
||||
* This method allows to fetch and modify the last queued operation for the given object in order
|
||||
* This method allows one to fetch and modify the last queued operation for the given object in order
|
||||
* to allow some optimisation, i.e. joining two ops. It can be modified but must not
|
||||
* be deleted. The returned object is guaranteed to be inside same transaction.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -845,7 +845,7 @@ public:
|
|||
/**
|
||||
* @brief Get the x perspective tilt angle in degree
|
||||
*
|
||||
* To achieve the same visual effect, a different tilt angle has to be choosen for
|
||||
* To achieve the same visual effect, a different tilt angle has to be chosen for
|
||||
* a given observer distance z. This method computes the tilt angle for the given observer
|
||||
* distance.
|
||||
*/
|
||||
|
|
@ -854,7 +854,7 @@ public:
|
|||
/**
|
||||
* @brief Get the y perspective tilt angle in degree
|
||||
*
|
||||
* To achieve the same visual effect, a different tilt angle has to be choosen for
|
||||
* To achieve the same visual effect, a different tilt angle has to be chosen for
|
||||
* a given observer distance z. This method computes the tilt angle for the given observer
|
||||
* distance.
|
||||
*/
|
||||
|
|
@ -868,7 +868,7 @@ public:
|
|||
/**
|
||||
* @brief Returns the matrix for perspective transformation
|
||||
*
|
||||
* To achieve the same visual effect, a different tilt angle has to be choosen for
|
||||
* To achieve the same visual effect, a different tilt angle has to be chosen for
|
||||
* a given observer distance z. This method computes the tilt angle for the given observer
|
||||
* distance.
|
||||
*
|
||||
|
|
@ -970,7 +970,7 @@ struct MatrixAdjustFlags
|
|||
* @param landmarks_before The points before the transformation.
|
||||
* @param landmarks_after The points after the transformation.
|
||||
* @param flags Selects the properties to adjust.
|
||||
* @param fixed_point The index of the fixed point (one that is definitly mapped to the target) or -1 if there is none
|
||||
* @param fixed_point The index of the fixed point (one that is definitely mapped to the target) or -1 if there is none
|
||||
*/
|
||||
void DB_PUBLIC adjust_matrix (Matrix2d &matrix, db::DVector &disp, const std::vector <db::DPoint> &landmarks_before, const std::vector <db::DPoint> &landmarks_after, MatrixAdjustFlags::Flags flags, int fixed_point = -1);
|
||||
|
||||
|
|
@ -986,7 +986,7 @@ void DB_PUBLIC adjust_matrix (Matrix2d &matrix, db::DVector &disp, const std::ve
|
|||
* @param landmarks_before The points before the transformation.
|
||||
* @param landmarks_after The points after the transformation.
|
||||
* @param flags Selects the properties to adjust.
|
||||
* @param fixed_point The index of the fixed point (one that is definitly mapped to the target) or -1 if there is none
|
||||
* @param fixed_point The index of the fixed point (one that is definitely mapped to the target) or -1 if there is none
|
||||
*/
|
||||
void DB_PUBLIC adjust_matrix (Matrix3d &matrix, const std::vector <db::DPoint> &landmarks_before, const std::vector <db::DPoint> &landmarks_after, MatrixAdjustFlags::Flags flags, int fixed_point = -1);
|
||||
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ namespace db
|
|||
/**
|
||||
* @brief A structure describing the meta information from the reader
|
||||
*
|
||||
* In the meta information block, the reader provides additional informations
|
||||
* In the meta information block, the reader provides additional information
|
||||
* about the file and content etc.
|
||||
* "name" is a unique name that can be used to identify the information.
|
||||
* "description" is a "speaking" description of the information.
|
||||
|
|
|
|||
|
|
@ -446,7 +446,7 @@ public:
|
|||
/**
|
||||
* @brief Gets the qualified name
|
||||
*
|
||||
* The qualified name is like the expanded name, but preceeded with the
|
||||
* The qualified name is like the expanded name, but preceded with the
|
||||
* Circuit name if known (e.g. "CIRCUIT:NET")
|
||||
*/
|
||||
std::string qname () const;
|
||||
|
|
|
|||
|
|
@ -173,6 +173,16 @@ void NetlistDeviceExtractor::extract (db::Layout &layout, db::Cell &cell, const
|
|||
extract_without_initialize (layout, cell, clusters, layers);
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
struct ExtractorCacheValueType {
|
||||
ExtractorCacheValueType () { }
|
||||
db::Vector disp;
|
||||
tl::vector<db::Device *> devices;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
void NetlistDeviceExtractor::extract_without_initialize (db::Layout &layout, db::Cell &cell, hier_clusters_type &clusters, const std::vector<unsigned int> &layers)
|
||||
{
|
||||
tl_assert (layers.size () == m_layer_definitions.size ());
|
||||
|
|
@ -233,12 +243,6 @@ void NetlistDeviceExtractor::extract_without_initialize (db::Layout &layout, db:
|
|||
|
||||
tl::RelativeProgress progress (tl::to_string (tr ("Extracting devices")), n, 1);
|
||||
|
||||
struct ExtractorCacheValueType {
|
||||
ExtractorCacheValueType () { }
|
||||
db::Vector disp;
|
||||
tl::vector<db::Device *> devices;
|
||||
};
|
||||
|
||||
typedef std::map<std::vector<db::Region>, ExtractorCacheValueType> extractor_cache_type;
|
||||
extractor_cache_type extractor_cache;
|
||||
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@ public:
|
|||
}
|
||||
|
||||
/**
|
||||
* @brief Gets the cell name the error occured in
|
||||
* @brief Gets the cell name the error occurred in
|
||||
*/
|
||||
const std::string &cell_name () const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -194,7 +194,7 @@ std::string NetlistSpiceWriterDelegate::format_params (const db::Device &dev) co
|
|||
// --------------------------------------------------------------------------------
|
||||
|
||||
NetlistSpiceWriter::NetlistSpiceWriter (NetlistSpiceWriterDelegate *delegate)
|
||||
: mp_netlist (0), mp_stream (0), mp_delegate (delegate)
|
||||
: mp_netlist (0), mp_stream (0), mp_delegate (delegate), m_use_net_names (false)
|
||||
{
|
||||
static NetlistSpiceWriterDelegate std_delegate;
|
||||
if (! delegate) {
|
||||
|
|
@ -207,6 +207,11 @@ NetlistSpiceWriter::~NetlistSpiceWriter ()
|
|||
// .. nothing yet ..
|
||||
}
|
||||
|
||||
void NetlistSpiceWriter::set_use_net_names (bool use_net_names)
|
||||
{
|
||||
m_use_net_names = use_net_names;
|
||||
}
|
||||
|
||||
void NetlistSpiceWriter::write (tl::OutputStream &stream, const db::Netlist &netlist, const std::string &description)
|
||||
{
|
||||
mp_stream = &stream;
|
||||
|
|
@ -233,12 +238,48 @@ void NetlistSpiceWriter::write (tl::OutputStream &stream, const db::Netlist &net
|
|||
|
||||
std::string NetlistSpiceWriter::net_to_string (const db::Net *net) const
|
||||
{
|
||||
std::map<const db::Net *, size_t>::const_iterator n = m_net_to_spice_id.find (net);
|
||||
if (! net || n == m_net_to_spice_id.end ()) {
|
||||
// TODO: this should assert or similar
|
||||
return "0";
|
||||
if (m_use_net_names) {
|
||||
|
||||
if (! net) {
|
||||
|
||||
return "0";
|
||||
|
||||
} else {
|
||||
|
||||
// Tested with ngspice: this tool likes in net names: . $ ! & \ # + : | (but not at beginning)
|
||||
// It does not like: , ;
|
||||
// We translate , to | for the net separator
|
||||
|
||||
std::string n = net->expanded_name ();
|
||||
std::string nn;
|
||||
nn.reserve (n.size () + 1);
|
||||
if (!isalnum (*n.c_str ())) {
|
||||
nn += "\\";
|
||||
}
|
||||
for (const char *cp = n.c_str (); *cp; ++cp) {
|
||||
if (! isalnum (*cp) && strchr (".$!&\\#+:,", *cp) == 0) {
|
||||
nn += tl::sprintf ("\\x%02x", (unsigned char) *cp);
|
||||
} else if (*cp == ',') {
|
||||
nn += "|";
|
||||
} else {
|
||||
nn += *cp;
|
||||
}
|
||||
}
|
||||
|
||||
return nn;
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
return tl::to_string (n->second);
|
||||
|
||||
std::map<const db::Net *, size_t>::const_iterator n = m_net_to_spice_id.find (net);
|
||||
if (! net || n == m_net_to_spice_id.end ()) {
|
||||
// TODO: this should assert or similar
|
||||
return "0";
|
||||
} else {
|
||||
return tl::to_string (n->second);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -389,9 +430,11 @@ void NetlistSpiceWriter::write_circuit_header (const db::Circuit &circuit) const
|
|||
|
||||
emit_line (os.str ());
|
||||
|
||||
for (db::Circuit::const_net_iterator n = circuit.begin_nets (); n != circuit.end_nets (); ++n) {
|
||||
if (! n->name ().empty ()) {
|
||||
emit_comment ("net " + net_to_string (n.operator-> ()) + " " + n->name ());
|
||||
if (! m_use_net_names) {
|
||||
for (db::Circuit::const_net_iterator n = circuit.begin_nets (); n != circuit.end_nets (); ++n) {
|
||||
if (! n->name ().empty ()) {
|
||||
emit_comment ("net " + net_to_string (n.operator-> ()) + " " + n->name ());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -86,6 +86,12 @@ public:
|
|||
|
||||
virtual void write (tl::OutputStream &stream, const db::Netlist &netlist, const std::string &description);
|
||||
|
||||
void set_use_net_names (bool use_net_names);
|
||||
bool use_net_names () const
|
||||
{
|
||||
return m_use_net_names;
|
||||
}
|
||||
|
||||
private:
|
||||
friend class NetlistSpiceWriterDelegate;
|
||||
|
||||
|
|
@ -93,6 +99,7 @@ private:
|
|||
tl::OutputStream *mp_stream;
|
||||
tl::weak_ptr<NetlistSpiceWriterDelegate> mp_delegate;
|
||||
std::map<const db::Net *, size_t> m_net_to_spice_id;
|
||||
bool m_use_net_names;
|
||||
|
||||
void do_write (const std::string &description);
|
||||
|
||||
|
|
|
|||
|
|
@ -255,7 +255,7 @@ public:
|
|||
/**
|
||||
* @brief Constructor that provides conversion and transformation
|
||||
*
|
||||
* This constructor allows to convert a path from any type to this one.
|
||||
* This constructor allows converting a path from any type to this one.
|
||||
* In addition, transformation operators can be provided that specify
|
||||
* how to transform points and lengths.
|
||||
*
|
||||
|
|
@ -278,7 +278,7 @@ public:
|
|||
/**
|
||||
* @brief Constructor that provides conversion from another coordinate type
|
||||
*
|
||||
* This constructor allows to convert a path from any type to this one.
|
||||
* This constructor allows converting a path from any type to this one.
|
||||
*
|
||||
* @param p The source path
|
||||
*/
|
||||
|
|
@ -738,7 +738,7 @@ public:
|
|||
* hull polygon. The resulting pointlist is not guaranteed not to
|
||||
* be self-overlapping.
|
||||
*
|
||||
* This version allows to override the left and right side's width hence creating
|
||||
* This version allows one to override the left and right side's width hence creating
|
||||
* asymmetric paths. dleft is the shift to the left (as seen in the direction of the
|
||||
* path) and dright the shift to the right. The default path is created if dleft+dright=width.
|
||||
*/
|
||||
|
|
@ -1011,7 +1011,7 @@ struct path_ref
|
|||
/**
|
||||
* @brief The translation constructor.
|
||||
*
|
||||
* This constructor allows to copy a path reference from one
|
||||
* This constructor allows one to copy a path reference from one
|
||||
* repository to another
|
||||
*/
|
||||
path_ref (const path_ref &ref, repository_type &rep)
|
||||
|
|
@ -1023,7 +1023,7 @@ struct path_ref
|
|||
/**
|
||||
* @brief The transformation translation constructor
|
||||
*
|
||||
* This constructor allows to copy a path reference with a certain transformation
|
||||
* This constructor allows one to copy a path reference with a certain transformation
|
||||
* to one with another transformation
|
||||
*/
|
||||
template <class TransIn>
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ public:
|
|||
/**
|
||||
* @brief The copy constructor that also converts
|
||||
*
|
||||
* The copy constructor allows to convert between different
|
||||
* The copy constructor allows one to convert between different
|
||||
* coordinate types, if possible.
|
||||
*
|
||||
* @param d The source from which to copy
|
||||
|
|
@ -270,7 +270,7 @@ public:
|
|||
* @brief String conversion
|
||||
*
|
||||
* If dbu is set, it determines the factor by which the coordinates are multiplied to render
|
||||
* micron units. In addition, a micron format is choosen for output of these coordinates.
|
||||
* micron units. In addition, a micron format is chosen for output of these coordinates.
|
||||
*/
|
||||
std::string
|
||||
to_string (double dbu) const
|
||||
|
|
|
|||
|
|
@ -3051,7 +3051,7 @@ public:
|
|||
/**
|
||||
* @brief The translation constructor.
|
||||
*
|
||||
* This constructor allows to copy a polygon reference from one
|
||||
* This constructor allows one to copy a polygon reference from one
|
||||
* repository to another
|
||||
*/
|
||||
polygon_ref (const polygon_ref &ref, repository_type &rep)
|
||||
|
|
@ -3063,7 +3063,7 @@ public:
|
|||
/**
|
||||
* @brief The transformation translation constructor
|
||||
*
|
||||
* This constructor allows to copy a polygon reference with a certain transformation
|
||||
* This constructor allows one to copy a polygon reference with a certain transformation
|
||||
* to one with another transformation
|
||||
*/
|
||||
template <class TransIn>
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ public:
|
|||
* @brief Constructor
|
||||
*
|
||||
* This constructor takes the polygon receiver (of which is keeps a reference).
|
||||
* It allows to specify how holes are resolved and how touching corners are resolved.
|
||||
* It allows one to specify how holes are resolved and how touching corners are resolved.
|
||||
*
|
||||
* @param psink The polygon receiver
|
||||
* @param resolve_holes true, if holes should be resolved into the hull using stich lines
|
||||
|
|
@ -75,7 +75,7 @@ public:
|
|||
* @brief Constructor
|
||||
*
|
||||
* This constructor takes the simple polygon receiver (of which is keeps a reference).
|
||||
* It allows to specify how touching corners are resolved. Holes are always resolved since this is
|
||||
* It allows one to specify how touching corners are resolved. Holes are always resolved since this is
|
||||
* the only way to create a simple polygon.
|
||||
*
|
||||
* @param spsink The simple polygon receiver
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ class SimplePolygonSink;
|
|||
/**
|
||||
* @brief An inside test operator
|
||||
*
|
||||
* This class allows to efficiently test whether multiple points are inside a given polygon.
|
||||
* This class allows an efficient test whether multiple points are inside a given polygon.
|
||||
* Since the test is efficiently implemented when the polygon edges are sorted, the sorting
|
||||
* and memory allocation step is performed once in the test operator's constructor while
|
||||
* each individual test is performed efficiently.
|
||||
|
|
@ -118,7 +118,7 @@ void cut_polygon (const PolygonType &input, const typename PolygonType::edge_typ
|
|||
* @brief Split a polygon into two or more parts
|
||||
*
|
||||
* This function splits a polygon into parts using some heuristics to determine a "suitable" cut line.
|
||||
* The cut line is choosen through a vertex close to a center (either horizontal or vertical). The splitting
|
||||
* The cut line is chosen through a vertex close to a center (either horizontal or vertical). The splitting
|
||||
* is supposed to create smaller parts with less vertices or a better area ratio of polygon to bounding box area.
|
||||
*
|
||||
* @param polygon The input polygon
|
||||
|
|
|
|||
|
|
@ -834,7 +834,7 @@ public:
|
|||
/**
|
||||
* @brief Returns an edge set containing all edges of the polygons in this region
|
||||
*
|
||||
* This version allows to specify a filter by which the edges are filtered before they are
|
||||
* This version allows one to specify a filter by which the edges are filtered before they are
|
||||
* returned.
|
||||
*
|
||||
* Merged semantics applies. In merged semantics, only full, outer edges are delivered.
|
||||
|
|
@ -1574,7 +1574,7 @@ public:
|
|||
* @brief Constructor specifying the region where to store the polygons
|
||||
*
|
||||
* If "clear" is set to true, the region will be cleared before the
|
||||
* inserting of polygons starts. This allows to use the region as input and
|
||||
* inserting of polygons starts. This allows using the region as input and
|
||||
* output for any operation.
|
||||
*/
|
||||
RegionPolygonSink (Region ®ion, bool clear = false)
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ namespace db {
|
|||
*
|
||||
* This filter has two parameters: pmin and pmax.
|
||||
* It will filter all polygons for which the perimeter is >= pmin and < pmax.
|
||||
* There is an "invert" flag which allows to select all polygons not
|
||||
* There is an "invert" flag which allows selecting all polygons not
|
||||
* matching the criterion.
|
||||
*/
|
||||
|
||||
|
|
@ -104,7 +104,7 @@ private:
|
|||
*
|
||||
* This filter has two parameters: amin and amax.
|
||||
* It will filter all polygons for which the area is >= amin and < amax.
|
||||
* There is an "invert" flag which allows to select all polygons not
|
||||
* There is an "invert" flag which allows selecting all polygons not
|
||||
* matching the criterion.
|
||||
*/
|
||||
|
||||
|
|
@ -266,7 +266,7 @@ private:
|
|||
*
|
||||
* This filter has two parameters: vmin and vmax.
|
||||
* It will filter all polygons for which the selected bounding box parameter is >= vmin and < vmax.
|
||||
* There is an "invert" flag which allows to select all polygons not
|
||||
* There is an "invert" flag which allows selecting all polygons not
|
||||
* matching the criterion.
|
||||
*
|
||||
* For bounding box parameters the following choices are available:
|
||||
|
|
|
|||
|
|
@ -1,11 +1,8 @@
|
|||
<RCC>
|
||||
<qresource prefix="/fonts">
|
||||
<file>std_font.gds</file>
|
||||
</qresource>
|
||||
<qresource prefix="/built-in-macros" >
|
||||
<qresource prefix="/built-in-macros">
|
||||
<file alias="pcell_declaration_helper.lym">built-in-macros/pcell_declaration_helper.lym</file>
|
||||
</qresource>
|
||||
<qresource prefix="/built-in-pymacros" >
|
||||
<qresource prefix="/built-in-pymacros">
|
||||
<file alias="pcell_declaration_helper.lym">built-in-pymacros/pcell_declaration_helper.lym</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
|
|||
|
|
@ -257,7 +257,7 @@ struct shape_ref
|
|||
/**
|
||||
* @brief The translation constructor.
|
||||
*
|
||||
* This constructor allows to copy a shape reference from one
|
||||
* This constructor allows one to copy a shape reference from one
|
||||
* repository to another
|
||||
*/
|
||||
shape_ref (const shape_ref<Sh, Trans> &ref, repository_type &rep)
|
||||
|
|
@ -272,7 +272,7 @@ struct shape_ref
|
|||
/**
|
||||
* @brief The translation operator.
|
||||
*
|
||||
* This assignment allows to assign a reference in one repository
|
||||
* This assignment allows assigning a reference in one repository
|
||||
* to a reference in another repository
|
||||
*/
|
||||
void translate (const shape_ref<Sh, Trans> &ref, repository_type &rep, db::ArrayRepository &)
|
||||
|
|
@ -288,7 +288,7 @@ struct shape_ref
|
|||
/**
|
||||
* @brief The translation operator with transformation.
|
||||
*
|
||||
* This assignment allows to assign a reference in one repository
|
||||
* This assignment allows assigning a reference in one repository
|
||||
* to a reference in another repository
|
||||
*/
|
||||
template <class T>
|
||||
|
|
@ -309,7 +309,7 @@ struct shape_ref
|
|||
/**
|
||||
* @brief The translation operator.
|
||||
*
|
||||
* This operator allows to change a reference to another repository.
|
||||
* This operator allows changing a reference to another repository.
|
||||
*/
|
||||
void translate (repository_type &rep)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ class ArrayRepository;
|
|||
* @brief A generic shape iterator
|
||||
*
|
||||
* This iterator can iterate any kind of shape from a "shapes" container.
|
||||
* It allows to select certain kind of shapes. The dereferecing operator
|
||||
* It allows selecting certain kind of shapes. The dereferecing operator
|
||||
* returns a shape proxy object that can be used to access the actual shape.
|
||||
* It can iterator over all shapes and over a region selected.
|
||||
* If the iterator is constructed, it always points to the beginning of the
|
||||
|
|
@ -208,7 +208,7 @@ public:
|
|||
* @param box The region to select
|
||||
* @param mode See above
|
||||
* @param flags The kind of shapes to iterate over (or-ed constants of flags_type)
|
||||
* @param prop_sel The propery selection
|
||||
* @param prop_sel The property selection
|
||||
* @param inv_prop_sel True, if shapes not matching the property selection shall be reported
|
||||
*/
|
||||
ShapeIterator (const shapes_type &shapes, const box_type &box, region_mode mode, unsigned int flags = All, const property_selector *prop_sel = 0, bool inv_prop_sel = false);
|
||||
|
|
@ -514,7 +514,7 @@ public:
|
|||
* @brief Default ctor: create an empty collection of shapes without external references
|
||||
*
|
||||
* Such shape containers can be used for example to store temporary shape sets
|
||||
* This version allows to specify whether the container should be created in editable mode
|
||||
* This version allows one to specify whether the container should be created in editable mode
|
||||
* or insert-once mode.
|
||||
*/
|
||||
Shapes (bool editable)
|
||||
|
|
@ -607,7 +607,7 @@ public:
|
|||
/**
|
||||
* @brief Assignment operator with transformation and property id mapping
|
||||
*
|
||||
* This version allows to specify a property mapping function. That way, shapes can be copied from
|
||||
* This version allows one to specify a property mapping function. That way, shapes can be copied from
|
||||
* one layout space to another.
|
||||
*/
|
||||
template <class T, class PropIdMap>
|
||||
|
|
@ -620,7 +620,7 @@ public:
|
|||
/**
|
||||
* @brief Assignment operator with property id mapping
|
||||
*
|
||||
* In contrast to the operator= version allows to specify a property mapping function. That way, shapes can be copied from
|
||||
* In contrast to the operator= version allows one to specify a property mapping function. That way, shapes can be copied from
|
||||
* one layout space to another.
|
||||
*/
|
||||
template <class PropIdMap>
|
||||
|
|
@ -676,7 +676,7 @@ public:
|
|||
*
|
||||
* This method insert all shapes from the given shape container using the specified transformation.
|
||||
*
|
||||
* This version allows to specify a property mapping function. That way, shapes can be copied from
|
||||
* This version allows one to specify a property mapping function. That way, shapes can be copied from
|
||||
* one layout space to another.
|
||||
*/
|
||||
template <class T, class PropIdMap>
|
||||
|
|
@ -715,7 +715,7 @@ public:
|
|||
*
|
||||
* This method insert all shapes from the given shape container using the specified transformation.
|
||||
*
|
||||
* In contrast to the operator= version allows to specify a property mapping function. That way, shapes can be copied from
|
||||
* In contrast to the operator= version allows one to specify a property mapping function. That way, shapes can be copied from
|
||||
* one layout space to another.
|
||||
*/
|
||||
template <class PropIdMap>
|
||||
|
|
|
|||
|
|
@ -33,10 +33,10 @@ namespace db
|
|||
/**
|
||||
* @brief A traits class for the various shape types
|
||||
*
|
||||
* This class provides informations about various properties of the shape class, i.e.
|
||||
* - wether the objects must be dereferenced into standanlone containers
|
||||
* - wether the objects are arrays, potentially using the array repository
|
||||
* - wether the objects have properties
|
||||
* This class provides information about various properties of the shape class, i.e.
|
||||
* - whether the objects must be dereferenced into standanlone containers
|
||||
* - whether the objects are arrays, potentially using the array repository
|
||||
* - whether the objects have properties
|
||||
*/
|
||||
template <class Sh>
|
||||
struct shape_traits
|
||||
|
|
|
|||
|
|
@ -99,12 +99,12 @@ struct DB_PUBLIC LDPair
|
|||
*
|
||||
* The mapping object provides a lookup for a given input layer
|
||||
* (called "physical layer") to a logical layer specified as
|
||||
* a layer index used inside db::Layout. The object allows to
|
||||
* look up a layer index for a given layer/datatype/name.
|
||||
* a layer index used inside db::Layout. The object allows
|
||||
* looking up a layer index for a given layer/datatype/name.
|
||||
*
|
||||
* It also allows to specify a target layer per logical layer. That
|
||||
* It also allows one to specify a target layer per logical layer. That
|
||||
* is the information attached to the layer when it is actually created.
|
||||
* This allows to map an input layer to another layer specification
|
||||
* This allows mapping an input layer to another layer specification
|
||||
* and effectively rename a layer or add layer name information to
|
||||
* a GDS layer/datatype layer.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ inline void mem_stat (MemStatistics *stat, MemStatistics::purpose_t purpose, int
|
|||
* @brief A string repository class
|
||||
*
|
||||
* A string repository holds StringRef objects.
|
||||
* It acts as a factory for StringRef objects and allows to rename strings.
|
||||
* It acts as a factory for StringRef objects and allows one to rename strings.
|
||||
*/
|
||||
class DB_PUBLIC StringRepository
|
||||
{
|
||||
|
|
@ -987,7 +987,7 @@ struct text_ref
|
|||
/**
|
||||
* @brief The translation constructor.
|
||||
*
|
||||
* This constructor allows to copy a text reference from one
|
||||
* This constructor allows one to copy a text reference from one
|
||||
* repository to another
|
||||
*/
|
||||
text_ref (const text_ref &ref, repository_type &rep)
|
||||
|
|
@ -999,7 +999,7 @@ struct text_ref
|
|||
/**
|
||||
* @brief The transformation translation constructor
|
||||
*
|
||||
* This constructor allows to copy a text reference with a certain transformation
|
||||
* This constructor allows one to copy a text reference with a certain transformation
|
||||
* to one with another transformation
|
||||
*/
|
||||
template <class TransIn>
|
||||
|
|
|
|||
|
|
@ -910,7 +910,7 @@ TilingProcessor::execute (const std::string &desc)
|
|||
}
|
||||
|
||||
if (job.has_error ()) {
|
||||
throw tl::Exception (tl::to_string (tr ("Errors occured during processing. First error message says:\n")) + job.error_messages ().front ());
|
||||
throw tl::Exception (tl::to_string (tr ("Errors occurred during processing. First error message says:\n")) + job.error_messages ().front ());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -739,7 +739,7 @@ public:
|
|||
/**
|
||||
* @brief The copy constructor that converts also
|
||||
*
|
||||
* The copy constructor allows to convert between different
|
||||
* The copy constructor allows converting between different
|
||||
* coordinate types, if possible.
|
||||
*
|
||||
* @param d The source from which to copy
|
||||
|
|
@ -1093,7 +1093,7 @@ public:
|
|||
/**
|
||||
* @brief The copy constructor that converts to a different coordinate type also
|
||||
*
|
||||
* The copy constructor allows to convert between different
|
||||
* The copy constructor allows converting between different
|
||||
* coordinate types, if possible.
|
||||
*
|
||||
* @param d The source from which to copy
|
||||
|
|
@ -1433,7 +1433,7 @@ operator<< (std::ostream &os, const simple_trans<C> &t)
|
|||
/**
|
||||
* @brief A complex transformation
|
||||
*
|
||||
* A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitary
|
||||
* A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitrary
|
||||
* angle and a displacement. The template parameters for this transformation are
|
||||
* I (the input coordinate type), F (the output coordinate type) and R (the representation
|
||||
* type used internally for representing the floating-point members).
|
||||
|
|
@ -1625,7 +1625,7 @@ public:
|
|||
/**
|
||||
* @brief The copy constructor that converts also
|
||||
*
|
||||
* The copy constructor allows to convert between different
|
||||
* The copy constructor allows converting between different
|
||||
* coordinate types, if possible.
|
||||
*
|
||||
* @param d The source from which to copy
|
||||
|
|
@ -2134,7 +2134,7 @@ public:
|
|||
/**
|
||||
* @brief String conversion
|
||||
*
|
||||
* The lazy and micron flags allow to customize the output somewhat.
|
||||
* The lazy and micron flags allow customization of the output to some degree.
|
||||
* When lazy is set to true, output that is not required (i.e. magnification when 1)
|
||||
* is dropped. If dbu is set, the coordinates are multiplied with this factor to render micron units.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -382,7 +382,7 @@ struct coord_traits<int64_t>
|
|||
/**
|
||||
* @brief Coord_traits specialisation for double coordinates
|
||||
*
|
||||
* The precision is choosen such that the double coordinate
|
||||
* The precision is chosen such that the double coordinate
|
||||
* can represent "micrometers" with a physical resolution limit of 0.01 nm.
|
||||
* The area precision will render reliable vector product signs for vectors
|
||||
* of roughly up to 60 mm length.
|
||||
|
|
|
|||
|
|
@ -435,7 +435,7 @@ public:
|
|||
/**
|
||||
* @brief The generic factory
|
||||
*
|
||||
* This factory allows to create a user object from a given string and class name.
|
||||
* This factory creates an user object from a given string and class name.
|
||||
*/
|
||||
template <class C>
|
||||
class user_object_factory
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@ public:
|
|||
/**
|
||||
* @brief The copy constructor that converts also
|
||||
*
|
||||
* The copy constructor allows to convert between different
|
||||
* The copy constructor allows converting between different
|
||||
* coordinate types, if possible.
|
||||
*
|
||||
* @param d The source from which to copy
|
||||
|
|
@ -312,7 +312,7 @@ public:
|
|||
* @brief String conversion
|
||||
*
|
||||
* If dbu is set, it determines the factor by which the coordinates are multiplied to render
|
||||
* micron units. In addition, a micron format is choosen for output of these coordinates.
|
||||
* micron units. In addition, a micron format is chosen for output of these coordinates.
|
||||
*/
|
||||
std::string
|
||||
to_string (double dbu) const
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -1805,7 +1805,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
|
|||
"@args file_name, options\n"
|
||||
"The format of the file will be determined from the file name. Only the cell and "
|
||||
"it's subtree below will be saved.\n"
|
||||
"In contrast to the other 'write' method, this version allows to specify save options, i.e. "
|
||||
"In contrast to the other 'write' method, this version allows one to specify save options, i.e. "
|
||||
"scaling etc.\n"
|
||||
"\n"
|
||||
"This method has been introduced in version 0.23.\n"
|
||||
|
|
@ -1814,7 +1814,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
|
|||
"@brief Returns the shapes list of the given layer\n"
|
||||
"@args layer_index\n"
|
||||
"\n"
|
||||
"This method allows to access the shapes list on a certain layer.\n"
|
||||
"This method gives access to the shapes list on a certain layer.\n"
|
||||
"If the layer does not exist yet, it is created.\n"
|
||||
"\n"
|
||||
"@param index The layer index of the shapes list to retrieve\n"
|
||||
|
|
@ -1926,7 +1926,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
|
|||
"\n"
|
||||
"This deletes all sub cells of the cell which are not used otherwise.\n"
|
||||
"All instances of the deleted cells are deleted as well.\n"
|
||||
"A version of this method exists which allows to specify the number of hierarchy levels "
|
||||
"A version of this method exists which allows one to specify the number of hierarchy levels "
|
||||
"to which subcells are considered.\n"
|
||||
"\n"
|
||||
"This method has been introduced in version 0.23.\n"
|
||||
|
|
@ -1948,7 +1948,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
|
|||
"\n"
|
||||
"This deletes the cell and also all sub cells of the cell which are not used otherwise.\n"
|
||||
"All instances of this cell are deleted as well.\n"
|
||||
"A version of this method exists which allows to specify the number of hierarchy levels "
|
||||
"A version of this method exists which allows one to specify the number of hierarchy levels "
|
||||
"to which subcells are considered.\n"
|
||||
"\n"
|
||||
"After the cell has been deleted, the Cell object becomes invalid. Do "
|
||||
|
|
@ -1980,7 +1980,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
|
|||
"It also removes the instances of the cells from which the shapes came from, but does not remove the cells themselves if prune is set to false.\n"
|
||||
"If prune is set to true, these cells are removed if not used otherwise.\n"
|
||||
"\n"
|
||||
"A version of this method exists which allows to specify the number of hierarchy levels "
|
||||
"A version of this method exists which allows one to specify the number of hierarchy levels "
|
||||
"to which subcells are considered.\n"
|
||||
"\n"
|
||||
"@param prune Set to true to remove orphan cells.\n"
|
||||
|
|
@ -2016,7 +2016,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
|
|||
"The algorithm supports a global fill raster as well as local (per-polygon) origin optimization. In the latter case "
|
||||
"the origin of the regular raster is optimized per individual polygon of the fill region.\n"
|
||||
"\n"
|
||||
"A more elaborate version of this method is available which also returns informations about the non-filled parts.\n"
|
||||
"A more elaborate version of this method is available which also returns information about the non-filled parts.\n"
|
||||
"\n"
|
||||
"This method has been introduced in version 0.23.\n"
|
||||
) +
|
||||
|
|
@ -2045,7 +2045,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
|
|||
"'remaining_parts' and 'remaining_polygons' can be identical with the input. In that case the input will be overwritten with "
|
||||
"the respective output. Otherwise, the respective polygons are added to these regions.\n"
|
||||
"\n"
|
||||
"This allows to set up a more elaborate fill scheme using multiple iterations and local origin-optimization ('origin' is nil):\n"
|
||||
"This allows setting up a more elaborate fill scheme using multiple iterations and local origin-optimization ('origin' is nil):\n"
|
||||
"\n"
|
||||
"@code\n"
|
||||
"r = ... # region to fill\n"
|
||||
|
|
@ -2493,7 +2493,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
|
|||
gsi::method ("insert", (db::Instance (db::Cell::*)(const db::Instance &)) &db::Cell::insert, gsi::arg ("inst"),
|
||||
"@brief Inserts a cell instance given by another reference\n"
|
||||
"@return An Instance object representing the new instance\n"
|
||||
"This method allows to copy instances taken from a reference (an \\Instance object).\n"
|
||||
"This method allows one to copy instances taken from a reference (an \\Instance object).\n"
|
||||
"This method is not suited to inserting instances from other Layouts into this cell. For this "
|
||||
"purpose, the hierarchical copy methods of \\Layout have to be used.\n"
|
||||
"\n"
|
||||
|
|
@ -2914,7 +2914,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
|
|||
"@brief Returns a reference to the PCell declaration\n"
|
||||
"If this cell is not a PCell variant, this method returns nil.\n"
|
||||
"PCell variants are proxy cells which are PCell incarnations for a specific parameter set.\n"
|
||||
"The \\PCellDeclaration object allows to retrieve PCell parameter definitions for example.\n"
|
||||
"The \\PCellDeclaration object allows one to retrieve PCell parameter definitions for example.\n"
|
||||
"\n"
|
||||
"This method has been introduced in version 0.22.\n"
|
||||
) +
|
||||
|
|
@ -2922,7 +2922,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
|
|||
"@brief Returns the PCell declaration of a pcell instance\n"
|
||||
"@args instance\n"
|
||||
"If the instance is not a PCell instance, this method returns nil.\n"
|
||||
"The \\PCellDeclaration object allows to retrieve PCell parameter definitions for example.\n"
|
||||
"The \\PCellDeclaration object allows one to retrieve PCell parameter definitions for example.\n"
|
||||
"\n"
|
||||
"This method has been introduced in version 0.22.\n"
|
||||
) +
|
||||
|
|
@ -3060,7 +3060,7 @@ Class<db::Cell> decl_Cell ("db", "Cell",
|
|||
"@brief A cell\n"
|
||||
"\n"
|
||||
"A cell object consists of a set of shape containers (called layers),\n"
|
||||
"a set of child cell instances and auxiliary informations such as\n"
|
||||
"a set of child cell instances and auxiliary information such as\n"
|
||||
"the parent instance list.\n"
|
||||
"A cell is identified through an index given to the cell upon instantiation.\n"
|
||||
"Cell instances refer to single instances or array instances. Both are encapsulated in the\n"
|
||||
|
|
|
|||
|
|
@ -630,7 +630,7 @@ Class<db::Edge> decl_Edge ("db", "Edge",
|
|||
"An edge is a connection between points, usually participating in a larger context "
|
||||
"such as a polygon. An edge has a defined direction (from p1 to p2). "
|
||||
"Edges play a role in the database as parts of polygons and to describe a line through both points.\n"
|
||||
"Altough supported, edges are rarely used as individual database objects.\n"
|
||||
"Although supported, edges are rarely used as individual database objects.\n"
|
||||
"\n"
|
||||
"See @<a href=\"/programming/database_api.xml\">The Database API@</a> for more details about the "
|
||||
"database objects like the Edge class."
|
||||
|
|
@ -678,7 +678,7 @@ Class<db::DEdge> decl_DEdge ("db", "DEdge",
|
|||
"such as a polygon. An edge has a defined direction (from p1 to p2). "
|
||||
"Edges play a role in the database as parts of polygons and to describe a line through both points.\n"
|
||||
"The \\Edge object is also used inside the boolean processor (\\EdgeProcessor).\n"
|
||||
"Altough supported, edges are rarely used as individual database objects.\n"
|
||||
"Although supported, edges are rarely used as individual database objects.\n"
|
||||
"\n"
|
||||
"See @<a href=\"/programming/database_api.xml\">The Database API@</a> for more details about the "
|
||||
"database objects like the Edge class."
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ struct edge_pair_defs
|
|||
"The polygon is formed by connecting the end and start points of the edges. It is recommended to "
|
||||
"use \\normalized before converting the edge pair to a polygon.\n"
|
||||
"\n"
|
||||
"The enlargement parameter allows to apply the specified enlargement parallel and perpendicular to the "
|
||||
"The enlargement parameter applies the specified enlargement parallel and perpendicular to the "
|
||||
"edges. Basically this introduces a bias which blows up edge pairs by the specified amount. That parameter "
|
||||
"is useful to convert degenerated edge pairs to valid polygons, i.e. edge pairs with coincident edges and "
|
||||
"edge pairs consisting of two point-like edges.\n"
|
||||
|
|
@ -119,7 +119,7 @@ struct edge_pair_defs
|
|||
"The polygon is formed by connecting the end and start points of the edges. It is recommended to "
|
||||
"use \\normalized before converting the edge pair to a polygon.\n"
|
||||
"\n"
|
||||
"The enlargement parameter allows to apply the specified enlargement parallel and perpendicular to the "
|
||||
"The enlargement parameter applies the specified enlargement parallel and perpendicular to the "
|
||||
"edges. Basically this introduces a bias which blows up edge pairs by the specified amount. That parameter "
|
||||
"is useful to convert degenerated edge pairs to valid polygons, i.e. edge pairs with coincident edges and "
|
||||
"edge pairs consisting of two point-like edges.\n"
|
||||
|
|
|
|||
|
|
@ -485,7 +485,7 @@ Class<db::EdgePairs> decl_EdgePairs ("db", "EdgePairs",
|
|||
"@args e\n"
|
||||
"This method creates polygons from the edge pairs. Each polygon will be a triangle or quadrangle "
|
||||
"which connects the start and end points of the edges forming the edge pair. "
|
||||
"This version allows to specify an enlargement which is applied to the edges. The length of the edges is "
|
||||
"This version allows one to specify an enlargement which is applied to the edges. The length of the edges is "
|
||||
"modified by applying the enlargement and the edges are shifted by the enlargement. By specifying an "
|
||||
"enlargement it is possible to give edge pairs an area which otherwise would not have one (coincident edges, "
|
||||
"two point-like edges)."
|
||||
|
|
|
|||
|
|
@ -222,7 +222,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
|
|||
"This method has been added in version 0.22.\n"
|
||||
"\n"
|
||||
"The mode specifies the rule to use when producing output. A value of 0 specifies the even-odd rule. "
|
||||
"A positive value specfies the wrap count threshold (postive only). A negative value specifies the "
|
||||
"A positive value specifies the wrap count threshold (positive only). A negative value specifies the "
|
||||
"threshold of the absolute value of the wrap count (i.e. -1 is non-zero rule).\n"
|
||||
"\n"
|
||||
"@param mode See description\n"
|
||||
|
|
@ -238,7 +238,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
|
|||
"The other merge operation provided for this purpose is \"merge\" which normalizes each polygon individually before\n"
|
||||
"merging them. \"simple_merge\" is somewhat faster and consumes less memory.\n"
|
||||
"\n"
|
||||
"This method produces polygons and allows to fine-tune the parameters for that purpose.\n"
|
||||
"This method produces polygons and allows fine-tuning of the parameters for that purpose.\n"
|
||||
"\n"
|
||||
"This is a convenience method that bundles filling of the edges, processing with\n"
|
||||
"a SimpleMerge operator and puts the result into an output vector.\n"
|
||||
|
|
@ -260,7 +260,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
|
|||
"The other merge operation provided for this purpose is \"merge\" which normalizes each polygon individually before\n"
|
||||
"merging them. \"simple_merge\" is somewhat faster and consumes less memory.\n"
|
||||
"\n"
|
||||
"This method produces polygons and allows to fine-tune the parameters for that purpose.\n"
|
||||
"This method produces polygons and allows fine-tuning of the parameters for that purpose.\n"
|
||||
"\n"
|
||||
"This is a convenience method that bundles filling of the edges, processing with\n"
|
||||
"a SimpleMerge operator and puts the result into an output vector.\n"
|
||||
|
|
@ -268,7 +268,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
|
|||
"This method has been added in version 0.22.\n"
|
||||
"\n"
|
||||
"The mode specifies the rule to use when producing output. A value of 0 specifies the even-odd rule. "
|
||||
"A positive value specfies the wrap count threshold (postive only). A negative value specifies the "
|
||||
"A positive value specifies the wrap count threshold (positive only). A negative value specifies the "
|
||||
"threshold of the absolute value of the wrap count (i.e. -1 is non-zero rule).\n"
|
||||
"\n"
|
||||
"@param mode See description\n"
|
||||
|
|
@ -281,7 +281,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
|
|||
"@brief Merge the given edges in a simple \"non-zero wrapcount\" fashion\n"
|
||||
"@args in\n"
|
||||
"\n"
|
||||
"The egdes provided must form valid closed contours. Contours oriented differently \"cancel\" each other. \n"
|
||||
"The edges provided must form valid closed contours. Contours oriented differently \"cancel\" each other. \n"
|
||||
"Overlapping contours are merged when the orientation is the same.\n"
|
||||
"\n"
|
||||
"The result is presented as a set of edges forming closed contours. Hulls are oriented clockwise while\n"
|
||||
|
|
@ -300,7 +300,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
|
|||
"@brief Merge the given polygons and specify the merge mode\n"
|
||||
"@args in, mode\n"
|
||||
"\n"
|
||||
"The egdes provided must form valid closed contours. Contours oriented differently \"cancel\" each other. \n"
|
||||
"The edges provided must form valid closed contours. Contours oriented differently \"cancel\" each other. \n"
|
||||
"Overlapping contours are merged when the orientation is the same.\n"
|
||||
"\n"
|
||||
"The result is presented as a set of edges forming closed contours. Hulls are oriented clockwise while\n"
|
||||
|
|
@ -312,7 +312,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
|
|||
"This method has been added in version 0.22.\n"
|
||||
"\n"
|
||||
"The mode specifies the rule to use when producing output. A value of 0 specifies the even-odd rule. "
|
||||
"A positive value specfies the wrap count threshold (postive only). A negative value specifies the "
|
||||
"A positive value specifies the wrap count threshold (positive only). A negative value specifies the "
|
||||
"threshold of the absolute value of the wrap count (i.e. -1 is non-zero rule).\n"
|
||||
"\n"
|
||||
"@param mode See description\n"
|
||||
|
|
@ -323,10 +323,10 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
|
|||
"@brief Merge the given edges in a simple \"non-zero wrapcount\" fashion into polygons\n"
|
||||
"@args in, resolve_holes, min_coherence\n"
|
||||
"\n"
|
||||
"The egdes provided must form valid closed contours. Contours oriented differently \"cancel\" each other. \n"
|
||||
"The edges provided must form valid closed contours. Contours oriented differently \"cancel\" each other. \n"
|
||||
"Overlapping contours are merged when the orientation is the same.\n"
|
||||
"\n"
|
||||
"This method produces polygons and allows to fine-tune the parameters for that purpose.\n"
|
||||
"This method produces polygons and allows fine-tuning of the parameters for that purpose.\n"
|
||||
"\n"
|
||||
"This is a convenience method that bundles filling of the edges, processing with\n"
|
||||
"a SimpleMerge operator and puts the result into an output vector.\n"
|
||||
|
|
@ -343,10 +343,10 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
|
|||
"@brief Merge the given polygons and specify the merge mode\n"
|
||||
"@args in, resolve_holes, min_coherence, mode\n"
|
||||
"\n"
|
||||
"The egdes provided must form valid closed contours. Contours oriented differently \"cancel\" each other. \n"
|
||||
"The edges provided must form valid closed contours. Contours oriented differently \"cancel\" each other. \n"
|
||||
"Overlapping contours are merged when the orientation is the same.\n"
|
||||
"\n"
|
||||
"This method produces polygons and allows to fine-tune the parameters for that purpose.\n"
|
||||
"This method produces polygons and allows fine-tuning of the parameters for that purpose.\n"
|
||||
"\n"
|
||||
"This is a convenience method that bundles filling of the edges, processing with\n"
|
||||
"a SimpleMerge operator and puts the result into an output vector.\n"
|
||||
|
|
@ -354,7 +354,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
|
|||
"This method has been added in version 0.22.\n"
|
||||
"\n"
|
||||
"The mode specifies the rule to use when producing output. A value of 0 specifies the even-odd rule. "
|
||||
"A positive value specfies the wrap count threshold (postive only). A negative value specifies the "
|
||||
"A positive value specifies the wrap count threshold (positive only). A negative value specifies the "
|
||||
"threshold of the absolute value of the wrap count (i.e. -1 is non-zero rule).\n"
|
||||
"\n"
|
||||
"@param mode See description\n"
|
||||
|
|
@ -369,7 +369,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
|
|||
"\n"
|
||||
"In contrast to \"simple_merge\", this merge implementation considers each polygon individually before merging them.\n"
|
||||
"Thus self-overlaps are effectively removed before the output is computed and holes are correctly merged with the\n"
|
||||
"hull. In addition, this method allows to select areas with a higher wrap count which allows to compute overlaps\n"
|
||||
"hull. In addition, this method allows selecting areas with a higher wrap count which in turn allows computing overlaps\n"
|
||||
"of polygons on the same layer. Because this method merges the polygons before the overlap is computed, self-overlapping\n"
|
||||
"polygons do not contribute to higher wrap count areas.\n"
|
||||
"\n"
|
||||
|
|
@ -389,11 +389,11 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
|
|||
"\n"
|
||||
"In contrast to \"simple_merge\", this merge implementation considers each polygon individually before merging them.\n"
|
||||
"Thus self-overlaps are effectively removed before the output is computed and holes are correctly merged with the\n"
|
||||
"hull. In addition, this method allows to select areas with a higher wrap count which allows to compute overlaps\n"
|
||||
"hull. In addition, this method allows selecting areas with a higher wrap count which in turn allows computing overlaps\n"
|
||||
"of polygons on the same layer. Because this method merges the polygons before the overlap is computed, self-overlapping\n"
|
||||
"polygons do not contribute to higher wrap count areas.\n"
|
||||
"\n"
|
||||
"This method produces polygons and allows to fine-tune the parameters for that purpose.\n"
|
||||
"This method produces polygons and allows fine-tuning of the parameters for that purpose.\n"
|
||||
"\n"
|
||||
"Prior to version 0.21 this method was called 'merge_to_polygon'. Is was renamed to avoid ambiguities "
|
||||
"for empty input arrays. The old version is still available but deprecated.\n"
|
||||
|
|
@ -412,7 +412,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
|
|||
"on the individual result polygons of the merge step. The result may contain overlapping contours, but no self-overlaps. \n"
|
||||
"\n"
|
||||
"dx and dy describe the sizing. A positive value indicates oversize (outwards) while a negative one describes undersize (inwards).\n"
|
||||
"The sizing applied can be choosen differently in x and y direction. In this case, the sign must be identical for both\n"
|
||||
"The sizing applied can be chosen differently in x and y direction. In this case, the sign must be identical for both\n"
|
||||
"dx and dy.\n"
|
||||
"\n"
|
||||
"The 'mode' parameter describes the corner fill strategy. Mode 0 connects all corner segments directly. Mode 1 is the 'octagon' strategy in which "
|
||||
|
|
@ -441,7 +441,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
|
|||
"Polygon overlap occures if the polygons are close enough, so a positive sizing makes polygons overlap.\n"
|
||||
"\n"
|
||||
"dx and dy describe the sizing. A positive value indicates oversize (outwards) while a negative one describes undersize (inwards).\n"
|
||||
"The sizing applied can be choosen differently in x and y direction. In this case, the sign must be identical for both\n"
|
||||
"The sizing applied can be chosen differently in x and y direction. In this case, the sign must be identical for both\n"
|
||||
"dx and dy.\n"
|
||||
"\n"
|
||||
"The 'mode' parameter describes the corner fill strategy. Mode 0 connects all corner segments directly. Mode 1 is the 'octagon' strategy in which "
|
||||
|
|
@ -449,7 +449,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
|
|||
"edges form a sharp bend with an angle of more than 90 degree. In that case, the corners are cut off. In Mode 3, no cutoff occures up to a bending angle of 135 degree. "
|
||||
"Mode 4 and 5 are even more aggressive and allow very sharp bends without cutoff. This strategy may produce long spikes on sharply bending corners. "
|
||||
"\n"
|
||||
"This method produces polygons and allows to fine-tune the parameters for that purpose.\n"
|
||||
"This method produces polygons and allows fine-tuning of the parameters for that purpose.\n"
|
||||
"\n"
|
||||
"Prior to version 0.21 this method was called 'size_to_polygon'. Is was renamed to avoid ambiguities "
|
||||
"for empty input arrays. The old version is still available but deprecated.\n"
|
||||
|
|
@ -516,7 +516,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
|
|||
"@args a, b, mode, resolve_holes, min_coherence\n"
|
||||
"\n"
|
||||
"This method computes the result for the given boolean operation on two sets of polygons.\n"
|
||||
"This method produces polygons on output and allows to fine-tune the parameters for that purpose.\n"
|
||||
"This method produces polygons on output and allows fine-tuning of the parameters for that purpose.\n"
|
||||
"\n"
|
||||
"This is a convenience method that bundles filling of the edges, processing with\n"
|
||||
"a Boolean operator and puts the result into an output vector.\n"
|
||||
|
|
@ -558,7 +558,7 @@ Class<db::EdgeProcessor> decl_EdgeProcessor ("db", "EdgeProcessor",
|
|||
"The input edges must form closed contours where holes and hulls must be oriented differently. \n"
|
||||
"The input edges are processed with a simple non-zero wrap count rule as a whole.\n"
|
||||
"\n"
|
||||
"This method produces polygons on output and allows to fine-tune the parameters for that purpose.\n"
|
||||
"This method produces polygons on output and allows fine-tuning of the parameters for that purpose.\n"
|
||||
"\n"
|
||||
"Prior to version 0.21 this method was called 'boolean_to_polygon'. Is was renamed to avoid ambiguities "
|
||||
"for empty input arrays. The old version is still available but deprecated.\n"
|
||||
|
|
|
|||
|
|
@ -423,7 +423,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
|
|||
"The edges form the contours of the polygons.\n"
|
||||
) +
|
||||
constructor ("new", &new_a2, gsi::arg ("array"),
|
||||
"@brief Constructor from an egde array\n"
|
||||
"@brief Constructor from an edge array\n"
|
||||
"\n"
|
||||
"This constructor creates a region from an array of edges.\n"
|
||||
) +
|
||||
|
|
@ -500,7 +500,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
|
|||
"\n"
|
||||
"This constructor creates an edge collection from the shapes delivered by the given recursive shape iterator.\n"
|
||||
"It feeds the shapes from a hierarchy of cells into the hierarchical edge set.\n"
|
||||
"The edges remain within their original hierachy unless other operations require the edges to be moved in the hierarchy.\n"
|
||||
"The edges remain within their original hierarchy unless other operations require the edges to be moved in the hierarchy.\n"
|
||||
"\n"
|
||||
"Text objects are not inserted, because they cannot be converted to edges.\n"
|
||||
"Edge objects are inserted as such. If \"as_edges\" is true, \"solid\" objects (boxes, polygons, paths) are converted to edges which "
|
||||
|
|
@ -519,7 +519,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
|
|||
"\n"
|
||||
"This constructor creates an edge collection from the shapes delivered by the given recursive shape iterator.\n"
|
||||
"It feeds the shapes from a hierarchy of cells into the hierarchical edge set.\n"
|
||||
"The edges remain within their original hierachy unless other operations require the edges to be moved in the hierarchy.\n"
|
||||
"The edges remain within their original hierarchy unless other operations require the edges to be moved in the hierarchy.\n"
|
||||
"The transformation is useful to scale to a specific database unit for example.\n"
|
||||
"\n"
|
||||
"Text objects are not inserted, because they cannot be converted to edges.\n"
|
||||
|
|
@ -550,7 +550,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
|
|||
"@code\n"
|
||||
"dots = RBA::Edges::new(iter, \"*\") # all texts\n"
|
||||
"dots = RBA::Edges::new(iter, \"A*\") # all texts starting with an 'A'\n"
|
||||
"dots = RBA::Edges::new(iter, \"A*\", false) # all texts exactly matchin 'A*'\n"
|
||||
"dots = RBA::Edges::new(iter, \"A*\", false) # all texts exactly matching 'A*'\n"
|
||||
"@/code\n"
|
||||
"\n"
|
||||
"This method has been introduced in version 0.26.\n"
|
||||
|
|
@ -571,7 +571,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
|
|||
"@code\n"
|
||||
"region = RBA::Region::new(iter, dss, \"*\") # all texts\n"
|
||||
"region = RBA::Region::new(iter, dss, \"A*\") # all texts starting with an 'A'\n"
|
||||
"region = RBA::Region::new(iter, dss, \"A*\", false) # all texts exactly matchin 'A*'\n"
|
||||
"region = RBA::Region::new(iter, dss, \"A*\", false) # all texts exactly matching 'A*'\n"
|
||||
"@/code\n"
|
||||
"\n"
|
||||
"This method has been introduced in version 0.26.\n"
|
||||
|
|
@ -1062,7 +1062,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
|
|||
"To understand the overlap check for edges, one has to be familiar with the concept of the inside and outside "
|
||||
"interpretation of an edge. An edge is considered a boundary between \"inside\" and \"outside\" where \"inside\" "
|
||||
"is right to the edge. Although there is not necessarily a contiguous region for edges, the definition of the "
|
||||
"inside part allows to specify edge relations which are denoted by \"space\", \"width\", \"inside\" and \"enclosing\". "
|
||||
"inside part allows one to specify edge relations which are denoted by \"space\", \"width\", \"inside\" and \"enclosing\". "
|
||||
"In that sense, width means that another edge is anti-parallel and left to the edge under test with a distance of less than the given "
|
||||
"threshold."
|
||||
"\n"
|
||||
|
|
@ -1096,7 +1096,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
|
|||
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
|
||||
"Use nil for this value to select the default.\n"
|
||||
"\n"
|
||||
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
|
||||
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
|
||||
"It is sufficient if the projection of one edge on the other matches the specified condition. "
|
||||
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
|
||||
"If you don't want to specify one threshold, pass nil to the respective value.\n"
|
||||
|
|
@ -1107,7 +1107,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
|
|||
"To understand the space check for edges, one has to be familiar with the concept of the inside and outside "
|
||||
"interpretation of an edge. An edge is considered a boundary between \"inside\" and \"outside\" where \"inside\" "
|
||||
"is right to the edge. Although there is not necessarily a contiguous region for edges, the definition of the "
|
||||
"inside part allows to specify edge relations which are denoted by \"space\", \"width\", \"inside\" and \"enclosing\". "
|
||||
"inside part allows one to specify edge relations which are denoted by \"space\", \"width\", \"inside\" and \"enclosing\". "
|
||||
"In that sense, space means that another edge is anti-parallel and right to the edge under test with a distance of less than the given "
|
||||
"threshold."
|
||||
"\n"
|
||||
|
|
@ -1141,7 +1141,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
|
|||
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
|
||||
"Use nil for this value to select the default.\n"
|
||||
"\n"
|
||||
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
|
||||
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
|
||||
"It is sufficient if the projection of one edge on the other matches the specified condition. "
|
||||
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
|
||||
"If you don't want to specify one threshold, pass nil to the respective value.\n"
|
||||
|
|
@ -1153,7 +1153,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
|
|||
"To understand the inside check for edges, one has to be familiar with the concept of the inside and outside "
|
||||
"interpretation of an edge. An edge is considered a boundary between \"inside\" and \"outside\" where \"inside\" "
|
||||
"is right to the edge. Although there is not necessarily a contiguous region for edges, the definition of the "
|
||||
"inside part allows to specify edge relations which are denoted by \"space\", \"width\", \"inside\" and \"enclosing\". "
|
||||
"inside part allows one to specify edge relations which are denoted by \"space\", \"width\", \"inside\" and \"enclosing\". "
|
||||
"In that sense, inside means that another edge is parallel and right to the edge under test with a distance of less than the given "
|
||||
"threshold."
|
||||
"\n"
|
||||
|
|
@ -1188,7 +1188,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
|
|||
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
|
||||
"Use nil for this value to select the default.\n"
|
||||
"\n"
|
||||
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
|
||||
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
|
||||
"It is sufficient if the projection of one edge on the other matches the specified condition. "
|
||||
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
|
||||
"If you don't want to specify one threshold, pass nil to the respective value.\n"
|
||||
|
|
@ -1200,7 +1200,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
|
|||
"To understand the enclosing check for edges, one has to be familiar with the concept of the inside and outside "
|
||||
"interpretation of an edge. An edge is considered a boundary between \"inside\" and \"outside\" where \"inside\" "
|
||||
"is right to the edge. Although there is not necessarily a contiguous region for edges, the definition of the "
|
||||
"inside part allows to specify edge relations which are denoted by \"space\", \"width\", \"inside\" and \"enclosing\". "
|
||||
"inside part allows one to specify edge relations which are denoted by \"space\", \"width\", \"inside\" and \"enclosing\". "
|
||||
"In that sense, enclosing means that another edge is parallel and left to the edge under test with a distance of less than the given "
|
||||
"threshold."
|
||||
"\n"
|
||||
|
|
@ -1235,7 +1235,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
|
|||
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
|
||||
"Use nil for this value to select the default.\n"
|
||||
"\n"
|
||||
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
|
||||
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
|
||||
"It is sufficient if the projection of one edge on the other matches the specified condition. "
|
||||
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
|
||||
"If you don't want to specify one threshold, pass nil to the respective value.\n"
|
||||
|
|
@ -1280,7 +1280,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
|
|||
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
|
||||
"Use nil for this value to select the default.\n"
|
||||
"\n"
|
||||
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
|
||||
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
|
||||
"It is sufficient if the projection of one edge on the other matches the specified condition. "
|
||||
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
|
||||
"If you don't want to specify one threshold, pass nil to the respective value.\n"
|
||||
|
|
@ -1325,7 +1325,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
|
|||
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
|
||||
"Use nil for this value to select the default.\n"
|
||||
"\n"
|
||||
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
|
||||
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
|
||||
"It is sufficient if the projection of one edge on the other matches the specified condition. "
|
||||
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
|
||||
"If you don't want to specify one threshold, pass nil to the respective value.\n"
|
||||
|
|
@ -1378,7 +1378,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
|
|||
"@param i the perpendicular extension to the \"inside\" (right side as seen in the dleftirection of the edge)\n"
|
||||
"@param join If true, connected edges are joined before the extension is applied\n"
|
||||
"@return A region containing the polygons representing these extended edges\n"
|
||||
"This is a generic version of \\extended_in and \\extended_out. It allows to specify extensions for all four "
|
||||
"This is a generic version of \\extended_in and \\extended_out. It allows one to specify extensions for all four "
|
||||
"directions of an edge and to join the edges before the extension is applied.\n"
|
||||
"\n"
|
||||
"For degenerated edges forming a point, a rectangle with the b, e, o and i used as left, right, top and bottom distance to the "
|
||||
|
|
@ -1390,7 +1390,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
|
|||
method ("start_segments", &db::Edges::start_segments, gsi::arg ("length"), gsi::arg ("fraction"),
|
||||
"@brief Returns edges representing a part of the edge after the start point\n"
|
||||
"@return A new collection of edges representing the start part\n"
|
||||
"This method allows to specify the length of these segments in a twofold way: either as a fixed length or "
|
||||
"This method allows one to specify the length of these segments in a twofold way: either as a fixed length or "
|
||||
"by specifying a fraction of the original length:\n"
|
||||
"\n"
|
||||
"@code\n"
|
||||
|
|
@ -1407,7 +1407,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
|
|||
method ("end_segments", &db::Edges::end_segments, gsi::arg ("length"), gsi::arg ("fraction"),
|
||||
"@brief Returns edges representing a part of the edge before the end point\n"
|
||||
"@return A new collection of edges representing the end part\n"
|
||||
"This method allows to specify the length of these segments in a twofold way: either as a fixed length or "
|
||||
"This method allows one to specify the length of these segments in a twofold way: either as a fixed length or "
|
||||
"by specifying a fraction of the original length:\n"
|
||||
"\n"
|
||||
"@code\n"
|
||||
|
|
@ -1424,7 +1424,7 @@ Class<db::Edges> dec_Edges ("db", "Edges",
|
|||
method ("centers", &db::Edges::centers, gsi::arg ("length"), gsi::arg ("fraction"),
|
||||
"@brief Returns edges representing the center part of the edges\n"
|
||||
"@return A new collection of edges representing the part around the center\n"
|
||||
"This method allows to specify the length of these segments in a twofold way: either as a fixed length or "
|
||||
"This method allows one to specify the length of these segments in a twofold way: either as a fixed length or "
|
||||
"by specifying a fraction of the original length:\n"
|
||||
"\n"
|
||||
"@code\n"
|
||||
|
|
|
|||
|
|
@ -887,7 +887,7 @@ Class<db::Layout> decl_Layout ("db", "Layout",
|
|||
"@args editable,manager\n"
|
||||
"\n"
|
||||
"This constructor specifies a manager object which is used to "
|
||||
"store undo information for example. It also allows to specify whether "
|
||||
"store undo information for example. It also allows one to specify whether "
|
||||
"the layout is editable. In editable mode, some optimisations are disabled "
|
||||
"and the layout can be manipulated through a variety of methods.\n"
|
||||
"\n"
|
||||
|
|
@ -1840,7 +1840,7 @@ Class<db::Layout> decl_Layout ("db", "Layout",
|
|||
"@return The cell index of the pcell variant proxy cell\n"
|
||||
"This method will create a PCell variant proxy for a local PCell definition.\n"
|
||||
"It will create the PCell variant for the given parameters. Note that this method \n"
|
||||
"does not allow to create PCell instances for PCell's located in a library. Use\n"
|
||||
"does not allow one to create PCell instances for PCell's located in a library. Use\n"
|
||||
"\\add_pcell_variant with the library parameter for that purpose.\n"
|
||||
"Unlike the variant using a list of parameters, this version allows specification\n"
|
||||
"of the parameters with a key/value dictionary. The keys are the parameter names\n"
|
||||
|
|
@ -1860,7 +1860,7 @@ Class<db::Layout> decl_Layout ("db", "Layout",
|
|||
"@return The cell index of the pcell variant proxy cell\n"
|
||||
"This method will create a PCell variant proxy for a local PCell definition.\n"
|
||||
"It will create the PCell variant for the given parameters. Note that this method \n"
|
||||
"does not allow to create PCell instances for PCell's located in a library. Use\n"
|
||||
"does not allow one to create PCell instances for PCell's located in a library. Use\n"
|
||||
"\\add_pcell_variant with the library parameter for that purpose.\n"
|
||||
"\n"
|
||||
"The parameters are a sequence of variants which correspond to the parameters declared "
|
||||
|
|
@ -1956,7 +1956,7 @@ Class<db::Layout> decl_Layout ("db", "Layout",
|
|||
"@brief Registers a PCell declaration under the given name\n"
|
||||
"@args name, declaration\n"
|
||||
"Registers a local PCell in the current layout. If a declaration with that name\n"
|
||||
"alreay exists, it is replaced with the new declaration.\n"
|
||||
"already exists, it is replaced with the new declaration.\n"
|
||||
"\n"
|
||||
"This method has been introduced in version 0.22.\n"
|
||||
) +
|
||||
|
|
@ -2171,7 +2171,7 @@ Class<db::SaveLayoutOptions> decl_SaveLayoutOptions ("db", "SaveLayoutOptions",
|
|||
"@brief Set the database unit to be used in the stream file\n"
|
||||
"@args dbu\n"
|
||||
"\n"
|
||||
"By default, the database unit of the layout is used. This method allows to explicitly use a different\n"
|
||||
"By default, the database unit of the layout is used. This method allows one to explicitly use a different\n"
|
||||
"database unit. A scale factor is introduced automatically which scales all layout objects accordingly so their physical dimensions remain the same. "
|
||||
"When scaling to a larger database unit or one that is not an integer fraction of the original one, rounding errors may occur and the "
|
||||
"layout may become slightly distorted."
|
||||
|
|
|
|||
|
|
@ -376,7 +376,7 @@ Class<db::LayoutToNetlist> decl_dbLayoutToNetlist ("db", "LayoutToNetlist",
|
|||
"@li No connection indicated (circuit_cell_name_prefix == 0: the net shapes are simply put into their\n"
|
||||
" respective circuits. The connections are not indicated. @/li\n"
|
||||
"@li Subnet hierarchy (circuit_cell_name_prefix != 0): for each root net, a full hierarchy is built\n"
|
||||
" to accomodate the subnets (see build_net in recursive mode). @/li\n"
|
||||
" to accommodate the subnets (see build_net in recursive mode). @/li\n"
|
||||
"@/ul\n"
|
||||
"\n"
|
||||
"If a device name prefix is given, device shapes will be output on device cells named\n"
|
||||
|
|
|
|||
|
|
@ -93,14 +93,14 @@ Class<db::Manager> decl_Manager ("db", "Manager",
|
|||
"@brief Undo the current transaction\n"
|
||||
"\n"
|
||||
"The current transaction is undone with this method.\n"
|
||||
"The 'has_undo' method can be used to determine wether\n"
|
||||
"The 'has_undo' method can be used to determine whether\n"
|
||||
"there are transactions to undo.\n"
|
||||
) +
|
||||
gsi::method ("redo", &db::Manager::redo,
|
||||
"@brief Redo the next available transaction\n"
|
||||
"\n"
|
||||
"The next transaction is redone with this method.\n"
|
||||
"The 'has_redo' method can be used to determine wether\n"
|
||||
"The 'has_redo' method can be used to determine whether\n"
|
||||
"there are transactions to undo.\n"
|
||||
) +
|
||||
gsi::method_ext ("has_undo?", &has_undo,
|
||||
|
|
@ -122,7 +122,7 @@ Class<db::Manager> decl_Manager ("db", "Manager",
|
|||
"@brief A transaction manager class\n"
|
||||
"\n"
|
||||
"Manager objects control layout and potentially other objects in the layout database "
|
||||
"and allow to queue operations to form transactions. A transaction is a sequence of "
|
||||
"and queue operations to form transactions. A transaction is a sequence of "
|
||||
"operations that can be undone or redone.\n"
|
||||
"\n"
|
||||
"In order to equip a layout object with undo/redo support, instantiate the layout object "
|
||||
|
|
|
|||
|
|
@ -557,7 +557,7 @@ gsi::Class<db::Matrix3d> decl_Matrix3d ("db", "Matrix3d",
|
|||
"@param landmarks_before The points before the transformation.\n"
|
||||
"@param landmarks_after The points after the transformation.\n"
|
||||
"@param mode Selects the adjustment mode. Must be one of the Adjust... constants.\n"
|
||||
"@param fixed_point The index of the fixed point (one that is definitly mapped to the target) or -1 if there is none\n"
|
||||
"@param fixed_point The index of the fixed point (one that is definitely mapped to the target) or -1 if there is none\n"
|
||||
) +
|
||||
gsi::method ("AdjustNone", &adjust_none,
|
||||
"@brief Mode for \\adjust: adjust nothing\n"
|
||||
|
|
|
|||
|
|
@ -333,7 +333,7 @@ Class<db::Net> decl_dbNet ("db", "Net",
|
|||
) +
|
||||
gsi::method ("qname|to_s", &db::Net::qname,
|
||||
"@brief Gets the qualified name.\n"
|
||||
"The qualified name is like the expanded name, but the circuit's name is preceeded\n"
|
||||
"The qualified name is like the expanded name, but the circuit's name is preceded\n"
|
||||
"(i.e. 'CIRCUIT:NET') if available.\n"
|
||||
) +
|
||||
gsi::method ("expanded_name", &db::Net::expanded_name,
|
||||
|
|
@ -901,7 +901,7 @@ Class<db::Circuit> decl_dbCircuit ("db", "Circuit",
|
|||
"A circuit has pins by which it can connect to the outside. Pins are "
|
||||
"created using \\create_pin and are represented by the \\Pin class.\n"
|
||||
"\n"
|
||||
"Futhermore, a circuit manages the components of the netlist. "
|
||||
"Furthermore, a circuit manages the components of the netlist. "
|
||||
"Components are devices (class \\Device) and subcircuits (class \\SubCircuit). "
|
||||
"Devices are basic devices such as resistors or transistors. Subcircuits "
|
||||
"are other circuits to which nets from this circuit connect. "
|
||||
|
|
@ -1206,6 +1206,13 @@ Class<db::NetlistSpiceWriter> db_NetlistSpiceWriter (db_NetlistWriter, "db", "Ne
|
|||
) +
|
||||
gsi::constructor ("new", &new_spice_writer2,
|
||||
"@brief Creates a new writer with a delegate.\n"
|
||||
) +
|
||||
gsi::method ("use_net_names=", &db::NetlistSpiceWriter::set_use_net_names, gsi::arg ("f"),
|
||||
"@brief Sets a value indicating whether to use net names (true) or net numbers (false).\n"
|
||||
"The default is to use net numbers."
|
||||
) +
|
||||
gsi::method ("use_net_names", &db::NetlistSpiceWriter::use_net_names,
|
||||
"@brief Gets a value indicating whether to use net names (true) or net numbers (false).\n"
|
||||
),
|
||||
"@brief Implements a netlist writer for the SPICE format.\n"
|
||||
"Provide a delegate for customizing the way devices are written.\n"
|
||||
|
|
|
|||
|
|
@ -154,8 +154,8 @@ Class<db::NetlistDeviceExtractorError> decl_dbNetlistDeviceExtractorError ("db",
|
|||
"@brief Sets the category description.\n"
|
||||
"See \\category_name= for details about categories."
|
||||
),
|
||||
"@brief An error that occured during device extraction\n"
|
||||
"The device extractor will keep errors that occured during extraction of the devices. "
|
||||
"@brief An error that occurred during device extraction\n"
|
||||
"The device extractor will keep errors that occurred during extraction of the devices. "
|
||||
"It does not by using this error class.\n"
|
||||
"\n"
|
||||
"An error is basically described by the cell/circuit it occures in and the message. "
|
||||
|
|
|
|||
|
|
@ -1328,7 +1328,7 @@ struct polygon_defs
|
|||
"@brief Iterate over the edges that make up the polygon\n"
|
||||
"\n"
|
||||
"This iterator will deliver all edges, including those of the holes. "
|
||||
"Hole edges are oriented counterclockwise while hull egdes are oriented clockwise.\n"
|
||||
"Hole edges are oriented counterclockwise while hull edges are oriented clockwise.\n"
|
||||
) +
|
||||
iterator ("each_edge", (typename C::polygon_edge_iterator (C::*)(unsigned int) const) (&C::begin_edge),
|
||||
"@brief Iterate over the edges of one contour of the polygon\n"
|
||||
|
|
@ -1338,7 +1338,7 @@ struct polygon_defs
|
|||
"\n"
|
||||
"This iterator will deliver all edges of the contour specified by the contour parameter. "
|
||||
"The hull has contour number 0, the first hole has contour 1 etc.\n"
|
||||
"Hole edges are oriented counterclockwise while hull egdes are oriented clockwise.\n"
|
||||
"Hole edges are oriented counterclockwise while hull edges are oriented clockwise.\n"
|
||||
"\n"
|
||||
"This method was introduced in version 0.24."
|
||||
) +
|
||||
|
|
|
|||
|
|
@ -654,7 +654,7 @@ Class<db::Region> decl_Region ("db", "Region",
|
|||
"\n"
|
||||
"This constructor creates a region from the shapes delivered by the given recursive shape iterator.\n"
|
||||
"Text objects and edges are not inserted, because they cannot be converted to polygons.\n"
|
||||
"This method allows to feed the shapes from a hierarchy of cells into the region.\n"
|
||||
"This method allows feeding the shapes from a hierarchy of cells into the region.\n"
|
||||
"\n"
|
||||
"@code\n"
|
||||
"layout = ... # a layout\n"
|
||||
|
|
@ -669,7 +669,7 @@ Class<db::Region> decl_Region ("db", "Region",
|
|||
"This constructor creates a region from the shapes delivered by the given recursive shape iterator.\n"
|
||||
"Text objects and edges are not inserted, because they cannot be converted to polygons.\n"
|
||||
"On the delivered shapes it applies the given transformation.\n"
|
||||
"This method allows to feed the shapes from a hierarchy of cells into the region.\n"
|
||||
"This method allows feeding the shapes from a hierarchy of cells into the region.\n"
|
||||
"The transformation is useful to scale to a specific database unit for example.\n"
|
||||
"\n"
|
||||
"@code\n"
|
||||
|
|
@ -729,7 +729,7 @@ Class<db::Region> decl_Region ("db", "Region",
|
|||
"@code\n"
|
||||
"region = RBA::Region::new(iter, \"*\") # all texts\n"
|
||||
"region = RBA::Region::new(iter, \"A*\") # all texts starting with an 'A'\n"
|
||||
"region = RBA::Region::new(iter, \"A*\", false) # all texts exactly matchin 'A*'\n"
|
||||
"region = RBA::Region::new(iter, \"A*\", false) # all texts exactly matching 'A*'\n"
|
||||
"@/code\n"
|
||||
"\n"
|
||||
"This method has been introduced in version 0.25. The enlargement parameter has been added in version 0.26.\n"
|
||||
|
|
@ -751,7 +751,7 @@ Class<db::Region> decl_Region ("db", "Region",
|
|||
"@code\n"
|
||||
"region = RBA::Region::new(iter, dss, \"*\") # all texts\n"
|
||||
"region = RBA::Region::new(iter, dss, \"A*\") # all texts starting with an 'A'\n"
|
||||
"region = RBA::Region::new(iter, dss, \"A*\", false) # all texts exactly matchin 'A*'\n"
|
||||
"region = RBA::Region::new(iter, dss, \"A*\", false) # all texts exactly matching 'A*'\n"
|
||||
"@/code\n"
|
||||
"\n"
|
||||
"This variant has been introduced in version 0.26.\n"
|
||||
|
|
@ -1898,7 +1898,7 @@ Class<db::Region> decl_Region ("db", "Region",
|
|||
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
|
||||
"Use nil for this value to select the default.\n"
|
||||
"\n"
|
||||
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
|
||||
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
|
||||
"It is sufficient if the projection of one edge on the other matches the specified condition. "
|
||||
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
|
||||
"If you don't want to specify one limit, pass nil to the respective value.\n"
|
||||
|
|
@ -1943,7 +1943,7 @@ Class<db::Region> decl_Region ("db", "Region",
|
|||
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
|
||||
"Use nil for this value to select the default.\n"
|
||||
"\n"
|
||||
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
|
||||
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
|
||||
"It is sufficient if the projection of one edge on the other matches the specified condition. "
|
||||
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
|
||||
"If you don't want to specify one limit, pass nil to the respective value.\n"
|
||||
|
|
@ -1990,7 +1990,7 @@ Class<db::Region> decl_Region ("db", "Region",
|
|||
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
|
||||
"Use nil for this value to select the default.\n"
|
||||
"\n"
|
||||
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
|
||||
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
|
||||
"It is sufficient if the projection of one edge on the other matches the specified condition. "
|
||||
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
|
||||
"If you don't want to specify one limit, pass nil to the respective value.\n"
|
||||
|
|
@ -2037,7 +2037,7 @@ Class<db::Region> decl_Region ("db", "Region",
|
|||
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
|
||||
"Use nil for this value to select the default.\n"
|
||||
"\n"
|
||||
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
|
||||
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
|
||||
"It is sufficient if the projection of one edge on the other matches the specified condition. "
|
||||
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
|
||||
"If you don't want to specify one limit, pass nil to the respective value.\n"
|
||||
|
|
@ -2080,7 +2080,7 @@ Class<db::Region> decl_Region ("db", "Region",
|
|||
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
|
||||
"Use nil for this value to select the default.\n"
|
||||
"\n"
|
||||
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
|
||||
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
|
||||
"It is sufficient if the projection of one edge on the other matches the specified condition. "
|
||||
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
|
||||
"If you don't want to specify one limit, pass nil to the respective value.\n"
|
||||
|
|
@ -2121,7 +2121,7 @@ Class<db::Region> decl_Region ("db", "Region",
|
|||
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
|
||||
"Use nil for this value to select the default.\n"
|
||||
"\n"
|
||||
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
|
||||
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
|
||||
"It is sufficient if the projection of one edge on the other matches the specified condition. "
|
||||
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
|
||||
"If you don't want to specify one limit, pass nil to the respective value.\n"
|
||||
|
|
@ -2162,7 +2162,7 @@ Class<db::Region> decl_Region ("db", "Region",
|
|||
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
|
||||
"Use nil for this value to select the default.\n"
|
||||
"\n"
|
||||
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
|
||||
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
|
||||
"It is sufficient if the projection of one edge on the other matches the specified condition. "
|
||||
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
|
||||
"If you don't want to specify one limit, pass nil to the respective value.\n"
|
||||
|
|
@ -2203,7 +2203,7 @@ Class<db::Region> decl_Region ("db", "Region",
|
|||
"Setting this value to 90 (the default) will exclude edges with an angle of 90 degree or more from the check.\n"
|
||||
"Use nil for this value to select the default.\n"
|
||||
"\n"
|
||||
"\"min_projection\" and \"max_projection\" allow to select edges by their projected value upon each other. "
|
||||
"\"min_projection\" and \"max_projection\" allow selecting edges by their projected value upon each other. "
|
||||
"It is sufficient if the projection of one edge on the other matches the specified condition. "
|
||||
"The projected length must be larger or equal to \"min_projection\" and less than \"max_projection\". "
|
||||
"If you don't want to specify one limit, pass nil to the respective value.\n"
|
||||
|
|
|
|||
|
|
@ -1365,7 +1365,7 @@ Class<db::Shape> decl_Shape ("db", "Shape",
|
|||
"@brief Iterates over the edges of the object\n"
|
||||
"\n"
|
||||
"This method applies to polygons and simple polygons and delivers all edges that form the polygon's contours. "
|
||||
"Hole edges are oriented counterclockwise while hull egdes are oriented clockwise.\n"
|
||||
"Hole edges are oriented counterclockwise while hull edges are oriented clockwise.\n"
|
||||
"\n"
|
||||
"It will throw an exception if the object is not a polygon.\n"
|
||||
) +
|
||||
|
|
@ -1383,7 +1383,7 @@ Class<db::Shape> decl_Shape ("db", "Shape",
|
|||
"\n"
|
||||
"This method applies to polygons and simple polygons and delivers all edges that form the given contour of the polygon. "
|
||||
"The hull has contour number 0, the first hole has contour 1 etc.\n"
|
||||
"Hole edges are oriented counterclockwise while hull egdes are oriented clockwise.\n"
|
||||
"Hole edges are oriented counterclockwise while hull edges are oriented clockwise.\n"
|
||||
"\n"
|
||||
"It will throw an exception if the object is not a polygon.\n"
|
||||
"\n"
|
||||
|
|
|
|||
|
|
@ -235,7 +235,7 @@ Class<db::ShapeProcessor> decl_ShapeProcessor ("db", "ShapeProcessor",
|
|||
"\n"
|
||||
"See the \\EdgeProcessor for a description of the sizing operation. This implementation takes shapes\n"
|
||||
"from a layout cell (optionally all in hierarchy) and produces new shapes in a shapes container. "
|
||||
"This is the isotropic version which does not allow to specify different sizing values in x and y-direction. "
|
||||
"This is the isotropic version which does not allow specification of different sizing values in x and y-direction. "
|
||||
"\n"
|
||||
"@param layout The layout from which to take the shapes\n"
|
||||
"@param cell The cell (in 'layout') from which to take the shapes\n"
|
||||
|
|
@ -278,7 +278,7 @@ Class<db::ShapeProcessor> decl_ShapeProcessor ("db", "ShapeProcessor",
|
|||
"See the \\EdgeProcessor for a description of the merge method. This implementation takes shapes\n"
|
||||
"rather than polygons for input and produces an edge set.\n"
|
||||
"\n"
|
||||
"This version does not allow to specify a transformation for each shape (unity is assumed).\n"
|
||||
"This version does not feature a transformation for each shape (unity is assumed).\n"
|
||||
"\n"
|
||||
"@param in The set of shapes to merge\n"
|
||||
"@param min_wc The minimum wrap count for output (0: all polygons, 1: at least two overlapping)\n"
|
||||
|
|
@ -290,7 +290,7 @@ Class<db::ShapeProcessor> decl_ShapeProcessor ("db", "ShapeProcessor",
|
|||
"See the \\EdgeProcessor for a description of the merge method. This implementation takes shapes\n"
|
||||
"rather than polygons for input and produces a polygon set.\n"
|
||||
"\n"
|
||||
"This version does not allow to specify a transformation for each shape (unity is assumed).\n"
|
||||
"This version does not feature a transformation for each shape (unity is assumed).\n"
|
||||
"\n"
|
||||
"@param in The set of shapes to merge\n"
|
||||
"@param min_wc The minimum wrap count for output (0: all polygons, 1: at least two overlapping)\n"
|
||||
|
|
@ -332,7 +332,7 @@ Class<db::ShapeProcessor> decl_ShapeProcessor ("db", "ShapeProcessor",
|
|||
"See the \\EdgeProcessor for a description of the boolean operations. This implementation takes shapes\n"
|
||||
"rather than polygons for input and produces an edge set.\n"
|
||||
"\n"
|
||||
"This version does not allow to specify a transformation for each shape (unity is assumed).\n"
|
||||
"This version does not feature a transformation for each shape (unity is assumed).\n"
|
||||
"\n"
|
||||
"@param in_a The set of shapes to use for input A\n"
|
||||
"@param in_b The set of shapes to use for input A\n"
|
||||
|
|
@ -345,7 +345,7 @@ Class<db::ShapeProcessor> decl_ShapeProcessor ("db", "ShapeProcessor",
|
|||
"See the \\EdgeProcessor for a description of the boolean operations. This implementation takes shapes\n"
|
||||
"rather than polygons for input and produces a polygon set.\n"
|
||||
"\n"
|
||||
"This version does not allow to specify a transformation for each shape (unity is assumed).\n"
|
||||
"This version does not feature a transformation for each shape (unity is assumed).\n"
|
||||
"\n"
|
||||
"@param in_a The set of shapes to use for input A\n"
|
||||
"@param in_b The set of shapes to use for input A\n"
|
||||
|
|
@ -417,7 +417,7 @@ Class<db::ShapeProcessor> decl_ShapeProcessor ("db", "ShapeProcessor",
|
|||
"rather than polygons for input and produces an edge set. This is isotropic version that does not allow\n"
|
||||
"to specify different values in x and y direction. "
|
||||
"\n"
|
||||
"This version does not allow to specify a transformation for each shape (unity is assumed).\n"
|
||||
"This version does not feature a transformation for each shape (unity is assumed).\n"
|
||||
"\n"
|
||||
"@param in The set of shapes to size\n"
|
||||
"@param d The sizing value\n"
|
||||
|
|
@ -430,7 +430,7 @@ Class<db::ShapeProcessor> decl_ShapeProcessor ("db", "ShapeProcessor",
|
|||
"See the \\EdgeProcessor for a description of the sizing method. This implementation takes shapes\n"
|
||||
"rather than polygons for input and produces an edge set.\n"
|
||||
"\n"
|
||||
"This version does not allow to specify a transformation for each shape (unity is assumed).\n"
|
||||
"This version does not feature a transformation for each shape (unity is assumed).\n"
|
||||
"\n"
|
||||
"@param in The set of shapes to size\n"
|
||||
"@param dx The sizing value in x-direction\n"
|
||||
|
|
@ -445,7 +445,7 @@ Class<db::ShapeProcessor> decl_ShapeProcessor ("db", "ShapeProcessor",
|
|||
"rather than polygons for input and produces a polygon set. This is isotropic version that does not allow\n"
|
||||
"to specify different values in x and y direction. "
|
||||
"\n"
|
||||
"This version does not allow to specify a transformation for each shape (unity is assumed).\n"
|
||||
"This version does not feature a transformation for each shape (unity is assumed).\n"
|
||||
"\n"
|
||||
"@param in The set of shapes to size\n"
|
||||
"@param d The sizing value\n"
|
||||
|
|
@ -460,7 +460,7 @@ Class<db::ShapeProcessor> decl_ShapeProcessor ("db", "ShapeProcessor",
|
|||
"See the \\EdgeProcessor for a description of the sizing method. This implementation takes shapes\n"
|
||||
"rather than polygons for input and produces a polygon set.\n"
|
||||
"\n"
|
||||
"This version does not allow to specify a transformation for each shape (unity is assumed).\n"
|
||||
"This version does not feature a transformation for each shape (unity is assumed).\n"
|
||||
"\n"
|
||||
"@param in The set of shapes to size\n"
|
||||
"@param dx The sizing value in x-direction\n"
|
||||
|
|
|
|||
|
|
@ -412,7 +412,7 @@ Class<db::Text> decl_Text ("db", "Text",
|
|||
"A text object has a point (location), a text, a text transformation,\n"
|
||||
"a text size and a font id. Text size and font id are provided to be\n"
|
||||
"be able to render the text correctly.\n"
|
||||
"Text objects are used as labels (i.e. for pins) or to indiciate a particular position.\n"
|
||||
"Text objects are used as labels (i.e. for pins) or to indicate a particular position.\n"
|
||||
"\n"
|
||||
"The \\Text class uses integer coordinates. A class that operates with floating-point coordinates "
|
||||
"is \\DText.\n"
|
||||
|
|
@ -462,7 +462,7 @@ Class<db::DText> decl_DText ("db", "DText",
|
|||
"A text object has a point (location), a text, a text transformation,\n"
|
||||
"a text size and a font id. Text size and font id are provided to be\n"
|
||||
"be able to render the text correctly.\n"
|
||||
"Text objects are used as labels (i.e. for pins) or to indiciate a particular position.\n"
|
||||
"Text objects are used as labels (i.e. for pins) or to indicate a particular position.\n"
|
||||
"\n"
|
||||
"The \\DText class uses floating-point coordinates. A class that operates with integer coordinates "
|
||||
"is \\Text.\n"
|
||||
|
|
|
|||
|
|
@ -408,7 +408,7 @@ Class<db::TilingProcessor> decl_TilingProcessor ("db", "TilingProcessor",
|
|||
"\n"
|
||||
"The name specifies the variable under which the input can be used in the scripts."
|
||||
"\n"
|
||||
"This variant allows to specify an additional transformation too. It has been introduced in version 0.23.2.\n"
|
||||
"This variant allows one to specify an additional transformation too. It has been introduced in version 0.23.2.\n"
|
||||
) +
|
||||
method_ext ("input", &tp_input10,
|
||||
"@brief Specifies input for the tiling processor\n"
|
||||
|
|
@ -428,7 +428,7 @@ Class<db::TilingProcessor> decl_TilingProcessor ("db", "TilingProcessor",
|
|||
"\n"
|
||||
"The name specifies the variable under which the input can be used in the scripts."
|
||||
"\n"
|
||||
"This variant allows to specify an additional transformation too. It has been introduced in version 0.23.2.\n"
|
||||
"This variant allows one to specify an additional transformation too. It has been introduced in version 0.23.2.\n"
|
||||
"\n"
|
||||
) +
|
||||
method ("var", &db::TilingProcessor::var,
|
||||
|
|
@ -651,7 +651,7 @@ Class<db::TilingProcessor> decl_TilingProcessor ("db", "TilingProcessor",
|
|||
"\n"
|
||||
"The tiling processor executes one or several scripts on one or multiple layouts providing "
|
||||
"a tiling scheme. In that scheme, the processor divides the original layout into rectangular tiles "
|
||||
"and executes the scripts on each tile separately. The tiling processor allows to specify multiple, "
|
||||
"and executes the scripts on each tile separately. The tiling processor allows one to specify multiple, "
|
||||
"independent scripts which are run separately on each tile. It can make use of multi-core CPU's by "
|
||||
"supporting multiple threads running the tasks in parallel (with respect to tiles and scripts).\n"
|
||||
"\n"
|
||||
|
|
|
|||
|
|
@ -1040,7 +1040,7 @@ Class<db::DCplxTrans> decl_DCplxTrans ("db", "DCplxTrans",
|
|||
cplx_trans_defs<db::DCplxTrans>::methods (),
|
||||
"@brief A complex transformation\n"
|
||||
"\n"
|
||||
"A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitary\n"
|
||||
"A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitrary\n"
|
||||
"angle and a displacement. This is also the order, the operations are applied.\n"
|
||||
"\n"
|
||||
"A complex transformation provides a superset of the simple transformation.\n"
|
||||
|
|
@ -1129,7 +1129,7 @@ Class<db::CplxTrans> decl_CplxTrans ("db", "CplxTrans",
|
|||
cplx_trans_defs<db::CplxTrans>::methods (),
|
||||
"@brief A complex transformation\n"
|
||||
"\n"
|
||||
"A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitary\n"
|
||||
"A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitrary\n"
|
||||
"angle and a displacement. This is also the order, the operations are applied.\n"
|
||||
"This version can transform integer-coordinate objects into floating-point coordinate objects. "
|
||||
"This is the generic and exact case, for example for non-integer magnifications.\n"
|
||||
|
|
@ -1212,7 +1212,7 @@ Class<db::ICplxTrans> decl_ICplxTrans ("db", "ICplxTrans",
|
|||
cplx_trans_defs<db::ICplxTrans>::methods (),
|
||||
"@brief A complex transformation\n"
|
||||
"\n"
|
||||
"A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitary\n"
|
||||
"A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitrary\n"
|
||||
"angle and a displacement. This is also the order, the operations are applied.\n"
|
||||
"This version can transform integer-coordinate objects into the same, which may involve rounding and can be inexact.\n"
|
||||
"\n"
|
||||
|
|
@ -1294,7 +1294,7 @@ Class<db::VCplxTrans> decl_VCplxTrans ("db", "VCplxTrans",
|
|||
cplx_trans_defs<db::VCplxTrans>::methods (),
|
||||
"@brief A complex transformation\n"
|
||||
"\n"
|
||||
"A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitary\n"
|
||||
"A complex transformation provides magnification, mirroring at the x-axis, rotation by an arbitrary\n"
|
||||
"angle and a displacement. This is also the order, the operations are applied.\n"
|
||||
"This version can transform floating point coordinate objects into integer coordinate objects, which may involve rounding and can be inexact.\n"
|
||||
"\n"
|
||||
|
|
|
|||
|
|
@ -469,11 +469,11 @@ TEST(9_SizingSimple)
|
|||
db::Region r6 (db::RecursiveShapeIterator (ly, top_cell, l6), dss);
|
||||
db::Region r6_sized = r6.sized (-50);
|
||||
EXPECT_EQ (r6_sized.is_merged (), true);
|
||||
db::Region r6_sized_aniso = r6.sized (-20, -100);
|
||||
db::Region r6_sized_aniso = r6.sized (-20, -100, 2);
|
||||
EXPECT_EQ (r6_sized_aniso.is_merged (), true);
|
||||
db::Region r6_sized_plus = r6.sized (50);
|
||||
EXPECT_EQ (r6_sized_plus.is_merged (), false);
|
||||
db::Region r6_sized_aniso_plus = r6.sized (20, 100);
|
||||
db::Region r6_sized_aniso_plus = r6.sized (20, 100, 2);
|
||||
EXPECT_EQ (r6_sized_aniso_plus.is_merged (), false);
|
||||
|
||||
db::Layout target;
|
||||
|
|
@ -550,7 +550,7 @@ TEST(9_SizingWithScaleAndXYVariants)
|
|||
|
||||
db::Region r1 (db::RecursiveShapeIterator (ly, top_cell, l1), dss);
|
||||
db::Region r1_sized = r1.sized (-2000);
|
||||
db::Region r1_sized_aniso = r1.sized (-1000, -2000);
|
||||
db::Region r1_sized_aniso = r1.sized (-1000, -2000, 2);
|
||||
|
||||
db::Layout target;
|
||||
unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index));
|
||||
|
|
@ -600,7 +600,7 @@ TEST(9_SizingWithBoolean)
|
|||
db::Region r1 (db::RecursiveShapeIterator (ly, top_cell, l1), dss);
|
||||
db::Region r1_sized = r1.sized (2000);
|
||||
r1_sized -= r1;
|
||||
db::Region r1_sized_aniso = r1.sized (1000, 2000);
|
||||
db::Region r1_sized_aniso = r1.sized (1000, 2000, 2);
|
||||
r1_sized_aniso -= r1;
|
||||
EXPECT_EQ (r1_sized_aniso.is_merged (), false);
|
||||
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ TEST(1)
|
|||
}
|
||||
EXPECT_EQ (m, (unsigned int) 0x04231); // c1,c5,c3,c4,c2
|
||||
|
||||
// check relation informations ..
|
||||
// check relation information ..
|
||||
db::Cell::child_cell_iterator ch;
|
||||
db::Cell::const_iterator chi;
|
||||
db::Cell::parent_cell_iterator pa;
|
||||
|
|
|
|||
|
|
@ -29,6 +29,27 @@
|
|||
#include "tlStream.h"
|
||||
#include "tlFileUtils.h"
|
||||
|
||||
static void compare_netlists (tl::TestBase *_this, const std::string &path, const std::string &au_path)
|
||||
{
|
||||
tl::InputStream is (path);
|
||||
tl::InputStream is_au (au_path);
|
||||
|
||||
std::string netlist = is.read_all ();
|
||||
std::string netlist_au = is_au.read_all ();
|
||||
|
||||
// normalize "1.0e-005" to "1.0e-05" for compatibility
|
||||
netlist = tl::replaced (netlist, "e-00", "e-0");
|
||||
netlist = tl::replaced (netlist, "e-0", "e-");
|
||||
netlist_au = tl::replaced (netlist_au, "e-00", "e-0");
|
||||
netlist_au = tl::replaced (netlist_au, "e-0", "e-");
|
||||
|
||||
if (netlist != netlist_au) {
|
||||
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
|
||||
tl::absolute_file_path (path),
|
||||
tl::absolute_file_path (au_path)));
|
||||
}
|
||||
}
|
||||
|
||||
TEST(1_WriterResistorDevices)
|
||||
{
|
||||
db::Netlist nl;
|
||||
|
|
@ -98,14 +119,7 @@ TEST(1_WriterResistorDevices)
|
|||
|
||||
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter1_au.txt");
|
||||
|
||||
tl::InputStream is (path);
|
||||
tl::InputStream is_au (au_path);
|
||||
|
||||
if (is.read_all () != is_au.read_all ()) {
|
||||
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
|
||||
tl::absolute_file_path (path),
|
||||
tl::absolute_file_path (au_path)));
|
||||
}
|
||||
compare_netlists (_this, path, au_path);
|
||||
}
|
||||
|
||||
TEST(2_WriterCapacitorDevices)
|
||||
|
|
@ -177,14 +191,7 @@ TEST(2_WriterCapacitorDevices)
|
|||
|
||||
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter2_au.txt");
|
||||
|
||||
tl::InputStream is (path);
|
||||
tl::InputStream is_au (au_path);
|
||||
|
||||
if (is.read_all () != is_au.read_all ()) {
|
||||
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
|
||||
tl::absolute_file_path (path),
|
||||
tl::absolute_file_path (au_path)));
|
||||
}
|
||||
compare_netlists (_this, path, au_path);
|
||||
}
|
||||
|
||||
TEST(3_WriterInductorDevices)
|
||||
|
|
@ -256,14 +263,7 @@ TEST(3_WriterInductorDevices)
|
|||
|
||||
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter3_au.txt");
|
||||
|
||||
tl::InputStream is (path);
|
||||
tl::InputStream is_au (au_path);
|
||||
|
||||
if (is.read_all () != is_au.read_all ()) {
|
||||
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
|
||||
tl::absolute_file_path (path),
|
||||
tl::absolute_file_path (au_path)));
|
||||
}
|
||||
compare_netlists (_this, path, au_path);
|
||||
}
|
||||
|
||||
TEST(4_WriterDiodeDevices)
|
||||
|
|
@ -335,14 +335,7 @@ TEST(4_WriterDiodeDevices)
|
|||
|
||||
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter4_au.txt");
|
||||
|
||||
tl::InputStream is (path);
|
||||
tl::InputStream is_au (au_path);
|
||||
|
||||
if (is.read_all () != is_au.read_all ()) {
|
||||
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
|
||||
tl::absolute_file_path (path),
|
||||
tl::absolute_file_path (au_path)));
|
||||
}
|
||||
compare_netlists (_this, path, au_path);
|
||||
}
|
||||
|
||||
TEST(5_WriterMOS3Devices)
|
||||
|
|
@ -431,14 +424,7 @@ TEST(5_WriterMOS3Devices)
|
|||
|
||||
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter5_au.txt");
|
||||
|
||||
tl::InputStream is (path);
|
||||
tl::InputStream is_au (au_path);
|
||||
|
||||
if (is.read_all () != is_au.read_all ()) {
|
||||
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
|
||||
tl::absolute_file_path (path),
|
||||
tl::absolute_file_path (au_path)));
|
||||
}
|
||||
compare_netlists (_this, path, au_path);
|
||||
}
|
||||
|
||||
TEST(6_WriterMOS4Devices)
|
||||
|
|
@ -534,14 +520,7 @@ TEST(6_WriterMOS4Devices)
|
|||
|
||||
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter6_au.txt");
|
||||
|
||||
tl::InputStream is (path);
|
||||
tl::InputStream is_au (au_path);
|
||||
|
||||
if (is.read_all () != is_au.read_all ()) {
|
||||
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
|
||||
tl::absolute_file_path (path),
|
||||
tl::absolute_file_path (au_path)));
|
||||
}
|
||||
compare_netlists (_this, path, au_path);
|
||||
}
|
||||
|
||||
TEST(7_WriterAnyDevices)
|
||||
|
|
@ -603,14 +582,7 @@ TEST(7_WriterAnyDevices)
|
|||
|
||||
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter7_au.txt");
|
||||
|
||||
tl::InputStream is (path);
|
||||
tl::InputStream is_au (au_path);
|
||||
|
||||
if (is.read_all () != is_au.read_all ()) {
|
||||
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
|
||||
tl::absolute_file_path (path),
|
||||
tl::absolute_file_path (au_path)));
|
||||
}
|
||||
compare_netlists (_this, path, au_path);
|
||||
}
|
||||
|
||||
TEST(8_WriterSubcircuits)
|
||||
|
|
@ -753,14 +725,97 @@ TEST(8_WriterSubcircuits)
|
|||
|
||||
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter8_au.txt");
|
||||
|
||||
tl::InputStream is (path);
|
||||
tl::InputStream is_au (au_path);
|
||||
compare_netlists (_this, path, au_path);
|
||||
}
|
||||
|
||||
if (is.read_all () != is_au.read_all ()) {
|
||||
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
|
||||
tl::absolute_file_path (path),
|
||||
tl::absolute_file_path (au_path)));
|
||||
TEST(9_WriterNetNamesInsteadOfNumbers)
|
||||
{
|
||||
db::Netlist nl;
|
||||
|
||||
db::DeviceClass *cls = new db::DeviceClass ();
|
||||
cls->add_terminal_definition (db::DeviceTerminalDefinition ("A", "a"));
|
||||
cls->add_terminal_definition (db::DeviceTerminalDefinition ("B", "b"));
|
||||
cls->add_parameter_definition (db::DeviceParameterDefinition ("U", "u"));
|
||||
cls->add_parameter_definition (db::DeviceParameterDefinition ("V", "v"));
|
||||
cls->set_name ("XCLS");
|
||||
|
||||
nl.add_device_class (cls);
|
||||
|
||||
db::Circuit *circuit1 = new db::Circuit ();
|
||||
circuit1->set_name ("C1");
|
||||
nl.add_circuit (circuit1);
|
||||
|
||||
{
|
||||
db::Net *n1, *n2, *n3;
|
||||
n1 = new db::Net ();
|
||||
n1->set_name ("N1");
|
||||
circuit1->add_net (n1);
|
||||
n2 = new db::Net ();
|
||||
n2->set_name ("N 2");
|
||||
circuit1->add_net (n2);
|
||||
n3 = new db::Net ();
|
||||
n3->set_name ("n3");
|
||||
circuit1->add_net (n3);
|
||||
|
||||
db::Device *ddev1 = new db::Device (cls);
|
||||
ddev1->set_parameter_value (0, -17);
|
||||
ddev1->set_parameter_value (1, 42);
|
||||
db::Device *ddev2 = new db::Device (cls);
|
||||
ddev2->set_parameter_value (0, 17);
|
||||
ddev2->set_parameter_value (1, -42);
|
||||
circuit1->add_device (ddev1);
|
||||
circuit1->add_device (ddev2);
|
||||
|
||||
size_t pid1 = circuit1->add_pin ("p1").id ();
|
||||
size_t pid2 = circuit1->add_pin ("p2").id ();
|
||||
|
||||
circuit1->connect_pin (pid1, n1);
|
||||
circuit1->connect_pin (pid2, n2);
|
||||
|
||||
ddev1->connect_terminal (ddev1->device_class ()->terminal_id_for_name ("A"), n1);
|
||||
ddev1->connect_terminal (ddev1->device_class ()->terminal_id_for_name ("B"), n3);
|
||||
ddev2->connect_terminal (ddev2->device_class ()->terminal_id_for_name ("A"), n3);
|
||||
ddev2->connect_terminal (ddev2->device_class ()->terminal_id_for_name ("B"), n2);
|
||||
}
|
||||
|
||||
db::Circuit *circuit2 = new db::Circuit ();
|
||||
circuit2->set_name ("C2");
|
||||
nl.add_circuit (circuit2);
|
||||
|
||||
{
|
||||
db::Net *n1, *n2;
|
||||
n1 = new db::Net ();
|
||||
n1->set_name ("n1");
|
||||
circuit2->add_net (n1);
|
||||
n2 = new db::Net ();
|
||||
n2->set_name ("n2");
|
||||
circuit2->add_net (n2);
|
||||
|
||||
db::SubCircuit *sc1 = new db::SubCircuit (circuit1, "SC1");
|
||||
circuit2->add_subcircuit (sc1);
|
||||
sc1->connect_pin (0, n1);
|
||||
sc1->connect_pin (1, n2);
|
||||
|
||||
size_t pid1 = circuit2->add_pin ("p1").id ();
|
||||
size_t pid2 = circuit2->add_pin ("p2").id ();
|
||||
|
||||
circuit2->connect_pin (pid1, n1);
|
||||
circuit2->connect_pin (pid2, n2);
|
||||
}
|
||||
|
||||
// verify against the input
|
||||
|
||||
std::string path = tmp_file ("tmp_nwriter9.txt");
|
||||
{
|
||||
tl::OutputStream stream (path);
|
||||
db::NetlistSpiceWriter writer;
|
||||
writer.set_use_net_names (true);
|
||||
writer.write (stream, nl, "written by unit test");
|
||||
}
|
||||
|
||||
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter9_au.txt");
|
||||
|
||||
compare_netlists (_this, path, au_path);
|
||||
}
|
||||
|
||||
TEST(10_WriterLongLines)
|
||||
|
|
@ -809,14 +864,7 @@ TEST(10_WriterLongLines)
|
|||
|
||||
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter10_au.txt");
|
||||
|
||||
tl::InputStream is (path);
|
||||
tl::InputStream is_au (au_path);
|
||||
|
||||
if (is.read_all () != is_au.read_all ()) {
|
||||
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
|
||||
tl::absolute_file_path (path),
|
||||
tl::absolute_file_path (au_path)));
|
||||
}
|
||||
compare_netlists (_this, path, au_path);
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
|
@ -919,13 +967,5 @@ TEST(20_Delegate)
|
|||
|
||||
std::string au_path = tl::combine_path (tl::combine_path (tl::combine_path (tl::testsrc (), "testdata"), "algo"), "nwriter20_au.txt");
|
||||
|
||||
tl::InputStream is (path);
|
||||
tl::InputStream is_au (au_path);
|
||||
|
||||
if (is.read_all () != is_au.read_all ()) {
|
||||
_this->raise (tl::sprintf ("Compare failed - see\n actual: %s\n golden: %s",
|
||||
tl::absolute_file_path (path),
|
||||
tl::absolute_file_path (au_path)));
|
||||
}
|
||||
compare_netlists (_this, path, au_path);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ TEST(1)
|
|||
c1.push_back (db::Point (200, 0));
|
||||
p1.assign_hull (c1.begin (), c1.end ());
|
||||
|
||||
// insert two references to indentical but shifted polygons
|
||||
// insert two references to identical but shifted polygons
|
||||
db::PolygonRef pref1 (p1, rep);
|
||||
|
||||
db::Polygon p2;
|
||||
|
|
@ -115,7 +115,7 @@ TEST(2)
|
|||
c1.push_back (db::Point (200, 0));
|
||||
p1.assign_hull (c1.begin (), c1.end ());
|
||||
|
||||
// insert two references to indentical but shifted polygons
|
||||
// insert two references to identical but shifted polygons
|
||||
db::PolygonRef pr1 (p1, *rep);
|
||||
|
||||
db::Polygon p2;
|
||||
|
|
@ -156,7 +156,7 @@ TEST(1SIMPLE)
|
|||
c1.push_back (db::Point (200, 0));
|
||||
p1.assign_hull (c1.begin (), c1.end ());
|
||||
|
||||
// insert two references to indentical but shifted polygons
|
||||
// insert two references to identical but shifted polygons
|
||||
db::SimplePolygonRef pref1 (p1, rep);
|
||||
|
||||
db::SimplePolygon p2;
|
||||
|
|
@ -225,7 +225,7 @@ TEST(2SIMPLE)
|
|||
c1.push_back (db::Point (200, 0));
|
||||
p1.assign_hull (c1.begin (), c1.end ());
|
||||
|
||||
// insert two references to indentical but shifted polygons
|
||||
// insert two references to identical but shifted polygons
|
||||
db::SimplePolygonRef pr1 (p1, *rep);
|
||||
|
||||
db::SimplePolygon p2;
|
||||
|
|
|
|||
|
|
@ -1365,7 +1365,7 @@ CODE
|
|||
# borders of the polygons of the second operand.
|
||||
#
|
||||
# The following images show the effect of the "and" method
|
||||
# on polygons and egdes (layer1: red, layer2: blue):
|
||||
# on polygons and edges (layer1: red, layer2: blue):
|
||||
#
|
||||
# @table
|
||||
# @tr
|
||||
|
|
@ -1392,7 +1392,7 @@ CODE
|
|||
# of the second operand.
|
||||
#
|
||||
# The following images show the effect of the "not" method
|
||||
# on polygons and egdes (layer1: red, layer2: blue):
|
||||
# on polygons and edges (layer1: red, layer2: blue):
|
||||
#
|
||||
# @table
|
||||
# @tr
|
||||
|
|
@ -1416,7 +1416,7 @@ CODE
|
|||
# This method is available for polygon and edge layers.
|
||||
#
|
||||
# The following images show the effect of the "xor" method
|
||||
# on polygons and egdes (layer1: red, layer2: blue):
|
||||
# on polygons and edges (layer1: red, layer2: blue):
|
||||
#
|
||||
# @table
|
||||
# @tr
|
||||
|
|
@ -1439,7 +1439,7 @@ CODE
|
|||
# This method is available for polygon and edge layers.
|
||||
#
|
||||
# The following images show the effect of the "or" method
|
||||
# on polygons and egdes (layer1: red, layer2: blue):
|
||||
# on polygons and edges (layer1: red, layer2: blue):
|
||||
#
|
||||
# @table
|
||||
# @tr
|
||||
|
|
@ -1462,7 +1462,7 @@ CODE
|
|||
# This method is available for polygon, edge and edge pair layers.
|
||||
#
|
||||
# The following images show the effect of the "join" method
|
||||
# on polygons and egdes (layer1: red, layer2: blue):
|
||||
# on polygons and edges (layer1: red, layer2: blue):
|
||||
#
|
||||
# @table
|
||||
# @tr
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@
|
|||
<widget class="QLabel" name="label_4" >
|
||||
<property name="text" >
|
||||
<string>Radius to apply on polygon corners
|
||||
(Radius for inner corners can be specified seperately.
|
||||
(Radius for inner corners can be specified separately.
|
||||
Leave empty to get the same radius than for outer corners)</string>
|
||||
</property>
|
||||
</widget>
|
||||
|
|
|
|||
|
|
@ -228,7 +228,7 @@ MainService::cm_descend ()
|
|||
throw tl::Exception (tl::to_string (QObject::tr ("Select an object to determine into which instance to descend")));
|
||||
}
|
||||
if (! common_inst.valid () || common_inst.ambigous ()) {
|
||||
throw tl::Exception (tl::to_string (QObject::tr ("Selection is ambigous - cannot determine into which instance to descend")));
|
||||
throw tl::Exception (tl::to_string (QObject::tr ("Selection is ambiguous - cannot determine into which instance to descend")));
|
||||
}
|
||||
|
||||
// remove the common path and create a new set of selections
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ namespace edt
|
|||
{
|
||||
|
||||
/**
|
||||
* @brief A QScrollArea that displays and allows to edit PCell parameters
|
||||
* @brief A QScrollArea that displays and allows editing PCell parameters
|
||||
*/
|
||||
class PCellParametersPage
|
||||
: public QScrollArea
|
||||
|
|
|
|||
|
|
@ -1647,7 +1647,7 @@ PartialService::mouse_press_event (const db::DPoint &p, unsigned int buttons, bo
|
|||
|
||||
if (is_single_point_selection ()) {
|
||||
// for a single selected point we use the original point as the start location which
|
||||
// allows to bring a to grid
|
||||
// allows bringing a to grid
|
||||
m_current = m_start = single_selected_point ();
|
||||
} else {
|
||||
m_current = m_start = p;
|
||||
|
|
@ -1842,7 +1842,7 @@ PartialService::mouse_click_event (const db::DPoint &p, unsigned int buttons, bo
|
|||
|
||||
if (is_single_point_selection ()) {
|
||||
// for a single selected point we use the original point as the start location which
|
||||
// allows to bring a to grid
|
||||
// allows bringing a to grid
|
||||
m_current = m_start = single_selected_point ();
|
||||
} else {
|
||||
m_current = m_start = p;
|
||||
|
|
|
|||
|
|
@ -185,7 +185,7 @@ public:
|
|||
/**
|
||||
* @brief "transform" operation with a transformation vector
|
||||
*
|
||||
* This version of the transformation operation allows to specify a transformation per selected object.
|
||||
* This version of the transformation operation allows one to specify a transformation per selected object.
|
||||
* The transformations in the vector must be ordered in the order the selection is delivered by
|
||||
* the selection iterator.
|
||||
* Either global or per-object transformations can be specified. If a per-object transformation is
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ struct GSI_PUBLIC Callee
|
|||
/**
|
||||
* @brief Callback connector object
|
||||
*
|
||||
* This object holds informations about the actual implementation of the callback
|
||||
* This object holds information about the actual implementation of the callback
|
||||
* on the scripting client's side.
|
||||
*/
|
||||
struct Callback
|
||||
|
|
|
|||
|
|
@ -390,6 +390,30 @@ sm_assign (const char *name, const gsi::ClassBase *cls)
|
|||
return sm;
|
||||
}
|
||||
|
||||
static const std::set<std::pair<std::string, bool> > &name_map_for_class (const gsi::ClassBase *cls, std::map<const gsi::ClassBase *, std::set<std::pair<std::string, bool> > > &cache)
|
||||
{
|
||||
if (! cls) {
|
||||
static std::set<std::pair<std::string, bool> > empty;
|
||||
return empty;
|
||||
}
|
||||
|
||||
std::map<const gsi::ClassBase *, std::set<std::pair<std::string, bool> > >::iterator cc = cache.find (cls);
|
||||
if (cc != cache.end ()) {
|
||||
return cc->second;
|
||||
}
|
||||
|
||||
cc = cache.insert (std::make_pair ((const gsi::ClassBase *) 0, std::set<std::pair<std::string, bool> > ())).first;
|
||||
cc->second = name_map_for_class (cls->base (), cache);
|
||||
|
||||
for (gsi::ClassBase::method_iterator m = cls->begin_methods (); m != cls->end_methods (); ++m) {
|
||||
for (gsi::MethodBase::synonym_iterator syn = (*m)->begin_synonyms (); syn != (*m)->end_synonyms (); ++syn) {
|
||||
cc->second.insert (std::make_pair (syn->name, (*m)->is_static ()));
|
||||
}
|
||||
}
|
||||
|
||||
return cc->second;
|
||||
}
|
||||
|
||||
void
|
||||
ClassBase::merge_declarations ()
|
||||
{
|
||||
|
|
@ -433,6 +457,8 @@ ClassBase::merge_declarations ()
|
|||
}
|
||||
}
|
||||
|
||||
std::map<const gsi::ClassBase *, std::set<std::pair<std::string, bool> > > name_maps;
|
||||
|
||||
// Add to the classes the special methods and clean up the method table
|
||||
for (gsi::ClassBase::class_iterator c = gsi::ClassBase::begin_new_classes (); c != gsi::ClassBase::end_new_classes (); ++c) {
|
||||
|
||||
|
|
@ -441,12 +467,7 @@ ClassBase::merge_declarations ()
|
|||
continue;
|
||||
}
|
||||
|
||||
std::set<std::pair<std::string, bool> > name_map;
|
||||
for (gsi::ClassBase::method_iterator m = c->begin_methods (); m != c->end_methods (); ++m) {
|
||||
for (gsi::MethodBase::synonym_iterator syn = (*m)->begin_synonyms (); syn != (*m)->end_synonyms (); ++syn) {
|
||||
name_map.insert (std::make_pair (syn->name, (*m)->is_static ()));
|
||||
}
|
||||
}
|
||||
const std::set<std::pair<std::string, bool> > &name_map = name_map_for_class (c.operator-> (), name_maps);
|
||||
|
||||
// We don't want the declaration object to be non-const except for this case. So
|
||||
// we const_cast here.
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ namespace gsi
|
|||
|
||||
|
||||
// ---------------------------------------------------------------------------------
|
||||
// A generic value wrapper that allows to wrap a plain data type into an object
|
||||
// A generic value wrapper that allows wrapping a plain data type into an object
|
||||
|
||||
static gsi::Value *new_vv (const tl::Variant &v)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ namespace gsi
|
|||
{
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
// Access to the internal informations of GSI
|
||||
// Access to the internal information of GSI
|
||||
|
||||
static int t_void () { return T_void; }
|
||||
static int t_bool () { return T_bool; }
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@ Class<Logger> decl_Logger ("tl", "Logger",
|
|||
),
|
||||
"@brief A logger\n"
|
||||
"\n"
|
||||
"The logger allows to output messages to the log channels. If the log viewer is open, the "
|
||||
"The logger outputs messages to the log channels. If the log viewer is open, the "
|
||||
"log messages will be shown in the logger view. Otherwise they will be printed to the terminal "
|
||||
"on Linux for example.\n"
|
||||
"\n"
|
||||
|
|
@ -238,7 +238,7 @@ Class<tl::Progress> decl_Progress ("tl", "Progress",
|
|||
"@brief A progress reporter\n"
|
||||
"\n"
|
||||
"This is the base class for all progress reporter objects. Progress reporter objects are used "
|
||||
"to report the progress of some operation and to allow to abort an operation. "
|
||||
"to report the progress of some operation and to allow aborting an operation. "
|
||||
"Progress reporter objects must be triggered periodically, i.e. a value must be set. "
|
||||
"On the display side, a progress bar usually is used to represent the progress of an operation.\n"
|
||||
"\n"
|
||||
|
|
@ -300,7 +300,7 @@ Class<tl::RelativeProgress> decl_RelativeProgress (decl_Progress, "tl", "Relativ
|
|||
"@brief Sets the progress value\n"
|
||||
"@args value, force_yield\n"
|
||||
"\n"
|
||||
"This method is equivalent to \\value=, but it allows to force the event loop to be triggered.\n"
|
||||
"This method is equivalent to \\value=, but it allows forcing the event loop to be triggered.\n"
|
||||
"If \"force_yield\" is true, the event loop will be triggered always, irregardless of the yield interval specified in the constructor.\n"
|
||||
),
|
||||
"@brief A progress reporter counting progress in relative units\n"
|
||||
|
|
@ -394,7 +394,7 @@ Class<tl::AbsoluteProgress> decl_AbsoluteProgress (decl_Progress, "tl", "Absolut
|
|||
"@brief Sets the progress value\n"
|
||||
"@args value, force_yield\n"
|
||||
"\n"
|
||||
"This method is equivalent to \\value=, but it allows to force the event loop to be triggered.\n"
|
||||
"This method is equivalent to \\value=, but it allows forcing the event loop to be triggered.\n"
|
||||
"If \"force_yield\" is true, the event loop will be triggered always, irregardless of the yield interval specified in the constructor.\n"
|
||||
),
|
||||
"@brief A progress reporter counting progress in absolute units\n"
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue