载入中...
搜索中...
未找到
eve::procgen::urban 命名空间参考

类

struct  BoundaryPosition
 Where a point sits on the polygon boundary: edge edgeIndex at parameter t in [0,1]. 更多...
 
struct  BoundarySample
 A boundary sample used for field constraints / candidate seeds. 更多...
 
struct  GraphEdge
 Undirected edge of the parcel corner graph. 更多...
 
struct  Parcel
 One parcel: a CCW ring of indices into UrbanLayout::corners. 更多...
 
struct  SplitCandidate
 Candidate splitting lines for a parcel (paper Section 4.1). Each candidate is a polyline from one boundary point to another, strictly inside otherwise, and verified to split the parcel into two simple polygons. 更多...
 
struct  Street
 A street decomposed from the street network graph: consecutive street edges whose included angle is larger than 135° belong to the same street. 更多...
 
class  UrbanGenerator
 Hierarchical co-generation of parcels and streets (paper Section 4) plus the global geometric optimization (paper Section 5). 更多...
 
struct  UrbanLayout
 Structured urban layout produced by the hierarchical co-generation (paper Section 4) plus the geometric optimization (paper Section 5). 更多...
 
struct  UrbanOptions
 All user-facing controls for the urban generator. Defaults follow the paper (λ=0.3/0.5/0.2, γ=0.75/0.25, τ=0.5, I/L-shaped access, cul-de-sac avoidance on). 更多...
 
struct  Vec2
 Minimal 2D vector used by the urban layout algorithms (paper coordinates). 更多...
 

类型定义

using Polygon = std::vector< Vec2 >
 Closed polygon ring, stored CCW, without repeating the first point.
 
using Polyline = std::vector< Vec2 >
 Open polyline (e.g. a streamline candidate or a street centerline).
 

函数

std::vector< SplitCandidate > generateSplitCandidates (const Polygon &poly, int maxCandidates, double minHalfArea)
 Generate candidate streamlines for binary partitioning of poly.
 
double signedArea (const Polygon &poly)
 Return the raw (possibly negative) signed area of a polygon ring.
 
double area (const Polygon &poly)
 Absolute polygon area.
 
double polylineLength (const Polyline &pl)
 Total length of an open polyline.
 
Vec2 centroid (const Polygon &poly)
 Centroid (area-weighted) of a simple polygon.
 
double perimeter (const Polygon &poly)
 Perimeter length of a closed ring.
 
bool ensureCCW (Polygon &poly)
 Ensure the ring is CCW (positive signed area); returns whether it was flipped.
 
void cleanupRing (Polygon &poly, double eps=1e-9)
 Remove consecutive duplicate points (within eps) and points that create zero spikes.
 
bool pointInPolygon (const Vec2 &p, const Polygon &poly)
 Point-in-polygon test (ray casting; boundary counts as inside).
 
bool pointOnSegment (const Vec2 &p, const Vec2 &a, const Vec2 &b, double eps=1e-9)
 True if p lies on segment a-b (within tolerance).
 
bool segmentsIntersect (const Vec2 &a, const Vec2 &b, const Vec2 &c, const Vec2 &d, Vec2 *out)
 True if the open segments a-b and c-d properly cross; out receives the crossing.
 
bool segmentIntersectsPolyline (const Vec2 &a, const Vec2 &b, const Polyline &pl)
 True if a segment crosses any segment of an open polyline (excluding shared endpoints).
 
bool polylineSelfIntersects (const Polyline &pl)
 True if any two non-adjacent segments of the open polyline cross.
 
bool polygonIsSimple (const Polygon &poly)
 Simple polygon test: no self intersections among non-adjacent ring edges.
 
double closestPointOnSegment (const Vec2 &p, const Vec2 &a, const Vec2 &b, Vec2 *out)
 Closest point on segment a-b; returns distance and writes out.
 
Vec2 closestPointOnBoundary (const Polygon &poly, const Vec2 &p, BoundaryPosition *pos)
 Closest point on the polygon boundary; writes edge index + t in [0,1].
 
Vec2 pointAtBoundaryLength (const Polygon &poly, double s, BoundaryPosition *pos)
 Interpolate the boundary point at arc length s in [0, perimeter).
 
std::vector< BoundarySample > sampleBoundary (const Polygon &poly, int count)
 Uniformly sample the polygon boundary (approx. count samples, at least 8). Samples are ordered along the boundary; each stores the tangent angle in radians.
 
double includedAngleDeg (const Vec2 &u, const Vec2 &v)
 Included angle in degrees at the shared vertex between edge u (prev->shared) and v (shared->next), in [0,180].
 
bool isCollinear (const Vec2 &prev, const Vec2 &shared, const Vec2 &next)
 True when two consecutive edges are considered collinear (included angle > 135°).
 
Polygon approximatePolygon (const Polygon &ring)
 Simplify a ring to its approximate polygon: consecutive edges with included angle > 135° are merged into a single side (paper Section 3).
 
double shapeIrregularity (const Polygon &approxRing, double gammaAngle=0.75, double gammaSide=0.25)
 Shape irregularity metric of Eq. (1) over the approximate polygon: I = γ1·(1/N)·Σ(θi−θ̄)² + γ2·(1/(N·l̄²))·Σ(li−l̄)². Smaller is more regular; 0 for an ideal regular polygon.
 
bool splitPolygonByPolyline (const Polygon &poly, const Polyline &split, const BoundaryPosition &posA, const BoundaryPosition &posB, Polygon &outA, Polygon &outB)
 Split a CCW simple polygon by a polyline whose endpoints lie on the boundary and whose interior points are strictly inside the polygon. split goes from boundary point A to boundary point B; the two resulting CCW rings are returned in outA/outB. Returns false on degenerate input. Callers verify area constraints afterwards.
 
bool validSplit (const Polygon &poly, const Polyline &split, double minHalfArea, Polygon *outA, Polygon *outB, double *fracA)
 Validity of a candidate split: both halves simple, positive area, inside the original.
 
bool triangulatePolygon (const Polygon &poly, std::vector< int > &outTriangles)
 Triangulate a simple polygon by ear clipping; returns CCW triangles (3*i..3*i+2).
 
double distanceToSegment (const Vec2 &p, const Vec2 &a, const Vec2 &b)
 Raster helper: does the pixel-center fall within eps of segment a-b?
 
bool parseUrbanOptions (const Params &params, UrbanOptions &opts, std::string &error)
 Parse Procgen Params into urban generator options. Params: land/landPoints, minParcelArea, targetParcels, maxLevels, lambdaSize, lambdaRegu, lambdaAcce, lambdaOrient, gammaAngle, gammaSide, accessThreshold, shortEdgeFactor, streetWidth, streetPattern, culDeSacAfterLevel, orientation, boundaryStreet, boundaryStreetFraction, dijkstraJunctionWeight, optimize, optimizeIterations.
 
bool generateUrbanGrid (const Params &params, Grid2D &out, std::string &error)
 Grid2D rasterization of the urban layout (Semantic::Road/Floor/Wall + parcel detail).
 
bool generateUrbanMesh (const Params &params, MeshBuild &out, std::string &error)
 MeshBuild of parcel blocks + street ribbons (flat or extruded, Y-up).
 
void registerUrbanGenerators (GeneratorRegistry &registry)
 Register "urban.parcels" (Grid2D) and "mesh.urban" (MeshBuild) builtins.
 
void registerUrbanMeshRecipes (MeshRecipeRegistry &registry)
 Registers urban mesh recipes.
 
double cross (const Vec2 &a, const Vec2 &b)
 Cross.
 
double dot (const Vec2 &a, const Vec2 &b)
 Dot.
 
double length (const Vec2 &a)
 Length.
 
double lengthSq (const Vec2 &a)
 Length sq.
 
Vec2 normalize (const Vec2 &a)
 Normalize.
 
Vec2 perpendicular (const Vec2 &a)
 Perpendicular.
 
double distance (const Vec2 &a, const Vec2 &b)
 Distance.
 

类型定义说明

◆ Polygon

using eve::procgen::urban::Polygon = typedef std::vector<Vec2>

Closed polygon ring, stored CCW, without repeating the first point.

在文件 UrbanTypes.h 第 55 行定义.

◆ Polyline

using eve::procgen::urban::Polyline = typedef std::vector<Vec2>

Open polyline (e.g. a streamline candidate or a street centerline).

在文件 UrbanTypes.h 第 57 行定义.

函数说明

◆ approximatePolygon()

EVENGINE_API_DOMAINS Polygon eve::procgen::urban::approximatePolygon ( const Polygon &  ring)

