Beispiel #1
0
        protected override DrawObject[] TrimDrawObject(Line line, DrawObjectTrimingInfo trimingInfo)
        {
            Vector2D[]   intersectPositions = trimingInfo.IntersectPositions;
            Rectangle2D2 trimArea           = trimingInfo.TrimArea;

            if (line == null)
            {
                return(null);
            }

            if (intersectPositions == null)
            {
                return(null);
            }

            if (trimArea == null)
            {
                return(null);
            }

            //将交点集合筛选(需在线段上,不包括端点),并沿线段起始到终止方向进行排序;
            intersectPositions = intersectPositions.
                                 Where(p => p.IsInLine(line.Line2D)).
                                 OrderBy(p => p.Distance(line.Line2D.Start)).
                                 ToArray();

            ///得到矩形与线段的所有交点(最多两个),通过该交点集合的与<param name="intersectPositions"/>的关系,进行裁剪;
            var rectInserserctPositions = trimArea.GetLines().
                                          Select(p => p.Intersect(line.Line2D)).
                                          Where(p => p != null).
                                          Distinct(Vector2DEqualityComparer.StaticInstance).
                                          ToArray();

            return(GetTrimedLineWithIntersectPositions(line, intersectPositions, rectInserserctPositions));
        }
        public DrawObject[] TrimDrawObject(DrawObjectTrimingInfo trimingInfo)
        {
            if (trimingInfo.TrimedDrawObject is TDrawObject tDrawObject)
            {
                return(TrimDrawObject(tDrawObject, trimingInfo));
            }

            return(null);
        }
Beispiel #3
0
 protected override DrawObject[] TrimDrawObject(Rectangle drawObject, DrawObjectTrimingInfo drawObjectTrimingInfo)
 {
     return(null);
 }
 protected abstract DrawObject[] TrimDrawObject(TDrawObject drawObject, DrawObjectTrimingInfo trimingInfo);