public bool Equals(KtSegments2D other) { if (ReferenceEquals(this, other)) { return(true); } if (this is null || other is null) { return(false); } if (joints.Count != other.joints.Count) { return(false); } var trueForward = true; var trueBackward = true; for (int i = 0; i < joints.Count; i++) { var joint1 = joints[i]; var joint2 = other.joints[i]; var joint3 = other.joints[joints.Count - i - 1]; trueForward &= joint1 == joint2; trueBackward &= joint1 == joint3; if (!trueForward && !trueBackward) { return(false); } } return(trueForward || trueBackward); }
public (KtPolygons.Regions.KtRegion, KtSegments2D) Weld(KtSegments2D segments) { var tempListofJoints = Start == segments.Start ? JointStartToStart(segments) : Start == segments.End ? JointStartToEnd(segments) : End == segments.Start ? JointEndToStart(segments) : End == segments.End ? JointEndToEnd(segments) : null; if (tempListofJoints != null) { if (tempListofJoints.FirstOrDefault() == tempListofJoints.Last()) { return(tempListofJoints.Skip(1).ToList(), null); } return(null, new KtSegments2D(tempListofJoints)); } return(null, null); }
public KtSegments2D Connect(KtSegments2D segments, bool atStart) { if (atStart) { if (Start == segments.Start) { return(new KtSegments2D(JointStartToStart(segments))); } else if (Start == segments.End) { return(new KtSegments2D(JointStartToEnd(segments))); } } else if (End == segments.Start) { return(new KtSegments2D(JointEndToStart(segments))); } else if (End == segments.End) { return(new KtSegments2D(JointEndToEnd(segments))); } return(this); }
public bool Connectible(KtSegments2D segments, bool atStart) => atStart ? Start == segments.Start || Start == segments.End : End == segments.Start || End == segments.End;
private IEnumerable <KtPoint2D> JointEndToEnd(KtSegments2D segments) => Joints.Concat(segments.Joints.Reverse().Skip(1));
private IEnumerable <KtPoint2D> JointEndToStart(KtSegments2D segments) => Joints.Concat(segments.Joints.Skip(1));
private IEnumerable <KtPoint2D> JointStartToEnd(KtSegments2D segments) => segments.Joints.Concat(Joints.Skip(1));
//private bool TryConect(KtSegments2D segments, out IEnumerable<KtPoint2D> result) //{ // if (Start == segments.Start) // { // result=JointStartToStart(segments); // return true; // } // else if (Start == segments.End) // { // result = JointStartToEnd(segments); // return true; // } // else if (End == segments.Start) // { // result = JointEndToStart(segments); // return true; // } // else if (End == segments.End) // { // result = JointEndToEnd(segments); // return true; // } // result = null; // return false; //} private IEnumerable <KtPoint2D> JointStartToStart(KtSegments2D segments) => Joints.Reverse().Concat(segments.Joints.Skip(1));