/// <summary> /// Can two faces be connected. /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <param name="dim"></param> /// <returns></returns> public static bool AreConnectable(FaceConnector a, FaceConnector b, int dim) { if (a.HashCode != b.HashCode) { return(false); } var av = a.Vertices; var bv = b.Vertices; return(!av.Where((t, i) => t != bv[i]).Any()); }
/// <summary> /// Get an unused face connector. If none is available, create it. /// </summary> /// <returns></returns> public FaceConnector GetConnector() { if (_connectorStack == null) { return(new FaceConnector(_dimension)); } var ret = _connectorStack; _connectorStack = _connectorStack.Next; ret.Next = null; return(ret); }
/// <summary> /// Store a face connector in the "embedded" linked list. /// </summary> /// <param name="connector"></param> public void DepositConnector(FaceConnector connector) { if (_connectorStack == null) { connector.Next = null; _connectorStack = connector; } else { connector.Next = _connectorStack; _connectorStack = connector; } }
/// <summary> /// Connect two faces. /// </summary> /// <param name="a"></param> /// <param name="b"></param> public static void Connect(FaceConnector a, FaceConnector b) { a.Face.AdjacentFaces[a.EdgeIndex] = b.Face.Index; b.Face.AdjacentFaces[b.EdgeIndex] = a.Face.Index; }