Application d'aide à  la conception de parapente

2»

Réponses

  • image/evil.gif' class='bbc_emoticon' alt='>:D' /> Ouais. Tu sais les délais d'appros des Macs en ce moment c'est comme l'âge de la retraite ; tous les mois c'est deux mois de plus.
  • * touche du bois *
  • CéroceCéroce Membre, Modérateur
    'Airdrien' a écrit:


    Une idee pour transformer une forme de bezier constituee de 3 ou 4 vertices en une forme plus fournies?


    Une courbe de Bézier est une courbe paramétrique. On peut donc partir de son équation pour trouver les coordonnées d'un point se trouvant sur la courbe et qui se trouve entre deux points.

    Plus facile à  dire qu'à  faire, mais faisable.
  • L'article sur [url="http://fr.wikipedia.org/wiki/Courbe_de_Bézier"]Wikipedia[/url] est bien fichu. Il y a un peu de boulot mais c'est effectivement largement faisable.
  • 'jpimbert' a écrit:


    L'article sur [url="http://fr.wikipedia.org/wiki/Courbe_de_Bézier"]Wikipedia[/url] est bien fichu. Il y a un peu de boulot mais c'est effectivement largement faisable.



    'Céroce' a écrit:


    Une courbe de Bézier est une courbe paramétrique. On peut donc partir de son équation pour trouver les coordonnées d'un point se trouvant sur la courbe et qui se trouve entre deux points.

    Plus facile à  dire qu'à  faire, mais faisable.


    En effet ! Un peu de maths ça va me mettre dans le bain pour la suite ! Vu que je n'ai plus besoin d'une courbe lisse après discrétisation (des segments suffiront pour la suite, c'est la position des profils qui m'intéresse), ça devrait être jouable :-)
  • Avant d'aller plus loin dans le développement, je me suis collé à  un petit exercice...



    Dans les vues, l'utilisateur peut modifier les formes (à  plat et voûte) à  la souris.

    Mon code fait bien le boulot mais je voulais vérifier que mon modèle, contrôlé par mon document, s'actualise correctement.



    J'ai donc ajouté une NSTableView pour afficher les coordonnées des points constituant les formes, avec plusieurs colonnes (i, x, y, z).



    Avec un Outlet et DataSource, ainsi que les 2 méthodes de NSTableView, la table affiche le bon contenu.



    Il y a juste un petit problème :

    quand l'utilisateur modifie la forme, la table ne s'actualise pas. Je conçois bien qu'elle n'ait pas de raison de le faire, Pourtant c'est ce que je voudrais !



    ReloadData fonctionne, si la méthode est appelée, et je ne veux pas d'un bouton pour ça !

    J'ai pensé aux notifications (je ne les maà®trise pas...).



    Voici le code concerné :
    <br />
    -(int)numberOfRowsInTableView:(NSTableView *)tv<br />
    {<br />
    int i = [_vaultShapeView.vaultShape.vertices count];<br />
    NSLog(@&quot;%i&quot;,i);<br />
    return i;<br />
    }<br />
    -(id)tableView:(NSTableView *)tv<br />
    objectValueForTableColumn: (NSTableColumn *)tableColumn<br />
    	 row: (int)row<br />
    {<br />
    if ([[tableColumn identifier] isEqualToString: @&quot;_i&quot;])<br />
    {<br />
      NSString *_s = [NSString stringWithFormat:@&quot;%i&quot;,row];<br />
      return _s;<br />
    }<br />
    if ([[tableColumn identifier] isEqualToString: @&quot;_x&quot;])<br />
    {<br />
      NSString *_s = [NSString stringWithFormat:@&quot;%.2f&quot;,[[[_vaultShape.vertices objectAtIndex:row] anchor] x]];<br />
      return _s;<br />
    }<br />
    if ([[tableColumn identifier] isEqualToString: @&quot;_y&quot;])<br />
    {<br />
      NSString *_s = [NSString stringWithFormat:@&quot;%.3f&quot;,[[[_vaultShape.vertices objectAtIndex:row] anchor] y]];<br />
      return _s;<br />
    }<br />
    if ([[tableColumn identifier] isEqualToString: @&quot;_z&quot;])<br />
    {<br />
      NSString *_s = [NSString stringWithFormat:@&quot;%.3f&quot;,[[[_vaultShape.vertices objectAtIndex:row] anchor] z]];<br />
      return _s;<br />
    }<br />
    return self;<br />
    }<br />
    




    Comment actualiser la table quand le modèle (vaultShape et flatShape, pour le moment) change ?
  • AliGatorAliGator Membre, Modérateur
    Tu as bien du code (de ton Controller idéalement) qui est informé quand tu cliques dans ta vue pour déplacer un point ? Code qui doit du coup certainement bouger ces points dans ton modèle, je suppose ?

    Pourquoi ne pas appeler le reloadData à  ce moment-là  ?
  • AirdrienAirdrien Membre
    février 2013 modifié #39
    Voilà  mon erreur !

    je modifie mon modèle dans cette méthode :
    <br />
    - (void)mouseDragged:(NSEvent *)theEvent<br />
    


    qui est dans ma classe de custom view.

    Du coup je ne peux pas appeler reloadData à  cet endroit.

    C'est le contrôleur qui devrait s'en charger, en étant informé par la vue, mais comment?

    Comment faire en sorte que mouseDragged informe le contrôleur, avec en plus les données utiles à  la modification?
  • AliGatorAliGator Membre, Modérateur
    Design Pattern "delegate" tout simplement !
  • Je savais que je ne couperai pas à  la délégation !

    Et ça marche :-)
  • Bon, mon vieux macbook rugit image/apple.gif' class='bbc_emoticon' alt='' /> et me voilà  sous XCode 4 ! Portage de mon projet sans douleur pour ne rien gâcher.

    Seul hic : il fait beau, ça vole, projet en pause...
  • CéroceCéroce Membre, Modérateur
    Au moins quand le mauvais temps reviendra, nous serons plus à  même de te guider!
  • Ca ne devrait pas tarder... Merci!
  • Il neige depuis 24h. Presque prêt à  exploiter mes courbes de bezier et repartir les profils sur l'envergure... Un peu de maths et un minimum de code si possible!

    Le gros morceau de mon modèle sera alors constitué de profils placés dans l'espace...
  • J'avance un peu...

    Comment choisir le séparateur décimal de l'application ?

    Actuellement, les valeurs calculées s'affichent avec un "." et les valeurs saisies avec une ","

    Par exemple, dans la cellule "Flat Area" s'affiche en temps réel la surface à  plat de l'aile, avec un point. La surface peut être directement saisie et la forme à  plat est mise à  l'échelle en appuyant sur la touche entrée, les décimales ne sont prises en compte qu'avec une virgule.

    Ce n'est pas pratique, surtout si on appuie une deuxième fois sur entrée accidentellement.

    En fait, je voudrai imposer le "." partout dans l'application, mais comment?
  • CéroceCéroce Membre, Modérateur
    'Airdrien' a écrit:


    Comment choisir le séparateur décimal de l'application ?


    Dans l'éditeur de XIB, glisse un NSNumberFormatter sur chaque NSTextField.


    'Airdrien' a écrit:


    En fait, je voudrai imposer le "." partout dans l'application, mais comment?


    L'appli n'a rien à  imposer à  l'utilisateur. Il faut utiliser les réglages définis dans les Préférences Système "International". C'est ce que fait NSNumberFormatter par défaut.
  • 'Céroce' a écrit:


    L'appli n'a rien à  imposer à  l'utilisateur. Il faut utiliser les réglages définis dans les Préférences Système "International". C'est ce que fait NSNumberFormatter par défaut.


    Ok, ça fonctionne en sélectionnant "behaviour : OS 10.0 +" et en laissant le champ "separator" vierge.

    Les valeurs des cellules sont affectées par un
    <br />
    setDoubleValue<br />
    
Connectez-vous ou Inscrivez-vous pour répondre.