Exemple #1
0
 private void EnqueueEdge(GridEdge edge, bool reversedNormal)
 {
     _queuedEdge.Enqueue(new QueuedEdgeInfo {
         Edge = edge, ReversedNormal = reversedNormal
     });
     _queuedEdgeSet.Add(edge.GetEdgeLong(_size));
 }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
 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);
             }
         }
     }
 }