Ejemplo n.º 1
0
        public int TryGetAndRemoveEdgeIndex(ushort iv0, ushort iv1, ref Vector3 posv0, ref Vector3 posv1)
        {
            ProfilerShort.Begin("TryGetAndRemoveEdgeIndex");
            int            retval     = -1;
            InnerEdgeIndex innerIndex = new InnerEdgeIndex(iv0, iv1);

            if (IsInnerEdge(new InnerEdgeIndex(iv1, iv0)))
            {
                if (!m_innerEdges.TryGetValue(innerIndex, out retval))
                {
                    retval = -1;
                }
                else
                {
                    RemoveInnerEdge(retval, innerIndex);
                }
            }
            else
            {
                TryRemoveOuterEdge(ref posv0, ref posv1, ref retval);
            }

            ProfilerShort.End();
            return(retval);
        }
Ejemplo n.º 2
0
        public void PreprocessInnerEdge(ushort a, ushort b)
        {
            InnerEdgeIndex thisEdge  = new InnerEdgeIndex(a, b);
            InnerEdgeIndex otherEdge = new InnerEdgeIndex(b, a);
            int            value;

            if (!m_edgeClassifier.TryGetValue(thisEdge, out value))
            {
                value = 1;
            }
            else
            {
                value += 1;
            }
            m_edgeClassifier[thisEdge] = value;

            if (!m_edgeClassifier.TryGetValue(otherEdge, out value))
            {
                value = -1;
            }
            else
            {
                value -= 1;
            }
            m_edgeClassifier[otherEdge] = value;
        }
Ejemplo n.º 3
0
        public void PreprocessInnerEdge(ushort a, ushort b)
        {
            int            num;
            InnerEdgeIndex key    = new InnerEdgeIndex(a, b);
            InnerEdgeIndex index2 = new InnerEdgeIndex(b, a);

            num = this.m_edgeClassifier.TryGetValue(key, out num) ? (num + 1) : 1;
            this.m_edgeClassifier[key] = num;
            num = this.m_edgeClassifier.TryGetValue(index2, out num) ? (num - 1) : -1;
            this.m_edgeClassifier[index2] = num;
        }
Ejemplo n.º 4
0
        private InnerEdgeIndex RemoveInnerEdge(int formerEdgeIndex, InnerEdgeIndex innerIndex)
        {
            int num;

            if (!this.m_innerMultiedges.TryGetValue(formerEdgeIndex, out num))
            {
                this.m_innerEdges.Remove(innerIndex);
            }
            else
            {
                this.m_innerMultiedges.Remove(formerEdgeIndex);
                this.m_innerEdges[innerIndex] = num;
            }
            return(innerIndex);
        }
        public void PreprocessInnerEdge(short a, short b)
        {
            InnerEdgeIndex thisEdge = new InnerEdgeIndex(a, b);
            InnerEdgeIndex otherEdge = new InnerEdgeIndex(b, a);
            int value;

            if (!m_edgeClassifier.TryGetValue(thisEdge, out value))
                value = 1;
            else
                value += 1;
            m_edgeClassifier[thisEdge] = value;

            if (!m_edgeClassifier.TryGetValue(otherEdge, out value))
                value = -1;
            else
                value -= 1;
            m_edgeClassifier[otherEdge] = value;
        }
Ejemplo n.º 6
0
        private InnerEdgeIndex RemoveInnerEdge(int formerEdgeIndex, InnerEdgeIndex innerIndex)
        {
            ProfilerShort.Begin("RemoveInnerEdge");

            int nextEdgeIndex;

            if (m_innerMultiedges.TryGetValue(formerEdgeIndex, out nextEdgeIndex))
            {
                m_innerMultiedges.Remove(formerEdgeIndex);
                m_innerEdges[innerIndex] = nextEdgeIndex;
            }
            else
            {
                m_innerEdges.Remove(innerIndex);
            }

            ProfilerShort.End();
            return(innerIndex);
        }
Ejemplo n.º 7
0
        public int TryGetAndRemoveEdgeIndex(ushort iv0, ushort iv1, ref Vector3 posv0, ref Vector3 posv1)
        {
            int            edgeIndex = -1;
            InnerEdgeIndex key       = new InnerEdgeIndex(iv0, iv1);

            if (!this.IsInnerEdge(new InnerEdgeIndex(iv1, iv0)))
            {
                this.TryRemoveOuterEdge(ref posv0, ref posv1, ref edgeIndex);
            }
            else if (!this.m_innerEdges.TryGetValue(key, out edgeIndex))
            {
                edgeIndex = -1;
            }
            else
            {
                this.RemoveInnerEdge(edgeIndex, key);
            }
            return(edgeIndex);
        }
Ejemplo n.º 8
0
        public void AddEdgeIndex(ushort iv0, ushort iv1, ref Vector3 posv0, ref Vector3 posv1, int edgeIndex)
        {
            InnerEdgeIndex innerIndex = new InnerEdgeIndex(iv0, iv1);

            if (IsInnerEdge(innerIndex))
            {
                int oldValue;
                if (m_innerEdges.TryGetValue(innerIndex, out oldValue))
                {
                    m_innerMultiedges.Add(edgeIndex, oldValue);
                    m_innerEdges[innerIndex] = edgeIndex;
                }
                else
                {
                    m_innerEdges.Add(innerIndex, edgeIndex);
                }
            }
            else
            {
                AddOuterEdgeIndex(ref posv0, ref posv1, edgeIndex);
            }
        }
Ejemplo n.º 9
0
        public void AddEdgeIndex(ushort iv0, ushort iv1, ref Vector3 posv0, ref Vector3 posv1, int edgeIndex)
        {
            InnerEdgeIndex index = new InnerEdgeIndex(iv0, iv1);

            if (!this.IsInnerEdge(index))
            {
                this.AddOuterEdgeIndex(ref posv0, ref posv1, edgeIndex);
            }
            else
            {
                int num;
                if (!this.m_innerEdges.TryGetValue(index, out num))
                {
                    this.m_innerEdges.Add(index, edgeIndex);
                }
                else
                {
                    this.m_innerMultiedges.Add(edgeIndex, num);
                    this.m_innerEdges[index] = edgeIndex;
                }
            }
        }
Ejemplo n.º 10
0
 private bool IsInnerEdge(InnerEdgeIndex edgeIndex)
 {
     // CH: This seems to be OK indeed. It can be < 0 for non-manifold outer edges
     // Debug.Assert(m_edgeClassifier[edgeIndex] >= 0, "Edge classification in voxel connection helper was < 0. This is probably OK.");
     return(m_edgeClassifier[edgeIndex] == 0);
 }
Ejemplo n.º 11
0
 private bool IsInnerEdge(InnerEdgeIndex edgeIndex) =>
 (this.m_edgeClassifier[edgeIndex] == 0);
        private InnerEdgeIndex RemoveInnerEdge(int formerEdgeIndex, InnerEdgeIndex innerIndex)
        {
            ProfilerShort.Begin("RemoveInnerEdge");

            int nextEdgeIndex;
            if (m_innerMultiedges.TryGetValue(formerEdgeIndex, out nextEdgeIndex))
            {
                m_innerMultiedges.Remove(formerEdgeIndex);
                m_innerEdges[innerIndex] = nextEdgeIndex;
            }
            else
            {
                m_innerEdges.Remove(innerIndex);
            }

            ProfilerShort.End();
            return innerIndex;
        }
 public void AddEdgeIndex(short iv0, short iv1, ref Vector3 posv0, ref Vector3 posv1, int edgeIndex)
 {
     InnerEdgeIndex innerIndex = new InnerEdgeIndex(iv0, iv1);
     if (IsInnerEdge(innerIndex))
     {
         int oldValue;
         if (m_innerEdges.TryGetValue(innerIndex, out oldValue))
         {
             m_innerMultiedges.Add(edgeIndex, oldValue);
             m_innerEdges[innerIndex] = edgeIndex;
         }
         else
         {
             m_innerEdges.Add(innerIndex, edgeIndex);
         }
     }
     else
         AddOuterEdgeIndex(ref posv0, ref posv1, edgeIndex);
 }
        public int TryGetAndRemoveEdgeIndex(short iv0, short iv1, ref Vector3 posv0, ref Vector3 posv1)
        {
            ProfilerShort.Begin("TryGetAndRemoveEdgeIndex");
            int retval = -1;
            InnerEdgeIndex innerIndex = new InnerEdgeIndex(iv0, iv1);
            if (IsInnerEdge(new InnerEdgeIndex(iv1, iv0)))
            {
                if (!m_innerEdges.TryGetValue(innerIndex, out retval))
                    retval = -1;
                else
                    RemoveInnerEdge(retval, innerIndex);
            }
            else
            {
                TryRemoveOuterEdge(ref posv0, ref posv1, ref retval);
            }

            ProfilerShort.End();
            return retval;
        }
 private bool IsInnerEdge(InnerEdgeIndex edgeIndex)
 {
     // CH: This seems to be OK indeed. It can be < 0 for non-manifold outer edges
     // Debug.Assert(m_edgeClassifier[edgeIndex] >= 0, "Edge classification in voxel connection helper was < 0. This is probably OK.");
     return m_edgeClassifier[edgeIndex] == 0;
 }