mirror of https://github.com/KLayout/klayout.git
Another test case, triangulation extractor behaves strange.
This commit is contained in:
parent
93e10d1d72
commit
0e99ebc056
|
|
@ -167,7 +167,7 @@ SquareCountingRExtractor::do_extract (const db::Polygon &db_poly, const std::vec
|
|||
if (r == 0) {
|
||||
rnetwork.create_element (pex::RElement::short_value (), pl->second, pl_next->second);
|
||||
} else {
|
||||
rnetwork.create_element (r, pl->second, pl_next->second);
|
||||
rnetwork.create_element (1.0 / r, pl->second, pl_next->second);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,6 +55,8 @@ TriangulationRExtractor::extract (const db::Polygon &polygon, const std::vector<
|
|||
|
||||
tri.triangulate (polygon, vertex_ports, m_tri_param, trans);
|
||||
|
||||
plc.dump ("debug.gds");
|
||||
|
||||
} else {
|
||||
|
||||
tl::SelfTimer timer_tri (tl::verbosity () >= m_tri_param.base_verbosity + 11, "Triangulation step");
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ TEST(basic)
|
|||
rex.do_extract (poly, ports, rn);
|
||||
|
||||
EXPECT_EQ (rn.to_string (),
|
||||
"R $0 $1 0.390865\n" // w ramp w=100 to 1000 over x=0 to 1000 (squares = (x2-x1)/(w2-w1)*log(w2/w1) by integration)
|
||||
"R $0 $1 2.55843\n" // w ramp w=100 to 1000 over x=0 to 1000 (squares = (x2-x1)/(w2-w1)*log(w2/w1) by integration)
|
||||
"R $1 $2 0\n" // transition from y=50 to y=500 parallel to current direction
|
||||
"R $2 $3 1" // 1 square between x=1000 and 2000 (w=1000)
|
||||
);
|
||||
|
|
@ -100,7 +100,7 @@ TEST(basic)
|
|||
EXPECT_EQ (rn.to_string (),
|
||||
"R $1 $3 1\n"
|
||||
"R $1 $2 0\n"
|
||||
"R $0 $2 0.390865"
|
||||
"R $0 $2 2.55843"
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -135,8 +135,54 @@ TEST(extraction)
|
|||
rex.extract (poly, vertex_ports, polygon_ports, rn);
|
||||
|
||||
EXPECT_EQ (rn.to_string (),
|
||||
"R $0 V0 0.0952381\n"
|
||||
"R $0 V1 0.166667\n"
|
||||
"R $0 P0 0.117647"
|
||||
"R $0 V0 10.5\n"
|
||||
"R $0 V1 6\n"
|
||||
"R $0 P0 8.5"
|
||||
)
|
||||
}
|
||||
|
||||
TEST(extraction_meander)
|
||||
{
|
||||
db::Point contour[] = {
|
||||
db::Point (0, 0),
|
||||
db::Point (0, 1000),
|
||||
db::Point (1600, 1000),
|
||||
db::Point (1600, 600),
|
||||
db::Point (2000, 600),
|
||||
db::Point (2000, 1000),
|
||||
db::Point (3600, 1000),
|
||||
db::Point (3600, 600),
|
||||
db::Point (4000, 600),
|
||||
db::Point (4000, 1000),
|
||||
db::Point (4600, 1000),
|
||||
db::Point (4600, 0),
|
||||
db::Point (3000, 0),
|
||||
db::Point (3000, 400),
|
||||
db::Point (2600, 400),
|
||||
db::Point (2600, 0),
|
||||
db::Point (1000, 0),
|
||||
db::Point (1000, 400),
|
||||
db::Point (600, 400),
|
||||
db::Point (600, 0)
|
||||
};
|
||||
|
||||
db::Polygon poly;
|
||||
poly.assign_hull (contour + 0, contour + sizeof (contour) / sizeof (contour[0]));
|
||||
|
||||
double dbu = 0.001;
|
||||
|
||||
pex::RNetwork rn;
|
||||
pex::SquareCountingRExtractor rex (dbu);
|
||||
|
||||
std::vector<db::Point> vertex_ports;
|
||||
vertex_ports.push_back (db::Point (300, 0)); // V0
|
||||
vertex_ports.push_back (db::Point (4300, 1000)); // V1
|
||||
|
||||
std::vector<db::Polygon> polygon_ports;
|
||||
|
||||
rex.extract (poly, vertex_ports, polygon_ports, rn);
|
||||
|
||||
EXPECT_EQ (rn.to_string (),
|
||||
"R V0 V1 10.0544" // that is pretty much the length of the center line / width :)
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -313,3 +313,51 @@ TEST(extraction_analytic_disc)
|
|||
)
|
||||
}
|
||||
|
||||
TEST(extraction_meander)
|
||||
{
|
||||
db::Point contour[] = {
|
||||
db::Point (0, 0),
|
||||
db::Point (0, 1000),
|
||||
db::Point (1600, 1000),
|
||||
db::Point (1600, 600),
|
||||
db::Point (2000, 600),
|
||||
db::Point (2000, 1000),
|
||||
db::Point (3600, 1000),
|
||||
db::Point (3600, 600),
|
||||
db::Point (4000, 600),
|
||||
db::Point (4000, 1000),
|
||||
db::Point (4600, 1000),
|
||||
db::Point (4600, 0),
|
||||
db::Point (3000, 0),
|
||||
db::Point (3000, 400),
|
||||
db::Point (2600, 400),
|
||||
db::Point (2600, 0),
|
||||
db::Point (1000, 0),
|
||||
db::Point (1000, 400),
|
||||
db::Point (600, 400),
|
||||
db::Point (600, 0)
|
||||
};
|
||||
|
||||
db::Polygon poly;
|
||||
poly.assign_hull (contour + 0, contour + sizeof (contour) / sizeof (contour[0]));
|
||||
|
||||
double dbu = 0.001;
|
||||
|
||||
pex::RNetwork rn;
|
||||
pex::TriangulationRExtractor rex (dbu);
|
||||
rex.triangulation_parameters ().max_area = 10000 * dbu * dbu;
|
||||
rex.triangulation_parameters ().min_b = 0.3;
|
||||
|
||||
std::vector<db::Point> vertex_ports;
|
||||
vertex_ports.push_back (db::Point (300, 0)); // V0
|
||||
vertex_ports.push_back (db::Point (4300, 1000)); // V1
|
||||
|
||||
std::vector<db::Polygon> polygon_ports;
|
||||
|
||||
rex.extract (poly, vertex_ports, polygon_ports, rn);
|
||||
|
||||
EXPECT_EQ (rn.to_string (),
|
||||
"R V0 V1 8.75751" // what is the "real" value?
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue