예제 #1
0
        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);
                }
            }
        }
예제 #2
0
        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);
                }
            }
        }