CellData Class Reference

#include <celldata.h>

Detailed Description

CellData struct is a datacontainer that represents a single Voronoi Cell.

Public Member Functions

 MAXON_DISALLOW_COPY_AND_ASSIGN (CellData)
 
 CellData ()=default
 
 CellData (CellData &&src)=default
 
 MAXON_OPERATOR_MOVE_ASSIGNMENT (CellData)
 
 ~CellData ()=default
 
Result< void > CopyFrom (const CellData &src, COLLECTION_RESIZE_FLAGS resizeFlags=COLLECTION_RESIZE_FLAGS::FIT_TO_SIZE)
 
void Reset ()
 
void Flush ()
 
Result< BoolScaleCell (Float scaleValue)
 
Result< BoolFixGeometry ()
 
BaseArray< Vector > & GetVertices ()
 
BaseArray< CellEdge > & GetEdges ()
 
BaseArray< Int > & GetFaces ()
 
BaseArray< Int32 > & GetAdjacentCells ()
 
const BaseArray< Vector > & GetVertices () const
 
const BaseArray< CellEdge > & GetEdges () const
 
const BaseArray< Int > & GetFaces () const
 
const BaseArray< Int32 > & GetAdjacentCells () const
 
Bool IsComplex () const
 
Bool TestPointWithCell (const Vector &point) const
 
Result< void > MergeCells (const BaseArray< Int > &thisCellFaces, const CellData &neighbourCell, const BaseArray< Int > &otherCellFaces)
 
Result< void > FuseCells (Int thisCellIndex, CellData &neighbourCell, Int otherCellIndex)
 
Vector CreateCellFaceNormal (Int faceIndex) const
 
Result< void > AddCellData (const CellData &otherCell)
 
Range< VectorGetBoundingBox () const
 

Private Member Functions

void MarkAllUsedPoints (BaseArray< Int > &pointUseless, Int mark=NOTOK)
 
void MarkAllDoublePoints (BaseArray< Int > &pointUseless, Bool &pointRemoved, Float epsilonOverride=0.0)
 
Result< BoolMarkAllColinearPoints (BaseArray< Int > &pointUseless, Bool &pointRemoved, Float epsilonOverride=0.0)
 
Result< BoolMarkAllUselessPoints (BaseArray< Int > &pointUseless, Bool &pointRemoved)
 
Result< BoolReCreateCellWithOnlyUsefulPoints (BaseArray< Int > &pointUseless)
 
Result< void > CalcAllFaceNormals (BaseArray< Vector > &faceNormals)
 
Bool SetupReverseEdges ()
 
Result< void > CleanupUnusedPoints ()
 
Bool TestCurrentDataStructure (BaseArray< Char > &faceRemoved)
 
Result< void > ExpandCellByValue (const BaseArray< Vector > &planeNormals, const BaseArray< Int32 > &edgeToFaceBelonging, Float offset, BaseArray< Vector > &pointDisplacements)
 
Result< BoolShrinkCellByValue (const BaseArray< Vector > &planeNormals, Float offset)
 
Result< BoolCutCellOnPlane (const Pair< Vector, Vector > &plane, Int32 planeNeighborIndex=NOTOK)
 
Result< BoolCutFaceOnPlane (Int faceIndex, const Pair< Vector, Vector > &plane, const BaseArray< Float > &pointToCutPlaneDistance, const BaseArray< Int > &edgeIntesection, const BaseArray< Int > &pointTranslateMap, BaseArray< CellEdge > &newEdges, BaseArray< CellEdge > &newFaceEdges)
 
Result< BoolProcessInsideFaceAndAddToEdges (const BaseArray< CellEdge > &newFaceEdges, Int pointCount, BaseArray< CellEdge > &newEdges)
 
Result< IntIntersectEdgeOnPlane (const Pair< Vector, Vector > &planeBaseArray, Int edgeIndex, BaseArray< Vector > &newPoints)
 
Result< void > MergePointsInCutData (BaseArray< Vector > &newPoints, BaseArray< CellEdge > &newEdges, BaseArray< Int > &newFaces, BaseArray< CellEdge > &newFaceEdges)
 
Result< void > RemoveIsolatedPoints ()
 
Result< void > FusePoints (BaseArray< Int > &affectedPoints)
 
Result< void > RemoveFace (Int faceIndex, BaseArray< Int > &affectedPoints)
 

Private Attributes

BaseArray< Int_verticesPreIndex
 
BaseArray< Vector_vertices
 
BaseArray< CellEdge_edges
 
BaseArray< Int_faces
 
BaseArray< Int32_adjacentCell
 
Bool _isComplex
 

Friends

class Voronoi3DImpl
 

Constructor & Destructor Documentation

◆ CellData() [1/2]

CellData ( )
default

◆ CellData() [2/2]

CellData ( CellData &&  src)
default

◆ ~CellData()

~CellData ( )
default

Member Function Documentation

◆ MAXON_DISALLOW_COPY_AND_ASSIGN()

MAXON_DISALLOW_COPY_AND_ASSIGN ( CellData  )

◆ MAXON_OPERATOR_MOVE_ASSIGNMENT()

MAXON_OPERATOR_MOVE_ASSIGNMENT ( CellData  )

◆ CopyFrom()

Result<void> CopyFrom ( const CellData src,
COLLECTION_RESIZE_FLAGS  resizeFlags = COLLECTION_RESIZE_FLAGS::FIT_TO_SIZE 
)

Copies the contents of src into this object.

Parameters
[in]srcThe object to copy from.
[in]resizeFlagsResize flag for collections.
Returns
OK on success.

◆ Reset()

void Reset ( )

Resets this cell to an empty cell.

◆ Flush()

void Flush ( )

Resets this cell to an empty cell (keeps memory).

◆ ScaleCell()

Result<Bool> ScaleCell ( Float  scaleValue)

Scales the current cell by a specific value.

Parameters
[in]scaleValuethe amout the cell will be scaled by.
Returns
if the scaling succeded.

◆ FixGeometry()

Result<Bool> FixGeometry ( )

This cell checks the current cell data structure and optimizes it.

Returns
true if everything worked out, otherwise false.

◆ GetVertices() [1/2]

BaseArray<Vector>& GetVertices ( )

Gets the vertex list of this cell (writable).

Returns
Reference to vertex array.

◆ GetEdges() [1/2]

BaseArray<CellEdge>& GetEdges ( )

Gets the edge list of this cell (writable).

Returns
Reference to edge array.

◆ GetFaces() [1/2]

BaseArray<Int>& GetFaces ( )

Gets the face list of this cell (writable).

Returns
Reference to face array.

◆ GetAdjacentCells() [1/2]

BaseArray<Int32>& GetAdjacentCells ( )

Gets the adjacent cell list of this cell (writable).

Returns
Reference to the adjacent cell array.

◆ GetVertices() [2/2]

const BaseArray<Vector>& GetVertices ( ) const

Gets the vertex list of this cell (not writable).

Returns
Constant reference to vertex array.

◆ GetEdges() [2/2]

const BaseArray<CellEdge>& GetEdges ( ) const

Gets the edge list of this cell (not writable).

Returns
Constant reference to edge array.

◆ GetFaces() [2/2]

const BaseArray<Int>& GetFaces ( ) const

Gets the face list of this cell (not writable).

Returns
Constant reference to face array.

◆ GetAdjacentCells() [2/2]

const BaseArray<Int32>& GetAdjacentCells ( ) const

Gets the adjacent cell list of this cell (not writable).

Returns
Constant reference to adjacent cell array.

◆ IsComplex()

Bool IsComplex ( ) const

Returns if this cell is complex (most likely not convex)

Returns
Reference to face array.

◆ TestPointWithCell()

Bool TestPointWithCell ( const Vector point) const

Tests if a passed point is inside of the cell.

Parameters
[in]pointPoint to test if it is inside.
Returns
True if point is inside cell, otherwise false.

◆ MergeCells()

Result<void> MergeCells ( const BaseArray< Int > &  thisCellFaces,
const CellData neighbourCell,
const BaseArray< Int > &  otherCellFaces 
)

Merges another cell into this one.

Parameters
[in]thisCellFacesThe faces of this cell that should be removed.
[in]neighbourCellThe other cell to fuse into this one.
[in]otherCellFacesThe faces of the other cell to remove.
Returns
OK on success.

◆ FuseCells()

Result<void> FuseCells ( Int  thisCellIndex,
CellData neighbourCell,
Int  otherCellIndex 
)

Fuses another cell into this one. The wall between the cells is removed if they are neighbors.

Parameters
[in]thisCellIndexThe external index of this cell.
[in]neighbourCellThe neighbor cell that should be fused.
[in]otherCellIndexThe external index of the neighbor cell.
Returns
OK on success.

◆ CreateCellFaceNormal()

Vector CreateCellFaceNormal ( Int  faceIndex) const

Calculates the Normal of a pointloop face of the cell.

Parameters
[in]faceIndexThe index of the cell to calculate the normal for.
Returns
The normal of the face.

