public void OnUnite() { /*if (IsLowest) * { * if (IsRoot) * return; * * Parents.OnUnite(); * } * else if (IsSecondLowest) * { * HandleOnUnite(); * } * else * { * Face2D secondLowest = FindSecondLowestChild(); * * if (secondLowest != null) * { * secondLowest.OnUnite(); * } * }*/ Face2D lastChild = FindLastSecondLowestChild(); if (lastChild != null) { lastChild.HandleOnUnite(); } }
public static void UnitTest() { Face2D face_0 = new Face2D("0"); Face2D face_0_0 = new Face2D("0_0"); Face2D face_0_1 = new Face2D("0_1"); Face2D face_0_2 = new Face2D("0_2"); face_0.DivideTo(face_0_0, face_0_1, face_0_2); Face2D face_0_0_0 = new Face2D("0_0_0"); Face2D face_0_0_1 = new Face2D("0_0_1"); Face2D face_0_0_2 = new Face2D("0_0_2"); face_0_0.DivideTo(face_0_0_0, face_0_0_1, face_0_0_2); Face2D face_0_2_0 = new Face2D("0_2_0"); Face2D face_0_2_1 = new Face2D("0_2_1"); Face2D face_0_2_2 = new Face2D("0_2_2"); face_0_2.DivideTo(face_0_2_0, face_0_2_1, face_0_2_2); Face2D face_0_2_0_0 = new Face2D("0_2_0_0"); Face2D face_0_2_0_1 = new Face2D("0_2_0_1"); Face2D face_0_2_0_2 = new Face2D("0_2_0_2"); face_0_2_0.DivideTo(face_0_2_0_0, face_0_2_0_1, face_0_2_0_2); Debug.Log(face_0.ToString()); face_0_1.OnUnite(); }
protected Face2D FindSecondLowestChild() { if (IsLowest) { return(null); } foreach (var child in Childern) { if (child.IsLowest) { continue; } if (child.IsSecondLowest) { return(child); } Face2D face = child.FindSecondLowestChild(); if (face != null) { return(face); } } return(null); }
public void AddFaces(Face2D face) { if (Faces.Contains(face)) { throw new InvalidOperationException("Edge already contains face!"); } Faces.Add(face); }
public void RemoveFace(Face2D face) { Faces.Remove(face); _lazyExitedEdges.isValeChanged = true; _lazyAllEdges.isValeChanged = true; _lazyAllPoints.isValeChanged = true; //face.BasicEdges.ForEach(e => e.Faces.Remove(face)); /*_lazyAllEdges.isValeChanged = true; * _lazyAllPoints.isValeChanged = true;*/ }
public Face2D AddFace(Face2D face) { if (Faces.Any(f => f.IsMatchFor(face))) { //throw new InvalidOperationException("There is already such a face in the shape!"); Debug.Log("There is already such a face in the shape!"); return(face); } Faces.Add(face); face.Shape = this; _lazyExitedEdges.isValeChanged = true; _lazyAllEdges.isValeChanged = true; _lazyAllPoints.isValeChanged = true; return(face); }
public void OnDivide() { if (Scale < 0.5f) { return; } if (!IsLowest) { throw new System.Exception("This face has divided!"); } CenterPoint = new Point2D(Center, "Center"); CenterPoint.AddRigidbody(); List <Point2D> division = DivideBasicEdges(); /*Face2D f0 = Shape.AddPoints(division[0], division[1], division[2], division[3], CenterPoint, division[11]); * Face2D f1 = Shape.AddPoints(CenterPoint, division[3], division[4], division[5], division[6], division[7]); * Face2D f2 = Shape.AddPoints(division[10], division[11], CenterPoint, division[7], division[8], division[9]);*/ /*Face2D f0 = Shape.AddPoints(division[11], division[0], division[1], division[2], division[3], CenterPoint); * Face2D f1 = Shape.AddPoints(division[3], division[4], division[5], division[6], division[7], CenterPoint); * Face2D f2 = Shape.AddPoints( division[7], division[8], division[9], division[10], division[11], CenterPoint);*/ Face2D f0 = Shape.AddPoints(division[1], division[2], division[3], division[4], division[5], CenterPoint); Face2D f1 = Shape.AddPoints(division[5], division[6], division[7], division[8], division[9], CenterPoint); Face2D f2 = Shape.AddPoints(division[9], division[10], division[11], division[0], division[1], CenterPoint); f0.Name = Name + "-0"; f1.Name = Name + "-1"; f2.Name = Name + "-2"; Shape.RemoveFace(this); DivideTo(f0, f1, f2); }
protected Face2D FindLastSecondLowestChild() { if (!IsRoot) { return(Root.FindLastSecondLowestChild()); } if (IsLowest) { return(null); } //List<Face2D> allSecondLowestChild = new List<Face2D>(); Face2D result = this; float minScale = Scale; foreach (var child in Childern) { if (child.IsLowest) { continue; } if (child.IsSecondLowest && child.Scale < minScale) { result = child; minScale = child.Scale; } Face2D face = child.FindSecondLowestChild(); if (face != null && face.Scale < minScale) { result = face; minScale = face.Scale; } } return(result); }
public bool IsMatchFor(Face2D face) { return(face.BasicEdges.All(e => BasicEdges.Contains(e))); }