mirror of https://github.com/KLayout/klayout.git
commit
8bd58be534
|
|
@ -110,6 +110,9 @@ GenericReaderOptions::GenericReaderOptions ()
|
||||||
m_lefdef_produce_labels = load_options.get_option_by_name ("lefdef_config.produce_labels").to_bool ();
|
m_lefdef_produce_labels = load_options.get_option_by_name ("lefdef_config.produce_labels").to_bool ();
|
||||||
m_lefdef_label_suffix = load_options.get_option_by_name ("lefdef_config.labels_suffix").to_string ();
|
m_lefdef_label_suffix = load_options.get_option_by_name ("lefdef_config.labels_suffix").to_string ();
|
||||||
m_lefdef_label_datatype = load_options.get_option_by_name ("lefdef_config.labels_datatype").to_int ();
|
m_lefdef_label_datatype = load_options.get_option_by_name ("lefdef_config.labels_datatype").to_int ();
|
||||||
|
m_lefdef_produce_lef_labels = load_options.get_option_by_name ("lefdef_config.produce_lef_labels").to_bool ();
|
||||||
|
m_lefdef_lef_label_suffix = load_options.get_option_by_name ("lefdef_config.lef_labels_suffix").to_string ();
|
||||||
|
m_lefdef_lef_label_datatype = load_options.get_option_by_name ("lefdef_config.lef_labels_datatype").to_int ();
|
||||||
m_lefdef_produce_routing = load_options.get_option_by_name ("lefdef_config.produce_routing").to_bool ();
|
m_lefdef_produce_routing = load_options.get_option_by_name ("lefdef_config.produce_routing").to_bool ();
|
||||||
m_lefdef_routing_suffix = load_options.get_option_by_name ("lefdef_config.routing_suffix_str").to_string ();
|
m_lefdef_routing_suffix = load_options.get_option_by_name ("lefdef_config.routing_suffix_str").to_string ();
|
||||||
m_lefdef_routing_datatype = load_options.get_option_by_name ("lefdef_config.routing_datatype_str").to_string ();
|
m_lefdef_routing_datatype = load_options.get_option_by_name ("lefdef_config.routing_datatype_str").to_string ();
|
||||||
|
|
@ -584,16 +587,30 @@ GenericReaderOptions::add_options (tl::CommandLineOptions &cmd)
|
||||||
"See '--" + m_long_prefix + "lefdef-via-geometry-suffix' for a description of the mapping scheme.\n"
|
"See '--" + m_long_prefix + "lefdef-via-geometry-suffix' for a description of the mapping scheme.\n"
|
||||||
)
|
)
|
||||||
<< tl::arg (group +
|
<< tl::arg (group +
|
||||||
"#!--" + m_long_prefix + "lefdef-dont-produce-labels", &m_lefdef_produce_labels, "Skips label when producing geometry",
|
"#!--" + m_long_prefix + "lefdef-dont-produce-labels", &m_lefdef_produce_labels, "Skips DEF pin label when producing geometry",
|
||||||
"If this option is given, no blockage geometry will be produced."
|
"If this option is given, no DEF pin label will be produced."
|
||||||
)
|
)
|
||||||
<< tl::arg (group +
|
<< tl::arg (group +
|
||||||
"#--" + m_long_prefix + "lefdef-label-suffix", &m_lefdef_label_suffix, "Specifies the label markers layer suffix in pattern-based mode",
|
"#--" + m_long_prefix + "lefdef-label-suffix", &m_lefdef_label_suffix, "Specifies the DEF pin label layer suffix in pattern-based mode",
|
||||||
"The label marker generation and layer mapping is designed in the same way than via geometry mapping, except the option to use mask specific target layers. "
|
"The label marker generation and layer mapping is designed in the same way than via geometry mapping, except the option to use mask specific target layers. "
|
||||||
"See '--" + m_long_prefix + "lefdef-via-geometry-suffix' for a description of the mapping scheme.\n"
|
"See '--" + m_long_prefix + "lefdef-via-geometry-suffix' for a description of the mapping scheme.\n"
|
||||||
)
|
)
|
||||||
<< tl::arg (group +
|
<< tl::arg (group +
|
||||||
"#--" + m_long_prefix + "lefdef-label-datatype", &m_lefdef_label_datatype, "Specifies the label markers layer datatype in pattern-based mode",
|
"#--" + m_long_prefix + "lefdef-label-datatype", &m_lefdef_label_datatype, "Specifies the DEF pin label layer datatype in pattern-based mode",
|
||||||
|
"The label marker generation and layer mapping is designed in the same way than via geometry mapping, except the option to use mask specific target layers. "
|
||||||
|
"See '--" + m_long_prefix + "lefdef-via-geometry-suffix' for a description of the mapping scheme.\n"
|
||||||
|
)
|
||||||
|
<< tl::arg (group +
|
||||||
|
"#!--" + m_long_prefix + "lefdef-dont-produce-lef-labels", &m_lefdef_produce_lef_labels, "Skips LEF pin label when producing geometry",
|
||||||
|
"If this option is given, no LEF pin label will be produced."
|
||||||
|
)
|
||||||
|
<< tl::arg (group +
|
||||||
|
"#--" + m_long_prefix + "lefdef-lef-label-suffix", &m_lefdef_lef_label_suffix, "Specifies the LEF pin label layer suffix in pattern-based mode",
|
||||||
|
"The label marker generation and layer mapping is designed in the same way than via geometry mapping, except the option to use mask specific target layers. "
|
||||||
|
"See '--" + m_long_prefix + "lefdef-via-geometry-suffix' for a description of the mapping scheme.\n"
|
||||||
|
)
|
||||||
|
<< tl::arg (group +
|
||||||
|
"#--" + m_long_prefix + "lefdef-lef-label-datatype", &m_lefdef_lef_label_datatype, "Specifies the LEF pin label layer datatype in pattern-based mode",
|
||||||
"The label marker generation and layer mapping is designed in the same way than via geometry mapping, except the option to use mask specific target layers. "
|
"The label marker generation and layer mapping is designed in the same way than via geometry mapping, except the option to use mask specific target layers. "
|
||||||
"See '--" + m_long_prefix + "lefdef-via-geometry-suffix' for a description of the mapping scheme.\n"
|
"See '--" + m_long_prefix + "lefdef-via-geometry-suffix' for a description of the mapping scheme.\n"
|
||||||
)
|
)
|
||||||
|
|
@ -776,6 +793,9 @@ GenericReaderOptions::configure (db::LoadLayoutOptions &load_options)
|
||||||
load_options.set_option_by_name ("lefdef_config.produce_labels", m_lefdef_produce_labels);
|
load_options.set_option_by_name ("lefdef_config.produce_labels", m_lefdef_produce_labels);
|
||||||
load_options.set_option_by_name ("lefdef_config.labels_suffix", m_lefdef_label_suffix);
|
load_options.set_option_by_name ("lefdef_config.labels_suffix", m_lefdef_label_suffix);
|
||||||
load_options.set_option_by_name ("lefdef_config.labels_datatype", m_lefdef_label_datatype);
|
load_options.set_option_by_name ("lefdef_config.labels_datatype", m_lefdef_label_datatype);
|
||||||
|
load_options.set_option_by_name ("lefdef_config.produce_lef_labels", m_lefdef_produce_lef_labels);
|
||||||
|
load_options.set_option_by_name ("lefdef_config.lef_labels_suffix", m_lefdef_lef_label_suffix);
|
||||||
|
load_options.set_option_by_name ("lefdef_config.lef_labels_datatype", m_lefdef_lef_label_datatype);
|
||||||
load_options.set_option_by_name ("lefdef_config.produce_routing", m_lefdef_produce_routing);
|
load_options.set_option_by_name ("lefdef_config.produce_routing", m_lefdef_produce_routing);
|
||||||
load_options.set_option_by_name ("lefdef_config.routing_suffix_str", m_lefdef_routing_suffix);
|
load_options.set_option_by_name ("lefdef_config.routing_suffix_str", m_lefdef_routing_suffix);
|
||||||
load_options.set_option_by_name ("lefdef_config.routing_datatype_str", m_lefdef_routing_datatype);
|
load_options.set_option_by_name ("lefdef_config.routing_datatype_str", m_lefdef_routing_datatype);
|
||||||
|
|
|
||||||
|
|
@ -176,6 +176,9 @@ private:
|
||||||
bool m_lefdef_produce_labels;
|
bool m_lefdef_produce_labels;
|
||||||
std::string m_lefdef_label_suffix;
|
std::string m_lefdef_label_suffix;
|
||||||
int m_lefdef_label_datatype;
|
int m_lefdef_label_datatype;
|
||||||
|
bool m_lefdef_produce_lef_labels;
|
||||||
|
std::string m_lefdef_lef_label_suffix;
|
||||||
|
int m_lefdef_lef_label_datatype;
|
||||||
bool m_lefdef_produce_routing;
|
bool m_lefdef_produce_routing;
|
||||||
std::string m_lefdef_routing_suffix;
|
std::string m_lefdef_routing_suffix;
|
||||||
std::string m_lefdef_routing_datatype;
|
std::string m_lefdef_routing_datatype;
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ namespace db
|
||||||
CompoundRegionOperationNode::CompoundRegionOperationNode ()
|
CompoundRegionOperationNode::CompoundRegionOperationNode ()
|
||||||
: m_dist (0)
|
: m_dist (0)
|
||||||
{
|
{
|
||||||
invalidate_cache ();
|
// .. nothing yet ..
|
||||||
}
|
}
|
||||||
|
|
||||||
CompoundRegionOperationNode::~CompoundRegionOperationNode ()
|
CompoundRegionOperationNode::~CompoundRegionOperationNode ()
|
||||||
|
|
@ -106,20 +106,20 @@ static void translate (db::Layout *, const std::vector<std::unordered_set<db::Po
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionOperationNode::compute_local (db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::PolygonRef> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionOperationNode::compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::PolygonRef> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
std::vector<std::unordered_set<db::Polygon> > intermediate;
|
std::vector<std::unordered_set<db::Polygon> > intermediate;
|
||||||
intermediate.push_back (std::unordered_set<db::Polygon> ());
|
intermediate.push_back (std::unordered_set<db::Polygon> ());
|
||||||
implement_compute_local (layout, interactions, intermediate, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, intermediate, max_vertex_count, area_ratio);
|
||||||
translate (layout, intermediate, results);
|
translate (layout, intermediate, results);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionOperationNode::compute_local (db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::Polygon> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionOperationNode::compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::Polygon> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
std::vector<std::unordered_set<db::PolygonRef> > intermediate;
|
std::vector<std::unordered_set<db::PolygonRef> > intermediate;
|
||||||
intermediate.push_back (std::unordered_set<db::PolygonRef> ());
|
intermediate.push_back (std::unordered_set<db::PolygonRef> ());
|
||||||
implement_compute_local (layout, interactions, intermediate, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, intermediate, max_vertex_count, area_ratio);
|
||||||
translate (layout, intermediate, results);
|
translate (layout, intermediate, results);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -142,14 +142,14 @@ std::vector<db::Region *> CompoundRegionOperationPrimaryNode::inputs () const
|
||||||
return is;
|
return is;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompoundRegionOperationPrimaryNode::do_compute_local (db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Polygon> > &results, size_t, double) const
|
void CompoundRegionOperationPrimaryNode::do_compute_local (CompoundRegionOperationCache * /*cache*/, db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Polygon> > &results, size_t, double) const
|
||||||
{
|
{
|
||||||
for (shape_interactions<db::Polygon, db::Polygon>::subject_iterator i = interactions.begin_subjects (); i != interactions.end_subjects (); ++i) {
|
for (shape_interactions<db::Polygon, db::Polygon>::subject_iterator i = interactions.begin_subjects (); i != interactions.end_subjects (); ++i) {
|
||||||
results.front ().insert (i->second);
|
results.front ().insert (i->second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompoundRegionOperationPrimaryNode::do_compute_local (db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::PolygonRef> > &results, size_t, double) const
|
void CompoundRegionOperationPrimaryNode::do_compute_local (CompoundRegionOperationCache * /*cache*/, db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::PolygonRef> > &results, size_t, double) const
|
||||||
{
|
{
|
||||||
for (shape_interactions<db::PolygonRef, db::PolygonRef>::subject_iterator i = interactions.begin_subjects (); i != interactions.end_subjects (); ++i) {
|
for (shape_interactions<db::PolygonRef, db::PolygonRef>::subject_iterator i = interactions.begin_subjects (); i != interactions.end_subjects (); ++i) {
|
||||||
results.front ().insert (i->second);
|
results.front ().insert (i->second);
|
||||||
|
|
@ -177,14 +177,14 @@ std::vector<db::Region *> CompoundRegionOperationSecondaryNode::inputs () const
|
||||||
return iv;
|
return iv;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompoundRegionOperationSecondaryNode::do_compute_local (db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Polygon> > &results, size_t, double) const
|
void CompoundRegionOperationSecondaryNode::do_compute_local (CompoundRegionOperationCache * /*cache*/, db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Polygon> > &results, size_t, double) const
|
||||||
{
|
{
|
||||||
for (shape_interactions<db::Polygon, db::Polygon>::intruder_iterator i = interactions.begin_intruders (); i != interactions.end_intruders (); ++i) {
|
for (shape_interactions<db::Polygon, db::Polygon>::intruder_iterator i = interactions.begin_intruders (); i != interactions.end_intruders (); ++i) {
|
||||||
results.front ().insert (i->second.second);
|
results.front ().insert (i->second.second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompoundRegionOperationSecondaryNode::do_compute_local (db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::PolygonRef> > &results, size_t, double) const
|
void CompoundRegionOperationSecondaryNode::do_compute_local (CompoundRegionOperationCache * /*cache*/, db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::PolygonRef> > &results, size_t, double) const
|
||||||
{
|
{
|
||||||
for (shape_interactions<db::PolygonRef, db::PolygonRef>::intruder_iterator i = interactions.begin_intruders (); i != interactions.end_intruders (); ++i) {
|
for (shape_interactions<db::PolygonRef, db::PolygonRef>::intruder_iterator i = interactions.begin_intruders (); i != interactions.end_intruders (); ++i) {
|
||||||
results.front ().insert (i->second.second);
|
results.front ().insert (i->second.second);
|
||||||
|
|
@ -211,14 +211,14 @@ std::vector<db::Region *> CompoundRegionOperationForeignNode::inputs () const
|
||||||
return iv;
|
return iv;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompoundRegionOperationForeignNode::do_compute_local (db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Polygon> > &results, size_t, double) const
|
void CompoundRegionOperationForeignNode::do_compute_local (CompoundRegionOperationCache * /*cache*/, db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Polygon> > &results, size_t, double) const
|
||||||
{
|
{
|
||||||
for (shape_interactions<db::Polygon, db::Polygon>::intruder_iterator i = interactions.begin_intruders (); i != interactions.end_intruders (); ++i) {
|
for (shape_interactions<db::Polygon, db::Polygon>::intruder_iterator i = interactions.begin_intruders (); i != interactions.end_intruders (); ++i) {
|
||||||
results.front ().insert (i->second.second);
|
results.front ().insert (i->second.second);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompoundRegionOperationForeignNode::do_compute_local (db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::PolygonRef> > &results, size_t, double) const
|
void CompoundRegionOperationForeignNode::do_compute_local (CompoundRegionOperationCache * /*cache*/, db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::PolygonRef> > &results, size_t, double) const
|
||||||
{
|
{
|
||||||
for (shape_interactions<db::PolygonRef, db::PolygonRef>::intruder_iterator i = interactions.begin_intruders (); i != interactions.end_intruders (); ++i) {
|
for (shape_interactions<db::PolygonRef, db::PolygonRef>::intruder_iterator i = interactions.begin_intruders (); i != interactions.end_intruders (); ++i) {
|
||||||
results.front ().insert (i->second.second);
|
results.front ().insert (i->second.second);
|
||||||
|
|
@ -360,15 +360,6 @@ CompoundRegionMultiInputOperationNode::~CompoundRegionMultiInputOperationNode ()
|
||||||
// .. nothing yet ..
|
// .. nothing yet ..
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
CompoundRegionMultiInputOperationNode::invalidate_cache () const
|
|
||||||
{
|
|
||||||
CompoundRegionOperationNode::invalidate_cache ();
|
|
||||||
for (tl::shared_collection<CompoundRegionOperationNode>::const_iterator i = m_children.begin (); i != m_children.end (); ++i) {
|
|
||||||
i->invalidate_cache ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
db::Coord
|
db::Coord
|
||||||
CompoundRegionMultiInputOperationNode::computed_dist () const
|
CompoundRegionMultiInputOperationNode::computed_dist () const
|
||||||
{
|
{
|
||||||
|
|
@ -455,7 +446,7 @@ std::string CompoundRegionLogicalBoolOperationNode::generated_description () con
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
void CompoundRegionLogicalBoolOperationNode::implement_compute_local (db::Layout *layout, const shape_interactions<T, T> &interactions, std::vector<std::unordered_set<T> > &results, size_t max_vertex_count, double area_ratio) const
|
void CompoundRegionLogicalBoolOperationNode::implement_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<T, T> &interactions, std::vector<std::unordered_set<T> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
bool ok = (m_op == And ? true : false);
|
bool ok = (m_op == And ? true : false);
|
||||||
|
|
||||||
|
|
@ -468,7 +459,7 @@ void CompoundRegionLogicalBoolOperationNode::implement_compute_local (db::Layout
|
||||||
|
|
||||||
const CompoundRegionOperationNode *node = child (ci);
|
const CompoundRegionOperationNode *node = child (ci);
|
||||||
|
|
||||||
bool any = node->compute_local_bool<T> (layout, child_interactions, max_vertex_count, area_ratio);
|
bool any = node->compute_local_bool<T> (cache, layout, child_interactions, max_vertex_count, area_ratio);
|
||||||
|
|
||||||
if (m_op == And) {
|
if (m_op == And) {
|
||||||
if (! any) {
|
if (! any) {
|
||||||
|
|
@ -752,13 +743,13 @@ static void copy_results (std::vector<std::unordered_set<R> > &, const std::vect
|
||||||
|
|
||||||
template <class T, class T1, class T2, class TR>
|
template <class T, class T1, class T2, class TR>
|
||||||
void
|
void
|
||||||
CompoundRegionGeometricalBoolOperationNode::implement_bool (db::Layout *layout, const shape_interactions<T, T> &interactions, std::vector<std::unordered_set<TR> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionGeometricalBoolOperationNode::implement_bool (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<T, T> &interactions, std::vector<std::unordered_set<TR> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
std::vector<std::unordered_set<T1> > one_a;
|
std::vector<std::unordered_set<T1> > one_a;
|
||||||
one_a.push_back (std::unordered_set<T1> ());
|
one_a.push_back (std::unordered_set<T1> ());
|
||||||
|
|
||||||
shape_interactions<T, T> computed_a;
|
shape_interactions<T, T> computed_a;
|
||||||
child (0)->compute_local (layout, interactions_for_child (interactions, 0, computed_a), one_a, max_vertex_count, area_ratio);
|
child (0)->compute_local (cache, layout, interactions_for_child (interactions, 0, computed_a), one_a, max_vertex_count, area_ratio);
|
||||||
|
|
||||||
if (one_a.front ().empty ()) {
|
if (one_a.front ().empty ()) {
|
||||||
|
|
||||||
|
|
@ -772,7 +763,7 @@ CompoundRegionGeometricalBoolOperationNode::implement_bool (db::Layout *layout,
|
||||||
one_b.push_back (std::unordered_set<T2> ());
|
one_b.push_back (std::unordered_set<T2> ());
|
||||||
|
|
||||||
shape_interactions<T, T> computed_b;
|
shape_interactions<T, T> computed_b;
|
||||||
child (1)->compute_local (layout, interactions_for_child (interactions, 1, computed_b), one_b, max_vertex_count, area_ratio);
|
child (1)->compute_local (cache, layout, interactions_for_child (interactions, 1, computed_b), one_b, max_vertex_count, area_ratio);
|
||||||
|
|
||||||
copy_results (results, one_b);
|
copy_results (results, one_b);
|
||||||
|
|
||||||
|
|
@ -784,7 +775,7 @@ CompoundRegionGeometricalBoolOperationNode::implement_bool (db::Layout *layout,
|
||||||
one_b.push_back (std::unordered_set<T2> ());
|
one_b.push_back (std::unordered_set<T2> ());
|
||||||
|
|
||||||
shape_interactions<T, T> computed_b;
|
shape_interactions<T, T> computed_b;
|
||||||
child (1)->compute_local (layout, interactions_for_child (interactions, 1, computed_b), one_b, max_vertex_count, area_ratio);
|
child (1)->compute_local (cache, layout, interactions_for_child (interactions, 1, computed_b), one_b, max_vertex_count, area_ratio);
|
||||||
|
|
||||||
if (one_b.front ().empty ()) {
|
if (one_b.front ().empty ()) {
|
||||||
|
|
||||||
|
|
@ -803,44 +794,44 @@ CompoundRegionGeometricalBoolOperationNode::implement_bool (db::Layout *layout,
|
||||||
|
|
||||||
template <class T, class TR>
|
template <class T, class TR>
|
||||||
void
|
void
|
||||||
CompoundRegionGeometricalBoolOperationNode::implement_compute_local (db::Layout *layout, const shape_interactions<T, T> &interactions, std::vector<std::unordered_set<TR> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionGeometricalBoolOperationNode::implement_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<T, T> &interactions, std::vector<std::unordered_set<TR> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
ResultType res_a = child (0)->result_type ();
|
ResultType res_a = child (0)->result_type ();
|
||||||
ResultType res_b = child (1)->result_type ();
|
ResultType res_b = child (1)->result_type ();
|
||||||
|
|
||||||
if (res_a == Region && res_b == Region) {
|
if (res_a == Region && res_b == Region) {
|
||||||
implement_bool<T, T, T, TR> (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_bool<T, T, T, TR> (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
} else if (res_a == Region && res_b == Edges) {
|
} else if (res_a == Region && res_b == Edges) {
|
||||||
implement_bool<T, T, db::Edge, TR> (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_bool<T, T, db::Edge, TR> (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
} else if (res_a == Edges && res_b == Region) {
|
} else if (res_a == Edges && res_b == Region) {
|
||||||
implement_bool<T, db::Edge, T, TR> (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_bool<T, db::Edge, T, TR> (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
} else if (res_a == Edges && res_b == Edges) {
|
} else if (res_a == Edges && res_b == Edges) {
|
||||||
implement_bool<T, db::Edge, db::Edge, TR> (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_bool<T, db::Edge, db::Edge, TR> (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionGeometricalBoolOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Polygon> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionGeometricalBoolOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Polygon> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionGeometricalBoolOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionGeometricalBoolOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionGeometricalBoolOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::PolygonRef> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionGeometricalBoolOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::PolygonRef> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionGeometricalBoolOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionGeometricalBoolOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------------------------
|
||||||
|
|
@ -909,7 +900,7 @@ namespace
|
||||||
|
|
||||||
template <class TS, class TI, class TR>
|
template <class TS, class TI, class TR>
|
||||||
template <class TTS, class TTI, class TTR>
|
template <class TTS, class TTI, class TTR>
|
||||||
void compound_region_generic_operation_node<TS, TI, TR>::implement_compute_local (db::Layout *layout, const shape_interactions<TTS, TTI> &interactions, std::vector<std::unordered_set<TTR> > &results, size_t max_vertex_count, double area_ratio) const
|
void compound_region_generic_operation_node<TS, TI, TR>::implement_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<TTS, TTI> &interactions, std::vector<std::unordered_set<TTR> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
generic_result_adaptor <TTR> adaptor (&results);
|
generic_result_adaptor <TTR> adaptor (&results);
|
||||||
|
|
||||||
|
|
@ -926,7 +917,7 @@ void compound_region_generic_operation_node<TS, TI, TR>::implement_compute_local
|
||||||
shape_interactions<TTS, TTI> self_interactions_heap;
|
shape_interactions<TTS, TTI> self_interactions_heap;
|
||||||
const shape_interactions<TTS, TTI> &self_interactions = interactions_for_child (interactions, 0, self_interactions_heap);
|
const shape_interactions<TTS, TTI> &self_interactions = interactions_for_child (interactions, 0, self_interactions_heap);
|
||||||
|
|
||||||
self->compute_local (layout, self_interactions, self_result, max_vertex_count, area_ratio);
|
self->compute_local (cache, layout, self_interactions, self_result, max_vertex_count, area_ratio);
|
||||||
|
|
||||||
db::generic_shape_iterator <TS> is (self_result.front ().begin (), self_result.front ().end ());
|
db::generic_shape_iterator <TS> is (self_result.front ().begin (), self_result.front ().end ());
|
||||||
|
|
||||||
|
|
@ -943,7 +934,7 @@ void compound_region_generic_operation_node<TS, TI, TR>::implement_compute_local
|
||||||
shape_interactions<TTS, TTI> intruder_interactions_heap;
|
shape_interactions<TTS, TTI> intruder_interactions_heap;
|
||||||
const shape_interactions<TTS, TTI> &intruder_interactions = interactions_for_child (interactions, ci, intruder_interactions_heap);
|
const shape_interactions<TTS, TTI> &intruder_interactions = interactions_for_child (interactions, ci, intruder_interactions_heap);
|
||||||
|
|
||||||
intruder->compute_local (layout, intruder_interactions, intruder_result, max_vertex_count, area_ratio);
|
intruder->compute_local (cache, layout, intruder_interactions, intruder_result, max_vertex_count, area_ratio);
|
||||||
|
|
||||||
intruder_results.push_back (std::unordered_set<TI> ());
|
intruder_results.push_back (std::unordered_set<TI> ());
|
||||||
intruder_results.back ().swap (intruder_result.front ());
|
intruder_results.back ().swap (intruder_result.front ());
|
||||||
|
|
@ -959,14 +950,14 @@ void compound_region_generic_operation_node<TS, TI, TR>::implement_compute_local
|
||||||
}
|
}
|
||||||
|
|
||||||
// explicit instantiations
|
// explicit instantiations
|
||||||
template DB_PUBLIC void compound_region_generic_operation_node<db::Polygon, db::Polygon, db::Polygon>::implement_compute_local (db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &, std::vector<std::unordered_set<db::PolygonRef> > &, size_t, double) const;
|
template DB_PUBLIC void compound_region_generic_operation_node<db::Polygon, db::Polygon, db::Polygon>::implement_compute_local (db::CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &, std::vector<std::unordered_set<db::PolygonRef> > &, size_t, double) const;
|
||||||
template DB_PUBLIC void compound_region_generic_operation_node<db::Polygon, db::Polygon, db::Polygon>::implement_compute_local (db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::Polygon> > &, size_t, double) const;
|
template DB_PUBLIC void compound_region_generic_operation_node<db::Polygon, db::Polygon, db::Polygon>::implement_compute_local (db::CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::Polygon> > &, size_t, double) const;
|
||||||
template DB_PUBLIC void compound_region_generic_operation_node<db::Polygon, db::Polygon, db::Polygon>::implement_compute_local (db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::Edge> > &, size_t, double) const;
|
template DB_PUBLIC void compound_region_generic_operation_node<db::Polygon, db::Polygon, db::Polygon>::implement_compute_local (db::CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::Edge> > &, size_t, double) const;
|
||||||
template DB_PUBLIC void compound_region_generic_operation_node<db::Polygon, db::Polygon, db::Polygon>::implement_compute_local (db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::EdgePair> > &, size_t, double) const;
|
template DB_PUBLIC void compound_region_generic_operation_node<db::Polygon, db::Polygon, db::Polygon>::implement_compute_local (db::CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::EdgePair> > &, size_t, double) const;
|
||||||
template DB_PUBLIC void compound_region_generic_operation_node<db::Polygon, db::Edge, db::Polygon>::implement_compute_local (db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::Polygon> > &, size_t, double) const;
|
template DB_PUBLIC void compound_region_generic_operation_node<db::Polygon, db::Edge, db::Polygon>::implement_compute_local (db::CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::Polygon> > &, size_t, double) const;
|
||||||
template DB_PUBLIC void compound_region_generic_operation_node<db::Polygon, db::Edge, db::Polygon>::implement_compute_local (db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &, std::vector<std::unordered_set<db::PolygonRef> > &, size_t, double) const;
|
template DB_PUBLIC void compound_region_generic_operation_node<db::Polygon, db::Edge, db::Polygon>::implement_compute_local (db::CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &, std::vector<std::unordered_set<db::PolygonRef> > &, size_t, double) const;
|
||||||
template DB_PUBLIC void compound_region_generic_operation_node<db::Polygon, db::Edge, db::Edge>::implement_compute_local (db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &, std::vector<std::unordered_set<db::Edge> > &, size_t, double) const;
|
template DB_PUBLIC void compound_region_generic_operation_node<db::Polygon, db::Edge, db::Edge>::implement_compute_local (db::CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &, std::vector<std::unordered_set<db::Edge> > &, size_t, double) const;
|
||||||
template DB_PUBLIC void compound_region_generic_operation_node<db::Polygon, db::Edge, db::Edge>::implement_compute_local (db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::Edge> > &, size_t, double) const;
|
template DB_PUBLIC void compound_region_generic_operation_node<db::Polygon, db::Edge, db::Edge>::implement_compute_local (db::CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::Edge> > &, size_t, double) const;
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
@ -999,7 +990,7 @@ CompoundRegionLogicalCaseSelectOperationNode::result_type () const
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T, class TR>
|
template <class T, class TR>
|
||||||
void CompoundRegionLogicalCaseSelectOperationNode::implement_compute_local (db::Layout *layout, const shape_interactions<T, T> &interactions, std::vector<std::unordered_set<TR> > &results, size_t max_vertex_count, double area_ratio) const
|
void CompoundRegionLogicalCaseSelectOperationNode::implement_compute_local (db::CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<T, T> &interactions, std::vector<std::unordered_set<TR> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
|
|
||||||
|
|
@ -1014,7 +1005,7 @@ void CompoundRegionLogicalCaseSelectOperationNode::implement_compute_local (db::
|
||||||
|
|
||||||
if (ci + 1 < children ()) {
|
if (ci + 1 < children ()) {
|
||||||
|
|
||||||
ok = node->compute_local_bool<T> (layout, child_interactions, max_vertex_count, area_ratio);
|
ok = node->compute_local_bool<T> (cache, layout, child_interactions, max_vertex_count, area_ratio);
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -1030,12 +1021,12 @@ void CompoundRegionLogicalCaseSelectOperationNode::implement_compute_local (db::
|
||||||
|
|
||||||
std::vector<std::unordered_set<TR> > one;
|
std::vector<std::unordered_set<TR> > one;
|
||||||
one.push_back (std::unordered_set<TR> ());
|
one.push_back (std::unordered_set<TR> ());
|
||||||
node->compute_local (layout, child_interactions, one, max_vertex_count, area_ratio);
|
node->compute_local (cache, layout, child_interactions, one, max_vertex_count, area_ratio);
|
||||||
results[ci / 2].swap (one.front ());
|
results[ci / 2].swap (one.front ());
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
node->compute_local (layout, child_interactions, results, max_vertex_count, area_ratio);
|
node->compute_local (cache, layout, child_interactions, results, max_vertex_count, area_ratio);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1047,12 +1038,12 @@ void CompoundRegionLogicalCaseSelectOperationNode::implement_compute_local (db::
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template void CompoundRegionLogicalCaseSelectOperationNode::implement_compute_local<db::Polygon, db::Polygon> (db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::Polygon> > &, size_t, double) const;
|
template void CompoundRegionLogicalCaseSelectOperationNode::implement_compute_local<db::Polygon, db::Polygon> (CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::Polygon> > &, size_t, double) const;
|
||||||
template void CompoundRegionLogicalCaseSelectOperationNode::implement_compute_local<db::PolygonRef, db::PolygonRef> (db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &, std::vector<std::unordered_set<db::PolygonRef> > &, size_t, double) const;
|
template void CompoundRegionLogicalCaseSelectOperationNode::implement_compute_local<db::PolygonRef, db::PolygonRef> (CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &, std::vector<std::unordered_set<db::PolygonRef> > &, size_t, double) const;
|
||||||
template void CompoundRegionLogicalCaseSelectOperationNode::implement_compute_local<db::Polygon, db::Edge> (db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::Edge> > &, size_t, double) const;
|
template void CompoundRegionLogicalCaseSelectOperationNode::implement_compute_local<db::Polygon, db::Edge> (CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::Edge> > &, size_t, double) const;
|
||||||
template void CompoundRegionLogicalCaseSelectOperationNode::implement_compute_local<db::PolygonRef, db::Edge> (db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &, std::vector<std::unordered_set<db::Edge> > &, size_t, double) const;
|
template void CompoundRegionLogicalCaseSelectOperationNode::implement_compute_local<db::PolygonRef, db::Edge> (CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &, std::vector<std::unordered_set<db::Edge> > &, size_t, double) const;
|
||||||
template void CompoundRegionLogicalCaseSelectOperationNode::implement_compute_local<db::Polygon, db::EdgePair> (db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::EdgePair> > &, size_t, double) const;
|
template void CompoundRegionLogicalCaseSelectOperationNode::implement_compute_local<db::Polygon, db::EdgePair> (CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::EdgePair> > &, size_t, double) const;
|
||||||
template void CompoundRegionLogicalCaseSelectOperationNode::implement_compute_local<db::PolygonRef, db::EdgePair> (db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &, std::vector<std::unordered_set<db::EdgePair> > &, size_t, double) const;
|
template void CompoundRegionLogicalCaseSelectOperationNode::implement_compute_local<db::PolygonRef, db::EdgePair> (CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &, std::vector<std::unordered_set<db::EdgePair> > &, size_t, double) const;
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
@ -1154,24 +1145,24 @@ CompoundRegionJoinOperationNode::result_type () const
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T, class TR>
|
template <class T, class TR>
|
||||||
void CompoundRegionJoinOperationNode::implement_compute_local (db::Layout *layout, const shape_interactions<T, T> &interactions, std::vector<std::unordered_set<TR> > &results, size_t max_vertex_count, double area_ratio) const
|
void CompoundRegionJoinOperationNode::implement_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<T, T> &interactions, std::vector<std::unordered_set<TR> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
for (unsigned int ci = 0; ci < children (); ++ci) {
|
for (unsigned int ci = 0; ci < children (); ++ci) {
|
||||||
|
|
||||||
shape_interactions<T, T> computed;
|
shape_interactions<T, T> computed;
|
||||||
const shape_interactions<T, T> &child_interactions = interactions_for_child<T, T> (interactions, ci, computed);
|
const shape_interactions<T, T> &child_interactions = interactions_for_child<T, T> (interactions, ci, computed);
|
||||||
|
|
||||||
child (ci)->compute_local (layout, child_interactions, results, max_vertex_count, area_ratio);
|
child (ci)->compute_local (cache, layout, child_interactions, results, max_vertex_count, area_ratio);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template void CompoundRegionJoinOperationNode::implement_compute_local<db::Polygon, db::Polygon> (db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::Polygon> > &, size_t, double) const;
|
template void CompoundRegionJoinOperationNode::implement_compute_local<db::Polygon, db::Polygon> (CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::Polygon> > &, size_t, double) const;
|
||||||
template void CompoundRegionJoinOperationNode::implement_compute_local<db::PolygonRef, db::PolygonRef> (db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &, std::vector<std::unordered_set<db::PolygonRef> > &, size_t, double) const;
|
template void CompoundRegionJoinOperationNode::implement_compute_local<db::PolygonRef, db::PolygonRef> (CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &, std::vector<std::unordered_set<db::PolygonRef> > &, size_t, double) const;
|
||||||
template void CompoundRegionJoinOperationNode::implement_compute_local<db::Polygon, db::Edge> (db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::Edge> > &, size_t, double) const;
|
template void CompoundRegionJoinOperationNode::implement_compute_local<db::Polygon, db::Edge> (CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::Edge> > &, size_t, double) const;
|
||||||
template void CompoundRegionJoinOperationNode::implement_compute_local<db::PolygonRef, db::Edge> (db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &, std::vector<std::unordered_set<db::Edge> > &, size_t, double) const;
|
template void CompoundRegionJoinOperationNode::implement_compute_local<db::PolygonRef, db::Edge> (CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &, std::vector<std::unordered_set<db::Edge> > &, size_t, double) const;
|
||||||
template void CompoundRegionJoinOperationNode::implement_compute_local<db::Polygon, db::EdgePair> (db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::EdgePair> > &, size_t, double) const;
|
template void CompoundRegionJoinOperationNode::implement_compute_local<db::Polygon, db::EdgePair> (CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::Polygon, db::Polygon> &, std::vector<std::unordered_set<db::EdgePair> > &, size_t, double) const;
|
||||||
template void CompoundRegionJoinOperationNode::implement_compute_local<db::PolygonRef, db::EdgePair> (db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &, std::vector<std::unordered_set<db::EdgePair> > &, size_t, double) const;
|
template void CompoundRegionJoinOperationNode::implement_compute_local<db::PolygonRef, db::EdgePair> (CompoundRegionOperationCache *, db::Layout *, const shape_interactions<db::PolygonRef, db::PolygonRef> &, std::vector<std::unordered_set<db::EdgePair> > &, size_t, double) const;
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
@ -1190,15 +1181,15 @@ CompoundRegionFilterOperationNode::~CompoundRegionFilterOperationNode ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionFilterOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Polygon> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionFilterOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Polygon> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionFilterOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::PolygonRef> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionFilterOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::PolygonRef> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------------------------
|
||||||
|
|
@ -1218,15 +1209,15 @@ CompoundRegionEdgeFilterOperationNode::~CompoundRegionEdgeFilterOperationNode ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionEdgeFilterOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionEdgeFilterOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionEdgeFilterOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionEdgeFilterOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------------------------
|
||||||
|
|
@ -1246,15 +1237,15 @@ CompoundRegionEdgePairFilterOperationNode::~CompoundRegionEdgePairFilterOperatio
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionEdgePairFilterOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::EdgePair> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionEdgePairFilterOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::EdgePair> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionEdgePairFilterOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::EdgePair> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionEdgePairFilterOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::EdgePair> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
@ -1280,15 +1271,15 @@ CompoundRegionProcessingOperationNode::~CompoundRegionProcessingOperationNode ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionProcessingOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Polygon> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionProcessingOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Polygon> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionProcessingOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::PolygonRef> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionProcessingOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::PolygonRef> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -1324,15 +1315,15 @@ CompoundRegionToEdgeProcessingOperationNode::~CompoundRegionToEdgeProcessingOper
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionToEdgeProcessingOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionToEdgeProcessingOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionToEdgeProcessingOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionToEdgeProcessingOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -1364,15 +1355,15 @@ CompoundRegionEdgeProcessingOperationNode::~CompoundRegionEdgeProcessingOperatio
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionEdgeProcessingOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionEdgeProcessingOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionEdgeProcessingOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionEdgeProcessingOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompoundRegionEdgeProcessingOperationNode::processed (db::Layout *, const db::Edge &p, std::vector<db::Edge> &res) const
|
void CompoundRegionEdgeProcessingOperationNode::processed (db::Layout *, const db::Edge &p, std::vector<db::Edge> &res) const
|
||||||
|
|
@ -1397,15 +1388,15 @@ CompoundRegionEdgeToPolygonProcessingOperationNode::~CompoundRegionEdgeToPolygon
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionEdgeToPolygonProcessingOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Polygon> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionEdgeToPolygonProcessingOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Polygon> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionEdgeToPolygonProcessingOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::PolygonRef> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionEdgeToPolygonProcessingOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::PolygonRef> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -1442,15 +1433,15 @@ CompoundRegionToEdgePairProcessingOperationNode::~CompoundRegionToEdgePairProces
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionToEdgePairProcessingOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::EdgePair> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionToEdgePairProcessingOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::EdgePair> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionToEdgePairProcessingOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::EdgePair> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionToEdgePairProcessingOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::EdgePair> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -1482,15 +1473,15 @@ CompoundRegionEdgePairToPolygonProcessingOperationNode::~CompoundRegionEdgePairT
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionEdgePairToPolygonProcessingOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Polygon> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionEdgePairToPolygonProcessingOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Polygon> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionEdgePairToPolygonProcessingOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::PolygonRef> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionEdgePairToPolygonProcessingOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::PolygonRef> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -1527,15 +1518,15 @@ CompoundRegionEdgePairToEdgeProcessingOperationNode::~CompoundRegionEdgePairToEd
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionEdgePairToEdgeProcessingOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionEdgePairToEdgeProcessingOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionEdgePairToEdgeProcessingOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionEdgePairToEdgeProcessingOperationNode::do_compute_local (CompoundRegionOperationCache *cache, db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::Edge> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
implement_compute_local (layout, interactions, results, max_vertex_count, area_ratio);
|
implement_compute_local (cache, layout, interactions, results, max_vertex_count, area_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------------------------
|
||||||
|
|
@ -1592,7 +1583,7 @@ CompoundRegionCheckOperationNode::computed_dist () const
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionCheckOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::EdgePair> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionCheckOperationNode::do_compute_local (CompoundRegionOperationCache * /*cache*/, db::Layout *layout, const shape_interactions<db::Polygon, db::Polygon> &interactions, std::vector<std::unordered_set<db::EdgePair> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
db::check_local_operation<db::Polygon, db::Polygon> op (m_check, m_different_polygons, m_has_other, m_is_other_merged, m_options);
|
db::check_local_operation<db::Polygon, db::Polygon> op (m_check, m_different_polygons, m_has_other, m_is_other_merged, m_options);
|
||||||
|
|
||||||
|
|
@ -1608,7 +1599,7 @@ CompoundRegionCheckOperationNode::do_compute_local (db::Layout *layout, const sh
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompoundRegionCheckOperationNode::do_compute_local (db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::EdgePair> > &results, size_t max_vertex_count, double area_ratio) const
|
CompoundRegionCheckOperationNode::do_compute_local (CompoundRegionOperationCache * /*cache*/, db::Layout *layout, const shape_interactions<db::PolygonRef, db::PolygonRef> &interactions, std::vector<std::unordered_set<db::EdgePair> > &results, size_t max_vertex_count, double area_ratio) const
|
||||||
{
|
{
|
||||||
db::check_local_operation<db::PolygonRef, db::PolygonRef> op (m_check, m_different_polygons, m_has_other, m_is_other_merged, m_options);
|
db::check_local_operation<db::PolygonRef, db::PolygonRef> op (m_check, m_different_polygons, m_has_other, m_is_other_merged, m_options);
|
||||||
|
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1292,3 +1292,9 @@ TEST(49d_drcWithFragments)
|
||||||
{
|
{
|
||||||
run_test (_this, "49", true);
|
run_test (_this, "49", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(50_issue826)
|
||||||
|
{
|
||||||
|
run_test (_this, "50", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -127,6 +127,8 @@ static std::string purpose_to_name (LayerPurpose purpose)
|
||||||
return "VIA";
|
return "VIA";
|
||||||
case Label:
|
case Label:
|
||||||
return "LABEL";
|
return "LABEL";
|
||||||
|
case LEFLabel:
|
||||||
|
return "LEFLABEL";
|
||||||
case Pins:
|
case Pins:
|
||||||
return "PIN";
|
return "PIN";
|
||||||
case Fills:
|
case Fills:
|
||||||
|
|
@ -497,6 +499,9 @@ LEFDEFReaderOptions::LEFDEFReaderOptions ()
|
||||||
m_produce_labels (true),
|
m_produce_labels (true),
|
||||||
m_labels_suffix (".LABEL"),
|
m_labels_suffix (".LABEL"),
|
||||||
m_labels_datatype (1),
|
m_labels_datatype (1),
|
||||||
|
m_produce_lef_labels (true),
|
||||||
|
m_lef_labels_suffix (".LABEL"),
|
||||||
|
m_lef_labels_datatype (1),
|
||||||
m_produce_routing (true),
|
m_produce_routing (true),
|
||||||
m_routing_suffix (""),
|
m_routing_suffix (""),
|
||||||
m_routing_datatype (0),
|
m_routing_datatype (0),
|
||||||
|
|
@ -566,6 +571,9 @@ LEFDEFReaderOptions &LEFDEFReaderOptions::operator= (const LEFDEFReaderOptions &
|
||||||
m_produce_labels = d.m_produce_labels;
|
m_produce_labels = d.m_produce_labels;
|
||||||
m_labels_suffix = d.m_labels_suffix;
|
m_labels_suffix = d.m_labels_suffix;
|
||||||
m_labels_datatype = d.m_labels_datatype;
|
m_labels_datatype = d.m_labels_datatype;
|
||||||
|
m_produce_lef_labels = d.m_produce_lef_labels;
|
||||||
|
m_lef_labels_suffix = d.m_lef_labels_suffix;
|
||||||
|
m_lef_labels_datatype = d.m_lef_labels_datatype;
|
||||||
m_produce_routing = d.m_produce_routing;
|
m_produce_routing = d.m_produce_routing;
|
||||||
m_routing_suffix = d.m_routing_suffix;
|
m_routing_suffix = d.m_routing_suffix;
|
||||||
m_routing_suffixes = d.m_routing_suffixes;
|
m_routing_suffixes = d.m_routing_suffixes;
|
||||||
|
|
@ -990,22 +998,58 @@ LEFDEFReaderState::read_map_file (const std::string &path, db::Layout &layout)
|
||||||
// into a canonical name mapping like
|
// into a canonical name mapping like
|
||||||
// "(M1/LABELS): M1.LABEL"
|
// "(M1/LABELS): M1.LABEL"
|
||||||
// "(M2/LABELS): M2.LABEL"
|
// "(M2/LABELS): M2.LABEL"
|
||||||
|
// supported purposes: PINS(->Label), LEFPINS(->LEFLabels)
|
||||||
|
|
||||||
|
std::vector< std::pair<std::string, LayerPurpose> > layer_defs;
|
||||||
|
|
||||||
std::vector<std::string> layer_names;
|
|
||||||
std::vector<std::string> purposes = tl::split (w2, ",");
|
std::vector<std::string> purposes = tl::split (w2, ",");
|
||||||
for (std::vector<std::string>::const_iterator p = purposes.begin (); p != purposes.end (); ++p) {
|
for (std::vector<std::string>::const_iterator p = purposes.begin (); p != purposes.end (); ++p) {
|
||||||
|
|
||||||
if (*p == "DIEAREA" || *p == "ALL" || *p == "COMP") {
|
if (*p == "DIEAREA" || *p == "ALL" || *p == "COMP") {
|
||||||
|
|
||||||
tl::warn << tl::sprintf (tl::to_string (tr ("Reading layer map file %s, line %d: NAME record ignored for entity: %s")), path, ts.line_number (), *p);
|
tl::warn << tl::sprintf (tl::to_string (tr ("Reading layer map file %s, line %d: NAME record ignored for entity: %s")), path, ts.line_number (), *p);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
layer_names.push_back (tl::split (*p, "/").front ());
|
|
||||||
}
|
std::vector<std::string> lp = tl::split (*p, "/");
|
||||||
|
|
||||||
|
if (lp.size () > 1) {
|
||||||
|
|
||||||
|
LayerPurpose label_purpose = Pins;
|
||||||
|
std::map<std::string, LayerPurpose>::const_iterator i = purpose_translation.find (lp[1]);
|
||||||
|
if (i != purpose_translation.end ()) {
|
||||||
|
label_purpose = i->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string final_name = tl::join (layer_names, "/") + ".LABEL";
|
if (label_purpose == Pins || label_purpose == LEFPins) {
|
||||||
for (std::vector<std::string>::const_iterator ln = layer_names.begin (); ln != layer_names.end (); ++ln) {
|
layer_defs.push_back (std::make_pair (lp.front (), label_purpose == Pins ? Label : LEFLabel));
|
||||||
|
} else {
|
||||||
|
tl::warn << tl::sprintf (tl::to_string (tr ("Reading layer map file %s, line %d: NAME record ignored for purpose: %s")), path, ts.line_number (), purpose_to_name (label_purpose));
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
layer_defs.push_back (std::make_pair (lp.front (), Label));
|
||||||
|
layer_defs.push_back (std::make_pair (lp.front (), LEFLabel));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string final_name;
|
||||||
|
for (std::vector< std::pair<std::string, LayerPurpose> >::const_iterator i = layer_defs.begin (); i != layer_defs.end (); ++i) {
|
||||||
|
if (! final_name.empty ()) {
|
||||||
|
final_name += "/";
|
||||||
|
}
|
||||||
|
final_name += i->first + "." + purpose_to_name (i->second);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (std::vector< std::pair<std::string, LayerPurpose> >::const_iterator i = layer_defs.begin (); i != layer_defs.end (); ++i) {
|
||||||
for (std::vector<int>::const_iterator l = layers.begin (); l != layers.end (); ++l) {
|
for (std::vector<int>::const_iterator l = layers.begin (); l != layers.end (); ++l) {
|
||||||
for (std::vector<int>::const_iterator d = datatypes.begin (); d != datatypes.end (); ++d) {
|
for (std::vector<int>::const_iterator d = datatypes.begin (); d != datatypes.end (); ++d) {
|
||||||
layer_map [std::make_pair (*ln, LayerDetailsKey (Label))].push_back (db::LayerProperties (*l, *d, final_name));
|
layer_map [std::make_pair (i->first, LayerDetailsKey (i->second))].push_back (db::LayerProperties (*l, *d, final_name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1320,6 +1364,9 @@ std::set<unsigned int> LEFDEFReaderState::open_layer_uncached(db::Layout &layout
|
||||||
case Label:
|
case Label:
|
||||||
produce = mp_tech_comp->produce_labels ();
|
produce = mp_tech_comp->produce_labels ();
|
||||||
break;
|
break;
|
||||||
|
case LEFLabel:
|
||||||
|
produce = mp_tech_comp->produce_lef_labels ();
|
||||||
|
break;
|
||||||
case Pins:
|
case Pins:
|
||||||
produce = mp_tech_comp->produce_pins ();
|
produce = mp_tech_comp->produce_pins ();
|
||||||
break;
|
break;
|
||||||
|
|
@ -1364,6 +1411,10 @@ std::set<unsigned int> LEFDEFReaderState::open_layer_uncached(db::Layout &layout
|
||||||
name_suffix = mp_tech_comp->labels_suffix ();
|
name_suffix = mp_tech_comp->labels_suffix ();
|
||||||
dt = mp_tech_comp->labels_datatype ();
|
dt = mp_tech_comp->labels_datatype ();
|
||||||
break;
|
break;
|
||||||
|
case LEFLabel:
|
||||||
|
name_suffix = mp_tech_comp->lef_labels_suffix ();
|
||||||
|
dt = mp_tech_comp->lef_labels_datatype ();
|
||||||
|
break;
|
||||||
case Pins:
|
case Pins:
|
||||||
name_suffix = mp_tech_comp->pins_suffix_per_mask (mask);
|
name_suffix = mp_tech_comp->pins_suffix_per_mask (mask);
|
||||||
dt = mp_tech_comp->pins_datatype_per_mask (mask);
|
dt = mp_tech_comp->pins_datatype_per_mask (mask);
|
||||||
|
|
|
||||||
|
|
@ -632,6 +632,36 @@ public:
|
||||||
m_labels_datatype = s;
|
m_labels_datatype = s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool produce_lef_labels () const
|
||||||
|
{
|
||||||
|
return m_produce_lef_labels;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_produce_lef_labels (bool f)
|
||||||
|
{
|
||||||
|
m_produce_lef_labels = f;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string &lef_labels_suffix () const
|
||||||
|
{
|
||||||
|
return m_lef_labels_suffix;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_lef_labels_suffix (const std::string &s)
|
||||||
|
{
|
||||||
|
m_lef_labels_suffix = s;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lef_labels_datatype () const
|
||||||
|
{
|
||||||
|
return m_lef_labels_datatype;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_lef_labels_datatype (int s)
|
||||||
|
{
|
||||||
|
m_lef_labels_datatype = s;
|
||||||
|
}
|
||||||
|
|
||||||
bool produce_routing () const
|
bool produce_routing () const
|
||||||
{
|
{
|
||||||
return m_produce_routing;
|
return m_produce_routing;
|
||||||
|
|
@ -953,6 +983,9 @@ private:
|
||||||
bool m_produce_labels;
|
bool m_produce_labels;
|
||||||
std::string m_labels_suffix;
|
std::string m_labels_suffix;
|
||||||
int m_labels_datatype;
|
int m_labels_datatype;
|
||||||
|
bool m_produce_lef_labels;
|
||||||
|
std::string m_lef_labels_suffix;
|
||||||
|
int m_lef_labels_datatype;
|
||||||
bool m_produce_routing;
|
bool m_produce_routing;
|
||||||
std::string m_routing_suffix;
|
std::string m_routing_suffix;
|
||||||
int m_routing_datatype;
|
int m_routing_datatype;
|
||||||
|
|
@ -984,7 +1017,8 @@ enum LayerPurpose
|
||||||
SpecialRouting, // from DEF only
|
SpecialRouting, // from DEF only
|
||||||
LEFPins, // from LEF
|
LEFPins, // from LEF
|
||||||
ViaGeometry, // from LEF+DEF
|
ViaGeometry, // from LEF+DEF
|
||||||
Label, // from LEF+DEF
|
Label, // from DEF
|
||||||
|
LEFLabel, // from LEF
|
||||||
Obstructions, // from LEF only
|
Obstructions, // from LEF only
|
||||||
Outline, // from LEF+DEF
|
Outline, // from LEF+DEF
|
||||||
Blockage, // from DEF only
|
Blockage, // from DEF only
|
||||||
|
|
|
||||||
|
|
@ -374,6 +374,9 @@ class LEFDEFFormatDeclaration
|
||||||
tl::make_member (&LEFDEFReaderOptions::produce_labels, &LEFDEFReaderOptions::set_produce_labels, "produce-labels") +
|
tl::make_member (&LEFDEFReaderOptions::produce_labels, &LEFDEFReaderOptions::set_produce_labels, "produce-labels") +
|
||||||
tl::make_member (&LEFDEFReaderOptions::labels_suffix, &LEFDEFReaderOptions::set_labels_suffix, "labels-suffix") +
|
tl::make_member (&LEFDEFReaderOptions::labels_suffix, &LEFDEFReaderOptions::set_labels_suffix, "labels-suffix") +
|
||||||
tl::make_member (&LEFDEFReaderOptions::labels_datatype, &LEFDEFReaderOptions::set_labels_datatype, "labels-datatype") +
|
tl::make_member (&LEFDEFReaderOptions::labels_datatype, &LEFDEFReaderOptions::set_labels_datatype, "labels-datatype") +
|
||||||
|
tl::make_member (&LEFDEFReaderOptions::produce_lef_labels, &LEFDEFReaderOptions::set_produce_lef_labels, "produce-lef-labels") +
|
||||||
|
tl::make_member (&LEFDEFReaderOptions::lef_labels_suffix, &LEFDEFReaderOptions::set_lef_labels_suffix, "lef-labels-suffix") +
|
||||||
|
tl::make_member (&LEFDEFReaderOptions::lef_labels_datatype, &LEFDEFReaderOptions::set_lef_labels_datatype, "lef-labels-datatype") +
|
||||||
tl::make_member (&LEFDEFReaderOptions::produce_routing, &LEFDEFReaderOptions::set_produce_routing, "produce-routing") +
|
tl::make_member (&LEFDEFReaderOptions::produce_routing, &LEFDEFReaderOptions::set_produce_routing, "produce-routing") +
|
||||||
// for backward compatibility
|
// for backward compatibility
|
||||||
tl::make_member (&LEFDEFReaderOptions::set_routing_suffix, "special-routing-suffix") +
|
tl::make_member (&LEFDEFReaderOptions::set_routing_suffix, "special-routing-suffix") +
|
||||||
|
|
|
||||||
|
|
@ -887,7 +887,7 @@ LEFImporter::read_macro (Layout &layout)
|
||||||
read_geometries (mg, layout.dbu (), LEFPins, &boxes_for_labels, prop_id);
|
read_geometries (mg, layout.dbu (), LEFPins, &boxes_for_labels, prop_id);
|
||||||
|
|
||||||
for (std::map <std::string, db::Box>::const_iterator b = boxes_for_labels.begin (); b != boxes_for_labels.end (); ++b) {
|
for (std::map <std::string, db::Box>::const_iterator b = boxes_for_labels.begin (); b != boxes_for_labels.end (); ++b) {
|
||||||
mg->add_text (b->first, Label, db::Text (label.c_str (), db::Trans (b->second.center () - db::Point ())), 0, 0);
|
mg->add_text (b->first, LEFLabel, db::Text (label.c_str (), db::Trans (b->second.center () - db::Point ())), 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -662,6 +662,42 @@ gsi::Class<db::LEFDEFReaderOptions> decl_lefdef_config ("db", "LEFDEFReaderConfi
|
||||||
"@brief Sets the labels layer datatype value.\n"
|
"@brief Sets the labels layer datatype value.\n"
|
||||||
"See \\produce_via_geometry for details about the layer production rules."
|
"See \\produce_via_geometry for details about the layer production rules."
|
||||||
) +
|
) +
|
||||||
|
gsi::method ("produce_lef_labels", &db::LEFDEFReaderOptions::produce_lef_labels,
|
||||||
|
"@brief Gets a value indicating whether lef_labels shall be produced.\n"
|
||||||
|
"See \\produce_via_geometry for details about the layer production rules.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.27.2\n"
|
||||||
|
) +
|
||||||
|
gsi::method ("produce_lef_labels=", &db::LEFDEFReaderOptions::set_produce_lef_labels, gsi::arg ("produce"),
|
||||||
|
"@brief Sets a value indicating whether lef_labels shall be produced.\n"
|
||||||
|
"See \\produce_via_geometry for details about the layer production rules.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.27.2\n"
|
||||||
|
) +
|
||||||
|
gsi::method ("lef_labels_suffix", &db::LEFDEFReaderOptions::lef_labels_suffix,
|
||||||
|
"@brief Gets the label layer name suffix.\n"
|
||||||
|
"See \\produce_via_geometry for details about the layer production rules.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.27.2\n"
|
||||||
|
) +
|
||||||
|
gsi::method ("lef_labels_suffix=", &db::LEFDEFReaderOptions::set_lef_labels_suffix, gsi::arg ("suffix"),
|
||||||
|
"@brief Sets the label layer name suffix.\n"
|
||||||
|
"See \\produce_via_geometry for details about the layer production rules.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.27.2\n"
|
||||||
|
) +
|
||||||
|
gsi::method ("lef_labels_datatype", &db::LEFDEFReaderOptions::lef_labels_datatype,
|
||||||
|
"@brief Gets the lef_labels layer datatype value.\n"
|
||||||
|
"See \\produce_via_geometry for details about the layer production rules.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.27.2\n"
|
||||||
|
) +
|
||||||
|
gsi::method ("lef_labels_datatype=", &db::LEFDEFReaderOptions::set_lef_labels_datatype, gsi::arg ("datatype"),
|
||||||
|
"@brief Sets the lef_labels layer datatype value.\n"
|
||||||
|
"See \\produce_via_geometry for details about the layer production rules.\n"
|
||||||
|
"\n"
|
||||||
|
"This method has been introduced in version 0.27.2\n"
|
||||||
|
) +
|
||||||
gsi::method ("produce_routing", &db::LEFDEFReaderOptions::produce_routing,
|
gsi::method ("produce_routing", &db::LEFDEFReaderOptions::produce_routing,
|
||||||
"@brief Gets a value indicating whether routing geometry shall be produced.\n"
|
"@brief Gets a value indicating whether routing geometry shall be produced.\n"
|
||||||
"See \\produce_via_geometry for details about the layer production rules."
|
"See \\produce_via_geometry for details about the layer production rules."
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QTabWidget" name="tabWidget">
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>0</number>
|
<number>2</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="tab_3">
|
<widget class="QWidget" name="tab_3">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
|
|
@ -1037,8 +1037,8 @@ Otherwise it's looked up relative to the LEF or DEF file.
|
||||||
<property name="bottomMargin">
|
<property name="bottomMargin">
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<item row="3" column="2">
|
<item row="2" column="8">
|
||||||
<widget class="QLineEdit" name="suffix_lef_pins">
|
<widget class="QLineEdit" name="datatype_special_routing">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
|
|
@ -1047,8 +1047,56 @@ Otherwise it's looked up relative to the LEF or DEF file.
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="6">
|
<item row="2" column="2">
|
||||||
<widget class="QLabel" name="label_16">
|
<widget class="QLineEdit" name="suffix_pins">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="2">
|
||||||
|
<widget class="QLabel" name="lbl1">
|
||||||
|
<property name="text">
|
||||||
|
<string>Layer name
|
||||||
|
suffix ...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="5">
|
||||||
|
<widget class="QCheckBox" name="produce_routing">
|
||||||
|
<property name="text">
|
||||||
|
<string>Routing (*)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="6">
|
||||||
|
<widget class="QLabel" name="label_17">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="5">
|
||||||
|
<widget class="QCheckBox" name="produce_special_routing">
|
||||||
|
<property name="text">
|
||||||
|
<string>Special routing (*)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QLabel" name="label_13">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
|
|
@ -1073,6 +1121,16 @@ Otherwise it's looked up relative to the LEF or DEF file.
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="3" column="3">
|
||||||
|
<widget class="QLineEdit" name="datatype_lef_pins">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="1" column="6">
|
<item row="1" column="6">
|
||||||
<widget class="QLabel" name="label_23">
|
<widget class="QLabel" name="label_23">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
|
|
@ -1089,174 +1147,6 @@ Otherwise it's looked up relative to the LEF or DEF file.
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="2">
|
|
||||||
<widget class="QLineEdit" name="suffix_via_geometry">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="0">
|
|
||||||
<widget class="QCheckBox" name="produce_fills">
|
|
||||||
<property name="text">
|
|
||||||
<string>Fills (*)</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="7">
|
|
||||||
<widget class="QLabel" name="lbl1_2">
|
|
||||||
<property name="text">
|
|
||||||
<string>Layer name
|
|
||||||
suffix ...</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="3">
|
|
||||||
<widget class="QLineEdit" name="datatype_obstructions">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="8">
|
|
||||||
<widget class="QLineEdit" name="datatype_routing">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0">
|
|
||||||
<widget class="QCheckBox" name="produce_lef_pins">
|
|
||||||
<property name="text">
|
|
||||||
<string>LEF Pins (*)</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="2">
|
|
||||||
<widget class="QLabel" name="lbl1">
|
|
||||||
<property name="text">
|
|
||||||
<string>Layer name
|
|
||||||
suffix ...</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="1">
|
|
||||||
<widget class="QLabel" name="label_30">
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="pixmap">
|
|
||||||
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<widget class="QCheckBox" name="produce_via_geometry">
|
|
||||||
<property name="text">
|
|
||||||
<string>Via geometry (*)</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="8">
|
|
||||||
<widget class="QLineEdit" name="datatype_labels">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="2">
|
|
||||||
<widget class="QLineEdit" name="suffix_pins">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="7">
|
|
||||||
<widget class="QLineEdit" name="suffix_labels">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="7">
|
|
||||||
<widget class="QLineEdit" name="suffix_routing">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="3">
|
|
||||||
<widget class="QLabel" name="label_3">
|
|
||||||
<property name="text">
|
|
||||||
<string>GDS data-
|
|
||||||
type ...</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="2">
|
|
||||||
<widget class="QLineEdit" name="suffix_fills">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="6">
|
|
||||||
<widget class="QLabel" name="label_24">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="pixmap">
|
|
||||||
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="7">
|
|
||||||
<widget class="QLineEdit" name="suffix_special_routing">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="QCheckBox" name="produce_pins">
|
|
||||||
<property name="text">
|
|
||||||
<string>Pins (*)</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="1">
|
<item row="3" column="1">
|
||||||
<widget class="QLabel" name="label_14">
|
<widget class="QLabel" name="label_14">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
|
|
@ -1273,6 +1163,129 @@ type ...</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="5" column="8">
|
||||||
|
<widget class="QLineEdit" name="datatype_blockages">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="3">
|
||||||
|
<widget class="QLineEdit" name="datatype_fills">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QLabel" name="label_12">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="6">
|
||||||
|
<widget class="QLabel" name="label_24">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="4" rowspan="6">
|
||||||
|
<widget class="Line" name="line_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QLabel" name="label_30">
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<widget class="QCheckBox" name="produce_fills">
|
||||||
|
<property name="text">
|
||||||
|
<string>Fills (*)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QCheckBox" name="produce_via_geometry">
|
||||||
|
<property name="text">
|
||||||
|
<string>Via geometry (*)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0">
|
||||||
|
<widget class="QCheckBox" name="produce_obstructions">
|
||||||
|
<property name="text">
|
||||||
|
<string>Obstructions</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="6">
|
||||||
|
<widget class="QLabel" name="label_16">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QCheckBox" name="produce_pins">
|
||||||
|
<property name="text">
|
||||||
|
<string>DEF Pins (*)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="2">
|
||||||
|
<widget class="QLineEdit" name="suffix_fills">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="5" column="2">
|
<item row="5" column="2">
|
||||||
<widget class="QLineEdit" name="suffix_obstructions">
|
<widget class="QLineEdit" name="suffix_obstructions">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
|
|
@ -1283,6 +1296,52 @@ type ...</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="5" column="3">
|
||||||
|
<widget class="QLineEdit" name="datatype_obstructions">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="8">
|
||||||
|
<widget class="QLabel" name="label_27">
|
||||||
|
<property name="text">
|
||||||
|
<string>GDS data-
|
||||||
|
type ...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="8">
|
||||||
|
<widget class="QLineEdit" name="datatype_routing">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="7">
|
||||||
|
<widget class="QLabel" name="lbl1_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Layer name
|
||||||
|
suffix ...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="7">
|
||||||
|
<widget class="QLineEdit" name="suffix_special_routing">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="1" column="3">
|
<item row="1" column="3">
|
||||||
<widget class="QLineEdit" name="datatype_via_geometry">
|
<widget class="QLineEdit" name="datatype_via_geometry">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
|
|
@ -1309,22 +1368,8 @@ type ...</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="5">
|
<item row="1" column="7">
|
||||||
<widget class="QCheckBox" name="produce_special_routing">
|
<widget class="QLineEdit" name="suffix_routing">
|
||||||
<property name="text">
|
|
||||||
<string>Special routing (*)</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="0">
|
|
||||||
<widget class="QCheckBox" name="produce_obstructions">
|
|
||||||
<property name="text">
|
|
||||||
<string>Obstructions</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="3">
|
|
||||||
<widget class="QLineEdit" name="datatype_lef_pins">
|
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
|
|
@ -1333,46 +1378,8 @@ type ...</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="1">
|
<item row="3" column="8">
|
||||||
<widget class="QLabel" name="label_13">
|
<widget class="QLineEdit" name="datatype_labels">
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="pixmap">
|
|
||||||
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="5">
|
|
||||||
<widget class="QCheckBox" name="produce_labels">
|
|
||||||
<property name="text">
|
|
||||||
<string>Pin labels</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="8">
|
|
||||||
<widget class="QLabel" name="label_27">
|
|
||||||
<property name="text">
|
|
||||||
<string>GDS data-
|
|
||||||
type ...</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="5">
|
|
||||||
<widget class="QCheckBox" name="produce_routing">
|
|
||||||
<property name="text">
|
|
||||||
<string>Routing (*)</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="8">
|
|
||||||
<widget class="QLineEdit" name="datatype_special_routing">
|
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
|
|
@ -1381,31 +1388,8 @@ type ...</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="1">
|
<item row="1" column="2">
|
||||||
<widget class="QLabel" name="label_12">
|
<widget class="QLineEdit" name="suffix_via_geometry">
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="pixmap">
|
|
||||||
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="4" rowspan="6">
|
|
||||||
<widget class="Line" name="line_3">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Vertical</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="3">
|
|
||||||
<widget class="QLineEdit" name="datatype_fills">
|
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
|
|
@ -1414,30 +1398,24 @@ type ...</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="5">
|
<item row="3" column="0">
|
||||||
<widget class="QCheckBox" name="produce_blockages">
|
<widget class="QCheckBox" name="produce_lef_pins">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Blockages</string>
|
<string>LEF Pins (*)</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="6">
|
<item row="3" column="2">
|
||||||
<widget class="QLabel" name="label_17">
|
<widget class="QLineEdit" name="suffix_lef_pins">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
<verstretch>0</verstretch>
|
<verstretch>0</verstretch>
|
||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
<property name="pixmap">
|
|
||||||
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
|
|
||||||
</property>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="7">
|
<item row="5" column="7">
|
||||||
<widget class="QLineEdit" name="suffix_blockages">
|
<widget class="QLineEdit" name="suffix_blockages">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
||||||
|
|
@ -1447,8 +1425,8 @@ type ...</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="8">
|
<item row="3" column="7">
|
||||||
<widget class="QLineEdit" name="datatype_blockages">
|
<widget class="QLineEdit" name="suffix_labels">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
|
|
@ -1457,6 +1435,51 @@ type ...</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="0" column="3">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>GDS data-
|
||||||
|
type ...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="5">
|
||||||
|
<widget class="QCheckBox" name="produce_blockages">
|
||||||
|
<property name="text">
|
||||||
|
<string>Blockages</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="5">
|
||||||
|
<widget class="QCheckBox" name="produce_labels">
|
||||||
|
<property name="text">
|
||||||
|
<string>DEF pin labels</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="5">
|
||||||
|
<widget class="QCheckBox" name="produce_lef_labels">
|
||||||
|
<property name="text">
|
||||||
|
<string>LEF pin labels</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="6">
|
||||||
|
<widget class="QLabel" name="label_32">
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap resource="../../../../lay/lay/layResources.qrc">:/right.png</pixmap>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="7">
|
||||||
|
<widget class="QLineEdit" name="suffix_lef_labels"/>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="8">
|
||||||
|
<widget class="QLineEdit" name="datatype_lef_labels"/>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
@ -1613,9 +1636,6 @@ type ...</string>
|
||||||
<tabstop>produce_labels</tabstop>
|
<tabstop>produce_labels</tabstop>
|
||||||
<tabstop>suffix_labels</tabstop>
|
<tabstop>suffix_labels</tabstop>
|
||||||
<tabstop>datatype_labels</tabstop>
|
<tabstop>datatype_labels</tabstop>
|
||||||
<tabstop>produce_blockages</tabstop>
|
|
||||||
<tabstop>suffix_blockages</tabstop>
|
|
||||||
<tabstop>datatype_blockages</tabstop>
|
|
||||||
<tabstop>read_all_cbx</tabstop>
|
<tabstop>read_all_cbx</tabstop>
|
||||||
</tabstops>
|
</tabstops>
|
||||||
<resources>
|
<resources>
|
||||||
|
|
|
||||||
|
|
@ -516,6 +516,9 @@ LEFDEFReaderOptionsEditor::commit (db::FormatSpecificReaderOptions *options, con
|
||||||
data->set_produce_labels (produce_labels->isChecked ());
|
data->set_produce_labels (produce_labels->isChecked ());
|
||||||
data->set_labels_suffix (tl::to_string (suffix_labels->text ()));
|
data->set_labels_suffix (tl::to_string (suffix_labels->text ()));
|
||||||
data->set_labels_datatype (datatype_labels->text ().toInt ());
|
data->set_labels_datatype (datatype_labels->text ().toInt ());
|
||||||
|
data->set_produce_lef_labels (produce_lef_labels->isChecked ());
|
||||||
|
data->set_lef_labels_suffix (tl::to_string (suffix_lef_labels->text ()));
|
||||||
|
data->set_lef_labels_datatype (datatype_lef_labels->text ().toInt ());
|
||||||
data->set_separate_groups (separate_groups->isChecked ());
|
data->set_separate_groups (separate_groups->isChecked ());
|
||||||
data->set_read_lef_with_def (read_lef_with_def->isChecked ());
|
data->set_read_lef_with_def (read_lef_with_def->isChecked ());
|
||||||
data->set_map_file (tl::to_string (mapfile_path->text ()));
|
data->set_map_file (tl::to_string (mapfile_path->text ()));
|
||||||
|
|
@ -587,6 +590,9 @@ LEFDEFReaderOptionsEditor::setup (const db::FormatSpecificReaderOptions *options
|
||||||
produce_labels->setChecked (data->produce_labels ());
|
produce_labels->setChecked (data->produce_labels ());
|
||||||
suffix_labels->setText (tl::to_qstring (data->labels_suffix ()));
|
suffix_labels->setText (tl::to_qstring (data->labels_suffix ()));
|
||||||
datatype_labels->setText (QString::number (data->labels_datatype ()));
|
datatype_labels->setText (QString::number (data->labels_datatype ()));
|
||||||
|
produce_lef_labels->setChecked (data->produce_lef_labels ());
|
||||||
|
suffix_lef_labels->setText (tl::to_qstring (data->lef_labels_suffix ()));
|
||||||
|
datatype_lef_labels->setText (QString::number (data->lef_labels_datatype ()));
|
||||||
separate_groups->setChecked (data->separate_groups ());
|
separate_groups->setChecked (data->separate_groups ());
|
||||||
read_lef_with_def->setChecked (data->read_lef_with_def ());
|
read_lef_with_def->setChecked (data->read_lef_with_def ());
|
||||||
mapfile_path->setText (tl::to_qstring (data->map_file ()));
|
mapfile_path->setText (tl::to_qstring (data->map_file ()));
|
||||||
|
|
|
||||||
|
|
@ -335,6 +335,13 @@ TEST(22)
|
||||||
run_test (_this, "def13", "map:test.map+lef:test.lef_5.8+def:top.def.gz", "au2.oas.gz", opt);
|
run_test (_this, "def13", "map:test.map+lef:test.lef_5.8+def:top.def.gz", "au2.oas.gz", opt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(23)
|
||||||
|
{
|
||||||
|
db::LEFDEFReaderOptions opt = default_options ();
|
||||||
|
opt.set_macro_resolution_mode (1);
|
||||||
|
run_test (_this, "def14", "map:test.map+lef:tech.lef+lef:stdlib.lef+def:test.def", "au.oas.gz", opt);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(100)
|
TEST(100)
|
||||||
{
|
{
|
||||||
run_test (_this, "issue-172", "lef:in.lef+def:in.def", "au.oas.gz", default_options (), false);
|
run_test (_this, "issue-172", "lef:in.lef+def:in.def", "au.oas.gz", default_options (), false);
|
||||||
|
|
@ -515,7 +522,7 @@ TEST(113_masks_1)
|
||||||
"'M0PO.SPNET:2' : 'M0PO.SPNET:2' (1/201)\n"
|
"'M0PO.SPNET:2' : 'M0PO.SPNET:2' (1/201)\n"
|
||||||
"'M0PO.VIA:1' : 'M0PO.VIA:1' (1/102)\n"
|
"'M0PO.VIA:1' : 'M0PO.VIA:1' (1/102)\n"
|
||||||
"'M0PO.VIA:2' : 'M0PO.VIA:2' (1/202)\n"
|
"'M0PO.VIA:2' : 'M0PO.VIA:2' (1/202)\n"
|
||||||
"M0PO.LABEL : M0PO.LABEL (1/1)\n"
|
"M0PO.LABEL;M0PO.LEFLABEL : 'M0PO.LABEL/M0PO.LEFLABEL' (1/1)\n"
|
||||||
"'M1.NET:1' : 'M1.NET:1' (3/100)\n"
|
"'M1.NET:1' : 'M1.NET:1' (3/100)\n"
|
||||||
"'M1.NET:2' : 'M1.NET:2' (3/200)\n"
|
"'M1.NET:2' : 'M1.NET:2' (3/200)\n"
|
||||||
"M1.PIN : M1.PIN (3/2)\n"
|
"M1.PIN : M1.PIN (3/2)\n"
|
||||||
|
|
@ -525,7 +532,7 @@ TEST(113_masks_1)
|
||||||
"'M1.SPNET:2' : 'M1.SPNET:2' (3/201)\n"
|
"'M1.SPNET:2' : 'M1.SPNET:2' (3/201)\n"
|
||||||
"'M1.VIA:1' : 'M1.VIA:1' (3/102)\n"
|
"'M1.VIA:1' : 'M1.VIA:1' (3/102)\n"
|
||||||
"'M1.VIA:2' : 'M1.VIA:2' (3/202)\n"
|
"'M1.VIA:2' : 'M1.VIA:2' (3/202)\n"
|
||||||
"M1.LABEL : M1.LABEL (3/1)\n"
|
"M1.LABEL;M1.LEFLABEL : 'M1.LABEL/M1.LEFLABEL' (3/1)\n"
|
||||||
"'VIA0.NET:1' : 'VIA0.NET:1' (2/100)\n"
|
"'VIA0.NET:1' : 'VIA0.NET:1' (2/100)\n"
|
||||||
"'VIA0.NET:2' : 'VIA0.NET:2' (2/200)\n"
|
"'VIA0.NET:2' : 'VIA0.NET:2' (2/200)\n"
|
||||||
"VIA0.PIN : VIA0.PIN (2/2)\n"
|
"VIA0.PIN : VIA0.PIN (2/2)\n"
|
||||||
|
|
@ -535,7 +542,7 @@ TEST(113_masks_1)
|
||||||
"'VIA0.SPNET:2' : 'VIA0.SPNET:2' (2/201)\n"
|
"'VIA0.SPNET:2' : 'VIA0.SPNET:2' (2/201)\n"
|
||||||
"'VIA0.VIA:1' : 'VIA0.VIA:1' (2/102)\n"
|
"'VIA0.VIA:1' : 'VIA0.VIA:1' (2/102)\n"
|
||||||
"'VIA0.VIA:2' : 'VIA0.VIA:2' (2/202)\n"
|
"'VIA0.VIA:2' : 'VIA0.VIA:2' (2/202)\n"
|
||||||
"VIA0.LABEL : VIA0.LABEL (2/1)\n"
|
"VIA0.LABEL;VIA0.LEFLABEL : 'VIA0.LABEL/VIA0.LEFLABEL' (2/1)\n"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -726,11 +733,11 @@ TEST(117_mapfile_all)
|
||||||
"'\\'M1.FILLOPC:2\\' : \\'M1.FILLOPC:2\\' (11/0)';"
|
"'\\'M1.FILLOPC:2\\' : \\'M1.FILLOPC:2\\' (11/0)';"
|
||||||
"'\\'M1.VIA:SIZE0.05X0.05\\' : \\'M1.VIA:SIZE0.05X0.05\\' (20/0)';"
|
"'\\'M1.VIA:SIZE0.05X0.05\\' : \\'M1.VIA:SIZE0.05X0.05\\' (20/0)';"
|
||||||
"'\\'M1.VIA:SIZE3X3\\' : \\'M1.VIA:SIZE3X3\\' (21/0)';"
|
"'\\'M1.VIA:SIZE3X3\\' : \\'M1.VIA:SIZE3X3\\' (21/0)';"
|
||||||
"'+M1.LABEL : M1.LABEL (26/0)';"
|
"'M1.LABEL : M1.LABEL (26/0)';"
|
||||||
"'+M1.LABEL : M1.LABEL (27/0)';"
|
// NAME M1/NET not supported: "'+M1.LABEL : M1.LABEL (27/0)';"
|
||||||
"'+M1.LABEL : M1.LABEL (28/1)';"
|
// NAME M1/SPNET not supported: "'+M1.LABEL : M1.LABEL (28/1)';"
|
||||||
"'+M1.BLK : M1.BLK (13/0)';"
|
"'+M1.BLK : M1.BLK (13/0)';"
|
||||||
"'M1_TEXT.LABEL : M1_TEXT.LABEL (29/0)'"
|
"'M1_TEXT.LABEL;M1_TEXT.LEFLABEL : \\'M1_TEXT.LABEL/M1_TEXT.LEFLABEL\\' (29/0)'"
|
||||||
")"
|
")"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
|
||||||
|
source $drc_test_source
|
||||||
|
target $drc_test_target
|
||||||
|
|
||||||
|
# Problem of #826 was deep-mode universal DRC with threading
|
||||||
|
|
||||||
|
deep
|
||||||
|
threads(4)
|
||||||
|
|
||||||
|
l7 = input(7, 0)
|
||||||
|
l7.output(7, 0)
|
||||||
|
|
||||||
|
l7.drc((angle == 0) & (length < 12.0)).extended_out(1.dbu).output(100, 0)
|
||||||
|
|
||||||
Binary file not shown.
Binary file not shown.
|
|
@ -14,5 +14,6 @@ M1 BLOCKAGEFILL 12 150
|
||||||
M1 BLOCKAGE 12 151
|
M1 BLOCKAGE 12 151
|
||||||
M1 FILL 12 152
|
M1 FILL 12 152
|
||||||
NAME M1/PIN 12 10
|
NAME M1/PIN 12 10
|
||||||
|
NAME M1/LEFPIN 12 10
|
||||||
VIA1 LEFPIN,LEFOBS,VIA,PIN,NET,SPNET 13 0
|
VIA1 LEFPIN,LEFOBS,VIA,PIN,NET,SPNET 13 0
|
||||||
M2 LEFPIN,LEFOBS,PIN,NET,SPNET,VIA 14 0
|
M2 LEFPIN,LEFOBS,PIN,NET,SPNET,VIA 14 0
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue