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); }
protected override DrawObject[] TrimDrawObject(Rectangle drawObject, DrawObjectTrimingInfo drawObjectTrimingInfo) { return(null); }
protected abstract DrawObject[] TrimDrawObject(TDrawObject drawObject, DrawObjectTrimingInfo trimingInfo);