2017-08-12 4 views
1

Ma question comporte trois parties: Je peux tracer des formes comme ligne, cercle, rectangle et .. sur WPF Canvas. Je souhaite utiliser les fonctionnalités InkCanvas comme l'effacement et le déplacement des traits.Comment puis-je convertir une forme comme un rectangle ou un cercle en collection de points de stylet dans WPF?

  1. Est-il possible de convertir cette forme à une collection de points de stylet et ajouter cette collection à InkCanvas?
  2. Si c'est possible, comment puis-je faire cela?
  3. Y a-t-il une meilleure approche à cette situation?

Guide moi s'il vous plaît.

Répondre

2

tout d'abord, la réponse est Oui. vous pouvez convertir les chemins en collection de traits, puis les ajouter à InkCanvas.
Pour la deuxième partie de votre question, la réponse devrait être quelque chose comme ceci:

Point mypoint; 
Point tg; 
var pointCollection = new List<Point>(); 
    for (var i = 0; i < 500; i++) 
     { 
      SomePath.Data.GetFlattenedGeometryPath() 
         .GetPointAtFractionLength(i/500f, out mypoint, out tg); 
      pointCollection.Add(p); 
     } 

Pour le point de stylet et collection de pointe du stylet:

StylusPointCollection StPoints = new StylusPointCollection(); 

ajouter des points de stylet lors de chemin de conversion à la collecte de points par:

StPoints.Add(new StylusPoint(p.X, P.Y)); 

Et après cette étape, appeler la méthode Stroke pour créer une collection de s Trökes de votre collection de stylet:

Stroke st = null; 
st = new Stroke(StPoints); 

Mise à jour
Oui! Il existe de meilleurs moyens d'ajouter des formes à inkCanvas.

  1. Vous pouvez définir ce point de stylet forme directement et les ajouter à l'aide MouseDown, MouseMove .. par exemple pour dessiner un rectangle:

    pts.Add(new StylusPoint(mouseLeftDownPoint.X, mouseLeftDownPoint.Y)); 
    pts.Add(new StylusPoint(mouseLeftDownPoint.X, currentPoint.Y)); 
    pts.Add(new StylusPoint(currentPoint.X, currentPoint.Y)); 
    pts.Add(new StylusPoint(currentPoint.X, mouseLeftDownPoint.Y)); 
    pts.Add(new StylusPoint(mouseLeftDownPoint.X, mouseLeftDownPoint.Y)); 
    
  2. Ou Remplacer méthode DrawCore de classe Stroke et définissez un nouveau type de trait. Custom Rendering Ink (MSDN)

+1

Merci :) Je vais essayer de nouvelles méthodes. Je pense que c'est une très bonne idée de dessiner directement sur Inkcanvas au lieu de convertir des chemins. –

+1

Oui c'est. Comme toujours, cela économise de la mémoire et du traitement, et à côté de ce point de stylet ne supporte pas les points de brasier. – hemarn