private void MakeFace(int indBaseTr, int inFaceId, TSide fromSide) { arrTris[indBaseTr].faceId = inFaceId; TSide[] trSides = SidesToFind(indBaseTr, fromSide); for (int i = 0; i < trSides.Length; i++) { int indFindTr = FindEmptyTrByEdge(indBaseTr, trSides[i]); if ((indFindTr > -1) && ((arrTris[indBaseTr].normalTr - arrTris[indFindTr].normalTr).sqrMagnitude < planarTolerance)) { MakeFace(indFindTr, inFaceId, trSides[i]); } else { int dblEdge = FindEdgeBySide(edges[inFaceId], trSides[i]); if (dblEdge < 0) { edges[inFaceId].Add(new Edge { indTr = indBaseTr, side = trSides[i], isEmpty = true }); } else { edges[inFaceId].RemoveAt(dblEdge); } } } }
private int FindEdgeBySide(List <Edge> listEdges, TSide side) { int res = -1; for (int i = 0; i < listEdges.Count; i++) { if (side.Equal(listEdges[i].side)) { res = i; break; } } return(res); }
private int FindEmptyTrByEdge(int indBaseTr, TSide side) { int res = -1; for (int i = 0; i < arrTris.Length; i++) { if ((i != indBaseTr) && (arrTris[i].faceId == -1)) { if (side.Equal(arrTris[i].indA, arrTris[i].indB) || side.Equal(arrTris[i].indB, arrTris[i].indC) || side.Equal(arrTris[i].indC, arrTris[i].indA)) { res = i; break; } } } return(res); }
private TSide[] SidesToFind(int indTr, TSide fromSide) { TSide[] res; if (fromSide == null) { res = new TSide[3] { new TSide { a = arrTris[indTr].indA, b = arrTris[indTr].indB }, new TSide { a = arrTris[indTr].indB, b = arrTris[indTr].indC }, new TSide { a = arrTris[indTr].indC, b = arrTris[indTr].indA } }; } else { res = new TSide[2]; if (fromSide.Equal(arrTris[indTr].indA, arrTris[indTr].indB)) { res = new TSide[2] { new TSide { a = arrTris[indTr].indB, b = arrTris[indTr].indC }, new TSide { a = arrTris[indTr].indC, b = arrTris[indTr].indA } }; } if (fromSide.Equal(arrTris[indTr].indB, arrTris[indTr].indC)) { res = new TSide[2] { new TSide { a = arrTris[indTr].indA, b = arrTris[indTr].indB }, new TSide { a = arrTris[indTr].indC, b = arrTris[indTr].indA } }; } if (fromSide.Equal(arrTris[indTr].indC, arrTris[indTr].indA)) { res = new TSide[2] { new TSide { a = arrTris[indTr].indA, b = arrTris[indTr].indB }, new TSide { a = arrTris[indTr].indB, b = arrTris[indTr].indC } }; } } return(res); }
public bool Equal(TSide inSide) { return(((a == inSide.a) && (b == inSide.b)) || ((a == inSide.b) && (b == inSide.a))); }
public Matrix4 Projection(TSide side) { return(_projection[side == TSide.Left ? 0 : 1]); }
public Matrix4 View(TSide side) { return(_views[side == TSide.Left ? 0 : 1]); }