WIP: deep mode and complex DRC ops, debugging

This commit is contained in:
Matthias Koefferlein 2020-12-26 21:11:22 +01:00
parent 493024734d
commit dcaa0d0ea5
8 changed files with 15 additions and 9 deletions

View File

@ -83,20 +83,26 @@ CompoundRegionOperationNode::generated_description () const
static void translate (db::Layout *layout, const std::vector<std::unordered_set<db::Polygon> > &in, std::vector<std::unordered_set<db::PolygonRef> > &out) static void translate (db::Layout *layout, const std::vector<std::unordered_set<db::Polygon> > &in, std::vector<std::unordered_set<db::PolygonRef> > &out)
{ {
tl_assert (layout != 0); tl_assert (layout != 0);
if (out.size () <= in.size ()) {
out.resize (in.size ());
}
for (std::vector<std::unordered_set<db::Polygon> >::const_iterator r = in.begin (); r != in.end (); ++r) { for (std::vector<std::unordered_set<db::Polygon> >::const_iterator r = in.begin (); r != in.end (); ++r) {
out.push_back (std::unordered_set<db::PolygonRef> ()); std::unordered_set<db::PolygonRef> &o = out[r - in.begin ()];
for (std::unordered_set<db::Polygon>::const_iterator p = r->begin (); p != r->end (); ++p) { for (std::unordered_set<db::Polygon>::const_iterator p = r->begin (); p != r->end (); ++p) {
out.back ().insert (db::PolygonRef (*p, layout->shape_repository ())); o.insert (db::PolygonRef (*p, layout->shape_repository ()));
} }
} }
} }
static void translate (db::Layout *, const std::vector<std::unordered_set<db::PolygonRef> > &in, std::vector<std::unordered_set<db::Polygon> > &out) static void translate (db::Layout *, const std::vector<std::unordered_set<db::PolygonRef> > &in, std::vector<std::unordered_set<db::Polygon> > &out)
{ {
if (out.size () <= in.size ()) {
out.resize (in.size ());
}
for (std::vector<std::unordered_set<db::PolygonRef> >::const_iterator r = in.begin (); r != in.end (); ++r) { for (std::vector<std::unordered_set<db::PolygonRef> >::const_iterator r = in.begin (); r != in.end (); ++r) {
out.push_back (std::unordered_set<db::Polygon> ()); std::unordered_set<db::Polygon> &o = out[r - in.begin ()];
for (std::unordered_set<db::PolygonRef>::const_iterator p = r->begin (); p != r->end (); ++p) { for (std::unordered_set<db::PolygonRef>::const_iterator p = r->begin (); p != r->end (); ++p) {
out.back ().insert (p->obj ().transformed (p->trans ())); o.insert (p->obj ().transformed (p->trans ()));
} }
} }
} }
@ -874,8 +880,8 @@ template DB_PUBLIC void compound_region_generic_operation_node<db::Polygon, db::
// --------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------
CompoundRegionLogicalCaseSelectOperationNode::CompoundRegionLogicalCaseSelectOperationNode (bool multi_layer, const std::vector<CompoundRegionOperationNode *> &inputs) CompoundRegionLogicalCaseSelectOperationNode::CompoundRegionLogicalCaseSelectOperationNode (const std::vector<CompoundRegionOperationNode *> &inputs)
: CompoundRegionMultiInputOperationNode (inputs), m_multi_layer (multi_layer) : CompoundRegionMultiInputOperationNode (inputs), m_multi_layer (false) // TODO: multi-output mode not supported so far.
{ {
// .. nothing yet .. // .. nothing yet ..
} }

View File

@ -668,7 +668,7 @@ class DB_PUBLIC CompoundRegionLogicalCaseSelectOperationNode
: public CompoundRegionMultiInputOperationNode : public CompoundRegionMultiInputOperationNode
{ {
public: public:
CompoundRegionLogicalCaseSelectOperationNode (bool multi_layer, const std::vector<CompoundRegionOperationNode *> &inputs); CompoundRegionLogicalCaseSelectOperationNode (const std::vector<CompoundRegionOperationNode *> &inputs);
virtual std::string generated_description () const; virtual std::string generated_description () const;

View File

@ -125,7 +125,7 @@ static db::CompoundRegionOperationNode *new_outside (db::CompoundRegionOperation
static db::CompoundRegionOperationNode *new_case (const std::vector<db::CompoundRegionOperationNode *> &inputs) static db::CompoundRegionOperationNode *new_case (const std::vector<db::CompoundRegionOperationNode *> &inputs)
{ {
return new db::CompoundRegionLogicalCaseSelectOperationNode (false, inputs); return new db::CompoundRegionLogicalCaseSelectOperationNode (inputs);
} }
static db::CompoundRegionOperationNode *new_corners_as_rectangles_node (db::CompoundRegionOperationNode *input, double angle_start, double angle_end, db::Coord dim = 1) static db::CompoundRegionOperationNode *new_corners_as_rectangles_node (db::CompoundRegionOperationNode *input, double angle_start, double angle_end, db::Coord dim = 1)

View File

@ -483,7 +483,7 @@ void run_test9 (tl::TestBase *_this, bool deep)
db::CompoundRegionProcessingOperationNode *result_default = new db::CompoundRegionProcessingOperationNode (new db::Extents (), primary, true); db::CompoundRegionProcessingOperationNode *result_default = new db::CompoundRegionProcessingOperationNode (new db::Extents (), primary, true);
inputs.push_back (result_default); inputs.push_back (result_default);
db::CompoundRegionLogicalCaseSelectOperationNode select_node (false, inputs); db::CompoundRegionLogicalCaseSelectOperationNode select_node (inputs);
db::Region res = r.cop_to_region (select_node); db::Region res = r.cop_to_region (select_node);

BIN
testdata/drc/compound_au5d.gds vendored Normal file

Binary file not shown.

BIN
testdata/drc/compound_au6d.gds vendored Normal file

Binary file not shown.

BIN
testdata/drc/compound_au7d.gds vendored Normal file

Binary file not shown.

BIN
testdata/drc/compound_au8d.gds vendored Normal file

Binary file not shown.