载入中...
搜索中...
未找到
PointSet.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
5
6#include <cstdint>
7#include <string>
8#include <string_view>
9#include <vector>
10
11namespace eve::procgen {
12
13class Grid2D;
14class Heightmap;
15
19 std::uint64_t id = 0;
20
21 float x = 0.f;
22 float y = 0.f;
23 float z = 0.f;
24
25 float normalX = 0.f;
26 float normalY = 1.f;
27 float normalZ = 0.f;
28
29 float pitch = 0.f;
30 float yaw = 0.f;
31 float roll = 0.f;
32 float scaleX = 1.f;
33 float scaleY = 1.f;
34 float scaleZ = 1.f;
35 float density = 1.f;
36 uint32_t seed = 1;
37
38 float boundsMinX = 0.f;
39 float boundsMinY = 0.f;
40 float boundsMinZ = 0.f;
41 float boundsMaxX = 0.f;
42 float boundsMaxY = 0.f;
43 float boundsMaxZ = 0.f;
44
45 float colorR = 1.f;
46 float colorG = 1.f;
47 float colorB = 1.f;
48 float colorA = 1.f;
49 float steepness = 0.5f;
50};
51
60public:
62 int getCount() const;
64 bool empty() const;
66 void clear();
67
69 void reserve(std::size_t count);
71 [[nodiscard]] int appendPoint(ProcgenPoint point);
77 [[nodiscard]] Result<int> appendPointFrom(const PointSet& source, std::size_t sourceIndex);
79 [[nodiscard]] Result<void> clearPointAttributes(std::size_t index);
80
81 int add(float x, float y, float z);
83 void setPosition(int index, float x, float y, float z);
85 float getX(int index) const;
87 float getY(int index) const;
89 float getZ(int index) const;
90
92 void setNormal(int index, float x, float y, float z);
94 float getNormalX(int index) const;
96 float getNormalY(int index) const;
98 float getNormalZ(int index) const;
99
101 void setYaw(int index, float yaw);
103 float getYaw(int index) const;
105 void setRotation(int index, float pitch, float yaw, float roll);
107 float getPitch(int index) const;
109 float getRoll(int index) const;
111 void setScale(int index, float x, float y, float z);
113 float getScaleX(int index) const;
115 float getScaleY(int index) const;
117 float getScaleZ(int index) const;
118
120 void setBounds(int index, float minX, float minY, float minZ, float maxX, float maxY, float maxZ);
122 float getBoundsMinX(int index) const;
124 float getBoundsMinY(int index) const;
126 float getBoundsMinZ(int index) const;
128 float getBoundsMaxX(int index) const;
130 float getBoundsMaxY(int index) const;
132 float getBoundsMaxZ(int index) const;
133
135 void setColor(int index, float red, float green, float blue, float alpha);
137 float getColorR(int index) const;
139 float getColorG(int index) const;
141 float getColorB(int index) const;
143 float getColorA(int index) const;
145 void setSteepness(int index, float steepness);
147 float getSteepness(int index) const;
148
150 void setDensity(int index, float density);
152 float getDensity(int index) const;
154 void setPointSeed(int index, uint32_t seed);
156 uint32_t getPointSeed(int index) const;
158 std::uint64_t getPointId(int index) const;
160 [[nodiscard]] Result<void> trySetPointId(int index, std::uint64_t id);
162 [[nodiscard]] Result<void> assignPointIds(std::uint64_t namespaceId);
163
165 [[nodiscard]] Result<void> trySetFloatAttribute(int index, const std::string& name, float value);
167 void setFloatAttribute(int index, const std::string& name, float value);
169 float getFloatAttribute(int index, const std::string& name, float fallback) const;
171 bool hasFloatAttribute(int index, const std::string& name) const;
173 [[nodiscard]] Result<void> trySetIntAttribute(int index, const std::string& name, std::int64_t value);
175 void setIntAttribute(int index, const std::string& name, std::int64_t value);
177 std::int64_t getIntAttribute(int index, const std::string& name, std::int64_t fallback) const;
179 bool hasIntAttribute(int index, const std::string& name) const;
181 [[nodiscard]] Result<void> trySetBoolAttribute(int index, const std::string& name, bool value);
183 void setBoolAttribute(int index, const std::string& name, bool value);
185 bool getBoolAttribute(int index, const std::string& name, bool fallback) const;
187 bool hasBoolAttribute(int index, const std::string& name) const;
189 [[nodiscard]] Result<void> trySetVectorAttribute(int index, const std::string& name, float x, float y, float z);
191 void setVectorAttribute(int index, const std::string& name, float x, float y, float z);
193 float getVectorAttributeX(int index, const std::string& name, float fallback) const;
195 float getVectorAttributeY(int index, const std::string& name, float fallback) const;
197 float getVectorAttributeZ(int index, const std::string& name, float fallback) const;
199 bool hasVectorAttribute(int index, const std::string& name) const;
201 [[nodiscard]] Result<void> trySetStringAttribute(int index, const std::string& name, const std::string& value);
203 void setStringAttribute(int index, const std::string& name, const std::string& value);
205 std::string getStringAttribute(int index, const std::string& name, const std::string& fallback) const;
207 bool hasStringAttribute(int index, const std::string& name) const;
209 std::string getAttributeType(int index, const std::string& name) const;
210
212 const std::vector<ProcgenPoint>& points() const { return points_; }
214 ProcgenPoint& mutablePoint(std::size_t index);
216 const AttributeTable& attributes() const noexcept { return attributes_; }
221 const AttributeTable& dataAttributes() const noexcept { return dataAttributes_; }
223 AttributeTable& mutableDataAttributes() noexcept { return dataAttributes_; }
228 [[nodiscard]] Result<void> tryRenameAttribute(const std::string& from, const std::string& to);
233 [[nodiscard]] Result<void> tryDeleteAttribute(const std::string& name);
238 [[nodiscard]] Result<void> tryCopyAttribute(const std::string& from, const std::string& to);
239
240private:
241 ProcgenPoint* pointAt(int index);
242 const ProcgenPoint* pointAt(int index) const;
243
244 std::vector<ProcgenPoint> points_;
245 AttributeTable attributes_;
246 AttributeTable dataAttributes_;
247};
248
250EVENGINE_API_DOMAINS uint32_t deriveSeed(uint32_t parent, const std::string& scope);
252EVENGINE_API_DOMAINS std::uint64_t derivePointId(std::uint64_t namespaceId, std::uint64_t ordinal);
253
255EVENGINE_API_DOMAINS PointSet sampleGridPoints(int width, int depth, float spacing, uint32_t seed, float jitter);
257PointSet poissonDiskPoints(int width, int depth, float radius, uint32_t seed, int maxPoints);
259EVENGINE_API_DOMAINS PointSet filterPointHeight(const PointSet& input, float minHeight, float maxHeight);
261PointSet filterPointDensity(const PointSet& input, float minDensity, float maxDensity);
263PointSet filterPointBox(const PointSet& input, float minX, float minY, float minZ, float maxX, float maxY, float maxZ,
264 bool invert);
266PointSet filterPointSlope(const PointSet& input, float minDegrees, float maxDegrees);
268PointSet filterPointsByPolygon(const PointSet& input, const PointSet& polygon, bool invert);
270PointSet filterPointsBySplineDistance(const PointSet& input, const PointSet& controlPoints, float minDistance,
271 float maxDistance);
273PointSet excludePointRadius(const PointSet& input, float x, float z, float radius);
288excludePointsByGridMask(const PointSet& input, const Grid2D& mask, float originX, float originZ, float cellSize,
289 int semantic, float clearance, std::size_t maximumChecks);
291EVENGINE_API_DOMAINS PointSet jitterPointPositions(const PointSet& input, uint32_t seed, float amountX, float amountZ);
293PointSet selfPrunePoints(const PointSet& input, float radius);
295PointSet projectPointsToHeightmap(const PointSet& input, const Heightmap& heightmap, float originX, float originZ,
296 float cellSize, float heightScale);
298PointSet samplePolylinePoints(const PointSet& controlPoints, float spacing, uint32_t seed, float lateralJitter);
300EVENGINE_API_DOMAINS PointSet mergePointSets(const PointSet& first, const PointSet& second);
302EVENGINE_API_DOMAINS PointSet unionPointSets(const PointSet& first, const PointSet& second);
304EVENGINE_API_DOMAINS PointSet intersectPointSets(const PointSet& first, const PointSet& second);
306PointSet differencePointSets(const PointSet& first, const PointSet& second);
308EVENGINE_API_DOMAINS PointSet transformPointSet(const PointSet& input, float translateX, float translateY,
309 float translateZ, float yawDegrees, float scaleX, float scaleY,
310 float scaleZ);
312EVENGINE_API_DOMAINS PointSet transformPointSet3D(const PointSet& input, float translateX, float translateY,
313 float translateZ, float pitchDegrees, float yawDegrees,
314 float rollDegrees, float scaleX, float scaleY, float scaleZ);
316PointSet copyPointsToTargets(const PointSet& source, const PointSet& targets, bool inheritTargetAttributes);
318PointSet remapPointDensity(const PointSet& input, float inputMin, float inputMax, float outputMin, float outputMax,
319 bool clampOutput);
323void ensurePointSetDataRow(PointSet& points);
325[[nodiscard]] bool isPointFloatSelector(std::string_view name) noexcept;
327[[nodiscard]] bool isPointFloatChannel(std::string_view name) noexcept;
329[[nodiscard]] EVENGINE_API_DOMAINS Result<float> readPointFloatChannel(const PointSet& points, int index,
330 std::string_view name, float defaultValue);
332[[nodiscard]] Result<void> writePointFloatChannel(PointSet& points, int index, std::string_view name, float value);
334PointSet mathPointFloatAttribute(const PointSet& input, const std::string& attribute,
335 const std::string& outputAttribute, const std::string& operation, float operand,
336 float defaultValue);
338EVENGINE_API_DOMAINS PointSet filterPointFloatAttribute(const PointSet& input, const std::string& name, float minValue,
339 float maxValue, bool invert);
341EVENGINE_API_DOMAINS PointSet filterPointStringAttribute(const PointSet& input, const std::string& name,
342 const std::string& value, bool invert);
344PointSet filterPointIntAttribute(const PointSet& input, const std::string& name, std::int64_t minValue,
345 std::int64_t maxValue, bool invert);
347PointSet filterPointBoolAttribute(const PointSet& input, const std::string& name, bool value, bool invert);
349[[nodiscard]] Result<PointSet> copyPointAttribute(const PointSet& input, const std::string& source,
350 const std::string& target);
352[[nodiscard]] Result<PointSet> renamePointAttribute(const PointSet& input, const std::string& from,
353 const std::string& to);
355[[nodiscard]] Result<PointSet> deletePointAttribute(const PointSet& input, const std::string& name);
360[[nodiscard]] Result<PointSet> transferPointAttribute(const PointSet& target, const PointSet& source,
361 const std::string& attribute, const std::string& outputAttribute,
362 const std::string& mode);
364PointSet setPointIntAttribute(const PointSet& input, const std::string& attribute, std::int64_t value);
366PointSet setPointBoolAttribute(const PointSet& input, const std::string& attribute, bool value);
368PointSet setPointVectorAttribute(const PointSet& input, const std::string& attribute, float x, float y, float z);
370[[nodiscard]] Result<PointSet> comparePointFloatAttribute(const PointSet& input, const std::string& attribute,
371 const std::string& comparison, float operand,
372 const std::string& outputAttribute, float defaultValue);
374[[nodiscard]] Result<PointSet> selectPointFloatAttribute(const PointSet& input, const std::string& conditionAttribute,
375 const std::string& trueAttribute,
376 const std::string& falseAttribute,
377 const std::string& outputAttribute, float trueDefault,
378 float falseDefault);
380EVENGINE_API_DOMAINS PointSet densityCullPoints(const PointSet& input, uint32_t seed, float multiplier);
387PointSet densityFromNormal(const PointSet& input, float minDegrees, float maxDegrees, float outputMin,
388 float outputMax, bool invert);
394PointSet modifyPointBounds(const PointSet& input, float scaleX, float scaleY, float scaleZ, float padX, float padY,
395 float padZ);
408PointSet assignWeightedMeshAttribute(const PointSet& input, uint32_t seed, const std::string& attribute,
409 const std::string* meshes, const float* weights, int entryCount);
410
412EVENGINE_API_DOMAINS PointSet partitionPointAttribute(const PointSet& input, const std::string& attribute,
413 const std::string& outputAttribute, const std::string& mode);
415EVENGINE_API_DOMAINS PointSet noisePointFloatAttribute(const PointSet& input, const std::string& attribute,
416 uint32_t seed, float frequency, float amplitude, float offset);
418PointSet mathPointIntAttribute(const PointSet& input, const std::string& attribute,
419 const std::string& outputAttribute, const std::string& operation, std::int64_t operand,
420 std::int64_t defaultValue);
422PointSet mathPointVectorAttribute(const PointSet& input, const std::string& attribute,
423 const std::string& outputAttribute, const std::string& operation, float operandX,
424 float operandY, float operandZ, float defaultX, float defaultY, float defaultZ);
427 const std::string& attribute, float value);
429[[nodiscard]] Result<void> setPointDataIntAttribute(PointSet& points, const std::string& attribute, std::int64_t value);
431[[nodiscard]] Result<void> setPointDataStringAttribute(PointSet& points, const std::string& attribute,
432 const std::string& value);
433
434
435} // namespace eve::procgen
LogicalId target
ActionParameterOperation operation
double value
float y
Definition AnimClip.cpp:738
float x
Definition AnimClip.cpp:738
float z
Definition AnimClip.cpp:738
std::string from
int mask
EvpackChunkInput input
Definition Evpack.cpp:170
#define EVENGINE_API_DOMAINS
Definition Export.h:110
std::int32_t second
std::int32_t first
HexCoordinates to
Cell the unit walks towards on this segment.
Definition HexUnits.cpp:64
std::uint32_t width
JobScope scope
size_t offset
std::int32_t parent
std::string name
float radius
std::uint32_t seed
Definition PointSet.cpp:807
std::shared_ptr< const std::vector< glm::vec2 > > points
std::uint32_t count
float weights[3]
int spacing
uint32_t index
const UnitySourceAsset & source
std::uint32_t depth
glm::vec3 point
uint32_t semantic
Definition WfcSimple.cpp:15
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Schema-bearing column store aligned with a PointSet's point rows.
Script-friendly collection of attributed 3D samples.
Definition PointSet.h:59
AttributeTable & mutableDataAttributes() noexcept
Mutably access the @Data domain table; callers must keep rowCount 0 or 1.
Definition PointSet.h:223
const AttributeTable & dataAttributes() const noexcept
Borrow the single-row @Data domain attribute table (graph/set metadata). Row 0 is the authoritative D...
Definition PointSet.h:221
const std::vector< ProcgenPoint > & points() const
Borrow immutable point rows; structural ownership remains with this set.
Definition PointSet.h:212
const AttributeTable & attributes() const noexcept
Borrow the authoritative schema-bearing attribute table.
Definition PointSet.h:216
const char * defaultValue
PointSet samplePolylinePoints(const PointSet &controlPoints, float spacing, uint32_t seed, float lateralJitter)
Sample polyline points.
Definition PointSet.cpp:757
PointSet transformPointSet3D(const PointSet &input, float translateX, float translateY, float translateZ, float pitchDegrees, float yawDegrees, float rollDegrees, float scaleX, float scaleY, float scaleZ)
Apply translation, pitch/yaw/roll rotation and non-uniform scale.
Definition PointSet.cpp:891
PointSet densityFromNormal(const PointSet &input, float minDegrees, float maxDegrees, float outputMin, float outputMax, bool invert)
Remap surface slope (from normals) into density.
PointSet filterPointStringAttribute(const PointSet &input, const std::string &name, const std::string &value, bool invert)
Select points whose named string attribute equals a value.
Result< PointSet > deletePointAttribute(const PointSet &input, const std::string &name)
Delete one metadata column.
PointSet mathPointIntAttribute(const PointSet &input, const std::string &attribute, const std::string &outputAttribute, const std::string &operation, std::int64_t operand, std::int64_t defaultValue)
Apply integer math to an int metadata column.
bool isPointFloatChannel(std::string_view name) noexcept
Return whether name is a valid float channel (builtin selector or metadata name).
EVENGINE_API_DOMAINS Result< float > readPointFloatChannel(const PointSet &points, int index, std::string_view name, float defaultValue)
Read a float metadata column or closed $ point-field selector.
PointSet unionPointSets(const PointSet &first, const PointSet &second)
Stable union by non-zero point id, with legacy position-and-seed fallback.
Definition PointSet.cpp:852
PointSet transformPointSet(const PointSet &input, float translateX, float translateY, float translateZ, float yawDegrees, float scaleX, float scaleY, float scaleZ)
Apply translation, yaw rotation and non-uniform scale to points and their transforms.
Definition PointSet.cpp:886
PointSet filterPointsByPolygon(const PointSet &input, const PointSet &polygon, bool invert)
Filter points by polygon.
Definition PointSet.cpp:638
PointSet filterPointIntAttribute(const PointSet &input, const std::string &name, std::int64_t minValue, std::int64_t maxValue, bool invert)
Select points whose named int attribute lies in an inclusive range.
Result< PointSet > copyPointAttribute(const PointSet &input, const std::string &source, const std::string &target)
Copy one float channel or typed metadata column onto another name.
EVENGINE_API_DOMAINS Result< void > setPointDataFloatAttribute(PointSet &points, const std::string &attribute, float value)
Write a float into the PointSet @Data domain.
Result< PointSet > selectPointFloatAttribute(const PointSet &input, const std::string &conditionAttribute, const std::string &trueAttribute, const std::string &falseAttribute, const std::string &outputAttribute, float trueDefault, float falseDefault)
Select between two float channels using a bool metadata condition.
PointSet filterPointBox(const PointSet &input, float minX, float minY, float minZ, float maxX, float maxY, float maxZ, bool invert)
Filter point box.
Definition PointSet.cpp:606
PointSet filterPointSlope(const PointSet &input, float minDegrees, float maxDegrees)
Filter point slope.
Definition PointSet.cpp:621
PointSet assignWeightedMeshAttribute(const PointSet &input, uint32_t seed, const std::string &attribute, const std::string *meshes, const float *weights, int entryCount)
Deterministically assign a weighted mesh path string attribute.
PointSet projectPointsToHeightmap(const PointSet &input, const Heightmap &heightmap, float originX, float originZ, float cellSize, float heightScale)
Project points to heightmap.
EVENGINE_API_DOMAINS PointSet noisePointFloatAttribute(const PointSet &input, const std::string &attribute, uint32_t seed, float frequency, float amplitude, float offset)
Write deterministic float noise into a metadata attribute.
PointSet mathPointFloatAttribute(const PointSet &input, const std::string &attribute, const std::string &outputAttribute, const std::string &operation, float operand, float defaultValue)
Apply one scalar operation to a float metadata attribute or $ selector.
PointSet poissonDiskPoints(int width, int depth, float radius, uint32_t seed, int maxPoints)
Bridson blue-noise (Poisson disk) samples in a width x depth area (XZ, y=0).
Definition PointSet.cpp:502
PointSet filterPointsBySplineDistance(const PointSet &input, const PointSet &controlPoints, float minDistance, float maxDistance)
Filter points by spline distance.
Definition PointSet.cpp:649
EVENGINE_API_DOMAINS PointSet filterPointFloatAttribute(const PointSet &input, const std::string &name, float minValue, float maxValue, bool invert)
Select points whose named float attribute or $ selector lies in an inclusive range.
PointSet mathPointVectorAttribute(const PointSet &input, const std::string &attribute, const std::string &outputAttribute, const std::string &operation, float operandX, float operandY, float operandZ, float defaultX, float defaultY, float defaultZ)
Apply vector math to a vector metadata column.
PointSet setPointIntAttribute(const PointSet &input, const std::string &attribute, std::int64_t value)
Write a constant int metadata column on every point.
EVENGINE_API_DOMAINS PointSet partitionPointAttribute(const PointSet &input, const std::string &attribute, const std::string &outputAttribute, const std::string &mode)
Assign partition indices from a string/int attribute (mode: value|hash).
void ensurePointSetDataRow(PointSet &points)
Return whether name is a known $-prefixed float point-field selector.
PointSet excludePointRadius(const PointSet &input, float x, float z, float radius)
Exclude point radius.
Definition PointSet.cpp:670
Result< void > setPointDataStringAttribute(PointSet &points, const std::string &attribute, const std::string &value)
Write a string into the PointSet @Data domain.
Result< void > setPointDataIntAttribute(PointSet &points, const std::string &attribute, std::int64_t value)
Write an int into the PointSet @Data domain.
PointSet intersectPointSets(const PointSet &first, const PointSet &second)
Keep first-set points whose stable or legacy identity occurs in the second set.
Definition PointSet.cpp:864
PointSet mergePointSets(const PointSet &first, const PointSet &second)
Concatenate two attributed point collections while preserving order.
Definition PointSet.cpp:795
Result< void > writePointFloatChannel(PointSet &points, int index, std::string_view name, float value)
Write a float metadata column or closed $ point-field selector.
PointSet copyPointsToTargets(const PointSet &source, const PointSet &targets, bool inheritTargetAttributes)
Instantiate source points relative to targets in stable target-major order.
Definition PointSet.cpp:926
PointSet filterPointDensity(const PointSet &input, float minDensity, float maxDensity)
Filter point density.
Definition PointSet.cpp:597
std::uint64_t derivePointId(std::uint64_t namespaceId, std::uint64_t ordinal)
Deterministically derive a non-zero stable point identity.
Definition PointSet.cpp:469
PointSet selfPrunePoints(const PointSet &input, float radius)
Self prune points.
Definition PointSet.cpp:737
PointSet filterPointHeight(const PointSet &input, float minHeight, float maxHeight)
Filter point height.
Definition PointSet.cpp:588
PointSet modifyPointBounds(const PointSet &input, float scaleX, float scaleY, float scaleZ, float padX, float padY, float padZ)
Scale and pad each point's local bounds about its center.
PointSet densityCullPoints(const PointSet &input, uint32_t seed, float multiplier)
Deterministically keep points according to density and a root seed.
Result< PointSet > transferPointAttribute(const PointSet &target, const PointSet &source, const std::string &attribute, const std::string &outputAttribute, const std::string &mode)
Transfer one attribute from source onto target points.
PointSet differencePointSets(const PointSet &first, const PointSet &second)
Remove first-set points whose stable or legacy identity occurs in the second set.
Definition PointSet.cpp:875
PointSet setPointVectorAttribute(const PointSet &input, const std::string &attribute, float x, float y, float z)
Write a constant vector metadata column on every point.
PointSet setPointBoolAttribute(const PointSet &input, const std::string &attribute, bool value)
Write a constant bool metadata column on every point.
uint32_t deriveSeed(uint32_t parent, const std::string &scope)
Stable label-based seed derivation; independent pipeline branches do not perturb each other.
Definition PointSet.cpp:459
PointSet jitterPointPositions(const PointSet &input, uint32_t seed, float amountX, float amountZ)
Jitter point positions.
Definition PointSet.cpp:724
PointSet remapPointDensity(const PointSet &input, float inputMin, float inputMax, float outputMin, float outputMax, bool clampOutput)
Linearly remap point density between ranges with optional output clamping.
PointSet sampleGridPoints(int width, int depth, float spacing, uint32_t seed, float jitter)
Sample grid points.
Definition PointSet.cpp:480
Result< PointSet > renamePointAttribute(const PointSet &input, const std::string &from, const std::string &to)
Rename one metadata column.
Result< PointSet > excludePointsByGridMask(const PointSet &input, const Grid2D &mask, float originX, float originZ, float cellSize, int semantic, float clearance, std::size_t maximumChecks)
Remove points covered by a semantic grid mask plus optional world-space clearance.
Definition PointSet.cpp:682
Result< PointSet > comparePointFloatAttribute(const PointSet &input, const std::string &attribute, const std::string &comparison, float operand, const std::string &outputAttribute, float defaultValue)
Compare a float channel against an operand and write a bool metadata column.
PointSet filterPointBoolAttribute(const PointSet &input, const std::string &name, bool value, bool invert)
Select points whose named bool attribute equals a value.
bool isPointFloatSelector(std::string_view name) noexcept
True when point float selector.
One deterministic sample used by script-first procedural pipelines.
Definition PointSet.h:17