Simplify a ring to its approximate polygon: consecutive edges with included angle > 135° are merged into a single side (paper Section 3).

在文件 UrbanGeometry.cpp 第 277 行定义.

引用了 a, b, c, cleanupRing(), d, isCollinear() , 以及 n.

被这些函数引用 eve::procgen::urban::UrbanGenerator::generate().

◆ area()

EVENGINE_API_DOMAINS double eve::procgen::urban::area ( const Polygon &  poly)

Absolute polygon area.

在文件 UrbanGeometry.cpp 第 46 行定义.

引用了 signedArea().

◆ centroid()

Vec2 eve::procgen::urban::centroid ( const Polygon &  poly)

Centroid (area-weighted) of a simple polygon.

在文件 UrbanGeometry.cpp 第 54 行定义.

引用了 a, c, cross(), n, p , 以及 q.

◆ cleanupRing()

void eve::procgen::urban::cleanupRing ( Polygon &  poly,
double  eps 
)

Remove consecutive duplicate points (within eps) and points that create zero spikes.

在文件 UrbanGeometry.cpp 第 86 行定义.

引用了 a, b, distanceToSegment() , 以及 p.

被这些函数引用 approximatePolygon() , 以及 splitPolygonByPolyline().

◆ closestPointOnBoundary()

EVENGINE_API_DOMAINS Vec2 eve::procgen::urban::closestPointOnBoundary ( const Polygon &  poly,
const Vec2 &  p,
BoundaryPosition *  pos 
)

Closest point on the polygon boundary; writes edge index + t in [0,1].

在文件 UrbanGeometry.cpp 第 189 行定义.

引用了 a, ab, b, best, d, distance, dot(), lengthSq(), n, p, pos, q , 以及 t.

被这些函数引用 validSplit().

◆ closestPointOnSegment()

double eve::procgen::urban::closestPointOnSegment ( const Vec2 &  p,
const Vec2 &  a,
const Vec2 &  b,
Vec2 *  out 
)

Closest point on segment a-b; returns distance and writes out.

在文件 UrbanGeometry.cpp 第 177 行定义.

引用了 a, ab, b, distance, dot(), lengthSq(), p , 以及 t.

被这些函数引用 distanceToSegment().

◆ cross()

double eve::procgen::urban::cross ( const Vec2 &  a,
const Vec2 &  b 
)
inline

Cross.

在文件 UrbanTypes.h 第 36 行定义.

引用了 a , 以及 b.

被这些函数引用 centroid(), segmentsIntersect(), shapeIrregularity(), signedArea() , 以及 triangulatePolygon().

◆ distance()

double eve::procgen::urban::distance ( const Vec2 &  a,
const Vec2 &  b 
)
inline

Distance.

在文件 UrbanTypes.h 第 52 行定义.

引用了 a, b , 以及 length.

◆ distanceToSegment()

double eve::procgen::urban::distanceToSegment ( const Vec2 &  p,
const Vec2 &  a,
const Vec2 &  b 
)

Raster helper: does the pixel-center fall within eps of segment a-b?

在文件 UrbanGeometry.cpp 第 513 行定义.

引用了 a, b, closestPointOnSegment() , 以及 p.

被这些函数引用 cleanupRing() , 以及 generateUrbanGrid().

◆ dot()

double eve::procgen::urban::dot ( const Vec2 &  a,
const Vec2 &  b 
)
inline

Dot.

在文件 UrbanTypes.h 第 38 行定义.

引用了 a , 以及 b.

被这些函数引用 closestPointOnBoundary(), closestPointOnSegment(), generateSplitCandidates(), includedAngleDeg(), length(), lengthSq() , 以及 shapeIrregularity().

◆ ensureCCW()

bool eve::procgen::urban::ensureCCW ( Polygon &  poly)

Ensure the ring is CCW (positive signed area); returns whether it was flipped.

在文件 UrbanGeometry.cpp 第 78 行定义.

引用了 signedArea().

被这些函数引用 parseUrbanOptions() , 以及 splitPolygonByPolyline().

◆ generateSplitCandidates()

std::vector< SplitCandidate > eve::procgen::urban::generateSplitCandidates ( const Polygon &  poly,
int  maxCandidates,
double  minHalfArea 
)

Generate candidate streamlines for binary partitioning of poly.

The paper computes ~20 streamlines following the cross-field approach of Yang et al. 2013: a cross field (two orthogonal directions) is aligned with the parcel boundary and smoothed over the interior; hyperstreamlines are traced from boundary seeds until they re-hit the boundary. We discretize the field on a regular grid. When tracing yields too few usable curves (e.g. very thin parcels), straight chords between boundary samples are added as a fallback so the generator always has candidates.

参数
polyCCW simple parcel polygon.
maxCandidatesnumber of candidates to return (paper: ~20).
minHalfAreaminimum area of each resulting half (fraction check is internal).

在文件 UrbanCrossField.cpp 第 232 行定义.

引用了 a, area, eve::procgen::urban::SplitCandidate::areaFrac, b, c, centroid, distance, dot(), eve::procgen::urban::SplitCandidate::line, normalize(), perimeter(), s, sampleBoundary(), spacing, step, steps, tr, valid , 以及 validSplit().

◆ generateUrbanGrid()

◆ generateUrbanMesh()

◆ includedAngleDeg()

double eve::procgen::urban::includedAngleDeg ( const Vec2 &  u,
const Vec2 &  v 
)

Included angle in degrees at the shared vertex between edge u (prev->shared) and v (shared->next), in [0,180].

在文件 UrbanGeometry.cpp 第 266 行定义.

引用了 c, dot(), normalize(), u , 以及 v.

被这些函数引用 isCollinear().

◆ isCollinear()

bool eve::procgen::urban::isCollinear ( const Vec2 &  prev,
const Vec2 &  shared,
const Vec2 &  next 
)

True when two consecutive edges are considered collinear (included angle > 135°).

在文件 UrbanGeometry.cpp 第 273 行定义.

引用了 includedAngleDeg().

被这些函数引用 approximatePolygon().

◆ length()

double eve::procgen::urban::length ( const Vec2 &  a)
inline

Length.

在文件 UrbanTypes.h 第 40 行定义.

引用了 a , 以及 dot().

◆ lengthSq()

double eve::procgen::urban::lengthSq ( const Vec2 &  a)
inline

Length sq.

在文件 UrbanTypes.h 第 42 行定义.

引用了 a , 以及 dot().

被这些函数引用 closestPointOnBoundary() , 以及 closestPointOnSegment().

◆ normalize()

Vec2 eve::procgen::urban::normalize ( const Vec2 &  a)
inline

Normalize.

在文件 UrbanTypes.h 第 44 行定义.

引用了 a , 以及 length.

被这些函数引用 generateSplitCandidates(), generateUrbanMesh(), includedAngleDeg(), sampleBoundary() , 以及 shapeIrregularity().

◆ parseUrbanOptions()

bool eve::procgen::urban::parseUrbanOptions ( const Params &  params,
UrbanOptions &  opts,
std::string &  error 
)

Parse Procgen Params into urban generator options. Params: land/landPoints, minParcelArea, targetParcels, maxLevels, lambdaSize, lambdaRegu, lambdaAcce, lambdaOrient, gammaAngle, gammaSide, accessThreshold, shortEdgeFactor, streetWidth, streetPattern, culDeSacAfterLevel, orientation, boundaryStreet, boundaryStreetFraction, dijkstraJunctionWeight, optimize, optimizeIterations.

在文件 UrbanOutput.cpp 第 101 行定义.

引用了 eve::procgen::urban::UrbanOptions::accessThreshold, boundary, eve::procgen::urban::UrbanOptions::boundaryStreetFraction, eve::procgen::urban::UrbanOptions::boundaryStreetMode, eve::procgen::urban::UrbanOptions::culDeSacAfterLevel, eve::procgen::urban::UrbanOptions::dijkstraJunctionWeight, ensureCCW(), error, eve::procgen::urban::UrbanOptions::gammaAngle, eve::procgen::urban::UrbanOptions::gammaSide, h, eve::procgen::urban::UrbanOptions::lambdaAcce, eve::procgen::urban::UrbanOptions::lambdaOrient, eve::procgen::urban::UrbanOptions::lambdaRegu, eve::procgen::urban::UrbanOptions::lambdaSize, eve::procgen::urban::UrbanOptions::land, eve::procgen::urban::UrbanOptions::maxLevels, eve::procgen::urban::UrbanOptions::minParcelArea, eve::procgen::urban::UrbanOptions::optClose, eve::procgen::urban::UrbanOptions::optimize, eve::procgen::urban::UrbanOptions::optimizeIterations, eve::procgen::urban::UrbanOptions::optJunc, eve::procgen::urban::UrbanOptions::optRegu, eve::procgen::urban::UrbanOptions::optSide, eve::procgen::urban::UrbanOptions::optStre, eve::procgen::urban::UrbanOptions::orientation, params, pattern, eve::procgen::urban::UrbanOptions::seed, eve::procgen::urban::UrbanOptions::shortEdgeFactor, eve::procgen::urban::UrbanOptions::streetPattern, eve::procgen::urban::UrbanOptions::streetWidth, eve::procgen::urban::UrbanOptions::targetParcels , 以及 w.

