mirror of https://github.com/KLayout/klayout.git
Fixed #69 (DRC: 'inside' does not merge shapes of second input)
This commit is contained in:
parent
ccb76a9f09
commit
23c2ae7306
|
|
@ -255,6 +255,7 @@ public:
|
|||
*
|
||||
* If this flag is set, the interaction will include "touching" interactions in mode 0, i.e.
|
||||
* touching shapes will be counted as interacting.
|
||||
* In the other modes, this flag should be true (the default).
|
||||
*/
|
||||
void set_include_touching (bool f)
|
||||
{
|
||||
|
|
@ -299,7 +300,7 @@ public:
|
|||
virtual int edge (bool north, bool enter, property_type p);
|
||||
virtual int compare_ns () const;
|
||||
virtual bool is_reset () const { return m_inside.empty (); }
|
||||
virtual bool prefer_touch () const { return m_mode == 0 && m_include_touching; }
|
||||
virtual bool prefer_touch () const { return m_include_touching; }
|
||||
|
||||
private:
|
||||
int m_mode;
|
||||
|
|
|
|||
|
|
@ -1273,7 +1273,7 @@ public:
|
|||
*/
|
||||
Region selected_inside (const Region &other) const
|
||||
{
|
||||
return selected_interacting_generic (other, -1, false, false);
|
||||
return selected_interacting_generic (other, -1, true, false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1285,7 +1285,7 @@ public:
|
|||
*/
|
||||
Region selected_not_inside (const Region &other) const
|
||||
{
|
||||
return selected_interacting_generic (other, -1, false, true);
|
||||
return selected_interacting_generic (other, -1, true, true);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -748,6 +748,107 @@ TEST(18b)
|
|||
}
|
||||
}
|
||||
|
||||
TEST(18c)
|
||||
{
|
||||
// GitHub issue #69
|
||||
|
||||
db::Region r;
|
||||
r.insert (db::Box (db::Point (-120, 0), db::Point (-100, 20)));
|
||||
r.insert (db::Box (db::Point (-20, 0), db::Point (0, 20)));
|
||||
r.insert (db::Box (db::Point (0, 0), db::Point (20, 20)));
|
||||
r.insert (db::Box (db::Point (100, 0), db::Point (120, 20)));
|
||||
|
||||
db::Region rr;
|
||||
rr.insert (db::Box (db::Point (-100, -10), db::Point (0, 30)));
|
||||
rr.insert (db::Box (db::Point (0, -10), db::Point (100, 30)));
|
||||
|
||||
EXPECT_EQ (r.selected_outside (rr).to_string (), "(-120,0;-120,20;-100,20;-100,0);(100,0;100,20;120,20;120,0)");
|
||||
EXPECT_EQ (r.selected_inside (rr).to_string (), "(-20,0;-20,20;20,20;20,0)");
|
||||
EXPECT_EQ (r.selected_overlapping (rr).to_string (), "(-20,0;-20,20;20,20;20,0)");
|
||||
EXPECT_EQ (r.selected_interacting (rr).to_string (), "(-120,0;-120,20;-100,20;-100,0);(-20,0;-20,20;20,20;20,0);(100,0;100,20;120,20;120,0)");
|
||||
|
||||
EXPECT_EQ (r.selected_not_outside (rr).to_string (), "(-20,0;-20,20;20,20;20,0)");
|
||||
EXPECT_EQ (r.selected_not_inside (rr).to_string (), "(-120,0;-120,20;-100,20;-100,0);(100,0;100,20;120,20;120,0)");
|
||||
EXPECT_EQ (r.selected_not_overlapping (rr).to_string (), "(-120,0;-120,20;-100,20;-100,0);(100,0;100,20;120,20;120,0)");
|
||||
EXPECT_EQ (r.selected_not_interacting (rr).to_string (), "");
|
||||
|
||||
r.clear ();
|
||||
r.insert (db::Box (db::Point (-120, 0), db::Point (-100, 20)));
|
||||
r.insert (db::Box (db::Point (-20, 0), db::Point (20, 20)));
|
||||
r.insert (db::Box (db::Point (100, 0), db::Point (120, 20)));
|
||||
|
||||
rr.clear ();
|
||||
rr.insert (db::Box (db::Point (-100, -10), db::Point (0, 30)));
|
||||
rr.insert (db::Box (db::Point (0, -10), db::Point (100, 30)));
|
||||
|
||||
EXPECT_EQ (r.selected_outside (rr).to_string (), "(-120,0;-120,20;-100,20;-100,0);(100,0;100,20;120,20;120,0)");
|
||||
EXPECT_EQ (r.selected_inside (rr).to_string (), "(-20,0;-20,20;20,20;20,0)");
|
||||
EXPECT_EQ (r.selected_overlapping (rr).to_string (), "(-20,0;-20,20;20,20;20,0)");
|
||||
EXPECT_EQ (r.selected_interacting (rr).to_string (), "(-120,0;-120,20;-100,20;-100,0);(-20,0;-20,20;20,20;20,0);(100,0;100,20;120,20;120,0)");
|
||||
|
||||
EXPECT_EQ (r.selected_not_outside (rr).to_string (), "(-20,0;-20,20;20,20;20,0)");
|
||||
EXPECT_EQ (r.selected_not_inside (rr).to_string (), "(-120,0;-120,20;-100,20;-100,0);(100,0;100,20;120,20;120,0)");
|
||||
EXPECT_EQ (r.selected_not_overlapping (rr).to_string (), "(-120,0;-120,20;-100,20;-100,0);(100,0;100,20;120,20;120,0)");
|
||||
EXPECT_EQ (r.selected_not_interacting (rr).to_string (), "");
|
||||
|
||||
r.clear ();
|
||||
r.insert (db::Box (db::Point (-120, 0), db::Point (-100, 20)));
|
||||
r.insert (db::Box (db::Point (-20, 0), db::Point (20, 20)));
|
||||
r.insert (db::Box (db::Point (100, 0), db::Point (120, 20)));
|
||||
|
||||
rr.clear ();
|
||||
rr.insert (db::Box (db::Point (-100, -10), db::Point (100, 30)));
|
||||
|
||||
EXPECT_EQ (r.selected_outside (rr).to_string (), "(-120,0;-120,20;-100,20;-100,0);(100,0;100,20;120,20;120,0)");
|
||||
EXPECT_EQ (r.selected_inside (rr).to_string (), "(-20,0;-20,20;20,20;20,0)");
|
||||
EXPECT_EQ (r.selected_overlapping (rr).to_string (), "(-20,0;-20,20;20,20;20,0)");
|
||||
EXPECT_EQ (r.selected_interacting (rr).to_string (), "(-120,0;-120,20;-100,20;-100,0);(-20,0;-20,20;20,20;20,0);(100,0;100,20;120,20;120,0)");
|
||||
|
||||
EXPECT_EQ (r.selected_not_outside (rr).to_string (), "(-20,0;-20,20;20,20;20,0)");
|
||||
EXPECT_EQ (r.selected_not_inside (rr).to_string (), "(-120,0;-120,20;-100,20;-100,0);(100,0;100,20;120,20;120,0)");
|
||||
EXPECT_EQ (r.selected_not_overlapping (rr).to_string (), "(-120,0;-120,20;-100,20;-100,0);(100,0;100,20;120,20;120,0)");
|
||||
EXPECT_EQ (r.selected_not_interacting (rr).to_string (), "");
|
||||
|
||||
r.clear ();
|
||||
r.insert (db::Box (db::Point (-120, 0), db::Point (-100, 20)));
|
||||
r.insert (db::Box (db::Point (-20, 0), db::Point (20, 20)));
|
||||
r.insert (db::Box (db::Point (100, 0), db::Point (120, 20)));
|
||||
|
||||
rr.clear ();
|
||||
rr.insert (db::Box (db::Point (-100, -10), db::Point (0, 30)));
|
||||
rr.insert (db::Box (db::Point (1, -10), db::Point (100, 30)));
|
||||
|
||||
EXPECT_EQ (r.selected_outside (rr).to_string (), "(-120,0;-120,20;-100,20;-100,0);(100,0;100,20;120,20;120,0)");
|
||||
EXPECT_EQ (r.selected_inside (rr).to_string (), "");
|
||||
EXPECT_EQ (r.selected_overlapping (rr).to_string (), "(-20,0;-20,20;20,20;20,0)");
|
||||
EXPECT_EQ (r.selected_interacting (rr).to_string (), "(-120,0;-120,20;-100,20;-100,0);(-20,0;-20,20;20,20;20,0);(100,0;100,20;120,20;120,0)");
|
||||
|
||||
EXPECT_EQ (r.selected_not_outside (rr).to_string (), "(-20,0;-20,20;20,20;20,0)");
|
||||
EXPECT_EQ (r.selected_not_inside (rr).to_string (), "(-120,0;-120,20;-100,20;-100,0);(-20,0;-20,20;20,20;20,0);(100,0;100,20;120,20;120,0)");
|
||||
EXPECT_EQ (r.selected_not_overlapping (rr).to_string (), "(-120,0;-120,20;-100,20;-100,0);(100,0;100,20;120,20;120,0)");
|
||||
EXPECT_EQ (r.selected_not_interacting (rr).to_string (), "");
|
||||
|
||||
r.clear ();
|
||||
r.insert (db::Box (db::Point (-100, 0), db::Point (-80, 20)));
|
||||
r.insert (db::Box (db::Point (-20, 0), db::Point (0, 20)));
|
||||
r.insert (db::Box (db::Point (0, 0), db::Point (20, 20)));
|
||||
r.insert (db::Box (db::Point (80, 0), db::Point (100, 20)));
|
||||
|
||||
rr.clear ();
|
||||
rr.insert (db::Box (db::Point (-100, -10), db::Point (0, 30)));
|
||||
rr.insert (db::Box (db::Point (0, -10), db::Point (100, 30)));
|
||||
|
||||
EXPECT_EQ (r.selected_outside (rr).to_string (), "");
|
||||
EXPECT_EQ (r.selected_inside (rr).to_string (), "(-100,0;-100,20;-80,20;-80,0);(-20,0;-20,20;20,20;20,0);(80,0;80,20;100,20;100,0)");
|
||||
EXPECT_EQ (r.selected_overlapping (rr).to_string (), "(-100,0;-100,20;-80,20;-80,0);(-20,0;-20,20;20,20;20,0);(80,0;80,20;100,20;100,0)");
|
||||
EXPECT_EQ (r.selected_interacting (rr).to_string (), "(-100,0;-100,20;-80,20;-80,0);(-20,0;-20,20;20,20;20,0);(80,0;80,20;100,20;100,0)");
|
||||
|
||||
EXPECT_EQ (r.selected_not_outside (rr).to_string (), "(-100,0;-100,20;-80,20;-80,0);(-20,0;-20,20;20,20;20,0);(80,0;80,20;100,20;100,0)");
|
||||
EXPECT_EQ (r.selected_not_inside (rr).to_string (), "");
|
||||
EXPECT_EQ (r.selected_not_overlapping (rr).to_string (), "");
|
||||
EXPECT_EQ (r.selected_not_interacting (rr).to_string (), "");
|
||||
}
|
||||
|
||||
TEST(19)
|
||||
{
|
||||
db::Region r1;
|
||||
|
|
|
|||
Loading…
Reference in New Issue