예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
 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);
 }
예제 #4
0
 public bool Connectible(KtSegments2D segments, bool atStart) => atStart ? Start == segments.Start || Start == segments.End : End == segments.Start || End == segments.End;
예제 #5
0
 private IEnumerable <KtPoint2D> JointEndToEnd(KtSegments2D segments) =>
 Joints.Concat(segments.Joints.Reverse().Skip(1));
예제 #6
0
 private IEnumerable <KtPoint2D> JointEndToStart(KtSegments2D segments) =>
 Joints.Concat(segments.Joints.Skip(1));
예제 #7
0
 private IEnumerable <KtPoint2D> JointStartToEnd(KtSegments2D segments) =>
 segments.Joints.Concat(Joints.Skip(1));
예제 #8
0
        //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));