public static EdgePair Create() { var pair = new MeshUtils.EdgePair(); pair._e = MeshUtils.Edge.Create(); pair._e._pair = pair; pair._eSym = MeshUtils.Edge.Create(); pair._eSym._pair = pair; return pair; }
public override void Reset() { MeshUtils.Face f = _fHead._next; while (true) { MeshUtils.Face fNext = f._next; f.Free(); if (f == _fHead) { break; } f = fNext; } MeshUtils.Vertex v = _vHead._next; while (true) { MeshUtils.Vertex vNext = v._next; v.Free(); if (v == _vHead) { break; } v = vNext; } for (int i = 0; i < _allEdgePairs.Count; i++) { MeshUtils.EdgePair pair = _allEdgePairs[i]; MeshUtils.Edge e = pair._e; if (!e.IsReturnedToPool()) // (can be Free in KillEdge) { e.Free(); } MeshUtils.Edge eSym = pair._eSym; if (!eSym.IsReturnedToPool()) // (can be Free in KillEdge) { eSym.Free(); } pair.Free(); } _allEdgePairs.Clear(); _vHead = null; _fHead = null; _eHead = _eHeadSym = null; }
public void Init(IPool pool) { MeshUtils.Vertex v = _vHead = pool.Get <MeshUtils.Vertex>(); MeshUtils.Face f = _fHead = pool.Get <MeshUtils.Face>(); MeshUtils.EdgePair pair = MeshUtils.EdgePair.Create(pool); MeshUtils.Edge e = _eHead = pair._e; MeshUtils.Edge eSym = _eHeadSym = pair._eSym; v._next = v._prev = v; v._anEdge = null; f._next = f._prev = f; f._anEdge = null; f._trail = null; f._marked = false; f._inside = false; e._next = e; e._Sym = eSym; e._Onext = null; e._Lnext = null; e._Org = null; e._Lface = null; e._winding = 0; e._activeRegion = null; eSym._next = eSym; eSym._Sym = e; eSym._Onext = null; eSym._Lnext = null; eSym._Org = null; eSym._Lface = null; eSym._winding = 0; eSym._activeRegion = null; }