IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

Freehep dessin vectoriel et PDF


Sujet :

2D Java

  1. #21
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    Merci de ton aide.
    Je ne comprends pas encore tout le code mais j'analyse et j'ai déjà réussis à le centrer c'est pas mal.

    Par contre je ne comprends cette phrase
    // si gestion rtl,
    Qu'est ce que rtl ? (j'imagine right to left, mais ca se gère comment?)

  2. #22
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par zulot Voir le message
    Merci de ton aide.
    Qu'est ce que rtl ? (j'imagine right to left, mais ca se gère comment?)
    Le TextLayout sait dire si on doit écrire le texte en Right To Left ou Left To Right (la méthode isLeftToRight()). Comment lui le sait-il ? Et bien, j'en sais rien, je n'ai jamais eu à gérer ça à un niveau plus bas. A priori, je dirais par la Locale, directement ou indirectement. Si on regarde le code de TextLayout, on voit que ça vient de TextLine qui le tire de Bidi, qui le dire de BidiBase (par un attribut du texte) et après on s'enfonce encore dans les tréfonds des API Sun... le seul moment où je vois clairement où on choisi une locale sans me taper tout le code des API Sun, c'est quand le BreakIterator est créé (Dans l'exemple que je te donne, c'est un BreakIterator par défaut, avec la Locale par défaut). Donc attention si tu trouves un moyen de forcer l'attribut dans le texte, il faudra être cohérent par le BreakIterator (donc ne plus prendre la valeur par défaut).
    A noter que dans Swing/AWT, le composant sait s'il est en LTR ou RTL et le sait de la Locale.

    Attention, à ne pas confondre RTL, et cadrage à droite. Le RTL c'est cadré à droite, mais aussi écrit de droit à gauche (comme en Arabe ou Hébreu...). Mais tu peux utiliser la même formule pour simplement un cadrage à droite. A ce propos, pour ce genre de manipulation pour drawString, j'ai écrit un code pour gérer l'alignement d'une String dans un rectangle (centrage, alignement à droite, gauche, en haut, en bas) que tu pourras trouver dans cette discussion. Tu y trouveras d'ailleurs différentes petites choses qui pourraient t'intéresser : un petit interpréteur de SVG simplifié (pas complet, mais facilement complétable), une fonction pour déterminer le centre visuel d'une shape (le point le mieux adapté pour centrer une texte d'étiquette sur la shape), etc.)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #23
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    J'ai testé ton code dans tous les sens, et oh surprise si le texte est entièrement en majuscule ca ne fonctionne pas. Le \n passe à la trappe

  4. #24
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut


    Quand je le teste moi, oh, pas de surprise, j'ai bien mon texte sans changement de casse et avec les passages à la ligne :

    Nom : Capture.PNG
Affichages : 132
Taille : 6,0 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.font.LineBreakMeasurer;
    import java.awt.font.TextAttribute;
    import java.awt.font.TextLayout;
    import java.text.AttributedCharacterIterator;
    import java.text.AttributedString;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class DemoMultiLine extends JPanel {
     
    	public DemoMultiLine() {
    		setBackground(Color.WHITE);
    		setPreferredSize(new Dimension(500, 500));
    	}
     
    	@Override
    	protected void paintComponent(Graphics g) {
    		super.paintComponent(g);
     
    		Graphics2D g2d = (Graphics2D)g; 
    		Font font = new Font("Arial",Font.BOLD,30);
    		String string = "Ligne 1\n    Ligne 2\nLigne 3";
    		AttributedString text = new AttributedString(string);
    		text.addAttribute(TextAttribute.FONT, font);
    		AttributedCharacterIterator iterator = text.getIterator();
    		LineBreakMeasurer measurer = new LineBreakMeasurer(iterator, g2d.getFontRenderContext());
    		measurer.setPosition(0);
    		float x=0; // coordonnées gauche du début du texte
    		float y=25; // attention, y de la baseline
    		int maxWith = Integer.MAX_VALUE; // la largeur max sur laquelle on veut écrire
    	    while (measurer.getPosition() < string.length()) {
    	    	int next = measurer.nextOffset(maxWith); 
    	    	int end = measurer.getPosition()+next;
    	    	int linebreakpos = string.indexOf( '\n', measurer.getPosition()+1);
    	    	if( linebreakpos != -1 && next > (linebreakpos - measurer.getPosition()) ){
    	    		end = linebreakpos;
    	    	} 
    		    final TextLayout layout = measurer.nextLayout(maxWith, end, false);
     
    		    y += layout.getAscent();
    		    // si gestion rtl, à la place de la ligne suivante, faire (boxWidth = largeur de boite) : layout.draw(g, x + (layout.isLeftToRight() ? 0 : (boxWidth - layout.getAdvance())), y);
    		    layout.draw(g2d, x , y); 
    		    y += layout.getDescent() + layout.getLeading();
    		}
     
     
    	}
     
     
    	public static void main(String[] args) {
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		JPanel panel = new JPanel();
    		panel.add(new DemoMultiLine());
     
    		frame.add(panel);
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
    	}
     
    }
    Tu as bien laissé les \n et non pas que les \r ? Tu peux utiliser ce que tu veux, mais il faut adapter cette lignestring.indexOf( '\n', measurer.getPosition()+1). Et pour les majuscules, je ne vois pas trop pourquoi, à part si tu utilises une police qui n'a que des majuscules, ou un attribut particulier peut-être (de capitalisation, mais ça n'existe pas à ma connaissance - d'ailleurs pour les attributs existants, voir la javadoc).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #25
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Par défaut
    Aie, ca doit venir de l'extraction XML !
    Meme avec le CDATA ca ne fonctionne pas. Mais si je prends le texte dans un string ca fonctionne ....

Discussions similaires

  1. [Lazarus] Dessin vectoriel ou MetaFileCanvas
    Par pdufresn dans le forum Lazarus
    Réponses: 6
    Dernier message: 01/06/2006, 10h34
  2. Dessin vectoriel 2D : librairies, docs, etc.
    Par lio33 dans le forum MFC
    Réponses: 3
    Dernier message: 24/05/2006, 13h43
  3. Dessin vectoriel et PHP
    Par Pagan dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 15/05/2006, 22h32
  4. Dessin vectoriel avec Python
    Par cboudy dans le forum PyQt
    Réponses: 2
    Dernier message: 04/04/2006, 21h38
  5. Dessin vectoriel
    Par Speed41 dans le forum Langage
    Réponses: 6
    Dernier message: 16/08/2004, 07h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo