2010-03-04 7 views
6

Je veux être en mesure de dessiner en utilisant cela comme mon accident vasculaire cérébral. Comment pourrais-je faire cela aussi efficacement que possible, et à la volée, je pensais CGPatternRef, mais je ne sais vraiment pas comment faire.Comment dessiner quelque chose comme ça dans Core Graphics

Éditer: Il n'a pas besoin de déformer le chemin. Je ne peux pas résoudre ce problème dans Illustrator. alt text

+3

Personne ne peut voir cette image sans être connecté aux Forums des développeurs Apple. Veuillez le poster sur http://imgur.com/ ou un service similaire et éditer la question pour intégrer l'image à partir de là. –

+0

Il n'est pas utile qu'au moment de la rédaction de ce document, le site Apple Dev soit hors ligne pour la maintenance. – TechZen

Répondre

0

Cela ressemble à un travail pour OpenGL. CoreGraphics n'offre aucun moyen simple que je connaisse de déformer les étoiles en fonction de leur proximité avec un chemin.

+0

Je n'ai pas besoin de déformer les étoiles sur le chemin que je dessine. – Jaba

2

Vous devrez parcourir le chemin et calculer les coordonnées de la courbe à distances égales (le long du chemin). C'est peu coûteux. La rotation devient un peu poilue (en rotation autour de la tangente), mais dans l'ensemble, c'est un problème de base bézier curve. Il suffit de résoudre l'équation de la courbe et de rendre une étoile à chaque sommet.

Il n'y a rien intégré qui fera tout. Vous pouvez interroger des points pour l'intersection, mais seul le rendu résout la courbe. Ceci est encapsulé par CoreGraphics, donc vous ne pouvez pas le retirer ou profiter de ce qu'ils ont déjà.

C'est quelque chose que vous devriez envisager d'écrire vous-même. Ce n'est pas difficile; honnête. Seule une compréhension de base du calcul est nécessaire ... voire pas du tout. Si vous l'écrivez vous-même, vous pouvez même ajouter les effets de déformation, si vous voulez.

3

Le document Apple aide-t-il?

Voir la section dans Quartz 2D Programming Guide, How Patterns Work, ou Patterns en général.

Voici comment dessiner un début (à partir des documents ci-dessus), PSIZE est la taille de l'étoile:

static void MyDrawStencilStar (void *info, CGContextRef myContext) 
{ 
    int k; 
    double r, theta; 

    r = 0.8 * PSIZE/2; 
    theta = 2 * M_PI * (2.0/5.0); // 144 degrees 

    CGContextTranslateCTM (myContext, PSIZE/2, PSIZE/2); 

    CGContextMoveToPoint(myContext, 0, r); 
    for (k = 1; k < 5; k++) { 
     CGContextAddLineToPoint (myContext, 
        r * sin(k * theta), 
        r * cos(k * theta)); 
    } 
    CGContextClosePath(myContext); 
    CGContextFillPath(myContext); 
} 

il suffit d'ajouter la transformation de la courbe et à chaque point, tracer l'étoile.

Voici un simple C code to calculate points on cubic bezier curve.

+0

Je pense que Pestilence est juste, j'ai essayé de caresser avec un motif, mais qui utilise le motif comme fond d'écran, par exemple. il fonctionne bien en caressant le rectangle mais en caressant la courbe, il ne met pas les étoiles au milieu du trait, il ne fait que recouvrir les étoiles dans le contour pour obtenir des morceaux d'étoiles - comme si vous dessiniez un motif régulier sur le mur sur une courbe, les étoiles ne rentrent pas bien dans la courbe ... – stefanB

+0

Comment puis-je adapter cet exemple pour dessiner des étoiles sur une ligne? – daveoncode

Questions connexes