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