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

 Java Discussion :

Composant Radar Steelserie


Sujet :

Java

  1. #1
    Membre confirmé Avatar de hugoclo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 615
    Points : 480
    Points
    480
    Par défaut Composant Radar Steelserie
    Bonjour,

    Je me sers du class Radar issu de la Librairie Steelserie.
    J'arrive à créer de Poi dessus (echo radar) sans probleme, par contre comment faire pour savoir sur lequel je suis quand je clique avec ma souris.
    Je stocke tout ces poi dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HashMap<Integer, Point2D> map_Px = new HashMap<Integer, Point2D>();
    .
    Je ne comprend pas le systeme des point2d.
    Exemple je créer un Poi : mon_Poi, il apparait sur mon radar ensuite j'utilise se code sur un bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Poi mon_poi= new Poi("tutu",51.033333, 1.2333);//Coordonnées Gps
            Rdr.addPoi(mon_poi);       
            System.out.println("Poi : "+mon_poi.getLocation());
    est sur le clique souris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("Ma souris : "+Rdr.getMousePosition().getLocation());
    Voila le résultat
    Poi : Point2D.Double[20137.0, 4330.0]
    Ma souris : java.awt.Point[x=297,y=297]
    Je ne comprends pas tout
    Lorsque le sage montre la lune du doigt l'idiot regarde le doigt.

  2. #2
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    A mon avis ce que tu obtiens par getLocation(), c'est une latitude et une longitude. Essaie la méthode getLocationXY().
    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. #3
    Membre confirmé Avatar de hugoclo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 615
    Points : 480
    Points
    480
    Par défaut
    Salut
    En utilisant la méthode getLocationXY() j'obtiens l la même chose
    Poi : Point2D.Double[20137.0, 4330.0]
    Ma souris : java.awt.Point[x=297,y=297]
    Lorsque le sage montre la lune du doigt l'idiot regarde le doigt.

  4. #4
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    C'est que l'API ne permet pas d'avoir les coordonnées d'un point du radar en coordonnées "swing". Qu'est-ce que tu cherches à faire au juste ?
    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. #5
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Pour rappel un Point en AWT (et donc Swing) les cordonnées sont stocké sous forme d'int Ton "POI" prends en entrée des doubles. Il y a donc au minimum un problème de conversion.

    Après, je suis sûr que tu veux poser une question métier et non technique par rapport à ton radar. Mais, cela manque d'explication sur ce que tu as et sur ce que tu veux faire. Et où tu bloque, en terme métier ! On verra la technique dans un second temps, à mon avis.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  6. #6
    Membre confirmé Avatar de hugoclo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 615
    Points : 480
    Points
    480
    Par défaut
    Merci pour vos réponses,
    Ce que je souhaite c'est lorsque je clique sur un Poi je puisse récuperer ses infos.
    Lorsque le sage montre la lune du doigt l'idiot regarde le doigt.

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 855
    Points
    22 855
    Billets dans le blog
    51
    Par défaut
    Citation Envoyé par kolodz Voir le message
    Pour rappel un Point en AWT (et donc Swing) les cordonnées sont stocké sous forme d'int Ton "POI" prends en entrée des doubles. Il y a donc au minimum un problème de conversion.
    Hum hum hum...

    Citation Envoyé par Javadoc
    Class Point2D

    java.lang.Object
    java.awt.geom.Point2D
    All Implemented Interfaces:
    Cloneable
    Direct Known Subclasses:
    Point, Point2D.Double, Point2D.Float

    [...]

    abstract double getX()
    Returns the X coordinate of this Point2D in double precision.

    abstract double getY()
    Returns the Y coordinate of this Point2D in double precision.

    abstract void setLocation(double x, double y)
    Sets the location of this Point2D to the specified double coordinates.
    Citation Envoyé par Javadoc
    Class Point

    java.lang.Object
    java.awt.geom.Point2D
    java.awt.Point
    [...]

    getX
    public double getX()
    Returns the X coordinate of this Point2D in double precision.
    Specified by:
    getX in class Point2D
    Returns:
    the X coordinate of this Point2D.
    Since:
    1.2

    getY
    public double getY()
    Returns the Y coordinate of this Point2D in double precision.
    Specified by:
    getY in class Point2D
    Returns:
    the Y coordinate of this Point2D.
    Since:
    1.2
    Bien qu'historiquement AWT et Swing après lui travaillent avec des points contenant des coordonnées entières pour les positionnements à l’écran ou dans des images, Java2D (et donc Graphics2D) supporte les coordonnées en nombre flottant (ce qui a une influence sur le rendu quand les rendering hints appropriés sont bien settés).

    Quand tu cliques avec ta souris, tu récupérés des coordonnées écran. Or ton poi dispose a la fois d'un set de coordonnées géographiques (accessibles par getLocation()) et d'un set de coordonnées écran (accessibles par getLocationXY()). Donc tu dois, lors d'un clic, parcourir ta liste de poi et trouver celui en dessous de la souris en comparant les coordonnées écran du curseur et les coordonnées écran des poi. Ensuite tu afficheras les coordonnées géographiques du poi sélectionné.

    De plus, le code source de la classe POI montre bien que la lon et la lat sont récupérables via les méthodes getLon() et getLat(). On peut voir également que pour certains constructeurs, la lon et la lat passées en paramètres sont convertis (normalisées ?) avant d’être stockées et surtout avant d'appeler setLocation(). Ce qui est retourné par getLocation() peut donc varier si les coordonnées raw lon et lat on été normalisées auparavant.

    Conclusion : -> go lire la doc (et les sources) !

    EDIT - mise a jour du lien vers la version la plus récente du code source, je crois.

    PS : je trouve sa conversion des coordonnées géographiques en coordonnées écran assez... arbitraire...

    EDIT 2

    Note : le code source de la classe Radar semble indiquer qu'il y a en plus une autre transformation effectuée par le rendu, par rapport au point central du radar et également une mise à l’échelle par rapport au facteur de zoom (voir affichage des poi dans paintComponent()). Il faut aussi tenir compte du décalage du aux Insets du composant dans le système de coordonnées (comme d'hab quoi). Il faudra donc faire quelques transformations des coordonnées souris reçues avant de pouvoir les comparer aux coordonnées écran des poi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     G2.translate(getFramelessOffset().getX(), getFramelessOffset().getY());
     
    [...]
     
    G2.drawImage(poi.getPoiImage(), (int) (CENTER.getX() - poi.getPoiImage().getWidth() / 2.0 + (poi.getLocationXY().getX() - CENTER_XY.getX()) / pixelScaleX), (int) (CENTER.getY() - poi.getPoiImage().getWidth() / 2.0 + (poi.getLocationXY().getY() - CENTER_XY.getY()) / pixelScaleY), null);
    EDIT 3 - une dernière petite précision par rapport à ce que j'ai écrit au dessus : les coordonnées écran des poi (ce qui inclue le centre du radar qui est également un poi) sont situées dans l'espace de coordonnées virtuelles définies par l'objet WORLD_MAP présent dans chaque poi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private final Rectangle WORLD_MAP = new Rectangle(0, 0, 40000, 20000);
    Il ne s'agit donc pas du même système de coordonnées écran que celles de la souris d’où le fait qu'il faille appliquer des transformations (les transformations inverses de celles effectuées lors de l'affichage) pour passer de l'un a l'autre.

    Note : compte tenu des transformations très simplistes qui sont effectuées pour passer des coordonnées géographiques en coordonnées virtuelles écran puis en coordonnées réelles écran, ce radar doit totalement déconner s'il couvre une surface trop grande ou si son centre est situe trop près d'un des deux pôles. Attention lors d'utilisation dans le cadre aéronautique ou lorsque la précision est critique. Il manque un vrai SIG derrière pour faire les bonnes transformations entre les repères.
    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

Discussions similaires

  1. [Lazarus] Composant pour un diagramme type "radar"
    Par diam's dans le forum Lazarus
    Réponses: 18
    Dernier message: 16/06/2015, 00h02
  2. Réponses: 1
    Dernier message: 23/06/2002, 00h15
  3. Redéfinir l'événement OnExit de mon composant TEditFloat
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/06/2002, 16h10
  4. Installer ses composants
    Par Geronimo dans le forum C++Builder
    Réponses: 14
    Dernier message: 18/06/2002, 14h51
  5. Re-dimensionnement automatique de composants
    Par ludo_7 dans le forum C++Builder
    Réponses: 10
    Dernier message: 16/05/2002, 16h35

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