WIP: refactoring - allow properties constraints modes which do not copy properties. In DRC that is default.

This commit is contained in:
Matthias Koefferlein 2023-01-21 15:13:39 +01:00
parent 045585b345
commit 1a9edbf6a9
24 changed files with 177 additions and 36 deletions

View File

@ -1428,12 +1428,12 @@ AsIfFlatRegion::not_with (const Region &other, PropertyConstraint property_const
} else if (other.empty () && ! strict_handling ()) {
// Nothing to do
return clone ();
return clone ()->remove_properties (pc_remove (property_constraint));
} else if (! bbox ().overlaps (other.bbox ()) && ! strict_handling ()) {
// Nothing to do
return clone ();
return clone ()->remove_properties (pc_remove (property_constraint));
} else {
return and_or_not_with (false, other, property_constraint);
@ -1513,12 +1513,12 @@ AsIfFlatRegion::andnot_with (const Region &other, PropertyConstraint property_co
} else if (other.empty () && ! strict_handling ()) {
// Nothing to do
return std::make_pair (new EmptyRegion (), clone ());
return std::make_pair (new EmptyRegion (), clone ()->remove_properties (pc_remove (property_constraint)));
} else if (! bbox ().overlaps (other.bbox ()) && ! strict_handling ()) {
// Nothing to do
return std::make_pair (new EmptyRegion (), clone ());
return std::make_pair (new EmptyRegion (), clone ()->remove_properties (pc_remove (property_constraint)));
} else if (pc_skip (property_constraint)) {

View File

@ -783,11 +783,11 @@ DeepRegion::and_with (const Region &other, PropertyConstraint property_constrain
if (empty ()) {
return clone ();
return clone ()->remove_properties (pc_remove (property_constraint));
} else if (other.empty ()) {
return other.delegate ()->clone ();
return other.delegate ()->clone ()->remove_properties (pc_remove (property_constraint));
} else if (! other_deep) {
@ -807,7 +807,7 @@ DeepRegion::not_with (const Region &other, PropertyConstraint property_constrain
if (empty () || other.empty ()) {
return clone ();
return clone ()->remove_properties (pc_remove (property_constraint));
} else if (! other_deep) {
@ -835,11 +835,11 @@ DeepRegion::andnot_with (const Region &other, PropertyConstraint property_constr
if (empty ()) {
return std::make_pair (clone (), clone ());
return std::make_pair (clone ()->remove_properties (pc_remove (property_constraint)), clone ()->remove_properties (pc_remove (property_constraint)));
} else if (other.empty ()) {
return std::make_pair (other.delegate ()->clone (), clone ());
return std::make_pair (other.delegate ()->clone ()->remove_properties (pc_remove (property_constraint)), clone ()->remove_properties (pc_remove (property_constraint)));
} else if (! other_deep) {

View File

@ -166,6 +166,12 @@ public:
virtual EdgePairsDelegate *clone () const = 0;
EdgePairsDelegate *remove_properties (bool remove = true)
{
ShapeCollectionDelegateBase::remove_properties (remove);
return this;
}
void enable_progress (const std::string &progress_desc);
void disable_progress ();

View File

@ -239,6 +239,12 @@ public:
virtual EdgesDelegate *clone () const = 0;
EdgesDelegate *remove_properties (bool remove = true)
{
ShapeCollectionDelegateBase::remove_properties (remove);
return this;
}
void set_base_verbosity (int vb);
int base_verbosity () const
{

View File

@ -192,11 +192,15 @@ const db::RecursiveShapeIterator *FlatEdgePairs::iter () const
void FlatEdgePairs::apply_property_translator (const db::PropertiesTranslator &pt)
{
db::Shapes new_edge_pairs (mp_edge_pairs->is_editable ());
new_edge_pairs.assign (*mp_edge_pairs, pt);
mp_edge_pairs->swap (new_edge_pairs);
if ((mp_edge_pairs->type_mask () & db::ShapeIterator::Properties) != 0) {
invalidate_cache ();
db::Shapes new_edge_pairs (mp_edge_pairs->is_editable ());
new_edge_pairs.assign (*mp_edge_pairs, pt);
mp_edge_pairs->swap (new_edge_pairs);
invalidate_cache ();
}
}
db::PropertiesRepository *FlatEdgePairs::properties_repository ()

View File

@ -390,11 +390,15 @@ const db::RecursiveShapeIterator *FlatEdges::iter () const
void FlatEdges::apply_property_translator (const db::PropertiesTranslator &pt)
{
db::Shapes new_edges (mp_edges->is_editable ());
new_edges.assign (*mp_edges, pt);
mp_edges->swap (new_edges);
if ((mp_edges->type_mask () & db::ShapeIterator::Properties) != 0) {
invalidate_cache ();
db::Shapes new_edges (mp_edges->is_editable ());
new_edges.assign (*mp_edges, pt);
mp_edges->swap (new_edges);
invalidate_cache ();
}
}
db::PropertiesRepository *FlatEdges::properties_repository ()

View File

@ -421,11 +421,15 @@ const db::RecursiveShapeIterator *FlatRegion::iter () const
void FlatRegion::apply_property_translator (const db::PropertiesTranslator &pt)
{
db::Shapes new_polygons (mp_polygons->is_editable ());
new_polygons.assign (*mp_polygons, pt);
mp_polygons->swap (new_polygons);
if ((mp_polygons->type_mask () & db::ShapeIterator::Properties) != 0) {
invalidate_cache ();
db::Shapes new_polygons (mp_polygons->is_editable ());
new_polygons.assign (*mp_polygons, pt);
mp_polygons->swap (new_polygons);
invalidate_cache ();
}
}
db::PropertiesRepository *FlatRegion::properties_repository ()

View File

@ -190,11 +190,15 @@ const db::RecursiveShapeIterator *FlatTexts::iter () const
void FlatTexts::apply_property_translator (const db::PropertiesTranslator &pt)
{
db::Shapes new_texts (mp_texts->is_editable ());
new_texts.assign (*mp_texts, pt);
mp_texts->swap (new_texts);
if ((mp_texts->type_mask () & db::ShapeIterator::Properties) != 0) {
invalidate_cache ();
db::Shapes new_texts (mp_texts->is_editable ());
new_texts.assign (*mp_texts, pt);
mp_texts->swap (new_texts);
invalidate_cache ();
}
}
db::PropertiesRepository *FlatTexts::properties_repository ()

View File

@ -196,6 +196,12 @@ public:
virtual RegionDelegate *clone () const = 0;
RegionDelegate *remove_properties (bool remove = true)
{
ShapeCollectionDelegateBase::remove_properties (remove);
return this;
}
void set_base_verbosity (int vb);
int base_verbosity () const
{

View File

@ -55,11 +55,16 @@ DeepShapeCollectionDelegateBase::apply_property_translator (const db::Properties
for (auto c = layout.begin (); c != layout.end (); ++c) {
db::Shapes &shapes = c->shapes (m_deep_layer.layer ());
if ((shapes.type_mask () & ShapeIterator::Properties) != 0) {
db::Shapes new_shapes (shapes.is_editable ());
shapes.swap (new_shapes);
// properties are present - need to translate them
shapes.assign (new_shapes, pt);
db::Shapes new_shapes (shapes.is_editable ());
shapes.swap (new_shapes);
shapes.assign (new_shapes, pt);
}
}
}

View File

@ -83,6 +83,13 @@ public:
virtual void apply_property_translator (const db::PropertiesTranslator & /*pt*/) = 0;
virtual db::PropertiesRepository *properties_repository () = 0;
virtual const db::PropertiesRepository *properties_repository () const = 0;
void remove_properties (bool remove = true)
{
if (remove) {
apply_property_translator (db::PropertiesTranslator::make_remove_all ());
}
}
};
/**

View File

@ -66,6 +66,12 @@ public:
virtual TextsDelegate *clone () const = 0;
TextsDelegate *remove_properties (bool remove = true)
{
ShapeCollectionDelegateBase::remove_properties (remove);
return this;
}
void enable_progress (const std::string &progress_desc);
void disable_progress ();

View File

@ -1688,6 +1688,12 @@ TEST(40_BoolWithProperties)
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (25, 0)), r3.bool_and (r2, db::DifferentPropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (26, 0)), r1.bool_and (r3, db::SamePropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (27, 0)), r1.bool_and (r3, db::DifferentPropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (22, 1)), r1.bool_and (r2, db::SamePropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (23, 1)), r1.bool_and (r2, db::DifferentPropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (24, 1)), r3.bool_and (r2, db::SamePropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (25, 1)), r3.bool_and (r2, db::DifferentPropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (26, 1)), r1.bool_and (r3, db::SamePropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (27, 1)), r1.bool_and (r3, db::DifferentPropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (30, 0)), r1 - r2);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (31, 0)), r1.bool_not (r2, db::NoPropertyConstraint));
@ -1697,6 +1703,12 @@ TEST(40_BoolWithProperties)
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (35, 0)), r3.bool_not (r2, db::DifferentPropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (36, 0)), r1.bool_not (r3, db::SamePropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (37, 0)), r1.bool_not (r3, db::DifferentPropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (32, 1)), r1.bool_not (r2, db::SamePropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (33, 1)), r1.bool_not (r2, db::DifferentPropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (34, 1)), r3.bool_not (r2, db::SamePropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (35, 1)), r3.bool_not (r2, db::DifferentPropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (36, 1)), r1.bool_not (r3, db::SamePropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (37, 1)), r1.bool_not (r3, db::DifferentPropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (40, 0)), r1.andnot (r2).first);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (41, 0)), r1.andnot (r2).second);
@ -1712,6 +1724,18 @@ TEST(40_BoolWithProperties)
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (51, 0)), r1.andnot (r3, db::SamePropertiesConstraint).second);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (52, 0)), r1.andnot (r3, db::DifferentPropertiesConstraint).first);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (53, 0)), r1.andnot (r3, db::DifferentPropertiesConstraint).second);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (42, 1)), r1.andnot (r2, db::SamePropertiesConstraintDrop).first);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (43, 1)), r1.andnot (r2, db::SamePropertiesConstraintDrop).second);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (44, 1)), r1.andnot (r2, db::DifferentPropertiesConstraintDrop).first);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (45, 1)), r1.andnot (r2, db::DifferentPropertiesConstraintDrop).second);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (46, 1)), r3.andnot (r2, db::SamePropertiesConstraintDrop).first);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (47, 1)), r3.andnot (r2, db::SamePropertiesConstraintDrop).second);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (48, 1)), r3.andnot (r2, db::DifferentPropertiesConstraintDrop).first);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (49, 1)), r3.andnot (r2, db::DifferentPropertiesConstraintDrop).second);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (50, 1)), r1.andnot (r3, db::SamePropertiesConstraintDrop).first);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (51, 1)), r1.andnot (r3, db::SamePropertiesConstraintDrop).second);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (52, 1)), r1.andnot (r3, db::DifferentPropertiesConstraintDrop).first);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (53, 1)), r1.andnot (r3, db::DifferentPropertiesConstraintDrop).second);
CHECKPOINT();
db::compare_layouts (_this, target, tl::testdata () + "/algo/flat_region_au40.gds");
@ -1829,12 +1853,24 @@ TEST(42_DRCWithProperties)
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (31, 0)), r1.separation_check (r2, 1000, opt));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (32, 0)), r2.space_check (1000, opt));
opt.prop_constraint = db::SamePropertiesConstraintDrop;
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (30, 1)), r1.space_check (1000, opt));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (31, 1)), r1.separation_check (r2, 1000, opt));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (32, 1)), r2.space_check (1000, opt));
opt.prop_constraint = db::DifferentPropertiesConstraint;
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (40, 0)), r1.space_check (1000, opt));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (41, 0)), r1.separation_check (r2, 1000, opt));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (42, 0)), r2.space_check (1000, opt));
opt.prop_constraint = db::DifferentPropertiesConstraintDrop;
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (40, 1)), r1.space_check (1000, opt));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (41, 1)), r1.separation_check (r2, 1000, opt));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (42, 1)), r2.space_check (1000, opt));
CHECKPOINT();
db::compare_layouts (_this, target, tl::testdata () + "/algo/flat_region_au42.gds");
}
@ -1896,10 +1932,18 @@ TEST(43_ComplexOpsWithProperties)
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (31, 0)), r1.cop_to_region (sep_check2p, db::SamePropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (32, 0)), r1.cop_to_edges (sep_check2e, db::SamePropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (30, 1)), r1.cop_to_edge_pairs (sep_check, db::SamePropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (31, 1)), r1.cop_to_region (sep_check2p, db::SamePropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (32, 1)), r1.cop_to_edges (sep_check2e, db::SamePropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (40, 0)), r1.cop_to_edge_pairs (sep_check, db::DifferentPropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (41, 0)), r1.cop_to_region (sep_check2p, db::DifferentPropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (42, 0)), r1.cop_to_edges (sep_check2e, db::DifferentPropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (40, 1)), r1.cop_to_edge_pairs (sep_check, db::DifferentPropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (41, 1)), r1.cop_to_region (sep_check2p, db::DifferentPropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (42, 1)), r1.cop_to_edges (sep_check2e, db::DifferentPropertiesConstraintDrop));
CHECKPOINT();
db::compare_layouts (_this, target, tl::testdata () + "/algo/flat_region_au43.gds");
}
@ -1932,9 +1976,6 @@ TEST(44_SizeWithProperties)
db::Layout target;
unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index));
db::RegionCheckOptions opt;
opt.metrics = db::Projection;
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (1, 0)), r1);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (2, 0)), r2);

View File

@ -2176,6 +2176,12 @@ TEST(40_BoolWithProperties)
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (25, 0)), r3.bool_and (r2, db::DifferentPropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (26, 0)), r1.bool_and (r3, db::SamePropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (27, 0)), r1.bool_and (r3, db::DifferentPropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (22, 1)), r1.bool_and (r2, db::SamePropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (23, 1)), r1.bool_and (r2, db::DifferentPropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (24, 1)), r3.bool_and (r2, db::SamePropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (25, 1)), r3.bool_and (r2, db::DifferentPropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (26, 1)), r1.bool_and (r3, db::SamePropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (27, 1)), r1.bool_and (r3, db::DifferentPropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (30, 0)), r1 - r2);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (31, 0)), r1.bool_not (r2, db::NoPropertyConstraint));
@ -2185,6 +2191,12 @@ TEST(40_BoolWithProperties)
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (35, 0)), r3.bool_not (r2, db::DifferentPropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (36, 0)), r1.bool_not (r3, db::SamePropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (37, 0)), r1.bool_not (r3, db::DifferentPropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (32, 1)), r1.bool_not (r2, db::SamePropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (33, 1)), r1.bool_not (r2, db::DifferentPropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (34, 1)), r3.bool_not (r2, db::SamePropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (35, 1)), r3.bool_not (r2, db::DifferentPropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (36, 1)), r1.bool_not (r3, db::SamePropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (37, 1)), r1.bool_not (r3, db::DifferentPropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (40, 0)), r1.andnot (r2).first);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (41, 0)), r1.andnot (r2).second);
@ -2200,6 +2212,18 @@ TEST(40_BoolWithProperties)
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (51, 0)), r1.andnot (r3, db::SamePropertiesConstraint).second);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (52, 0)), r1.andnot (r3, db::DifferentPropertiesConstraint).first);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (53, 0)), r1.andnot (r3, db::DifferentPropertiesConstraint).second);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (42, 1)), r1.andnot (r2, db::SamePropertiesConstraintDrop).first);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (43, 1)), r1.andnot (r2, db::SamePropertiesConstraintDrop).second);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (44, 1)), r1.andnot (r2, db::DifferentPropertiesConstraintDrop).first);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (45, 1)), r1.andnot (r2, db::DifferentPropertiesConstraintDrop).second);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (46, 1)), r3.andnot (r2, db::SamePropertiesConstraintDrop).first);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (47, 1)), r3.andnot (r2, db::SamePropertiesConstraintDrop).second);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (48, 1)), r3.andnot (r2, db::DifferentPropertiesConstraintDrop).first);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (49, 1)), r3.andnot (r2, db::DifferentPropertiesConstraintDrop).second);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (50, 1)), r1.andnot (r3, db::SamePropertiesConstraintDrop).first);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (51, 1)), r1.andnot (r3, db::SamePropertiesConstraintDrop).second);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (52, 1)), r1.andnot (r3, db::DifferentPropertiesConstraintDrop).first);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (53, 1)), r1.andnot (r3, db::DifferentPropertiesConstraintDrop).second);
CHECKPOINT();
db::compare_layouts (_this, target, tl::testdata () + "/algo/deep_region_au40.gds");
@ -2321,12 +2345,24 @@ TEST(42_DRCWithProperties)
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (31, 0)), r1.separation_check (r2, 1000, opt));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (32, 0)), r2.space_check (1000, opt));
opt.prop_constraint = db::SamePropertiesConstraintDrop;
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (30, 1)), r1.space_check (1000, opt));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (31, 1)), r1.separation_check (r2, 1000, opt));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (32, 1)), r2.space_check (1000, opt));
opt.prop_constraint = db::DifferentPropertiesConstraint;
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (40, 0)), r1.space_check (1000, opt));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (41, 0)), r1.separation_check (r2, 1000, opt));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (42, 0)), r2.space_check (1000, opt));
opt.prop_constraint = db::DifferentPropertiesConstraintDrop;
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (40, 1)), r1.space_check (1000, opt));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (41, 1)), r1.separation_check (r2, 1000, opt));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (42, 1)), r2.space_check (1000, opt));
CHECKPOINT();
db::compare_layouts (_this, target, tl::testdata () + "/algo/deep_region_au42.gds");
}
@ -2390,10 +2426,18 @@ TEST(43_ComplexOpsWithProperties)
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (31, 0)), r1.cop_to_region (sep_check2p, db::SamePropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (32, 0)), r1.cop_to_edges (sep_check2e, db::SamePropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (30, 1)), r1.cop_to_edge_pairs (sep_check, db::SamePropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (31, 1)), r1.cop_to_region (sep_check2p, db::SamePropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (32, 1)), r1.cop_to_edges (sep_check2e, db::SamePropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (40, 0)), r1.cop_to_edge_pairs (sep_check, db::DifferentPropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (41, 0)), r1.cop_to_region (sep_check2p, db::DifferentPropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (42, 0)), r1.cop_to_edges (sep_check2e, db::DifferentPropertiesConstraint));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (40, 1)), r1.cop_to_edge_pairs (sep_check, db::DifferentPropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (41, 1)), r1.cop_to_region (sep_check2p, db::DifferentPropertiesConstraintDrop));
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (42, 1)), r1.cop_to_edges (sep_check2e, db::DifferentPropertiesConstraintDrop));
CHECKPOINT();
db::compare_layouts (_this, target, tl::testdata () + "/algo/deep_region_au43.gds");
}
@ -2428,9 +2472,6 @@ TEST(44_SizeWithProperties)
db::Layout target;
unsigned int target_top_cell_index = target.add_cell (ly.cell_name (top_cell_index));
db::RegionCheckOptions opt;
opt.metrics = db::Projection;
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (1, 0)), r1);
target.insert (target_top_cell_index, target.get_layer (db::LayerProperties (2, 0)), r2);

View File

@ -318,13 +318,13 @@ module DRC
def props_eq
self._context("props_eq") do
DRCPropertiesConstraint::new(RBA::Region::SamePropertiesConstraint)
DRCPropertiesConstraint::new(RBA::Region::SamePropertiesConstraintDrop)
end
end
def props_ne
self._context("props_ne") do
DRCPropertiesConstraint::new(RBA::Region::DifferentPropertiesConstraint)
DRCPropertiesConstraint::new(RBA::Region::DifferentPropertiesConstraintDrop)
end
end

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -84,6 +84,8 @@ l1_nets.space(1.0.um, projection, props_ne + props_copy).polygons.output(202, 0)
l1_nets.space(1.0.um, projection, props_copy).polygons.output(203, 0)
l1_nets.width(1.0.um, projection).polygons.output(204, 0)
l1_nets.width(1.0.um, projection, props_copy).polygons.output(205, 0)
l1_nets.space(1.0.um, projection, props_eq).polygons.output(206, 0)
l1_nets.space(1.0.um, projection, props_ne).polygons.output(207, 0)
l1_nets.drc(space(projection) < 1.0.um).polygons.output(210, 0)
l1_nets.drc(space(projection) < 1.0.um, props_eq + props_copy).polygons.output(211, 0)
@ -91,6 +93,8 @@ l1_nets.drc(space(projection) < 1.0.um, props_ne + props_copy).polygons.output(2
l1_nets.drc(space(projection) < 1.0.um, props_copy).polygons.output(213, 0)
l1_nets.drc(width(projection) < 1.0.um).polygons.output(214, 0)
l1_nets.drc(width(projection) < 1.0.um, props_copy).polygons.output(215, 0)
l1_nets.drc(space(projection) < 1.0.um, props_eq).polygons.output(216, 0)
l1_nets.drc(space(projection) < 1.0.um, props_ne).polygons.output(217, 0)
# edge pair to edge/polygon conversion with properties
@ -104,9 +108,12 @@ l1_nets.space(1.0.um, projection, props_copy).edges.extended_in(10.nm).output(22
l1_nets_sized = l1_nets.sized(0.2.um)
l1_nets_sized.and(l1_nets_sized, props_ne + props_copy).output(300, 0) # overlap of different nets, same layer
l1_nets_sized.and(l1_nets_sized, props_ne).output(301, 0)
l1_nets.drc(primary.sized(0.2.um) & foreign.sized(0.2.um)).output(310, 0)
l1_nets.drc(primary.sized(0.2.um) & foreign.sized(0.2.um), props_ne + props_copy).output(311, 0)
l1_nets.drc(primary.sized(0.2.um) & foreign.sized(0.2.um), props_eq + props_copy).output(312, 0)
l1_nets.drc(primary.sized(0.2.um) & foreign.sized(0.2.um), props_copy).output(313, 0)
l1_nets.drc(primary.sized(0.2.um) & foreign.sized(0.2.um), props_ne).output(314, 0)
l1_nets.drc(primary.sized(0.2.um) & foreign.sized(0.2.um), props_eq).output(315, 0)

Binary file not shown.

Binary file not shown.