Beispiel #1
0
        protected void ProceedOffset(Dictionary <string, object> parlist)
        {
            ParamTimer             tmr          = (ParamTimer)parlist["timer"];
            Point3D?               lookAt       = (parlist["lookat"] == null ? null : (Point3D?)parlist["lookat"]);
            CameraTransformHandler stepCallback = (CameraTransformHandler)parlist["stepcallback"];
            double   remains = (double)parlist["timeremains"];
            Vector3D step    = (Vector3D)parlist["step"];
            Matrix3D m       = new Matrix3D();

            //cmr.Transform.

            cmr.Position += step;             //new Point3D(cmr.Position.X + step.X, cmr.Position.Y + step.Y, cmr.Position.Z + step.Z);
            if (lookAt != null)
            {
                PointAt((Point3D)lookAt);
            }
            parlist["timeremains"] = remains - tmr.Interval;
            if (remains - tmr.Interval <= 0)
            {
                tmr.Enabled = false;
                tmr.Stop();
                CameraTransformHandler callback = (CameraTransformHandler)parlist["callback"];
                if (callback != null)
                {
                    callback(this);
                    //callback.BeginInvoke(this, null, null);
                }
            }
            if (stepCallback != null)
            {
                stepCallback(this);
                //stepCallback.BeginInvoke(this, null, null);
            }
        }
Beispiel #2
0
 public FrequentMessage(ElapsedEventHandler processor, DictParams paramlist, int priority, bool parallel) : base(null, paramlist, priority, parallel)
 {
     elapsedProcessor    = processor;
     msgTimer            = new ParamTimer(vInterval);
     msgTimer.Param      = this;
     msgTimer.DictParams = paramlist;
     msgTimer.Enabled    = false;
 }
Beispiel #3
0
        public void Invoke(object sender, System.Timers.ElapsedEventArgs notUsed)
        {
            ParamTimer tmr = sender as ParamTimer;

            tmr.Stop();
            Model3DParams mp     = tmr.DictParams as Model3DParams;
            Delegate      method = mp.Processor;

            Dispatcher.BeginInvoke(method, new object[] { tmr, mp });
        }
Beispiel #4
0
        public void RotateAround(double angleZ, double angleY, double miliseconds, CameraTransformHandler callback, CameraTransformHandler stepCallback)
        {
            ParamTimer tmrRot = new ParamTimer(Interval);

            tmrRot.DictParams["timer"]        = tmrRot;
            tmrRot.DictParams["timeremains"]  = miliseconds;
            tmrRot.DictParams["stepy"]        = angleY / miliseconds * Interval;
            tmrRot.DictParams["stepz"]        = angleZ / miliseconds * Interval;
            tmrRot.DictParams["stepcallback"] = stepCallback;
            tmrRot.DictParams["callback"]     = callback;
            tmrRot.DictParams["$proceed"]     = new ThreadViewport3D.VoidDictInvokes(ProceedRotate);
            tmrRot.Elapsed += new ElapsedEventHandler(tmr_Elapsed);
            tmrRot.Start();
        }
Beispiel #5
0
        public void Offset(Vector3D targetPos, Point3D?lookAt, double millisecond, CameraTransformHandler callback, CameraTransformHandler stepCallback)
        {
            double     ratio = Interval / millisecond;
            ParamTimer tmr   = new ParamTimer(Interval);

            tmr.DictParams["step"]         = new Vector3D(targetPos.X * ratio, targetPos.Y * ratio * 0, targetPos.Z * ratio);
            tmr.DictParams["timer"]        = tmr;
            tmr.DictParams["timeremains"]  = millisecond;
            tmr.DictParams["lookat"]       = lookAt;
            tmr.DictParams["callback"]     = callback;
            tmr.DictParams["stepcallback"] = stepCallback;
            tmr.DictParams["$proceed"]     = new ThreadViewport3D.VoidDictInvokes(ProceedOffset);
            tmr.Elapsed += new ElapsedEventHandler(tmr_Elapsed);
            tmr.Start();
        }
Beispiel #6
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);
            }
        }
Beispiel #7
0
        protected void tmr_Elapsed(object sender, ElapsedEventArgs e)
        {
            ParamTimer tmr = (ParamTimer)sender;

            ThreadViewport3D.VoidDictInvokes proceed = (ThreadViewport3D.VoidDictInvokes)tmr.DictParams["$proceed"];
            try
            {
                tmr.Stop();
                host.Invoke(proceed, tmr.DictParams);
                tmr.Start();
            }
            catch (Exception err)
            {
                Exceptions.LogOnly(err);
            }
        }
Beispiel #8
0
        void tmrRun_Elapsed(object sender, ElapsedEventArgs e)
        {
            ParamTimer tmr = (ParamTimer)sender;

            tmr.Stop();
            int sleft = (int)tmr.DictParams["stepsleft"];

            Console.WriteLine("Running - " + sleft);
            tmr.DictParams["stepsleft"] = sleft - 1;
            if (sleft - 1 > 0)
            {
                tmr.Start();
            }
            else
            {
                Message msg = tmr.Param as Message;
                msg.Release();
            }
        }
Beispiel #9
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();
                    }
                }
            }
Beispiel #10
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();
                    }
                }
            }