Beispiel #1
0
        private bool SegSelected()
        {
            if (mController.LastSelSegment == null)
            {
                return(false);
            }

            MarkSegment seg = mController.LastSelSegment.Value;

            CadFigure fig = mController.DB.GetFigure(seg.FigureID);

            if (fig == null)
            {
                return(false);
            }

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

            bool handle = false;

            handle |= fig.GetPointAt(seg.PtIndexA).IsHandle;
            handle |= fig.GetPointAt(seg.PtIndexB).IsHandle;

            if (handle)
            {
                return(false);
            }

            return(true);
        }
Beispiel #2
0
        public bool InsPointToLastSelectedSeg()
        {
            if (LastSelSegment == null)
            {
                return(false);
            }

            MarkSegment seg = LastSelSegment.Value;

            CadFigure fig = DB.GetFigure(seg.FigureID);

            if (fig == null)
            {
                return(false);
            }

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

            bool handle = false;

            handle |= fig.GetPointAt(seg.PtIndexA).IsHandle;
            handle |= fig.GetPointAt(seg.PtIndexB).IsHandle;

            if (handle)
            {
                return(false);
            }

            int ins  = 0;
            int ins0 = Math.Min(seg.PtIndexA, seg.PtIndexB);
            int ins1 = Math.Max(seg.PtIndexA, seg.PtIndexB);

            if (ins0 == 0 && ins1 == fig.PointCount - 1)
            {
                ins = ins1 + 1;
            }
            else
            {
                ins = ins1;
            }

            DOut.pl($"ins={ins} pcnt={fig.PointCount}");

            fig.InsertPointAt(ins, (CadVertex)LastDownPoint);

            ClearSelection();

            fig.SelectPointAt(ins, true);

            return(true);
        }
Beispiel #3
0
        public void CutSegment()
        {
            if (LastSelSegment == null)
            {
                return;
            }

            MarkSegment ms = LastSelSegment.Value;

            CutSegment(ms);
            ClearSelection();
        }
Beispiel #4
0
        public void SetSelectedSegLen(double len)
        {
            if (Controller.LastSelSegment == null)
            {
                return;
            }

            MarkSegment seg = Controller.LastSelSegment.Value;

            if (seg.FigureID == 0)
            {
                return;
            }

            CadFigure fig = Controller.DB.GetFigure(seg.FigureID);

            CadVertex pa = fig.GetPointAt(seg.PtIndexA);
            CadVertex pb = fig.GetPointAt(seg.PtIndexB);

            Vector3d v;

            v = pa.vector - Controller.LastDownPoint;
            double da = v.Norm();

            v = pb.vector - Controller.LastDownPoint;
            double db = v.Norm();


            if (da < db)
            {
                Vector3d np = CadMath.LinePoint(pb.vector, pa.vector, len);
                Controller.StartEdit();

                pa.vector = np;

                fig.SetPointAt(seg.PtIndexA, pa);

                Controller.EndEdit();
            }
            else
            {
                Vector3d np = CadMath.LinePoint(pa.vector, pb.vector, len);
                Controller.StartEdit();

                pb.vector = np;

                fig.SetPointAt(seg.PtIndexB, pb);

                Controller.EndEdit();
            }
        }
Beispiel #5
0
        public void CutSegment(MarkSegment ms)
        {
            if (!ms.Valid)
            {
                return;
            }

            if (!ms.CrossPoint.IsValid())
            {
                return;
            }

            var res = CadSegmentCutter.CutSegment(mDB, ms, ms.CrossPoint);

            if (!res.isValid())
            {
                return;
            }

            CadOpeList opeRoot = new CadOpeList();
            CadOpe     ope;

            foreach (EditResult.Item ri in res.AddList)
            {
                CadLayer layer = mDB.GetLayer(ri.LayerID);

                ope = new CadOpeAddFigure(ri.LayerID, ri.FigureID);
                opeRoot.OpeList.Add(ope);

                layer.AddFigure(ri.Figure);
            }

            foreach (EditResult.Item ri in res.RemoveList)
            {
                CadLayer layer = mDB.GetLayer(ri.LayerID);

                ope = new CadOpeRemoveFigure(layer, ri.FigureID);
                opeRoot.OpeList.Add(ope);

                layer.RemoveFigureByID(ri.FigureID);
            }

            HistoryMan.foward(opeRoot);
        }
Beispiel #6
0
        public bool ToBezier(MarkSegment seg)
        {
            if (seg.FigureID == 0)
            {
                return(false);
            }

            CadFigure fig = mDB.GetFigure(seg.FigureID);

            int num = CadUtil.InsertBezierHandle(fig, seg.PtIndexA, seg.PtIndexB);

            bool ret = num > 0;

            if (ret)
            {
                CadOpe ope = new CadOpeInsertPoints(
                    fig.LayerID, fig.ID, seg.PtIndexA + 1, num);

                HistoryMan.foward(ope);
            }

            return(ret);
        }