被这些函数引用 generateUrbanGrid() , 以及 generateUrbanMesh().

◆ perimeter()

double eve::procgen::urban::perimeter ( const Polygon &  poly)

Perimeter length of a closed ring.

在文件 UrbanGeometry.cpp 第 72 行定义.

引用了 distance , 以及 p.

被这些函数引用 generateSplitCandidates(), pointAtBoundaryLength(), sampleBoundary() , 以及 validSplit().

◆ perpendicular()

Vec2 eve::procgen::urban::perpendicular ( const Vec2 &  a)
inline

Perpendicular.

在文件 UrbanTypes.h 第 50 行定义.

引用了 a , 以及 eve::procgen::urban::Vec2::y.

被这些函数引用 generateUrbanMesh().

◆ pointAtBoundaryLength()

Vec2 eve::procgen::urban::pointAtBoundaryLength ( const Polygon &  poly,
double  s,
BoundaryPosition *  pos 
)

Interpolate the boundary point at arc length s in [0, perimeter).

在文件 UrbanGeometry.cpp 第 219 行定义.

引用了 a, b, distance, f, n, perimeter(), pos, s , 以及 t.

被这些函数引用 sampleBoundary().

◆ pointInPolygon()

bool eve::procgen::urban::pointInPolygon ( const Vec2 &  p,
const Polygon &  poly 
)

Point-in-polygon test (ray casting; boundary counts as inside).

在文件 UrbanGeometry.cpp 第 112 行定义.

引用了 a, b, inside, p , 以及 pointOnSegment().

被这些函数引用 generateUrbanGrid(), triangulatePolygon() , 以及 validSplit().

◆ pointOnSegment()

bool eve::procgen::urban::pointOnSegment ( const Vec2 &  p,
const Vec2 &  a,
const Vec2 &  b,
double  eps 
)

True if p lies on segment a-b (within tolerance).

在文件 UrbanGeometry.cpp 第 125 行定义.

引用了 a, b , 以及 p.

被这些函数引用 pointInPolygon().

◆ polygonIsSimple()

EVENGINE_API_DOMAINS bool eve::procgen::urban::polygonIsSimple ( const Polygon &  poly)

Simple polygon test: no self intersections among non-adjacent ring edges.

在文件 UrbanGeometry.cpp 第 159 行定义.

引用了 a, area, b, hit, n , 以及 segmentsIntersect().

被这些函数引用 splitPolygonByPolyline() , 以及 triangulatePolygon().

◆ polylineLength()

double eve::procgen::urban::polylineLength ( const Polyline &  pl)

Total length of an open polyline.

在文件 UrbanGeometry.cpp 第 48 行定义.

引用了 distance.

◆ polylineSelfIntersects()

bool eve::procgen::urban::polylineSelfIntersects ( const Polyline &  pl)

True if any two non-adjacent segments of the open polyline cross.

在文件 UrbanGeometry.cpp 第 149 行定义.

引用了 hit , 以及 segmentsIntersect().

被这些函数引用 validSplit().

◆ registerUrbanGenerators()

void eve::procgen::urban::registerUrbanGenerators ( GeneratorRegistry &  registry)

Register "urban.parcels" (Grid2D) and "mesh.urban" (MeshBuild) builtins.

在文件 UrbanOutput.cpp 第 382 行定义.

引用了 generateUrbanGrid() , 以及 eve::procgen::GeneratorRegistry::registerAlgorithm().

被这些函数引用 eve::procgen::GeneratorRegistry::registerBuiltins().

◆ registerUrbanMeshRecipes()

void eve::procgen::urban::registerUrbanMeshRecipes ( MeshRecipeRegistry &  registry)

◆ sampleBoundary()

std::vector< BoundarySample > eve::procgen::urban::sampleBoundary ( const Polygon &  poly,
int  count 
)

