类 | |
| 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 ¶ms, 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 ¶ms, Grid2D &out, std::string &error) |
| Grid2D rasterization of the urban layout (Semantic::Road/Floor/Wall + parcel detail). | |
| bool | generateUrbanMesh (const Params ¶ms, MeshBuild &out, std::string &error) |
| MeshBuild of parcel blocks + street ribbons (flat or extruded, Y-up). | |
| void | registerUrbanGenerators (GeneratorRegistry ®istry) |
| Register "urban.parcels" (Grid2D) and "mesh.urban" (MeshBuild) builtins. | |
| void | registerUrbanMeshRecipes (MeshRecipeRegistry ®istry) |
| 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.
◆ area()
| EVENGINE_API_DOMAINS double eve::procgen::urban::area | ( | const Polygon & | poly | ) |
◆ centroid()
◆ 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 | ||
| ) |
◆ 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()
Cross.
在文件 UrbanTypes.h 第 36 行定义.
被这些函数引用 centroid(), segmentsIntersect(), shapeIrregularity(), signedArea() , 以及 triangulatePolygon().
◆ distance()
◆ distanceToSegment()
Raster helper: does the pixel-center fall within eps of segment a-b?
在文件 UrbanGeometry.cpp 第 513 行定义.
引用了 a, b, closestPointOnSegment() , 以及 p.
被这些函数引用 cleanupRing() , 以及 generateUrbanGrid().
◆ dot()
Dot.
在文件 UrbanTypes.h 第 38 行定义.
被这些函数引用 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.
- 参数
-
poly CCW simple parcel polygon. maxCandidates number of candidates to return (paper: ~20). minHalfArea minimum 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()
| EVENGINE_API_DOMAINS bool eve::procgen::urban::generateUrbanGrid | ( | const Params & | params, |
| Grid2D & | out, | ||
| std::string & | error | ||
| ) |
Grid2D rasterization of the urban layout (Semantic::Road/Floor/Wall + parcel detail).
在文件 UrbanOutput.cpp 第 160 行定义.
引用了 eve::procgen::Grid2D::addObjectAt(), c, centroid, eve::procgen::Grid2D::clearObjects(), distanceToSegment(), error, eve::procgen::Grid2D::fill(), eve::procgen::Semantic::Floor, eve::procgen::urban::UrbanGenerator::generate(), eve::procgen::urban::UrbanOptions::land, layout, eve::procgen::urban::UrbanGenerator::layout(), eve::procgen::urban::UrbanOptions::optimize, ox, oy, p, params, parseUrbanOptions(), pointInPolygon(), eve::procgen::Grid2D::resize(), eve::procgen::Semantic::Road, s, eve::procgen::urban::UrbanOptions::seed, eve::procgen::Grid2D::setCell(), eve::procgen::Grid2D::setDetail(), eve::procgen::Grid2D::setMeta(), eve::procgen::urban::UrbanOptions::streetWidth , 以及 eve::procgen::Semantic::Wall.
被这些函数引用 registerUrbanGenerators().
◆ generateUrbanMesh()
| EVENGINE_API_DOMAINS bool eve::procgen::urban::generateUrbanMesh | ( | const Params & | params, |
| MeshBuild & | out, | ||
| std::string & | error | ||
| ) |
MeshBuild of parcel blocks + street ribbons (flat or extruded, Y-up).
在文件 UrbanOutput.cpp 第 246 行定义.
引用了 a, eve::procgen::MeshBuild::addTriangle(), eve::procgen::MeshBuild::addVertex(), b, eve::procgen::MeshBuild::clear(), dir, error, eve::procgen::urban::UrbanGenerator::generate(), eve::procgen::MeshBuild::getVertexCount(), layout, eve::procgen::urban::UrbanGenerator::layout(), m, n, normalize(), nx, ny, nz, p, params, parseUrbanOptions(), perpendicular(), s, eve::procgen::urban::UrbanOptions::seed, eve::procgen::MeshBuild::setMeta(), t, triangulatePolygon(), v , 以及 y.
被这些函数引用 registerUrbanMeshRecipes().
◆ includedAngleDeg()
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()
True when two consecutive edges are considered collinear (included angle > 135°).
在文件 UrbanGeometry.cpp 第 273 行定义.
引用了 includedAngleDeg().
被这些函数引用 approximatePolygon().
◆ length()
|
inline |
◆ lengthSq()
|
inline |
Length sq.
在文件 UrbanTypes.h 第 42 行定义.
被这些函数引用 closestPointOnBoundary() , 以及 closestPointOnSegment().
◆ normalize()
Normalize.
在文件 UrbanTypes.h 第 44 行定义.
被这些函数引用 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 行定义.
被这些函数引用 generateSplitCandidates(), pointAtBoundaryLength(), sampleBoundary() , 以及 validSplit().
◆ perpendicular()
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()
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 行定义.
被这些函数引用 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 | ) |
◆ 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 | ) |
Registers urban mesh recipes.
在文件 UrbanOutput.cpp 第 387 行定义.
引用了 descriptor, eve::procgen::ParamDescriptor::floating(), generateUrbanMesh() , 以及 eve::procgen::MeshRecipeRegistry::registerRecipe().
◆ 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 | ||
| ) |
◆ signedArea()
| double eve::procgen::urban::signedArea | ( | const Polygon & | poly | ) |
Return the raw (possibly negative) signed area of a polygon ring.
在文件 UrbanGeometry.cpp 第 34 行定义.
被这些函数引用 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().