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); }
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; }
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; }
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; }
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 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); }
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); } }
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; } } }
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); }
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; }