示例#1
0
        //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();
        }
示例#2
0
        public void CursorAngleX(double d)
        {
            double t = -CadMath.Deg2Rad(d);

            Controller.CrossCursor.DirX.X = Math.Cos(t);
            Controller.CrossCursor.DirX.Y = Math.Sin(t);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
                });
            });
        }
示例#5
0
        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);
        }