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); } }
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(); }
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(); }
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(); }
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(); }
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); } }