CGPath avec 2 systemes de coordonnées

vico92vico92 Membre
01:12 modifié dans API UIKit #1
Bonjour,

(Je sais, je pose beaucoup de questions, mais ce forum est là  pour ça, non, alors pourquoi m'en priver ? hé hé ^^)

Voilà , ma prochaine étape consistera à  dessiner 2 lignes blanches avec Quartz2D, reliant un cerf volant à  2 poignées.
Une de ces lignes part de la partie gauche du cerf-volant, l'autre de la partie droite et rejoignent leurs poignées respectives.

Comment indiquer les points de depart des CGPath dans le systeme de coordonnées de la view cerf-volant, et les points d'arrivée dans le system de coordonnées des poignées ?

Conversion de coordonées ? ça marcherait ça ?

@+
Vico

Réponses

  • schlumschlum Membre
    01:12 modifié #2
    Rien compris à  la question perso...  B)
    Mais si c'est la question, il y a les méthodes de NSView :

    - (NSPoint)convertPoint:(NSPoint)aPoint fromView:(NSView *)aView<br />- (NSPoint)convertPoint:(NSPoint)aPoint toView:(NSView *)aView<br />- (NSPoint)convertPointFromBase:(NSPoint)aPoint<br />- (NSPoint)convertPointToBase:(NSPoint)aPoint
    
  • vico92vico92 Membre
    01:12 modifié #3
    lol, j'essayais de décrire l'emplacement des points des 2 CGPath.

    Une ligne relie le cerf-volant à  une poignée (qu'on tient dans la main).
    Sur un cerf-volant à  2 lignes, il y a 1 points d'attache de part et d'autre du centre du cerf-volant (1 pour tourner à  gauche et 1 pour la droite).

    Mon CGPath doit donc partir d'une coordonnée relative au cerf-volant, et rejoindre l'extremité de la poignée qui a son propre systeme de coord.

    C'est tout, et je pense bien qu'il faudra utiliser les méthodes que tu cites pour dessiner ces lignes.
  • schlumschlum Membre
    01:12 modifié #4
    Bah moi déjà  j'aurais fait une seule vue pour le dessin... j'aime pas trop le concept de vues qui bougent tout le temps.
  • vico92vico92 Membre
    01:12 modifié #5
    Là , c'est moi qui ne comprends pas ta réponse.
    Quel dessin ?

    Comment ça des vues qui bougent tout le temps ?
    (le cerf-volant, il doit forcement se déplacer, donc tu vx parler du decors de fond ?)


  • AliGatorAliGator Membre, Modérateur
    01:12 modifié #6
    Il veut parler d'une seule vue dans laquelle tu dessinerais tout.

    Sinon j'ai du mal à  capter ton problème : la frame de ta vue cerf-volant indiquent les coordonnées de cette UIView dans la UIView parente (contrairement à  bounds qui indiquent les coordonnées locaux). Donc avec [cerfVolantView frame] tu devrais avoir tout ce qu'il te faut, non ?
  • vico92vico92 Membre
    juin 2009 modifié #7
    dans 1246011466:

    Il veut parler d'une seule vue dans laquelle tu dessinerais tout.

    ah d'accord, J'ai plusieurs view parce que j'ai des actions sur certaines vues et pas d'autres etc.

    Sinon j'ai du mal à  capter ton problème : la frame de ta vue cerf-volant indiquent les coordonnées de cette UIView dans la UIView parente (contrairement à  bounds qui indiquent les coordonnées locaux). Donc avec [cerfVolantView frame] tu devrais avoir tout ce qu'il te faut, non ?


    ah oui, c'est vrai, mais je vois pas trop comment exploiter ça dans mon cas. Comme les points d'attache des ficelles ne rejoignent pas le centre du cerf-volant (voir schema), et que ce dernier fait des rotations, les coordonnées des CGPath sont compliquées à  calculer.  :crackboom:-

    C'est probablement Schlum qui a raison, avec ça ça devrait fonctionner:
    <br /> (NSPoint)convertPoint:(NSPoint)aPoint fromView:(NSView *)aView<br />- (NSPoint)convertPoint:(NSPoint)aPoint toView:(NSView *)aView<br />- (NSPoint)convertPointFromBase:(NSPoint)aPoint<br />- (NSPoint)convertPointToBase:(NSPoint)aPoint<br />
    
  • Eric P.Eric P. Membre
    01:12 modifié #8
    Bonjour,

    Je pense également qu'un dessin global est préférable et plus simple.
    Il suffit de garder en mémoire l'angle du cerf-volant et le nombre de tours ce qui permettra de dessiner les ficelles en conséquence.

    Enfin ce n'est pas moi qui écrit le programme.

    Bravo pour l'idée.

    Eric
  • vico92vico92 Membre
    01:12 modifié #9
    dans 1246028239:

    Bravo pour l'idée.


    Merci Eric, le concept était vraiment nouveau quand je me suis lancé il y a 2 mois, mais aujourd'hui il existe déjà  2 apps de cerf-volant (heureusement, elles sont pas super bien pensées ni faites, hé hé ^^)
  • vico92vico92 Membre
    01:12 modifié #10
    Bonsoir tt le monde,

    Je suis bien content car j'ai réussi à  dessiner un CGPath qui relie 2 objets animés entre eux, tout se passe bien, et c la première fois, Ho Ho !!! :)))))

    A part ça, je voudrais bien comprendre comment utiliser les méthodes que tu m'as données, Schlum :
    (en fait, c'est la mise en forme qui me perturbe, celle-là  même qu'on retrouve partout dans le Guide de Référence Apple).

    Quoi mettre dans le .h
    et quoi dans le .m ?

    <br />- (NSPoint)convertPoint:(NSPoint)aPoint fromView:(NSView *)aView<br />- (NSPoint)convertPoint:(NSPoint)aPoint toView:(NSView *)aView<br />- (NSPoint)convertPointFromBase:(NSPoint)aPoint<br />- (NSPoint)convertPointToBase:(NSPoint)aPoint<br />
    


    Merci bcp,
    Vico.
  • Philippe49Philippe49 Membre
    juin 2009 modifié #11
    dans 1246307379:

    Quoi mettre dans le .h
    et quoi dans le .m ?

    Dans le .h rien, ces méthodes sont définies dans UIView et utilisables sans redéfinition.
    Dans le .m, c'est à  toi de voir où tu en as besoin.
    Explication de texte:
    Pour [view1 convertPoint:aPoint fromView:view2],
    aPoint correspond à  un couple de coordonnées d'un point A dans le repère attaché à  la vue view2.
    Le résultat est un couple de coordonnées du même point réel A dans le repère attaché à  la vue view1.
    CGPoint coordInView1=[view1 convertPoint:coordInView2 fromView:view2];

    Le plus souvent cela revient à  soustraire la différence sur les coordonnées des origines respectives de ces vues.
    view2=nil est une convention qui équivaut à  considérer que view2 est la window de l'application. 


    Plus généralement
    Ces méthodes de conversion se trouvent expliquées dans n'importe quel livre de base comme
        -Programmation Cocoa avec Mac OSX de Hillegass
        -Beginning iPhone Development
        - ...
    Rappelons que Objective-C, Cocoa et Cocoa Touch sont basés sur un certain nombre de prérequis indispensables, et que si on veut avancer raisonnablement, il faut en passer par là . 

  • vico92vico92 Membre
    juin 2009 modifié #12
    dans 1246345127:

    Pour [view1 convertPoint:aPoint fromView:view2],


    Ah ben c le view1 qui me manquait, alors, marchi bien.
    Passer de -(NSPoint)convertPoint:(NSPoint)aPoint fromView:(NSView *)aView    à     [view1 convertPoint:aPoint fromView:view2] est logique à  posteriori mais pas encore évident pour moi à  priori...

    -Beginning iPhone Development


    J'ai ce livre, semble être une très bonne synthèse (et donc par définition incomplet peut-être). Je n'avais pas trouvé les convertPoint dedans ???

    Merci Philippe, je vais essayer ça tout de suite  >:) ^^

    EDIT: ça marche !!!!
Connectez-vous ou Inscrivez-vous pour répondre.