Ejemplo n.º 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);
            }
        }
Ejemplo n.º 2
0
		public void RotateAround(double angleZ, double angleY, double miliseconds, CameraTransformHandler callback, CameraTransformHandler stepCallback)
		{
			ParamTimer tmr = new ParamTimer(Interval);
			tmr.DictParams["timer"] = tmr;
			tmr.DictParams["timeremains"] = miliseconds;
			tmr.DictParams["stepy"] = angleY / miliseconds * Interval;
			tmr.DictParams["stepz"] = angleZ / miliseconds * Interval;
			tmr.DictParams["stepcallback"] = stepCallback;
			tmr.DictParams["callback"] = callback;
			tmr.DictParams["$proceed"] = new ThreadViewport3D.VoidDictInvokes(ProceedRotate);
			tmr.Elapsed += new ElapsedEventHandler(tmr_Elapsed);
			tmr.Start();
		}
Ejemplo n.º 3
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();
        }
Ejemplo n.º 4
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, 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();
		}
Ejemplo n.º 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();
        }
Ejemplo n.º 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);
            }
        }