public void End(TouchContainer touch) { var p = touch.Touch.scenePos; Debug.Log($"touch end: {p.x:0.00}x{p.y:0.00}x{p.z:0.00}"); _originPool.Return(this); }
void OnStartTouch(TouchContainer container) { var trail = _trailsPool.Obtain(null); if (trail == null) { return; } container.TouchListener = trail; }
/// <summary> /// Get the planar velocity of a touch and its current and previous intersection-point in the selected plane's space /// </summary> /// <param name="touch"></param> /// <param name="plane">Arbitrary matrix of the XY plane to do the intersection with</param> /// <param name="context">Notui context to provide screen space/alignment information</param> /// <param name="currpos">Current intersection point in the space of the plane</param> /// <param name="prevpos">Previous intersection point in the space of the plane</param> /// <returns>Velocity of the touch relative to the space of the plane</returns> public static Vector3 GetPlanarVelocity(this TouchContainer touch, Matrix4x4 plane, NotuiContext context, out Vector3 currpos, out Vector3 prevpos) { // get planar coords for current touch position var hit = Intersections.PlaneRay(touch.WorldPosition, touch.ViewDir, plane, out var capos, out var crpos); currpos = crpos; // get planar coords for the previous touch position touch.GetPreviousWorldPosition(context, out var popos, out var pdir); var phit = Intersections.PlaneRay(popos, pdir, plane, out var papos, out var prpos); prevpos = prpos; return(crpos - prpos); }
/// <summary> /// Get the previous world position of a touch /// </summary> /// <param name="touch">Touch in question</param> /// <param name="context">Context of the touch</param> /// <param name="popos">Previous world position</param> /// <param name="pdir">Previous ray direction</param> public static void GetPreviousWorldPosition(this TouchContainer touch, NotuiContext context, out Vector3 popos, out Vector3 pdir) { var prevpoint = touch.Point - touch.Velocity; Coordinates.GetPointWorldPosDir(prevpoint, context.ProjectionWithAspectRatioInverse, context.ViewInverse, out popos, out pdir); }
public void Update(TouchContainer touch) { var p = touch.Touch.scenePos; Debug.Log($"touch move: {p.x:0.00}x{p.y:0.00}x{p.z:0.00}"); }
public void Start(TouchContainer touch) { var p = touch.Touch.scenePos; Debug.Log($"touch start: {p.x:0.00}x{p.y:0.00}x{p.z:0.00}"); }
//called when data for any output pin is requested public void Evaluate(int SpreadMax) { if (Init) { PrevTouchSpread.SliceCount = 0; AutoIDs.SliceCount = 0; Init = false; } SpreadMax = Math.Min(FPoints.SliceCount, FID.SliceCount); var dt = FHDEHost.FrameTime - lastftime; lastftime = FHDEHost.FrameTime; foreach (var touch in Touches.Values) { touch.Mainloop((float)dt); } for (int i = 0; i < SpreadMax; i++) { int tid = FID[i]; if (Touches.ContainsKey(tid)) { TouchContainer tc = Touches[tid]; if (tc is FilteredTouch ftc) { ftc.FilterMinCutoff = FMinCutoff[i]; ftc.FilterBeta = FBeta[i]; ftc.FilterCutoffDerivative = FCutoffDerivative[i]; } tc.Update(FPoints[i].AsSystemVector(), (float)dt); } else { TouchContainer tc = FUseFilter[i] ? new FilteredTouch(tid, FMinCutoff[i], FBeta[i]) : new TouchContainer(tid); tc.Mainloop((float)dt); if (FUseFilter[i]) { var ftc = (FilteredTouch)tc; ftc.FilterCutoffDerivative = FCutoffDerivative[i]; } tc.Update(FPoints[i].AsSystemVector(), (float)dt); Touches.Add(tid, tc); } } var removables = (from touch in Touches.Values where touch.ExpireFrames > FExpire[0] select touch.Id) .ToArray(); foreach (var tid in removables) { Touches.Remove(tid); } this.SetSliceCountForAllOutput(Touches.Count); int ii = 0; foreach (var touch in Touches.Values) { FContainer[ii] = touch; FPointsOut[ii] = touch.Point.AsVVector(); FVelOut[ii] = touch.Velocity.AsVVector(); FIDOut[ii] = touch.Id; FAge[ii] = touch.Age.Elapsed.TotalSeconds; FExpiry[ii] = touch.ExpireFrames; FNew[ii] = touch.AgeFrames < 2; ii++; } }