NSMutableArray et NSvalue

JekarJekar Membre
11:53 modifié dans API AppKit #1
Allez encore une question, cette fois sur NSValue.
j ai un NSmutableArray construit comme ca :

for (int currentAngle = 0; currentAngle &lt; numberOfSides; currentAngle++) { <br />		float newAngle = (angle * currentAngle) - rotationDelta; <br />		float curX = cos(newAngle) * radius; <br />		float curY = sin(newAngle) * radius; <br />		[result addObject:[NSValue valueWithCGPoint:CGPointMake(center.x + curX, <br />																center.y + curY)]]; <br />	} <br />


Et je voudrais recuperer tout ce qu il y a dedans pour l'utiliser dans plusieurs CGContextAddLineToPoint.
Comment récuperer les X et Y de chaque NSvalue?

Merci


Réponses

  • JekarJekar Membre
    11:53 modifié #2
    Je me repond a moi meme :

    for(id key in result) {<br />		NSValue *theValue = key;<br />		CGPoint thePoint = [theValue CGPointValue];<br />		CGContextAddLineToPoint (context, thePoint.x , thePoint.y );<br />	<br />	}
    


  • JekarJekar Membre
    11:53 modifié #3
    Une idee pour le parcourir en sens inverse?
  • schlumschlum Membre
    11:53 modifié #4
    NSEnumerator *e = [result reverseObjectEnumerator];<br />NSValue *theValue;<br />while((theValue=[e nextObject])!=nil) {<br />&nbsp; &nbsp; CGPoint thePoint = [theValue CGPointValue];<br />&nbsp; &nbsp; CGContextAddLineToPoint (context, thePoint.x , thePoint.y );<br />}
    
  • Philippe49Philippe49 Membre
    11:53 modifié #5
    Il existe une méthode pour ajouter une ligne brisée à  un CGContext :CGContextAddLines

    CGPoint vertices[ numberOfSides+1]={0.};
    int index;
    for (int index=0;int currentAngle = 0.; currentAngle < numberOfSides; currentAngle++) {
    float newAngle = (angle * currentAngle) - rotationDelta;
    float curX = cos(newAngle) * radius;
    float curY = sin(newAngle) * radius;
    vertices[index]=CGPointMake(center.x + curX,center.y + curY)]];
    }
    vertices[numberOfSides]= vertices[0];

    // puis le tracé
    CGContextAddLines (theContext,vertices,numberOfSides+1);


  • Philippe49Philippe49 Membre
    11:53 modifié #6
    dans 1225621952:

    Je me repond a moi meme :

    for(id key in result) {
    NSValue *theValue = key;
    CGPoint thePoint = [theValuekey CGPointValue];
    CGContextAddLineToPoint (context, thePoint.x , thePoint.y );

    }




    La ligne en rouge est inutile  ;) car key est déjà  une NSValue par le code précédent.

  • JekarJekar Membre
    11:53 modifié #7
    Merci!


    Une ligne brisée? c est quoi? une ligne en pointillé?
  • Philippe49Philippe49 Membre
    11:53 modifié #8
    dans 1225631397:

    Une ligne brisée? c est quoi? une ligne en pointillé?

    une ligne brisée = une succession de segments bout à  bout
    On dit aussi un polygone ouvert ou fermé. Dans mon code ci-dessus, je l'ai fermé.

  • JekarJekar Membre
    11:53 modifié #9
    Comment on fait des pointillés?
  • schlumschlum Membre
    11:53 modifié #10
    dans 1225637103:

    Comment on fait des pointillés?


    En utilisant alternativement CGContextMoveToPoint et CGContextLineToPoint...
  • JekarJekar Membre
    11:53 modifié #11
    par exemple pour faire un carre j ai 4 points, avec votre methode il en faut beaucoup plus, il faut les points intermédiaires, c est bien ca?
  • Philippe49Philippe49 Membre
    11:53 modifié #12
    C'est la propriété lineDash il me semble , voir l'exemple QuartzDemo et la doc sur CoreGraphics sans doute Quartz 2d Programming guide.
    CGContextSetLineDash .. à  tester
  • Philippe49Philippe49 Membre
    novembre 2008 modifié #13
    La doc sur le graphisme avec NSBezierPath explique cela très bien côté MAC OS (et non iPhone)
    Plus précisément Cocoa Drawing Guide > Paths
    Il y a sans doute la doc équivalente pour CoreGraphics
  • Philippe49Philippe49 Membre
    11:53 modifié #14
    Ah voilà 
    Quartz 2D Programming Guide > Paths > Painting a path

Connectez-vous ou Inscrivez-vous pour répondre.