Uniformly sample the polygon boundary (approx. count samples, at least 8). Samples are ordered along the boundary; each stores the tangent angle in radians.

在文件 UrbanGeometry.cpp 第 247 行定义.

引用了 a, b, count, dir, n, normalize(), p, perimeter(), pointAtBoundaryLength(), pos , 以及 s.

被这些函数引用 generateSplitCandidates().

◆ segmentIntersectsPolyline()

bool eve::procgen::urban::segmentIntersectsPolyline ( const Vec2 &  a,
const Vec2 &  b,
const Polyline &  pl 
)

True if a segment crosses any segment of an open polyline (excluding shared endpoints).

在文件 UrbanGeometry.cpp 第 141 行定义.

引用了 a, b, hit , 以及 segmentsIntersect().

◆ segmentsIntersect()

bool eve::procgen::urban::segmentsIntersect ( const Vec2 &  a,
const Vec2 &  b,
const Vec2 &  c,
const Vec2 &  d,
Vec2 *  out 
)

True if the open segments a-b and c-d properly cross; out receives the crossing.

在文件 UrbanGeometry.cpp 第 127 行定义.

引用了 a, ab, ac, b, c, cross(), d, t , 以及 u.

被这些函数引用 polygonIsSimple(), polylineSelfIntersects() , 以及 segmentIntersectsPolyline().

◆ shapeIrregularity()

EVENGINE_API_DOMAINS double eve::procgen::urban::shapeIrregularity ( const Polygon &  approxRing,
double  gammaAngle,
double  gammaSide 
)

Shape irregularity metric of Eq. (1) over the approximate polygon: I = γ1·(1/N)·Σ(θi−θ̄)² + γ2·(1/(N·l̄²))·Σ(li−l̄)². Smaller is more regular; 0 for an ideal regular polygon.

在文件 UrbanGeometry.cpp 第 314 行定义.

引用了 a, c, cross(), distance, dot(), n, normalize(), sides, u , 以及 v.

被这些函数引用 eve::procgen::urban::UrbanGenerator::generate().

◆ signedArea()

double eve::procgen::urban::signedArea ( const Polygon &  poly)

Return the raw (possibly negative) signed area of a polygon ring.

在文件 UrbanGeometry.cpp 第 34 行定义.

引用了 a, b, cross(), n , 以及 s.

被这些函数引用 area() , 以及 ensureCCW().

◆ splitPolygonByPolyline()

EVENGINE_API_DOMAINS bool eve::procgen::urban::splitPolygonByPolyline ( const Polygon &  poly,
const Polyline &  split,
const BoundaryPosition &  posA,
const BoundaryPosition &  posB,
Polygon &  outA,
Polygon &  outB 
)

Split a CCW simple polygon by a polyline whose endpoints lie on the boundary and whose interior points are strictly inside the polygon. split goes from boundary point A to boundary point B; the two resulting CCW rings are returned in outA/outB. Returns false on degenerate input. Callers verify area constraints afterwards.

在文件 UrbanGeometry.cpp 第 399 行定义.

引用了 cleanupRing(), eve::procgen::urban::BoundaryPosition::edgeIndex, ensureCCW(), p, polygonIsSimple(), split , 以及 eve::procgen::urban::BoundaryPosition::t.

被这些函数引用 validSplit().

◆ triangulatePolygon()

bool eve::procgen::urban::triangulatePolygon ( const Polygon &  poly,
std::vector< int > &  outTriangles 
)

Triangulate a simple polygon by ear clipping; returns CCW triangles (3*i..3*i+2).

在文件 UrbanGeometry.cpp 第 462 行定义.

引用了 a, b, c, cross(), idx, m, n, pointInPolygon(), polygonIsSimple() , 以及 v.

被这些函数引用 generateUrbanMesh().

◆ validSplit()

bool eve::procgen::urban::validSplit ( const Polygon &  poly,
const Polyline &  split,
double  minHalfArea,
Polygon *  outA,
Polygon *  outB,
double *  fracA 
)

Validity of a candidate split: both halves simple, positive area, inside the original.

在文件 UrbanGeometry.cpp 第 425 行定义.

引用了 a, area, b, closestPointOnBoundary(), distance, mid, perimeter(), pointInPolygon(), polylineSelfIntersects(), split , 以及 splitPolygonByPolyline().

被这些函数引用 generateSplitCandidates().