◆ AddCellData()

Result<void> AddCellData ( const CellData otherCell)

Adds the data of a different cell to this one. Indices are translated.

Parameters
[in]otherCellThe other cell whose data should be added
Returns
OK on success.

◆ GetBoundingBox()

Range<Vector> GetBoundingBox ( ) const

Calculates and returns the Axis Aligned Bounding Box of the cell.

Returns
The Bounding Box of the cell

◆ MarkAllUsedPoints()

void MarkAllUsedPoints ( BaseArray< Int > &  pointUseless,
Int  mark = NOTOK 
)
private

◆ MarkAllDoublePoints()

void MarkAllDoublePoints ( BaseArray< Int > &  pointUseless,
Bool pointRemoved,
Float  epsilonOverride = 0.0 
)
private

◆ MarkAllColinearPoints()

Result<Bool> MarkAllColinearPoints ( BaseArray< Int > &  pointUseless,
Bool pointRemoved,
Float  epsilonOverride = 0.0 
)
private

◆ MarkAllUselessPoints()

Result<Bool> MarkAllUselessPoints ( BaseArray< Int > &  pointUseless,
Bool pointRemoved 
)
private

◆ ReCreateCellWithOnlyUsefulPoints()

Result<Bool> ReCreateCellWithOnlyUsefulPoints ( BaseArray< Int > &  pointUseless)
private

◆ CalcAllFaceNormals()

Result<void> CalcAllFaceNormals ( BaseArray< Vector > &  faceNormals)
private

◆ SetupReverseEdges()

Bool SetupReverseEdges ( )
private

◆ CleanupUnusedPoints()

Result<void> CleanupUnusedPoints ( )
private

◆ TestCurrentDataStructure()

Bool TestCurrentDataStructure ( BaseArray< Char > &  faceRemoved)
private

◆ ExpandCellByValue()

Result<void> ExpandCellByValue ( const BaseArray< Vector > &  planeNormals,
const BaseArray< Int32 > &  edgeToFaceBelonging,
Float  offset,
BaseArray< Vector > &  pointDisplacements 
)
private

◆ ShrinkCellByValue()

Result<Bool> ShrinkCellByValue ( const BaseArray< Vector > &  planeNormals,
Float  offset 
)
private

◆ CutCellOnPlane()

Result<Bool> CutCellOnPlane ( const Pair< Vector, Vector > &  plane,
Int32  planeNeighborIndex = NOTOK 
)
private

◆ CutFaceOnPlane()

Result<Bool> CutFaceOnPlane ( Int  faceIndex,
const Pair< Vector, Vector > &  plane,
const BaseArray< Float > &  pointToCutPlaneDistance,
const BaseArray< Int > &  edgeIntesection,
const BaseArray< Int > &  pointTranslateMap,
BaseArray< CellEdge > &  newEdges,
BaseArray< CellEdge > &  newFaceEdges 
)
private

◆ ProcessInsideFaceAndAddToEdges()

Result<Bool> ProcessInsideFaceAndAddToEdges ( const BaseArray< CellEdge > &  newFaceEdges,
Int  pointCount,
BaseArray< CellEdge > &  newEdges 
)
private

◆ IntersectEdgeOnPlane()

Result<Int> IntersectEdgeOnPlane ( const Pair< Vector, Vector > &  planeBaseArray,
Int  edgeIndex,
BaseArray< Vector > &  newPoints 
)
private

◆ MergePointsInCutData()

Result<void> MergePointsInCutData ( BaseArray< Vector > &  newPoints,
BaseArray< CellEdge > &  newEdges,
BaseArray< Int > &  newFaces,
BaseArray< CellEdge > &  newFaceEdges 
)
private

◆ RemoveIsolatedPoints()

Result<void> RemoveIsolatedPoints ( )
private

◆ FusePoints()

Result<void> FusePoints ( BaseArray< Int > &  affectedPoints)
private

◆ RemoveFace()

Result<void> RemoveFace ( Int  faceIndex,
BaseArray< Int > &  affectedPoints 
)
private

Friends And Related Function Documentation

◆ Voronoi3DImpl

friend class Voronoi3DImpl
friend

Member Data Documentation

◆ _verticesPreIndex

BaseArray<Int> _verticesPreIndex
private

◆ _vertices

BaseArray<Vector> _vertices
private

◆ _edges

BaseArray<CellEdge> _edges
private

◆ _faces

BaseArray<Int> _faces
private

◆ _adjacentCell

BaseArray<Int32> _adjacentCell
private

◆ _isComplex

Bool _isComplex
private