public void DoCommonSide(List <IDrawObject> drawObjects, List <List <UnitPoint> > unitPoints = null, int Gsn = 0, List <IDrawObject> drawObjectsold = null) { List <IDrawObject> NewDrawobjects = new List <IDrawObject>(); if (unitPoints != null) { foreach (var item in unitPoints) { DrawTool.MultiSegmentLine.MultiSegmentLineBase multiSegmentLineBase = new DrawTool.MultiSegmentLine.MultiSegmentLineBase(); var obj = multiSegmentLineBase as DrawTool.MultiSegmentLine.MultiSegmentLineBase; List <UnitPointBulge> s = new List <UnitPointBulge>(); foreach (var item1 in item) { s.Add(new UnitPointBulge(item1)); } obj.Points = s; if (item[0] == item[item.Count - 1]) { obj.IsCloseFigure = true; } multiSegmentLineBase.Update(); NewDrawobjects.Add(multiSegmentLineBase); } } if (Gsn == 0) { if (NewDrawobjects == null || NewDrawobjects.Count <= 0)//重做 { NewDrawobjects = drawObjects.ToList(); this.DrawingLayer.DeleteObjects(drawObjectsold); } else { this.DrawingLayer.DeleteObjects(drawObjects); int gsn = ++GlobalModel.TotalGroupCount; NewDrawobjects.ForEach(r => r.GroupParam.GroupSN.Insert(1, gsn)); int sn = GlobalModel.TotalDrawObjectCount; NewDrawobjects.ForEach(r => r.GroupParam.FigureSN = ++sn); NewDrawobjects[0].GroupParam.GroupSN[0] = NewDrawobjects[0].GroupParam.FigureSN; } GlobalModel.TotalDrawObjectCount = GlobalModel.TotalDrawObjectCount + NewDrawobjects.Count; this.DrawingLayer.AddObjectOnDrawing(NewDrawobjects); if (this.undoRedoBuffer.CanCapture) { this.undoRedoBuffer.AddCommand(new EditCommandCommonSide(drawObjects, NewDrawobjects)); } this.UpdateSN(); } else { List <IDrawObject> NewDrawobjects1 = this.DrawingLayer.Objects.FindAll(s => s.GroupParam.GroupSN.Count > 1 && s.GroupParam.GroupSN[1] == Gsn).ToList(); ((DrawingLayer)this.DrawingLayer).DeleteObjects(NewDrawobjects1); foreach (var item in drawObjects) { this.DrawingLayer.AddObjectOnRedoUndo(item); } } }
public void DoLineFlyingCut(List <IDrawObject> drawObjects, List <List <LineFlyCut> > flyLineGroups = null, int Gsn = 0, List <IDrawObject> drawObjectsold = null) { List <IDrawObject> NewDrawobjects = new List <IDrawObject>(); if (flyLineGroups != null) { //int dxCount = 0; foreach (var item in flyLineGroups) { #region 已注释 直线上的多段分开 //foreach (var item1 in item) //{ // DrawTool.MultiSegmentLine.MultiSegmentLineBase multiSegmentLineBase = new DrawTool.MultiSegmentLine.MultiSegmentLineBase(); // var obj = multiSegmentLineBase as DrawTool.MultiSegmentLine.MultiSegmentLineBase; // List<UnitPointBulge> s = new List<UnitPointBulge>(); // s.Add(new UnitPointBulge(item1.StartPoint)); // s.Add(new UnitPointBulge(item1.EndPoint)); // obj.Points = s; // obj.IsCloseFigure = false; // multiSegmentLineBase.Update(); // NewDrawobjects.Add(multiSegmentLineBase); //} #endregion // 直线上的多段和虚线当中一个多段线 DrawTool.MultiSegmentLine.MultiSegmentLineBase multiSegmentLineBase = new DrawTool.MultiSegmentLine.MultiSegmentLineBase(); var obj = multiSegmentLineBase as DrawTool.MultiSegmentLine.MultiSegmentLineBase; List <UnitPointBulge> s = new List <UnitPointBulge>(); for (int idx = 0; idx < item.Count; idx++) { var item1 = item[idx]; s.Add(new UnitPointBulge() { Bulge = double.NaN, Point = item1.StartPoint, Dotted = false }); s.Add(new UnitPointBulge() { Bulge = double.NaN, Point = item1.EndPoint, Dotted = true }); if (idx == item.Count - 1 && item1.ConnectLineStartPoint != null && !double.IsNaN(item1.ConnectLineStartPoint.X)) { //obj.BezierParam = new Tuple<double, double, UnitPoint, UnitPoint>(0.5d, 1d, item1.ConnectLineStartPoint, item1.ConnectLineEndPoint); obj.BezierParam = new BezierParamModel() { LeadlineDistance = 0.5d, BezierWide = 1.0d, ConnectStartPoint = item1.ConnectLineStartPoint, ConnectEndPoint = item1.ConnectLineEndPoint, }; } } obj.Points = s; obj.IsCloseFigure = false; multiSegmentLineBase.Update(); NewDrawobjects.Add(multiSegmentLineBase); } } if (Gsn == 0) { if (NewDrawobjects == null || NewDrawobjects.Count <= 0)//重做 { NewDrawobjects = drawObjects.ToList(); this.DrawingLayer.DeleteObjects(drawObjectsold); } else { this.DrawingLayer.DeleteObjects(drawObjects); int gsn = ++GlobalModel.TotalGroupCount; NewDrawobjects.ForEach(r => r.GroupParam.GroupSN.Insert(1, gsn)); int sn = GlobalModel.TotalDrawObjectCount; NewDrawobjects.ForEach(r => r.GroupParam.FigureSN = ++sn); NewDrawobjects[0].GroupParam.GroupSN[0] = NewDrawobjects[0].GroupParam.FigureSN; } GlobalModel.TotalDrawObjectCount = GlobalModel.TotalDrawObjectCount + NewDrawobjects.Count; this.DrawingLayer.AddObjectOnDrawing(NewDrawobjects); if (this.undoRedoBuffer.CanCapture) { this.undoRedoBuffer.AddCommand(new EditCommandLineFlyingCut(drawObjects, NewDrawobjects)); } this.UpdateSN(); } else { List <IDrawObject> NewDrawobjects1 = this.DrawingLayer.Objects.FindAll(s => s.GroupParam.GroupSN.Count > 1 && s.GroupParam.GroupSN[1] == Gsn).ToList(); ((DrawingLayer)this.DrawingLayer).DeleteObjects(NewDrawobjects1); foreach (var item in drawObjects) { this.DrawingLayer.AddObjectOnRedoUndo(item); } } }