dans une application de dessin simple J'ai un modèle qui a un NSMutableArray
curvedPaths
contenant toutes les lignes que l'utilisateur a dessinées. Une ligne elle-même est également NSMutableArray
, contenant les objets ponctuels. Comme je dessine courbes NSBezier
chemins, ma matrice de points a la structure suivante: linePoint, controlPoint, controlPoint, linePoint, controlPoint, controlPoint, etc ... Je pensais avoir un tableau contenant tous les points plus les points de contrôle serait plus efficace que traiter 2 ou 3 tableaux différents.Optimisation d'un dessin dessin de code
Évidemment, ma vue dessine les chemins qu'elle obtient du modèle, ce qui conduit à la vraie question: Y at-il un moyen d'optimiser le code suivant (dans la méthode drawRect de la vue) en termes de vitesse?
int lineCount = [[model curvedPaths] count];
// Go through paths
for (int i=0; i < lineCount; i++)
{
// Get the Color
NSColor *theColor = [model getColorOfPath:[[model curvedPaths] objectAtIndex:i]];
// Get the points
NSArray *thePoints = [model getPointsOfPath:[[model curvedPaths] objectAtIndex:i]];
// Create a new path for performance reasons
NSBezierPath *path = [[NSBezierPath alloc] init];
// Set the color
[theColor set];
// Move to first point without drawing
[path moveToPoint:[[thePoints objectAtIndex:0] myNSPoint]];
int pointCount = [thePoints count] - 3;
// Go through points
for (int j=0; j < pointCount; j+=3)
{
[path curveToPoint:[[thePoints objectAtIndex:j+3] myNSPoint]
controlPoint1:[[thePoints objectAtIndex:j+1] myNSPoint]
controlPoint2:[[thePoints objectAtIndex:j+2] myNSPoint]];
}
// Draw the path
[path stroke];
// Bye stuff
[path release];
[theColor release];
}
Merci, xonic
Bon point là-bas! Sauver les chemins ne m'est pas venu à l'esprit mais c'est en fait une très bonne idée. La chose est, j'ai une vue transparente sur l'ensemble du bureau afin de permettre à l'utilisateur de dessiner sur différentes fenêtres, ou d'écrire des notes, peu importe. Ainsi, les chemins ne changent pas très souvent, mais se dessinent souvent et un utilisateur peut en effacer un ou plusieurs.Je pense que la texture ne fera pas tout le travail. Mais tout à l'heure j'ai découvert la méthode containsPoint: de NSBezierPath qui va même optimiser mon 'code de chemin d'effacement'! Thx beaucoup mec! – xon1c