klayout/src/db/gsiDeclDbLayerMapping.cc

122 lines
4.8 KiB
C++

/*
KLayout Layout Viewer
Copyright (C) 2006-2017 Matthias Koefferlein
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "gsiDecl.h"
#include "dbLayerMapping.h"
#include "dbLayout.h"
#include <memory>
namespace gsi
{
Class<db::LayerMapping> decl_LayerMapping ("LayerMapping",
gsi::method ("create", &db::LayerMapping::create,
"@brief Initialize the layer mapping from two layouts\n"
"\n"
"@args layout_a, layout_b\n"
"@param layout_a The target layout\n"
"@param layout_b The source layout\n"
"\n"
"The layer mapping is created by looking up each layer of layout_b in layout_a. "
"All layers with matching specifications (\\LayerInfo) are mapped. Layouts without a layer/datatype/name specification "
"will not be mapped.\n"
"\\create_full is a version of this method which creates new layers in layout_a if no corresponding layer is found.\n"
) +
gsi::method ("create_full", &db::LayerMapping::create_full,
"@brief Initialize the layer mapping from two layouts\n"
"\n"
"@args layout_a, layout_b\n"
"@param layout_a The target layout\n"
"@param layout_b The source layout\n"
"@return A list of layers created\n"
"\n"
"The layer mapping is created by looking up each layer of layout_b in layout_a. "
"All layers with matching specifications (\\LayerInfo) are mapped. Layouts without a layer/datatype/name specification "
"will not be mapped.\n"
"Layers with a valid specification which are not found in layout_a are created there.\n"
) +
gsi::method ("clear", &db::LayerMapping::clear,
"@brief Clears the mapping.\n"
) +
gsi::method ("map", &db::LayerMapping::map,
"@brief Explicitly specify a mapping.\n"
"\n"
"@args layer_index_b, layer_index_a\n"
"\n"
"@param layer_index_b The index of the layer in layout B (the \"source\")\n"
"@param layer_index_a The index of the layer in layout A (the \"target\")\n"
"\n"
"Beside using the mapping generator algorithms provided through \\create and \\create_full, "
"it is possible to explicitly specify layer mappings using this method.\n"
) +
gsi::method ("has_mapping?", &db::LayerMapping::has_mapping,
"@brief Determine if a layer in layout_b has a mapping to a layout_a layer.\n"
"\n"
"@args layer_index_b\n"
"\n"
"@param layer_index_b The index of the layer in layout_b whose mapping is requested.\n"
"@return true, if the layer has a mapping\n"
) +
gsi::method ("layer_mapping", &db::LayerMapping::layer_mapping,
"@brief Determine layer mapping of a layout_b layer to the corresponding layout_a layer.\n"
"\n"
"@args layer_index_b\n"
"\n"
"@param layer_index_b The index of the layer in layout_b whose mapping is requested.\n"
"@return The corresponding layer in layout_a.\n"
),
"@brief A layer mapping (source to target layout)\n"
"\n"
"A layer mapping is an association of layers in two layouts forming pairs of layers, i.e. "
"one layer corresponds to another layer in the other layout. The LayerMapping object describes "
"the mapping of layers of a source layout A to a target layout B.\n"
"\n"
"A layer mapping can be set up manually or using the methods \\create or \\create_full.\n"
"\n"
"@code\n"
"lm = RBA::LayerMapping::new\n"
"# explicit:\n"
"lm.map(2, 1) # map layer index 2 of source to 1 of target\n"
"lm.map(7, 3) # map layer index 7 of source to 3 of target\n"
"...\n"
"# or employing the specification identity:\n"
"lm.create(target_layout, source_layout)\n"
"# plus creating layers which don't exist in the target layout yet:\n"
"new_layers = lm.create_full(target_layout, source_layout)\n"
"@/code\n"
"\n"
"A layer might not be mapped to another layer which basically means that there is no corresponding layer.\n"
"Such layers will be ignored in operations using the layer mapping. Use \\create_full to ensure all layers\n"
"of the source layout are mapped.\n"
"\n"
"LayerMapping objects play a role mainly in the hierarchical copy or move operations of \\Layout. "
"However, use is not restricted to these applications.\n"
"\n"
"This class has been introduced in version 0.23."
);
}