private void EnqueueEdge(GridEdge edge, bool reversedNormal) { _queuedEdge.Enqueue(new QueuedEdgeInfo { Edge = edge, ReversedNormal = reversedNormal }); _queuedEdgeSet.Add(edge.GetEdgeLong(_size)); }
public void AddFace(GridEdge edge, bool reversedNormal) { var grid = edge.Coord; var axis = edge.Axis; int p0 = GetVertex(grid + _axisGridOffsetList[axis * 3 + 0]); int p1 = GetVertex(grid + _axisGridOffsetList[axis * 3 + 1]); int p2 = GetVertex(grid + _axisGridOffsetList[axis * 3 + 2]); int p3 = GetVertex(grid); if (!reversedNormal) { _indices.Add(p0); _indices.Add(p1); _indices.Add(p3); _indices.Add(p0); _indices.Add(p3); _indices.Add(p2); } else { _indices.Add(p0); _indices.Add(p3); _indices.Add(p1); _indices.Add(p0); _indices.Add(p2); _indices.Add(p3); } }
private void EnqueueAdjacent(GridEdge e) { for (var axis = 0; axis < 3; ++axis) { for (var i = 0; i < 4; ++i) { GridEdge newEdge = new GridEdge(e.Coord + _findAdjacentEdgeList[e.Axis * 12 + axis * 4 + i], axis); if (_queuedEdgeSet.Contains(newEdge.GetEdgeLong(_size))) { continue; } var lowVal = _cache.EvaluateAtGrid(newEdge.Low, GridCoordinate.Zero); var highVal = _cache.EvaluateAtGrid(newEdge.High, GridCoordinate.Zero); if (lowVal > 0 && highVal < 0) { EnqueueEdge(newEdge, false); } else if (lowVal < 0 && highVal > 0) { EnqueueEdge(newEdge, true); } } } }