mirror of https://github.com/KLayout/klayout.git
Refactoring: based results of edge/polygon operations on delegates entirely
This commit is contained in:
parent
124c4eb61c
commit
503707f361
|
|
@ -422,10 +422,10 @@ AsIfFlatEdges::filtered (const EdgeFilterBase &filter) const
|
|||
return new_region.release ();
|
||||
}
|
||||
|
||||
EdgePairs
|
||||
EdgePairsDelegate *
|
||||
AsIfFlatEdges::run_check (db::edge_relation_type rel, const Edges *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
EdgePairs result;
|
||||
std::auto_ptr<FlatEdgePairs> result (new FlatEdgePairs ());
|
||||
|
||||
db::box_scanner<db::Edge, size_t> scanner (report_progress (), progress_desc ());
|
||||
scanner.reserve (size () + (other ? other->size () : 0));
|
||||
|
|
@ -456,10 +456,10 @@ AsIfFlatEdges::run_check (db::edge_relation_type rel, const Edges *other, db::Co
|
|||
check.set_min_projection (min_projection);
|
||||
check.set_max_projection (max_projection);
|
||||
|
||||
edge2edge_check_for_edges<db::EdgePairs> edge_check (check, result, other != 0);
|
||||
edge2edge_check_for_edges<db::FlatEdgePairs> edge_check (check, *result, other != 0);
|
||||
scanner.process (edge_check, d, db::box_convert<db::Edge> ());
|
||||
|
||||
return result;
|
||||
return result.release ();
|
||||
}
|
||||
|
||||
EdgesDelegate *
|
||||
|
|
|
|||
|
|
@ -52,32 +52,32 @@ public:
|
|||
virtual distance_type length (const db::Box &) const;
|
||||
virtual Box bbox () const;
|
||||
|
||||
virtual EdgePairs width_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
virtual EdgePairsDelegate *width_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::WidthRelation, 0, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
virtual EdgePairs space_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
virtual EdgePairsDelegate *space_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::SpaceRelation, 0, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
virtual EdgePairs enclosing_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
virtual EdgePairsDelegate *enclosing_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::OverlapRelation, &other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
virtual EdgePairs overlap_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
virtual EdgePairsDelegate *overlap_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::WidthRelation, &other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
virtual EdgePairs separation_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
virtual EdgePairsDelegate *separation_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::SpaceRelation, &other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
virtual EdgePairs inside_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
virtual EdgePairsDelegate *inside_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::InsideRelation, &other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
|
@ -172,7 +172,7 @@ public:
|
|||
protected:
|
||||
void update_bbox (const db::Box &box);
|
||||
void invalidate_bbox ();
|
||||
EdgePairs run_check (db::edge_relation_type rel, const Edges *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const;
|
||||
EdgePairsDelegate *run_check (db::edge_relation_type rel, const Edges *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const;
|
||||
virtual EdgesDelegate *selected_interacting_generic (const Edges &edges, bool inverse) const;
|
||||
virtual EdgesDelegate *selected_interacting_generic (const Region ®ion, bool inverse) const;
|
||||
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@
|
|||
#include "dbFlatEdgePairs.h"
|
||||
#include "dbFlatEdges.h"
|
||||
#include "dbEmptyRegion.h"
|
||||
#include "dbEmptyEdgePairs.h"
|
||||
#include "dbRegion.h"
|
||||
#include "dbRegionUtils.h"
|
||||
#include "dbShapeProcessor.h"
|
||||
|
|
@ -72,26 +73,26 @@ AsIfFlatRegion::to_string (size_t nmax) const
|
|||
return os.str ();
|
||||
}
|
||||
|
||||
Edges
|
||||
EdgesDelegate *
|
||||
AsIfFlatRegion::edges (const EdgeFilterBase *filter) const
|
||||
{
|
||||
Edges edges;
|
||||
std::auto_ptr<FlatEdges> result (new FlatEdges ());
|
||||
|
||||
size_t n = 0;
|
||||
for (RegionIterator p (begin_merged ()); ! p.at_end (); ++p) {
|
||||
n += p->vertices ();
|
||||
}
|
||||
edges.reserve (n);
|
||||
result->reserve (n);
|
||||
|
||||
for (RegionIterator p (begin_merged ()); ! p.at_end (); ++p) {
|
||||
for (db::Polygon::polygon_edge_iterator e = p->begin_edge (); ! e.at_end (); ++e) {
|
||||
if (! filter || filter->selected (*e)) {
|
||||
edges.insert (*e);
|
||||
result->insert (*e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return edges;
|
||||
return result.release ();
|
||||
}
|
||||
|
||||
RegionDelegate *
|
||||
|
|
@ -454,7 +455,7 @@ AsIfFlatRegion::produce_markers_for_grid_check (const db::Polygon &poly, const T
|
|||
template void AsIfFlatRegion::produce_markers_for_grid_check<db::ICplxTrans> (const db::Polygon &poly, const db::ICplxTrans &tr, db::Coord gx, db::Coord gy, db::Shapes &shapes);
|
||||
template void AsIfFlatRegion::produce_markers_for_grid_check<db::UnitTrans> (const db::Polygon &poly, const db::UnitTrans &tr, db::Coord gx, db::Coord gy, db::Shapes &shapes);
|
||||
|
||||
EdgePairs
|
||||
EdgePairsDelegate *
|
||||
AsIfFlatRegion::grid_check (db::Coord gx, db::Coord gy) const
|
||||
{
|
||||
if (gx < 0 || gy < 0) {
|
||||
|
|
@ -462,7 +463,7 @@ AsIfFlatRegion::grid_check (db::Coord gx, db::Coord gy) const
|
|||
}
|
||||
|
||||
if (gx == 0 && gy == 0) {
|
||||
return EdgePairs ();
|
||||
return new EmptyEdgePairs ();
|
||||
}
|
||||
|
||||
std::auto_ptr<db::FlatEdgePairs> res (new db::FlatEdgePairs ());
|
||||
|
|
@ -471,7 +472,7 @@ AsIfFlatRegion::grid_check (db::Coord gx, db::Coord gy) const
|
|||
produce_markers_for_grid_check (*p, db::UnitTrans (), gx, gy, res->raw_edge_pairs ());
|
||||
}
|
||||
|
||||
return EdgePairs (res.release ());
|
||||
return res.release ();
|
||||
}
|
||||
|
||||
static bool ac_less (double cos_a, bool gt180_a, double cos_b, bool gt180_b)
|
||||
|
|
@ -532,7 +533,7 @@ AsIfFlatRegion::produce_markers_for_angle_check (const db::Polygon &poly, const
|
|||
template void AsIfFlatRegion::produce_markers_for_angle_check<db::ICplxTrans> (const db::Polygon &poly, const db::ICplxTrans &tr, double min, double max, bool inverse, db::Shapes &shapes);
|
||||
template void AsIfFlatRegion::produce_markers_for_angle_check<db::UnitTrans> (const db::Polygon &poly, const db::UnitTrans &tr, double min, double max, bool inverse, db::Shapes &shapes);
|
||||
|
||||
EdgePairs
|
||||
EdgePairsDelegate *
|
||||
AsIfFlatRegion::angle_check (double min, double max, bool inverse) const
|
||||
{
|
||||
std::auto_ptr<db::FlatEdgePairs> res (new db::FlatEdgePairs ());
|
||||
|
|
@ -541,7 +542,7 @@ AsIfFlatRegion::angle_check (double min, double max, bool inverse) const
|
|||
produce_markers_for_angle_check (*p, db::UnitTrans (), min, max, inverse, res->raw_edge_pairs ());
|
||||
}
|
||||
|
||||
return EdgePairs (res.release ());
|
||||
return res.release ();
|
||||
}
|
||||
|
||||
static inline db::Coord snap_to_grid (db::Coord c, db::Coord g)
|
||||
|
|
@ -610,10 +611,10 @@ AsIfFlatRegion::snapped (db::Coord gx, db::Coord gy)
|
|||
return new_region.release ();
|
||||
}
|
||||
|
||||
EdgePairs
|
||||
EdgePairsDelegate *
|
||||
AsIfFlatRegion::run_check (db::edge_relation_type rel, bool different_polygons, const Region *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
EdgePairs result;
|
||||
std::auto_ptr<FlatEdgePairs> result (new FlatEdgePairs ());
|
||||
|
||||
db::box_scanner<db::Polygon, size_t> scanner (report_progress (), progress_desc ());
|
||||
scanner.reserve (size () + (other ? other->size () : 0));
|
||||
|
|
@ -647,20 +648,20 @@ AsIfFlatRegion::run_check (db::edge_relation_type rel, bool different_polygons,
|
|||
check.set_min_projection (min_projection);
|
||||
check.set_max_projection (max_projection);
|
||||
|
||||
edge2edge_check<db::EdgePairs> edge_check (check, result, different_polygons, other != 0);
|
||||
poly2poly_check<db::EdgePairs> poly_check (edge_check);
|
||||
edge2edge_check<db::FlatEdgePairs> edge_check (check, *result, different_polygons, other != 0);
|
||||
poly2poly_check<db::FlatEdgePairs> poly_check (edge_check);
|
||||
|
||||
do {
|
||||
scanner.process (poly_check, d, db::box_convert<db::Polygon> ());
|
||||
} while (edge_check.prepare_next_pass ());
|
||||
|
||||
return result;
|
||||
return result.release ();
|
||||
}
|
||||
|
||||
EdgePairs
|
||||
EdgePairsDelegate *
|
||||
AsIfFlatRegion::run_single_polygon_check (db::edge_relation_type rel, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
EdgePairs result;
|
||||
std::auto_ptr<FlatEdgePairs> result (new FlatEdgePairs ());
|
||||
|
||||
EdgeRelationFilter check (rel, d, metrics);
|
||||
check.set_whole_edges (whole_edges);
|
||||
|
|
@ -668,8 +669,8 @@ AsIfFlatRegion::run_single_polygon_check (db::edge_relation_type rel, db::Coord
|
|||
check.set_min_projection (min_projection);
|
||||
check.set_max_projection (max_projection);
|
||||
|
||||
edge2edge_check<db::EdgePairs> edge_check (check, result, false, false);
|
||||
poly2poly_check<db::EdgePairs> poly_check (edge_check);
|
||||
edge2edge_check<db::FlatEdgePairs> edge_check (check, *result, false, false);
|
||||
poly2poly_check<db::FlatEdgePairs> poly_check (edge_check);
|
||||
|
||||
do {
|
||||
|
||||
|
|
@ -681,7 +682,7 @@ AsIfFlatRegion::run_single_polygon_check (db::edge_relation_type rel, db::Coord
|
|||
|
||||
} while (edge_check.prepare_next_pass ());
|
||||
|
||||
return result;
|
||||
return result.release ();
|
||||
}
|
||||
|
||||
RegionDelegate *
|
||||
|
|
|
|||
|
|
@ -55,48 +55,48 @@ public:
|
|||
|
||||
virtual std::string to_string (size_t nmax) const;
|
||||
|
||||
EdgePairs width_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
EdgePairsDelegate *width_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_single_polygon_check (db::WidthRelation, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
EdgePairs space_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
EdgePairsDelegate *space_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::SpaceRelation, false, 0, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
EdgePairs isolated_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
EdgePairsDelegate *isolated_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::SpaceRelation, true, 0, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
EdgePairs notch_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
EdgePairsDelegate *notch_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_single_polygon_check (db::SpaceRelation, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
EdgePairs enclosing_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
EdgePairsDelegate *enclosing_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::OverlapRelation, true, &other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
EdgePairs overlap_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
EdgePairsDelegate *overlap_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::WidthRelation, true, &other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
EdgePairs separation_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
EdgePairsDelegate *separation_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::SpaceRelation, true, &other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
EdgePairs inside_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
EdgePairsDelegate *inside_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::InsideRelation, true, &other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
virtual EdgePairs grid_check (db::Coord gx, db::Coord gy) const;
|
||||
virtual EdgePairs angle_check (double min, double max, bool inverse) const;
|
||||
virtual EdgePairsDelegate *grid_check (db::Coord gx, db::Coord gy) const;
|
||||
virtual EdgePairsDelegate *angle_check (double min, double max, bool inverse) const;
|
||||
|
||||
virtual RegionDelegate *snapped_in_place (db::Coord gx, db::Coord gy)
|
||||
{
|
||||
|
|
@ -105,7 +105,7 @@ public:
|
|||
|
||||
virtual RegionDelegate *snapped (db::Coord gx, db::Coord gy);
|
||||
|
||||
virtual Edges edges (const EdgeFilterBase *) const;
|
||||
virtual EdgesDelegate *edges (const EdgeFilterBase *) const;
|
||||
|
||||
virtual RegionDelegate *process_in_place (const PolygonProcessorBase &filter)
|
||||
{
|
||||
|
|
@ -216,8 +216,8 @@ protected:
|
|||
void update_bbox (const db::Box &box);
|
||||
void invalidate_bbox ();
|
||||
|
||||
EdgePairs run_check (db::edge_relation_type rel, bool different_polygons, const Region *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const;
|
||||
EdgePairs run_single_polygon_check (db::edge_relation_type rel, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const;
|
||||
EdgePairsDelegate *run_check (db::edge_relation_type rel, bool different_polygons, const Region *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const;
|
||||
EdgePairsDelegate *run_single_polygon_check (db::edge_relation_type rel, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const;
|
||||
RegionDelegate *selected_interacting_generic (const Region &other, int mode, bool touching, bool inverse) const;
|
||||
RegionDelegate *selected_interacting_generic (const Edges &other, bool inverse) const;
|
||||
|
||||
|
|
|
|||
|
|
@ -1390,7 +1390,8 @@ private:
|
|||
|
||||
}
|
||||
|
||||
EdgePairs DeepEdges::run_check (db::edge_relation_type rel, const Edges *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
EdgePairsDelegate *
|
||||
DeepEdges::run_check (db::edge_relation_type rel, const Edges *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
const db::DeepEdges *other_deep = 0;
|
||||
if (other) {
|
||||
|
|
@ -1422,7 +1423,7 @@ EdgePairs DeepEdges::run_check (db::edge_relation_type rel, const Edges *other,
|
|||
|
||||
proc.run (&op, m_merged_edges.layer (), other_deep ? other_deep->deep_layer ().layer () : m_merged_edges.layer (), res->deep_layer ().layer ());
|
||||
|
||||
return db::EdgePairs (res.release ());
|
||||
return res.release ();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,32 +78,32 @@ public:
|
|||
|
||||
virtual std::string to_string (size_t nmax) const;
|
||||
|
||||
virtual EdgePairs width_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
virtual EdgePairsDelegate *width_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::WidthRelation, 0, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
virtual EdgePairs space_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
virtual EdgePairsDelegate *space_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::SpaceRelation, 0, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
virtual EdgePairs enclosing_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
virtual EdgePairsDelegate *enclosing_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::OverlapRelation, &other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
virtual EdgePairs overlap_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
virtual EdgePairsDelegate *overlap_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::WidthRelation, &other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
virtual EdgePairs separation_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
virtual EdgePairsDelegate *separation_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::SpaceRelation, &other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
virtual EdgePairs inside_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
virtual EdgePairsDelegate *inside_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::InsideRelation, &other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
|
@ -173,7 +173,7 @@ private:
|
|||
void ensure_merged_edges_valid () const;
|
||||
DeepLayer and_or_not_with(const DeepEdges *other, bool and_op) const;
|
||||
DeepLayer edge_region_op (const DeepRegion *other, bool outside, bool include_borders) const;
|
||||
EdgePairs run_check (db::edge_relation_type rel, const Edges *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const;
|
||||
EdgePairsDelegate *run_check (db::edge_relation_type rel, const Edges *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const;
|
||||
EdgesDelegate *selected_interacting_generic (const Edges &edges, bool invert) const;
|
||||
EdgesDelegate *selected_interacting_generic (const Region ®ion, bool invert) const;
|
||||
template <class Result, class OutputContainer> OutputContainer *processed_impl (const edge_processor<Result> &filter) const;
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
#include "dbDeepRegion.h"
|
||||
#include "dbDeepShapeStore.h"
|
||||
#include "dbEmptyRegion.h"
|
||||
#include "dbEmptyEdgePairs.h"
|
||||
#include "dbRegion.h"
|
||||
#include "dbRegionUtils.h"
|
||||
#include "dbDeepEdges.h"
|
||||
|
|
@ -715,7 +716,7 @@ DeepRegion::to_string (size_t nmax) const
|
|||
return db::AsIfFlatRegion::to_string (nmax);
|
||||
}
|
||||
|
||||
EdgePairs
|
||||
EdgePairsDelegate *
|
||||
DeepRegion::grid_check (db::Coord gx, db::Coord gy) const
|
||||
{
|
||||
if (gx < 0 || gy < 0) {
|
||||
|
|
@ -728,7 +729,7 @@ DeepRegion::grid_check (db::Coord gx, db::Coord gy) const
|
|||
}
|
||||
|
||||
if (gx == 0) {
|
||||
return EdgePairs ();
|
||||
return new EmptyEdgePairs ();
|
||||
}
|
||||
|
||||
ensure_merged_polygons_valid ();
|
||||
|
|
@ -771,10 +772,10 @@ DeepRegion::grid_check (db::Coord gx, db::Coord gy) const
|
|||
// propagate the markers with a similar algorithm used for producing the variants
|
||||
res->deep_layer ().commit_shapes (vars, to_commit);
|
||||
|
||||
return db::EdgePairs (res.release ());
|
||||
return res.release ();
|
||||
}
|
||||
|
||||
EdgePairs
|
||||
EdgePairsDelegate *
|
||||
DeepRegion::angle_check (double min, double max, bool inverse) const
|
||||
{
|
||||
ensure_merged_polygons_valid ();
|
||||
|
|
@ -796,7 +797,7 @@ DeepRegion::angle_check (double min, double max, bool inverse) const
|
|||
|
||||
}
|
||||
|
||||
return db::EdgePairs (res.release ());
|
||||
return res.release ();
|
||||
}
|
||||
|
||||
RegionDelegate *
|
||||
|
|
@ -853,7 +854,7 @@ DeepRegion::snapped (db::Coord gx, db::Coord gy)
|
|||
return res.release ();
|
||||
}
|
||||
|
||||
Edges
|
||||
EdgesDelegate *
|
||||
DeepRegion::edges (const EdgeFilterBase *filter) const
|
||||
{
|
||||
ensure_merged_polygons_valid ();
|
||||
|
|
@ -902,7 +903,7 @@ DeepRegion::edges (const EdgeFilterBase *filter) const
|
|||
}
|
||||
|
||||
res->set_is_merged (true);
|
||||
return db::Edges (res.release ());
|
||||
return res.release ();
|
||||
}
|
||||
|
||||
RegionDelegate *
|
||||
|
|
@ -1448,7 +1449,7 @@ private:
|
|||
|
||||
}
|
||||
|
||||
EdgePairs
|
||||
EdgePairsDelegate *
|
||||
DeepRegion::run_check (db::edge_relation_type rel, bool different_polygons, const Region *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
const db::DeepRegion *other_deep = 0;
|
||||
|
|
@ -1481,10 +1482,10 @@ DeepRegion::run_check (db::edge_relation_type rel, bool different_polygons, cons
|
|||
|
||||
proc.run (&op, m_merged_polygons.layer (), other_deep ? other_deep->deep_layer ().layer () : m_merged_polygons.layer (), res->deep_layer ().layer ());
|
||||
|
||||
return db::EdgePairs (res.release ());
|
||||
return res.release ();
|
||||
}
|
||||
|
||||
EdgePairs
|
||||
EdgePairsDelegate *
|
||||
DeepRegion::run_single_polygon_check (db::edge_relation_type rel, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
ensure_merged_polygons_valid ();
|
||||
|
|
@ -1519,7 +1520,7 @@ DeepRegion::run_single_polygon_check (db::edge_relation_type rel, db::Coord d, b
|
|||
|
||||
}
|
||||
|
||||
return db::EdgePairs (res.release ());
|
||||
return res.release ();
|
||||
}
|
||||
|
||||
namespace
|
||||
|
|
|
|||
|
|
@ -86,48 +86,48 @@ public:
|
|||
virtual RegionDelegate *add_in_place (const Region &other);
|
||||
virtual RegionDelegate *add (const Region &other) const;
|
||||
|
||||
EdgePairs width_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
EdgePairsDelegate *width_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_single_polygon_check (db::WidthRelation, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
EdgePairs space_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
EdgePairsDelegate *space_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::SpaceRelation, false, 0, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
EdgePairs isolated_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
EdgePairsDelegate *isolated_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::SpaceRelation, true, 0, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
EdgePairs notch_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
EdgePairsDelegate *notch_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_single_polygon_check (db::SpaceRelation, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
EdgePairs enclosing_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
EdgePairsDelegate *enclosing_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::OverlapRelation, true, &other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
EdgePairs overlap_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
EdgePairsDelegate *overlap_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::WidthRelation, true, &other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
EdgePairs separation_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
EdgePairsDelegate *separation_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::SpaceRelation, true, &other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
EdgePairs inside_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
EdgePairsDelegate *inside_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const
|
||||
{
|
||||
return run_check (db::InsideRelation, true, &other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
}
|
||||
|
||||
virtual EdgePairs grid_check (db::Coord gx, db::Coord gy) const;
|
||||
virtual EdgePairs angle_check (double min, double max, bool inverse) const;
|
||||
virtual EdgePairsDelegate *grid_check (db::Coord gx, db::Coord gy) const;
|
||||
virtual EdgePairsDelegate *angle_check (double min, double max, bool inverse) const;
|
||||
|
||||
virtual RegionDelegate *snapped_in_place (db::Coord gx, db::Coord gy)
|
||||
{
|
||||
|
|
@ -136,7 +136,7 @@ public:
|
|||
|
||||
virtual RegionDelegate *snapped (db::Coord gx, db::Coord gy);
|
||||
|
||||
virtual Edges edges (const EdgeFilterBase *) const;
|
||||
virtual EdgesDelegate *edges (const EdgeFilterBase *) const;
|
||||
|
||||
virtual RegionDelegate *process_in_place (const PolygonProcessorBase &filter);
|
||||
virtual RegionDelegate *processed (const PolygonProcessorBase &filter) const;
|
||||
|
|
@ -235,8 +235,8 @@ private:
|
|||
void init ();
|
||||
void ensure_merged_polygons_valid () const;
|
||||
DeepLayer and_or_not_with(const DeepRegion *other, bool and_op) const;
|
||||
EdgePairs run_check (db::edge_relation_type rel, bool different_polygons, const Region *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const;
|
||||
EdgePairs run_single_polygon_check (db::edge_relation_type rel, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const;
|
||||
EdgePairsDelegate *run_check (db::edge_relation_type rel, bool different_polygons, const Region *other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const;
|
||||
EdgePairsDelegate *run_single_polygon_check (db::edge_relation_type rel, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const;
|
||||
RegionDelegate *selected_interacting_generic (const Region &other, int mode, bool touching, bool inverse) const;
|
||||
RegionDelegate *selected_interacting_generic (const Edges &other, bool inverse) const;
|
||||
|
||||
|
|
|
|||
|
|
@ -675,7 +675,7 @@ public:
|
|||
*/
|
||||
EdgePairs width_check (db::Coord d, bool whole_edges = false, metrics_type metrics = db::Euclidian, double ignore_angle = 90, distance_type min_projection = 0, distance_type max_projection = std::numeric_limits<distance_type>::max ()) const
|
||||
{
|
||||
return mp_delegate->width_check (d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
return EdgePairs (mp_delegate->width_check (d, whole_edges, metrics, ignore_angle, min_projection, max_projection));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -690,7 +690,7 @@ public:
|
|||
*/
|
||||
EdgePairs space_check (db::Coord d, bool whole_edges = false, metrics_type metrics = db::Euclidian, double ignore_angle = 90, distance_type min_projection = 0, distance_type max_projection = std::numeric_limits<distance_type>::max ()) const
|
||||
{
|
||||
return mp_delegate->space_check (d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
return EdgePairs (mp_delegate->space_check (d, whole_edges, metrics, ignore_angle, min_projection, max_projection));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -708,7 +708,7 @@ public:
|
|||
*/
|
||||
EdgePairs enclosing_check (const Edges &other, db::Coord d, bool whole_edges = false, metrics_type metrics = db::Euclidian, double ignore_angle = 90, distance_type min_projection = 0, distance_type max_projection = std::numeric_limits<distance_type>::max ()) const
|
||||
{
|
||||
return mp_delegate->enclosing_check (other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
return EdgePairs (mp_delegate->enclosing_check (other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -726,7 +726,7 @@ public:
|
|||
*/
|
||||
EdgePairs overlap_check (const Edges &other, db::Coord d, bool whole_edges = false, metrics_type metrics = db::Euclidian, double ignore_angle = 90, distance_type min_projection = 0, distance_type max_projection = std::numeric_limits<distance_type>::max ()) const
|
||||
{
|
||||
return mp_delegate->overlap_check (other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
return EdgePairs (mp_delegate->overlap_check (other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -744,7 +744,7 @@ public:
|
|||
*/
|
||||
EdgePairs separation_check (const Edges &other, db::Coord d, bool whole_edges = false, metrics_type metrics = db::Euclidian, double ignore_angle = 90, distance_type min_projection = 0, distance_type max_projection = std::numeric_limits<distance_type>::max ()) const
|
||||
{
|
||||
return mp_delegate->separation_check (other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
return EdgePairs (mp_delegate->separation_check (other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -762,7 +762,7 @@ public:
|
|||
*/
|
||||
EdgePairs inside_check (const Edges &other, db::Coord d, bool whole_edges = false, metrics_type metrics = db::Euclidian, double ignore_angle = 90, distance_type min_projection = 0, distance_type max_projection = std::numeric_limits<distance_type>::max ()) const
|
||||
{
|
||||
return mp_delegate->inside_check (other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
return EdgePairs (mp_delegate->inside_check (other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -240,12 +240,12 @@ public:
|
|||
virtual distance_type length (const db::Box &box) const = 0;
|
||||
virtual Box bbox () const = 0;
|
||||
|
||||
virtual EdgePairs width_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairs space_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairs enclosing_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairs overlap_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairs separation_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairs inside_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairsDelegate *width_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairsDelegate *space_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairsDelegate *enclosing_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairsDelegate *overlap_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairsDelegate *separation_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairsDelegate *inside_check (const Edges &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
|
||||
virtual EdgesDelegate *filter_in_place (const EdgeFilterBase &filter) = 0;
|
||||
virtual EdgesDelegate *filtered (const EdgeFilterBase &filter) const = 0;
|
||||
|
|
|
|||
|
|
@ -72,6 +72,42 @@ EmptyEdges::processed_to_polygons (const EdgeToPolygonProcessorBase &) const
|
|||
return new EmptyRegion ();
|
||||
}
|
||||
|
||||
EdgePairsDelegate *
|
||||
EmptyEdges::width_check (db::Coord, bool, metrics_type, double, distance_type, distance_type) const
|
||||
{
|
||||
return new EmptyEdgePairs ();
|
||||
}
|
||||
|
||||
EdgePairsDelegate *
|
||||
EmptyEdges::space_check (db::Coord, bool, metrics_type, double, distance_type, distance_type) const
|
||||
{
|
||||
return new EmptyEdgePairs ();
|
||||
}
|
||||
|
||||
EdgePairsDelegate *
|
||||
EmptyEdges::enclosing_check (const Edges &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const
|
||||
{
|
||||
return new EmptyEdgePairs ();
|
||||
}
|
||||
|
||||
EdgePairsDelegate *
|
||||
EmptyEdges::overlap_check (const Edges &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const
|
||||
{
|
||||
return new EmptyEdgePairs ();
|
||||
}
|
||||
|
||||
EdgePairsDelegate *
|
||||
EmptyEdges::separation_check (const Edges &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const
|
||||
{
|
||||
return new EmptyEdgePairs ();
|
||||
}
|
||||
|
||||
EdgePairsDelegate *
|
||||
EmptyEdges::inside_check (const Edges &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const
|
||||
{
|
||||
return new EmptyEdgePairs ();
|
||||
}
|
||||
|
||||
EdgesDelegate *
|
||||
EmptyEdges::add_in_place (const Edges &other)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -56,12 +56,12 @@ public:
|
|||
virtual distance_type length (const db::Box &) const { return 0; }
|
||||
virtual Box bbox () const { return db::Box (); }
|
||||
|
||||
virtual EdgePairs width_check (db::Coord, bool, metrics_type, double, distance_type, distance_type) const { return EdgePairs (); }
|
||||
virtual EdgePairs space_check (db::Coord, bool, metrics_type, double, distance_type, distance_type) const { return EdgePairs (); }
|
||||
virtual EdgePairs enclosing_check (const Edges &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const { return EdgePairs (); }
|
||||
virtual EdgePairs overlap_check (const Edges &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const { return EdgePairs (); }
|
||||
virtual EdgePairs separation_check (const Edges &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const { return EdgePairs (); }
|
||||
virtual EdgePairs inside_check (const Edges &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const { return EdgePairs (); }
|
||||
virtual EdgePairsDelegate *width_check (db::Coord, bool, metrics_type, double, distance_type, distance_type) const;
|
||||
virtual EdgePairsDelegate *space_check (db::Coord, bool, metrics_type, double, distance_type, distance_type) const;
|
||||
virtual EdgePairsDelegate *enclosing_check (const Edges &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const;
|
||||
virtual EdgePairsDelegate *overlap_check (const Edges &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const;
|
||||
virtual EdgePairsDelegate *separation_check (const Edges &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const;
|
||||
virtual EdgePairsDelegate *inside_check (const Edges &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const;
|
||||
|
||||
virtual EdgesDelegate *filter_in_place (const EdgeFilterBase &) { return this; }
|
||||
virtual EdgesDelegate *filtered (const EdgeFilterBase &) const { return new EmptyEdges (); }
|
||||
|
|
|
|||
|
|
@ -96,6 +96,72 @@ EmptyRegion::processed_to_edge_pairs (const PolygonToEdgePairProcessorBase &) co
|
|||
return new EmptyEdgePairs ();
|
||||
}
|
||||
|
||||
EdgePairsDelegate *
|
||||
EmptyRegion::width_check (db::Coord, bool, metrics_type, double, distance_type, distance_type) const
|
||||
{
|
||||
return new EmptyEdgePairs ();
|
||||
}
|
||||
|
||||
EdgePairsDelegate *
|
||||
EmptyRegion::space_check (db::Coord, bool, metrics_type, double, distance_type, distance_type) const
|
||||
{
|
||||
return new EmptyEdgePairs ();
|
||||
}
|
||||
|
||||
EdgePairsDelegate *
|
||||
EmptyRegion::isolated_check (db::Coord, bool, metrics_type, double, distance_type, distance_type) const
|
||||
{
|
||||
return new EmptyEdgePairs ();
|
||||
}
|
||||
|
||||
EdgePairsDelegate *
|
||||
EmptyRegion::notch_check (db::Coord, bool, metrics_type, double, distance_type, distance_type) const
|
||||
{
|
||||
return new EmptyEdgePairs ();
|
||||
}
|
||||
|
||||
EdgePairsDelegate *
|
||||
EmptyRegion::enclosing_check (const Region &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const
|
||||
{
|
||||
return new EmptyEdgePairs ();
|
||||
}
|
||||
|
||||
EdgePairsDelegate *
|
||||
EmptyRegion::overlap_check (const Region &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const
|
||||
{
|
||||
return new EmptyEdgePairs ();
|
||||
}
|
||||
|
||||
EdgePairsDelegate *
|
||||
EmptyRegion::separation_check (const Region &, db::Coord, bool , metrics_type, double, distance_type, distance_type) const
|
||||
{
|
||||
return new EmptyEdgePairs ();
|
||||
}
|
||||
|
||||
EdgePairsDelegate *
|
||||
EmptyRegion::inside_check (const Region &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const
|
||||
{
|
||||
return new EmptyEdgePairs ();
|
||||
}
|
||||
|
||||
EdgePairsDelegate *
|
||||
EmptyRegion::grid_check (db::Coord, db::Coord) const
|
||||
{
|
||||
return new EmptyEdgePairs ();
|
||||
}
|
||||
|
||||
EdgePairsDelegate *
|
||||
EmptyRegion::angle_check (double, double, bool) const
|
||||
{
|
||||
return new EmptyEdgePairs ();
|
||||
}
|
||||
|
||||
EdgesDelegate *
|
||||
EmptyRegion::edges (const EdgeFilterBase *) const
|
||||
{
|
||||
return new EmptyEdges ();
|
||||
}
|
||||
|
||||
bool
|
||||
EmptyRegion::equals (const Region &other) const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -59,21 +59,21 @@ public:
|
|||
|
||||
virtual Box bbox () const { return Box (); }
|
||||
|
||||
virtual EdgePairs width_check (db::Coord, bool, metrics_type, double, distance_type, distance_type) const { return EdgePairs (); }
|
||||
virtual EdgePairs space_check (db::Coord, bool, metrics_type, double, distance_type, distance_type) const { return EdgePairs (); }
|
||||
virtual EdgePairs isolated_check (db::Coord, bool, metrics_type, double, distance_type, distance_type) const { return EdgePairs (); }
|
||||
virtual EdgePairs notch_check (db::Coord, bool, metrics_type, double, distance_type, distance_type) const { return EdgePairs (); }
|
||||
virtual EdgePairs enclosing_check (const Region &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const { return EdgePairs (); }
|
||||
virtual EdgePairs overlap_check (const Region &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const { return EdgePairs (); }
|
||||
virtual EdgePairs separation_check (const Region &, db::Coord, bool , metrics_type, double, distance_type, distance_type) const { return EdgePairs (); }
|
||||
virtual EdgePairs inside_check (const Region &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const { return EdgePairs (); }
|
||||
virtual EdgePairs grid_check (db::Coord, db::Coord) const { return EdgePairs (); }
|
||||
virtual EdgePairs angle_check (double, double, bool) const { return EdgePairs (); }
|
||||
virtual EdgePairsDelegate *width_check (db::Coord, bool, metrics_type, double, distance_type, distance_type) const;
|
||||
virtual EdgePairsDelegate *space_check (db::Coord, bool, metrics_type, double, distance_type, distance_type) const;
|
||||
virtual EdgePairsDelegate *isolated_check (db::Coord, bool, metrics_type, double, distance_type, distance_type) const;
|
||||
virtual EdgePairsDelegate *notch_check (db::Coord, bool, metrics_type, double, distance_type, distance_type) const;
|
||||
virtual EdgePairsDelegate *enclosing_check (const Region &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const;
|
||||
virtual EdgePairsDelegate *overlap_check (const Region &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const;
|
||||
virtual EdgePairsDelegate *separation_check (const Region &, db::Coord, bool , metrics_type, double, distance_type, distance_type) const;
|
||||
virtual EdgePairsDelegate *inside_check (const Region &, db::Coord, bool, metrics_type, double, distance_type, distance_type) const;
|
||||
virtual EdgePairsDelegate *grid_check (db::Coord, db::Coord) const;
|
||||
virtual EdgePairsDelegate *angle_check (double, double, bool) const;
|
||||
|
||||
virtual RegionDelegate *snapped_in_place (db::Coord, db::Coord) { return this; }
|
||||
virtual RegionDelegate *snapped (db::Coord, db::Coord) { return new EmptyRegion (); }
|
||||
|
||||
virtual Edges edges (const EdgeFilterBase *) const { return db::Edges (); }
|
||||
virtual EdgesDelegate *edges (const EdgeFilterBase *) const;
|
||||
virtual RegionDelegate *filter_in_place (const PolygonFilterBase &) { return this; }
|
||||
virtual RegionDelegate *filtered (const PolygonFilterBase &) const { return new EmptyRegion (); }
|
||||
virtual RegionDelegate *process_in_place (const PolygonProcessorBase &) { return this; }
|
||||
|
|
|
|||
|
|
@ -711,7 +711,7 @@ public:
|
|||
*/
|
||||
EdgePairs width_check (db::Coord d, bool whole_edges = false, metrics_type metrics = db::Euclidian, double ignore_angle = 90, distance_type min_projection = 0, distance_type max_projection = std::numeric_limits<distance_type>::max ()) const
|
||||
{
|
||||
return mp_delegate->width_check (d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
return EdgePairs (mp_delegate->width_check (d, whole_edges, metrics, ignore_angle, min_projection, max_projection));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -724,7 +724,7 @@ public:
|
|||
*/
|
||||
EdgePairs space_check (db::Coord d, bool whole_edges = false, metrics_type metrics = db::Euclidian, double ignore_angle = 90, distance_type min_projection = 0, distance_type max_projection = std::numeric_limits<distance_type>::max ()) const
|
||||
{
|
||||
return mp_delegate->space_check (d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
return EdgePairs (mp_delegate->space_check (d, whole_edges, metrics, ignore_angle, min_projection, max_projection));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -737,7 +737,7 @@ public:
|
|||
*/
|
||||
EdgePairs isolated_check (db::Coord d, bool whole_edges = false, metrics_type metrics = db::Euclidian, double ignore_angle = 90, distance_type min_projection = 0, distance_type max_projection = std::numeric_limits<distance_type>::max ()) const
|
||||
{
|
||||
return mp_delegate->isolated_check (d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
return EdgePairs (mp_delegate->isolated_check (d, whole_edges, metrics, ignore_angle, min_projection, max_projection));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -750,7 +750,7 @@ public:
|
|||
*/
|
||||
EdgePairs notch_check (db::Coord d, bool whole_edges = false, metrics_type metrics = db::Euclidian, double ignore_angle = 90, distance_type min_projection = 0, distance_type max_projection = std::numeric_limits<distance_type>::max ()) const
|
||||
{
|
||||
return mp_delegate->notch_check (d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
return EdgePairs (mp_delegate->notch_check (d, whole_edges, metrics, ignore_angle, min_projection, max_projection));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -767,7 +767,7 @@ public:
|
|||
*/
|
||||
EdgePairs enclosing_check (const Region &other, db::Coord d, bool whole_edges = false, metrics_type metrics = db::Euclidian, double ignore_angle = 90, distance_type min_projection = 0, distance_type max_projection = std::numeric_limits<distance_type>::max ()) const
|
||||
{
|
||||
return mp_delegate->enclosing_check (other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
return EdgePairs (mp_delegate->enclosing_check (other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -784,7 +784,7 @@ public:
|
|||
*/
|
||||
EdgePairs overlap_check (const Region &other, db::Coord d, bool whole_edges = false, metrics_type metrics = db::Euclidian, double ignore_angle = 90, distance_type min_projection = 0, distance_type max_projection = std::numeric_limits<distance_type>::max ()) const
|
||||
{
|
||||
return mp_delegate->overlap_check (other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
return EdgePairs (mp_delegate->overlap_check (other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -801,7 +801,7 @@ public:
|
|||
*/
|
||||
EdgePairs separation_check (const Region &other, db::Coord d, bool whole_edges = false, metrics_type metrics = db::Euclidian, double ignore_angle = 90, distance_type min_projection = 0, distance_type max_projection = std::numeric_limits<distance_type>::max ()) const
|
||||
{
|
||||
return mp_delegate->separation_check (other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
return EdgePairs (mp_delegate->separation_check (other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -818,7 +818,7 @@ public:
|
|||
*/
|
||||
EdgePairs inside_check (const Region &other, db::Coord d, bool whole_edges = false, metrics_type metrics = db::Euclidian, double ignore_angle = 90, distance_type min_projection = 0, distance_type max_projection = std::numeric_limits<distance_type>::max ()) const
|
||||
{
|
||||
return mp_delegate->inside_check (other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection);
|
||||
return EdgePairs (mp_delegate->inside_check (other, d, whole_edges, metrics, ignore_angle, min_projection, max_projection));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -828,7 +828,7 @@ public:
|
|||
*/
|
||||
Edges edges () const
|
||||
{
|
||||
return mp_delegate->edges (0);
|
||||
return Edges (mp_delegate->edges (0));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -869,7 +869,7 @@ public:
|
|||
*/
|
||||
EdgePairs grid_check (db::Coord gx, db::Coord gy) const
|
||||
{
|
||||
return mp_delegate->grid_check (gx, gy);
|
||||
return EdgePairs (mp_delegate->grid_check (gx, gy));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -881,7 +881,7 @@ public:
|
|||
*/
|
||||
EdgePairs angle_check (double min, double max, bool inverse) const
|
||||
{
|
||||
return mp_delegate->angle_check (min, max, inverse);
|
||||
return EdgePairs (mp_delegate->angle_check (min, max, inverse));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -245,21 +245,21 @@ public:
|
|||
virtual perimeter_type perimeter (const db::Box &box) const = 0;
|
||||
virtual Box bbox () const = 0;
|
||||
|
||||
virtual EdgePairs width_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairs space_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairs isolated_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairs notch_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairs enclosing_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairs overlap_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairs separation_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairs inside_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairs grid_check (db::Coord gx, db::Coord gy) const = 0;
|
||||
virtual EdgePairs angle_check (double min, double max, bool inverse) const = 0;
|
||||
virtual EdgePairsDelegate *width_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairsDelegate *space_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairsDelegate *isolated_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairsDelegate *notch_check (db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairsDelegate *enclosing_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairsDelegate *overlap_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairsDelegate *separation_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairsDelegate *inside_check (const Region &other, db::Coord d, bool whole_edges, metrics_type metrics, double ignore_angle, distance_type min_projection, distance_type max_projection) const = 0;
|
||||
virtual EdgePairsDelegate *grid_check (db::Coord gx, db::Coord gy) const = 0;
|
||||
virtual EdgePairsDelegate *angle_check (double min, double max, bool inverse) const = 0;
|
||||
|
||||
virtual RegionDelegate *snapped_in_place (db::Coord gx, db::Coord gy) = 0;
|
||||
virtual RegionDelegate *snapped (db::Coord gx, db::Coord gy) = 0;
|
||||
|
||||
virtual Edges edges (const EdgeFilterBase *filter) const = 0;
|
||||
virtual EdgesDelegate *edges (const EdgeFilterBase *filter) const = 0;
|
||||
virtual RegionDelegate *filter_in_place (const PolygonFilterBase &filter) = 0;
|
||||
virtual RegionDelegate *filtered (const PolygonFilterBase &filter) const = 0;
|
||||
virtual RegionDelegate *process_in_place (const PolygonProcessorBase &filter) = 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue