//public CadVertex NewPoint() //{ // return default(CadVertex); //} //public CadFigure NewPolyLines() //{ // CadFigure fig = Controller.DB.NewFigure(CadFigure.Types.POLY_LINES); // return fig; //} public void Rotate(uint figID, Vector3d org, Vector3d axisDir, double angle) { CadFigure fig = Controller.DB.GetFigure(figID); if (fig == null) { return; } if (axisDir.IsZero()) { return; } //Controller.SelectFigure(figID); axisDir = axisDir.UnitVector(); var list = new List <CadFigure>() { fig }; Controller.StartEdit(list); RotateWithAxis(fig, org, axisDir, CadMath.Deg2Rad(angle)); Controller.EndEdit(list); Session.PostRedraw(); }
public void CursorAngleX(double d) { double t = -CadMath.Deg2Rad(d); Controller.CrossCursor.DirX.X = Math.Cos(t); Controller.CrossCursor.DirX.Y = Math.Sin(t); }
public void CursorAngleY(double d) { double t = -CadMath.Deg2Rad(d) + Math.PI / 2; Controller.CrossCursor.DirY.X = Math.Cos(t); Controller.CrossCursor.DirY.Y = Math.Sin(t); }
public async void RotateWithInteractive(List <CadFigure> rootFigList) { await Task.Run(() => { Controller.StartEdit(); var res = InputPoint(); if (res.state != InteractCtrl.States.END) { Controller.AbendEdit(); return; } Vector3d p0 = res.p0; double angle = 0; bool ok = false; RunOnMainThread(() => { AngleInputDialog dlg = new AngleInputDialog(); bool?dlgRet = dlg.ShowDialog(); ok = dlgRet.Value; if (ok) { angle = dlg.GetDouble(); } }); if (!ok) { ItConsole.println("Cancel!"); Controller.AbendEdit(); return; } RotateWithAxis( rootFigList, p0, Controller.DC.ViewDir, CadMath.Deg2Rad(angle)); Controller.EndEdit(); RunOnMainThread(() => { Controller.Redraw(); Controller.UpdateObjectTree(remakeTree: false); }); }); }
public Vector3d RotateVector(Vector3d v, Vector3d axis, double angle) { axis = axis.UnitVector(); double t = CadMath.Deg2Rad(angle); CadQuaternion q = CadQuaternion.RotateQuaternion(axis, t); CadQuaternion r = q.Conjugate();; CadQuaternion qp; qp = CadQuaternion.FromPoint(v); qp = r * qp; qp = qp * q; Vector3d rv = v; rv = qp.ToPoint(); return(rv); }