Effacer une NSView

VeillardVeillard Membre
21:36 modifié dans API AppKit #1
Bonjour,

Je cherche à  effacer un NSRect dans une NSView après avoir tracé une courbe via NSBezierPath. Je sais qu'il existe une fontion C qui est "EraseRect" mais je n'ai rien vu en Obj C.

Merci

Réponses

  • BruBru Membre
    21:36 modifié #2
    un
    [tt]
    NSEraseRect([self bounds]);
    [/tt]
    dans la méthode displayRect: de ta NSView devrait faire l'affaire.

    Note, tu as d'intéressantes fonctions graphiques qui sont incluses dans cocoa. La doc est ICI.

    .
  • mpergandmpergand Membre
    21:36 modifié #3
    Salut :D

    fillRect de NSBezierPath justement, ça t'irais pas ?
  • VeillardVeillard Membre
    21:36 modifié #4
    Merci Bru  ;)
    NSEraseRect([self bounds]);

    Comment je n'ai pas trouvé plus tôt ? J'ai pourtant cherché  :crackboom:-

    Au fait, j'ai commencé à  écrire le tracé des profils de plongée avec les alarmes de palier et de remontée. Ca marche (merci mpergand  ). J'ai mis un aperçu en ligne.

    Pour répondre à  toi mpergand, j'ai déjà  assayé "fillRect de NSBezierPath" sans succès. Je vais réessayer ce soir à  tête reposée peut-être je suis allé trop vite.

    A+
  • VeillardVeillard Membre
    21:36 modifié #5
    Bon, j'ai essayé les deux techniques. Les courbes se superposent toujours l'une sur l'autre. Ce n'est que quand je referme et j'ouvre à  nouveau le carnet que les courbes sont effacées...

    Il doit exister une instruction de réinitialisation  ???
  • mpergandmpergand Membre
    21:36 modifié #6
    Ca ne m'étonne pas, c'est zarbi ton problème, tu utilises le même bezierPath pour dessiner tes courbes ? fais-tu un removeAllPoints entre chaque dessin ? car peut-être ajoutes-tu la nouvelle courbe au bezierPath au lieu de la remplacer ?
  • VeillardVeillard Membre
    21:36 modifié #7
    Non, je ne fais pas de RemoveAllPoints  :-\

    J'ai essayé et ça marche  :brule: :brule: :brule: :brule: :brule:

    Tu vois, j'ai encore beaucoup de choses à  apprendre  o:)

    Merci beaucoup (encore !)
  • mpergandmpergand Membre
    21:36 modifié #8
    :rose!: :rose!::rose!:
    :crackboom:- :crackboom:- :crackboom:-
    :brule: :brule: :brule:
  • muqaddarmuqaddar Administrateur
    21:36 modifié #9
    Déterrage de thread !

    J'ai un gros soucis. Je change un texte dans une vue perso (au départ c'était un textField). Or il se monte dessus à  chaque changement au liue de le remplacer !!!

    Alors j'ai essayé d'effacer tout le contenu de ma vue, avant d'écrire le texte :

    <br />- (void)drawRect:(NSRect)rect {<br />	[[NSColor clearColor] set];<br />	NSEraseRect([self bounds]);<br />	<br />	[sendText drawAtPoint:NSMakePoint(0, 0) withAttributes:stringAttributes];<br />}
    


    Là , je me retrouve avec un beau pavé blanc comme vue au lieu de ma customView transparente. Bref, c'est vraiment chaud à  gérer la transparence !

    Une ch'tite image :

    [Fichier joint supprimé par l'administrateur]
  • Eddy58Eddy58 Membre
    21:36 modifié #10
    Et si à  la place de NSEraseRect, tu essaies ça ? :) :
    [tt]
    NSRectFill(rect);
    [/tt]
  • mpergandmpergand Membre
    21:36 modifié #11
    Oxitan, montre-nous le source complet de ta vue perso, car je soupçonne un beau méli-mélo :)

    Ce qui est sûr, c'est que eraseRect ou fillRect sont inutiles, le problème est ailleurs  ???
  • muqaddarmuqaddar Administrateur
    21:36 modifié #12
    Salut,

    Voilà  le source.
    Je suis passé par une View, parce que ça faisait pareil avec un NSTextField...

    #import &quot;InfosView.h&quot;<br /><br />@implementation InfosView<br /><br />- (id)initWithFrame:(NSRect)frame {<br />&nbsp; &nbsp; self = [super initWithFrame:frame];<br />&nbsp; &nbsp; if (self) {<br />		stringAttributes = [[NSDictionary dictionaryWithObjectsAndKeys:<br />								[NSFont fontWithName:@&quot;Arial&quot; size:12], <br />								NSFontAttributeName,<br />								[NSColor whiteColor], <br />								NSForegroundColorAttributeName, nil] retain];<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; return self;<br />}<br /><br />- (void)dealloc <br />{<br />	[sendText release];<br />	[stringAttributes release];<br />	[super dealloc];<br />}<br /><br />- (void)drawRect:(NSRect)rect {<br />	[[NSColor clearColor] set];<br />	NSEraseRect([self bounds]);<br />	<br />	[sendText drawAtPoint:NSMakePoint(0, 0) withAttributes:stringAttributes];<br />}<br /><br />//accesseurs <br />- (void)setSendText:(NSString *)myString<br />{<br />	[myString retain];<br />	[sendText release];<br />	sendText = myString;	<br /><br />	[self setNeedsDisplay:YES];<br />}<br /><br />- (NSString*)sendText<br />{<br />	return sendText;<br />}<br /><br />@end<br /><br />
    
  • Eddy58Eddy58 Membre
    21:36 modifié #13
    dans 1111141541:

    Oxitan, montre-nous le source complet de ta vue perso, car je soupçonne un beau méli-mélo :)

    Ce qui est sûr, c'est que eraseRect ou fillRect sont inutiles, le problème est ailleurs  ???

    Moi je n'en suis pas si sûr...Oxitan obtient le résultat normal d'NSEraseRect, qui a pour but de remplir le rect en blanc. Alors que NSRectFill lui, se sert bien de la couleur settée. :)
    Voici la doc de NSEraseRect....
    [tt]
    NSEraseRect

    Erases the passed rect by filling it with white.

    void NSEraseRect(const NSRect aRect)

    Discussion
    As its name suggests, NSEraseRect erases the rectangle referred to by its argument, filling it with white. It does not alter the current color.
    [/tt]
  • mpergandmpergand Membre
    21:36 modifié #14
    Bon, j'ai intégré la classe à  ton projet, je me sers du timer Mascotte pour changer et déplacer le texte et ...... no problemo  ???


    - (void)drawRect:(NSRect)rect {
       //  [[NSColor clearColor] set];
        //  NSEraseRect([self bounds]);
           
            [sendText drawAtPoint:NSMakePoint(p++, 0) withAttributes:stringAttributes];
    }


    J'ai bien sûr viré le eraseTruc
    Remarque t'es super balaise, car en imaginant que je veuille faire ce genre d'effet, ben je vois même pas comment le faire ;D
Connectez-vous ou Inscrivez-vous pour répondre.