Exemplo n.º 1
0
        protected void ProceedRotate(Dictionary <string, object> parlist)
        {
            ParamTimer             tmr          = (ParamTimer)parlist["timer"];
            double                 interval     = 0;
            double                 stepX        = (double)parlist["stepz"];
            double                 stepY        = (double)parlist["stepy"];
            CameraTransformHandler stepCallback = (CameraTransformHandler)parlist["stepcallback"];
            CameraTransformHandler callback     = (CameraTransformHandler)parlist["callback"];
            double                 remains      = 0;

            if (tmr != null)
            {
                interval = tmr.Interval;
                remains  = (double)parlist["timeremains"];
            }
            //Quaternion delta = new Quaternion(Vector3D.CrossProduct(cmr.UpDirection, cmr.LookDirection), stepZ); //new Quaternion(cmr.UpDirection, stepY);
            //delta *= new Quaternion(cmr.UpDirection, stepY);
            try
            {
                Matrix3D m = MatrixHelper.CalcRotationMatrix(-stepX, stepY, 0, cmr.Position, new Vector3D(0, 1, 0), cmr.LookDirection, cmr.Transform, MatrixHelper.RotationType.LockAxisY);
                parlist["timeremains"] = remains - interval;
                //m.RotateAt(delta, cmr.Position);
                //m.RotateAtPrepend(delta, cmr.Position);
                MatrixTransform3D o = (MatrixTransform3D)cmr.Transform;
                cmr.Transform = new MatrixTransform3D(Matrix3D.Multiply(o.Matrix, m));
                if (tmr != null && remains - interval <= 0)
                {
                    tmr.Stop();
                    if (callback != null)
                    {
                        callback(this);
                    }
                    return;
                }
                if (stepCallback != null)
                {
                    stepCallback(this);
                }
                if (OnCameraStatusChange != null)
                {
                    OnCameraStatusChange(this);
                }
            }
            catch (Exception err)
            {
                Exceptions.LogOnly(err);
            }
        }
Exemplo n.º 2
0
            void ProceedOffset(object sender, Model3DParams mp)
            {
                ParamTimer tmr = (ParamTimer)sender;

                if (IsHostReady)
                {
                    double remains  = mp.Remains;
                    double interval = mp.Interval;
                    mp.Remains = remains - interval;
                    FrequentMessage msg = (FrequentMessage)tmr.Param;
                    hostVisual.Transform = MatrixHelper.Offset(hostVisual.Transform, mp.OffsetVector.X, mp.OffsetVector.Y, mp.OffsetVector.Z);
                    if (remains > interval)
                    {
                        tmr.Start();
                    }
                    else
                    {
                        msg.Release();
                    }
                }
            }
Exemplo n.º 3
0
            void ProceedRotate(object sender, Model3DParams mp)
            {
                ParamTimer tmr = (ParamTimer)sender;

                if (IsHostReady)
                {
                    double remains  = mp.Remains;
                    double interval = mp.Interval;
                    mp.Remains = remains - interval;
                    FrequentMessage msg = (FrequentMessage)tmr.Param;
                    hostVisual.Transform = MatrixHelper.Rotate3D(hostVisual.Transform, mp.StepX, mp.StepY, mp.StepZ, hostVisual.OriginPosition, hostVisual.OriginUpDir, hostVisual.OriginLookDir, MatrixHelper.RotationType.LockAxisY);
                    if (remains > interval)
                    {
                        tmr.Start();
                    }
                    else
                    {
                        msg.Release();
                    }
                }
            }