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 :

SVG dans un graphics2D


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Par défaut SVG dans un graphics2D
    Bonjour,

    Je suis en train de réaliser une appli de dessin schéma électrique

    J'ai créé une bibliothèque de composants électrique/ électronique. (Interrupteur, lampe, diode, disjoncteur, fusible,...)
    Pour le moment, mes composants son représenter pas des images (gif) que j'utilise dans mon schéma (graphic2D)


    J'aimerai ne plus utiliser d'images (pas très pro) par des composants vectoriels/filaires (Désolé, pour le terme)

    Pour cela, je me vois mal créer un objet (graphic2D) par composant de ma bibliothèque.

    Je pensais utiliser des svg mais je ne sais pas comment utiliser mon svg dans mon graphics 2D !

    Avez-vous d'autres idées pour mon logiciel de dessin?
    Un exemple?
    Si l'idée du svg (ou autre format vectoriel) est correct, pouvez vous comment m'aider à utiliser un svg dans mon contexte graphics2D de mon appli

    Cela fait quelques mois que je suis dessus et je ne trouve pas la solution idéale

    Merci beaucoup

    Ci-dessous, la façon dont je dessine mon composant.

    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
    71
    72
    73
    74
    75
     
     
      /**
       * Paints the equipment.
       */
      private void paintEquipment(Graphics2D g2D, List<Object> selectedItems,  
              					  Paint selectionOutlinePaint, Stroke selectionOutlineStroke, 
              					  Paint indicatorPaint, float planScale, 
              					  Color backgroundColor, Color foregroundColor, PaintMode paintMode) {
    	  	BasicStroke pieceBorderStroke = new BasicStroke(1f / planScale);
    	    if (this.sortedDrawingEquipment == null) {
    	        // Sort slip equipment in elevation order
    	        this.sortedDrawingEquipment = 
    	            new ArrayList<DrawingEquipment>(this.slip.getEquipment());
    	      }
    	  	// Draw furniture
    	  	for (DrawingEquipment piece : this.sortedDrawingEquipment) {
    	  		if (piece.isVisible()) {
    	  			boolean selectedPiece = selectedItems.contains(piece);
    	  			// In clipboard paint mode, paint piece only if it is selected
    	  			if (paintMode != PaintMode.CLIPBOARD
    	  					|| selectedPiece) {
    	  				Shape pieceShape = getShape(piece.getPoints());
    	  				// Fill piece area
    	  				g2D.setPaint(backgroundColor);
    	  				g2D.fill(pieceShape);
    	  				// Draw its icon
    	  				paintEquipmentIcon(g2D, piece, pieceShape, planScale);
     
    	  				if (selectedPiece
    	  						&& paintMode == PaintMode.PAINT) {
    	  					// Draw selection border
    	  					g2D.setPaint(selectionOutlinePaint);
    	  					g2D.setStroke(selectionOutlineStroke);
    	  					g2D.draw(pieceShape);
    	  				}        
    	  				// Draw its border
    	  				g2D.setPaint(foregroundColor);
    	  				g2D.setStroke(pieceBorderStroke);
    	  				g2D.draw(pieceShape);
     
    	  				if (selectedItems.size() == 1 
    	  						&& selectedItems.get(0) == piece
    	  						&& paintMode == PaintMode.PAINT) {
    	  					paintEquipmentIndicators(g2D, 
    	  							(DrawingEquipment)selectedItems.get(0), indicatorPaint, planScale);
    	  				}
    	  			}
    	  		}
    	  	}
      }
     
      /**
       * dessine un icône avec g2D
       */
      private void paintEquipmentIcon(Graphics2D g2D, DrawingEquipment piece, 
              							Shape pieceShape, float planScale) {
    	Shape previousClip = g2D.getClip();
    	// Clip icon drawing into piece shape
    	g2D.clip(pieceShape);
        AffineTransform previousTransform = g2D.getTransform();
        // Get piece icon
        Icon icon = IconManager.getInstance().getIcon(piece.getIcon(), 128, this);
        // Translate to piece center
        g2D.translate(piece.getX(), piece.getY());
        // Scale icon to fit in its area
        float minDimension = Math.min(piece.getWidth(), piece.getHeight());
        float iconScale = Math.min(1 / planScale, minDimension / icon.getIconHeight());
        g2D.scale(iconScale, iconScale);
        // Paint piece icon
        icon.paintIcon(this, g2D, -icon.getIconWidth() / 2, -icon.getIconHeight() / 2);
        // Revert g2D transformation to previous value
        g2D.setTransform(previousTransform);
        g2D.setClip(previousClip);
      }

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Pour le SVG en Java le plus connu est Batik. Mais j'ai pas essayé, j'ai pas vu, etc.

  3. #3
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Par défaut
    Hello
    oui, j'ai déjà essayé batik pour lire un svg mais je ne sais pas comment utiliser le svg dans mon schéma (graphics2D)

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Graphics2D est en quelque sort la feuille de papier sur laquelle tu dessines. Tu n'a donc pas besoin d'en avoir un par composant (c'est meme peu recommande) mais tu peux par contre avoir une methode de rendu par composant (ou au contraire deleguer leur rendu/apparence a une classe utilitaire). Au final le Graphics peut etre aussi bien l'ecran que l'imprimante qu'une image sans que cela change quoi que ce soit a ton code de rendu.

    Batik permet justement de charger du SVG et de le rendre dans un Graphics2D quelconque.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765

  6. #6
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Par défaut
    C'est exactement ce que je souhaite faire....
    Mais je patoge fortement...
    Je dirai même Je m'enfonce dans les abîmes de la programmation

    Je cherche des exemples simples avec batik ou salamander mais en vain
    J'ai trouvé comment transformer un graphics2D en svg mais je n'arrive pas à utiliser des svg dans mon graphics2D


Discussions similaires

  1. SVG dans une surcharge de la méthode paint
    Par mistermick dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 15/02/2007, 17h11
  2. [SMIL][SVG] Mettre du SVG dans du SMIL
    Par Fildz dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 09/07/2006, 18h45
  3. visualisation de svg dans un etat?
    Par xavier-Pierre dans le forum Access
    Réponses: 2
    Dernier message: 26/05/2006, 12h56
  4. [SVG][JSP]Comment inserer du SVG dans un JSP ?
    Par Jaxofun dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/04/2005, 14h42
  5. Insérer du SVG dans HTML
    Par alexixlebaulois dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 02/07/2004, 15h55

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