Ejemplo n.º 1
0
        public override void Undo(CadObjectDB db)
        {
            CadFigure parent = db.GetFigure(ParentID);
            CadFigure child  = db.GetFigure(ChildID);

            parent.ChildList.Remove(child);
            child.Parent = null;
        }
Ejemplo n.º 2
0
        public override void Undo(CadObjectDB db)
        {
            CadFigure parent = db.GetFigure(ParentID);

            foreach (uint childID in ChildIDList)
            {
                CadFigure fig = db.GetFigure(childID);
                parent.AddChild(fig);
            }
        }
Ejemplo n.º 3
0
        public override void Redo(CadObjectDB db)
        {
            CadFigure parent = db.GetFigure(ParentID);

            foreach (uint childID in ChildIDList)
            {
                parent.ChildList.RemoveAll(a => a.ID == childID);
                CadFigure fig = db.GetFigure(childID);
                fig.Parent = null;
            }
        }
Ejemplo n.º 4
0
        public static EditResult Cut(CadObjectDB db, CadFigure fig, int sp)
        {
            EditResult result = new EditResult();

            if (fig.Type != CadFigure.Types.POLY_LINES)
            {
                return(result);
            }

            if (fig.IsLoop)
            {
                return(result);
            }

            int pcnt = fig.PointCount;

            int headNum = sp + 1;
            int tailNum = pcnt - sp;

            CadFigure headFig = null;
            CadFigure tailFig = null;

            if (headNum <= 1 || tailNum <= 1)
            {
                return(result);
            }

            if (headNum >= 2)
            {
                headFig = db.NewFigure(CadFigure.Types.POLY_LINES);
                headFig.AddPoints(fig.PointList, 0, headNum);
            }

            if (tailNum >= 2)
            {
                tailFig = db.NewFigure(CadFigure.Types.POLY_LINES);
                tailFig.AddPoints(fig.PointList, sp, tailNum);
            }

            if (headFig != null)
            {
                result.AddList.Add(new EditResult.Item(fig.LayerID, headFig));
            }

            if (tailFig != null)
            {
                result.AddList.Add(new EditResult.Item(fig.LayerID, tailFig));
            }

            result.RemoveList.Add(new EditResult.Item(fig.LayerID, fig));

            return(result);
        }
Ejemplo n.º 5
0
        public void Search(DrawContext dc, CadObjectDB db, CadLayer layer)
        {
            if (layer == null)
            {
                return;
            }

            for (int i = 0; i < layer.FigureList.Count; i++)
            {
                CadFigure fig = layer.FigureList[i];
                CheckFigure(dc, layer, fig);
            }
        }
Ejemplo n.º 6
0
        public void SearchAllLayer(DrawContext dc, CadObjectDB db)
        {
            Search(dc, db, db.CurrentLayer);

            for (int i = 0; i < db.LayerList.Count; i++)
            {
                CadLayer layer = db.LayerList[i];

                if (layer.ID == db.CurrentLayerID)
                {
                    continue;
                }

                Search(dc, db, layer);
            }
        }
Ejemplo n.º 7
0
        public static EditResult CutSegment(CadObjectDB db, MarkSegment seg, Vector3d p)
        {
            EditResult result = new EditResult();

            if (seg.Figure.Type != CadFigure.Types.POLY_LINES)
            {
                return(result);
            }

            CrossInfo ci = CadMath.PerpendicularCrossSeg(seg.pA.vector, seg.pB.vector, p);

            if (!ci.IsCross)
            {
                return(result);
            }

            CadFigure org = db.GetFigure(seg.FigureID);

            int a = Math.Min(seg.PtIndexA, seg.PtIndexB);
            int b = Math.Max(seg.PtIndexA, seg.PtIndexB);


            CadFigure fa = db.NewFigure(CadFigure.Types.POLY_LINES);
            CadFigure fb = db.NewFigure(CadFigure.Types.POLY_LINES);

            fa.AddPoints(org.PointList, 0, a + 1);
            fa.AddPoint(new CadVertex(ci.CrossPoint));

            fb.AddPoint(new CadVertex(ci.CrossPoint));
            fb.AddPoints(org.PointList, b);

            if (org.IsLoop)
            {
                fb.AddPoint(fa.GetPointAt(0));
            }

            result.AddList.Add(new EditResult.Item(seg.LayerID, fa));
            result.AddList.Add(new EditResult.Item(seg.LayerID, fb));
            result.RemoveList.Add(new EditResult.Item(org.LayerID, org));

            return(result);
        }
Ejemplo n.º 8
0
        public void Search(DrawContext dc, CadObjectDB db, CadLayer layer)
        {
            if (layer == null)
            {
                return;
            }

            if (!layer.Visible)
            {
                return;
            }

            MinDist = CadConst.MaxValue;

            for (int i = layer.FigureList.Count - 1; i >= 0; i--)
            {
                CadFigure fig = layer.FigureList[i];
                CheckFig(dc, layer, fig);
            }
        }
Ejemplo n.º 9
0
 public override void Undo(CadObjectDB db)
 {
     db.InserLayer(Layer, Index);
 }
Ejemplo n.º 10
0
 public override void Redo(CadObjectDB db)
 {
     db.RemoveLayer(Layer.ID);
 }
Ejemplo n.º 11
0
        public override void Undo(CadObjectDB db)
        {
            CadFigure fig = db.GetFigure(FigureID);

            fig.InvertDir();
        }
Ejemplo n.º 12
0
        public override void Redo(CadObjectDB db)
        {
            CadFigure fig = db.GetFigure(FigureID);

            fig.Normal = NewNormal;
        }
Ejemplo n.º 13
0
 public override void Undo(CadObjectDB db)
 {
     MpUtil.Lz4BinRestoreFig(Before, db);
 }
Ejemplo n.º 14
0
        public override void Redo(CadObjectDB db)
        {
            CadFigure fig = db.GetFigure(FigureID);

            fig.AddPoint(Point);
        }
Ejemplo n.º 15
0
 public override void Undo(CadObjectDB db)
 {
     Layer.FigureList = OldList;
 }
Ejemplo n.º 16
0
 public override void Dispose(CadObjectDB db)
 {
     db.RelaseFigure(FigureID);
 }
Ejemplo n.º 17
0
        public override void Redo(CadObjectDB db)
        {
            CadLayer layer = db.GetLayer(LayerID);

            layer.RemoveFigureByID(db, FigureID);
        }
Ejemplo n.º 18
0
        public override void Redo(CadObjectDB db)
        {
            CadFigure fig = db.GetFigure(FigureID);

            fig.IsLoop = Close;
        }
Ejemplo n.º 19
0
 public virtual void Dispose(CadObjectDB db)
 {
 }
Ejemplo n.º 20
0
 public abstract void Redo(CadObjectDB db);
Ejemplo n.º 21
0
 public override void Redo(CadObjectDB db)
 {
     MpUtil.Lz4BinRestoreFig(After, db);
 }
Ejemplo n.º 22
0
 public HistoryManager(CadObjectDB db)
 {
     mDB = db;
 }
Ejemplo n.º 23
0
 public override void Redo(CadObjectDB db)
 {
     Layer.FigureList = NewList;
 }
Ejemplo n.º 24
0
        public override void Undo(CadObjectDB db)
        {
            CadFigure fig = db.GetFigure(FigureID);

            fig.Normal = OldNormal;
        }
Ejemplo n.º 25
0
        public static EditResult Bond(CadObjectDB db, CadFigure fig)
        {
            EditResult result = new EditResult();

            if (fig.LayerID == 0)
            {
                return(result);
            }

            if (fig.IsLoop)
            {
                return(result);
            }

            CadLayer layer = db.GetLayer(fig.LayerID);

            CadVertex ps = fig.PointList[0];
            CadVertex pe = fig.PointList[fig.PointCount - 1];

            int pi  = -1;
            int bpi = -1;

            CadFigure bfig = null;

            foreach (CadFigure tfig in layer.FigureList)
            {
                if (tfig.ID == fig.ID)
                {
                    continue;
                }

                if (tfig.IsLoop)
                {
                    continue;
                }

                CadVertex tps = tfig.PointList[0];
                CadVertex tpe = tfig.PointList[tfig.PointCount - 1];

                if (tps.Equals(ps))
                {
                    bpi  = 0;
                    pi   = 0;
                    bfig = tfig;
                    break;
                }

                if (tps.Equals(pe))
                {
                    bpi  = 0;
                    pi   = fig.PointCount - 1;
                    bfig = tfig;
                    break;
                }

                if (tpe.Equals(ps))
                {
                    bpi  = tfig.PointCount - 1;
                    pi   = 0;
                    bfig = tfig;
                    break;
                }

                if (tpe.Equals(pe))
                {
                    bpi  = tfig.PointCount - 1;
                    pi   = fig.PointCount - 1;
                    bfig = tfig;
                    break;
                }
            }

            if (pi < 0)
            {
                return(result);
            }

            CadFigure newFig = db.NewFigure(CadFigure.Types.POLY_LINES);

            VertexList plist = new VertexList(fig.PointList);
            VertexList blist = new VertexList(bfig.PointList);

            if (pi == 0)
            {
                plist.Reverse();
            }

            if (bpi != 0)
            {
                blist.Reverse();
            }

            newFig.PointList.AddRange(plist);
            newFig.PointList.AddRange(blist);

            result.AddList.Add(new EditResult.Item(layer.ID, newFig));

            result.RemoveList.Add(new EditResult.Item(layer.ID, fig));
            result.RemoveList.Add(new EditResult.Item(layer.ID, bfig));

            return(result);
        }
Ejemplo n.º 26
0
        public override void Undo(CadObjectDB db)
        {
            CadFigure fig = db.GetFigure(FigureID);

            fig.RemovePointAt(PointIndex);
        }