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); }
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); }
public void CutSegment() { if (LastSelSegment == null) { return; } MarkSegment ms = LastSelSegment.Value; CutSegment(ms); ClearSelection(); }
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(); } }
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); }
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); }