PointerPredictor Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Fornisce il supporto per la generazione di una raccolta di oggetti PointerPoint che stimano il percorso più probabile del puntatore di input corrente.
public ref class PointerPredictor sealed : IClosable
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.Foundation.WindowsAppSDKContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class PointerPredictor final : IClosable
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.Foundation.WindowsAppSDKContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class PointerPredictor : System.IDisposable
Public NotInheritable Class PointerPredictor
Implements IDisposable
- Ereditarietà
- Attributi
- Implementazioni
Esempio
Nell'esempio seguente viene illustrato come utilizzare l'oggetto PointerPredictor ricevendo l'input per un oggetto SwapChainPanel in un thread in background.
class PointerPredictionRenderer : IDisposable
{
private DispatcherQueueController _queuecontroller;
private InputPointerSource _inputPointerSource;
private PointerPredictor _pointerPredictor;
private List<Point> _actualPoints = new List<Point>();
private List<Point> _predictedPoints = new List<Point>();
private SwapChainPanel _panel;
public PointerPredictionRenderer(SwapChainPanel panel)
{
_panel = panel;
_panel.Loaded += SwapChainPanel_Loaded;
}
private void SwapChainPanel_Loaded(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
{
_queuecontroller = DispatcherQueueController.CreateOnDedicatedThread();
_queuecontroller.DispatcherQueue.TryEnqueue(DispatcherQueuePriority.High,
() =>
{
// Set up the pointer input source to receive pen input for the swap chain panel.
_inputPointerSource = _panel.CreateCoreIndependentInputSource(InputPointerSourceDeviceKinds.Pen);
_inputPointerSource.PointerPressed += InputPointerSource_PointerPressed;
_inputPointerSource.PointerMoved += InputPointerSource_PointerMoved;
_inputPointerSource.PointerReleased += InputPointerSource_PointerReleased;
// Create the pointer predictor for the input pointer source. By default it will be configured
// to predict points 15ms into the future
_pointerPredictor = PointerPredictor.CreateForInputPointerSource(_inputPointerSource);
});
}
~PointerPredictionRenderer()
{
Dispose();
}
public void Dispose()
{
if (_pointerPredictor != null)
{
_pointerPredictor.Dispose();
_pointerPredictor = null;
}
_inputPointerSource.PointerPressed -= InputPointerSource_PointerPressed;
_inputPointerSource.PointerMoved -= InputPointerSource_PointerMoved;
_inputPointerSource.PointerReleased -= InputPointerSource_PointerReleased;
_inputPointerSource = null;
_queuecontroller = null;
}
private void InputPointerSource_PointerPressed(InputPointerSource sender, PointerEventArgs args)
{
// Store the new point in contact.
_actualPoints.Add(args.CurrentPoint.Position);
}
private void InputPointerSource_PointerMoved(InputPointerSource sender, PointerEventArgs args)
{
// Only render ink and query for predicted points when the pointer is in contact.
// There are no predicted points if the pointer is not in contact.
if (args.CurrentPoint.IsInContact)
{
// Store new points received in this event.
var intermediatePoints = args.GetIntermediatePoints();
foreach (var point in intermediatePoints)
{
_actualPoints.Add(point.Position);
}
// Query for the predicted points from the predictor.
var predictedPoints = _pointerPredictor.GetPredictedPoints(args.CurrentPoint);
if (predictedPoints != null)
{
foreach (var predictedPoint in predictedPoints)
{
_predictedPoints.Add(predictedPoint.Position);
}
}
// Render the new ink stroke and the predicted ink stroke.
RenderInk();
}
}
private void InputPointerSource_PointerReleased(InputPointerSource sender, PointerEventArgs args)
{
// Clear the stored ink points and erase the predicted ink rendered for this stroke.
_actualPoints.Clear();
ClearPredictedInk();
_predictedPoints.Clear();
}
private void RenderInk()
{
// Render the ink strokes defined by _actualPoints and _predictedPoints.
throw new NotImplementedException();
}
private void ClearPredictedInk()
{
// Clear the ink stroke defined by _predictedPoints.
throw new NotImplementedException();
}
}
Commenti
Questo oggetto viene in genere usato per ridurre la latenza di rendering per l'input input penna. In alcuni casi, quando un utente disegna molto rapidamente, può verificarsi un notevole divario tra la punta della penna e l'input penna sottoposto a rendering.
Proprietà
| Nome | Descrizione |
|---|---|
| PredictionTime |
Ottiene o imposta la distanza del futuro dall'ora corrente in cui l'oggetto PointerPredictor deve tentare di stimare l'input del puntatore. |
Metodi
| Nome | Descrizione |
|---|---|
| Close() |
Chiude pointerPredictor e rilascia le risorse di sistema. |
| CreateForInputPointerSource(InputPointerSource) |
Crea un'istanza di un oggetto PointerPredictor per l'oggetto InputPointerSource specificato. |
| Dispose() |
Esegue attività definite dall'applicazione associate alla liberazione, al rilascio o alla reimpostazione di risorse non gestite. |
| GetPredictedPoints(PointerPoint) |
Recupera una raccolta di punti stimati per l'oggetto PointerPoint specificato. |