last update / dernière mise à jour : 08-Feb-2004
You need to have properly installed:
- Microsoft Visual C++ 6,
- Qt for Windows 2.3 (non-commercial) (http://www.trolltech.com).
Independent JPEG Group's libjpeg (version 6b) (ftp://ftp.uu.net/graphics/jpeg/) is given among the sources in the jpeg/ directory.
VisualC++ workspace is given. It should compile...
In order to test, a copyright-free map (testmap.jpg) (taken from http://www.ign.fr) is given. (Its pixel to meters ratio is 1744).
I'm sorry, but I don't have linux and therefore can't test the manually updated makefiles. If you find a bug and correct it, please send me your working makefile !
You need to have properly installed: (very often, it comes with the Linux distribution)
- Qt (version > 2.0; 3.x is fine) (http://www.trolltech.com),
- libjpeg (ftp://ftp.uu.net/graphics/jpeg/).
Linux compilation doesn't use the jpeg/ directory.
Under Linux, Qt 3.x is available freely and you can compile Mapannot against it.
Makefile.linux.qt2 is given for Qt 2.x and Makefile.linux.qt3 for Qt 3.x.
You'll probably need to tweak the $QTDIR variable in the one you'll be using.
Just domake -f Makefile.linux.qtX
and cope with all the moanings...
In order to test, a copyright-free map (testmap.jpg) (taken from http://www.ign.fr) is given. (Its pixel to meters ratio is 1744).
Want to add a tool in the toolbar ? Should be easy... Of course, you may have to know a little C++ :)
Everything's in file DrawingHandler.h. You need to create a class subclassing DrawingHandler; a real simple example being class PointDrawingHandler.You need to subclass:
class DrawingHandler
{
public:
// Called when user selects this tool in the toolbar.
// Saving the three parameters for later use is a good idea.
virtual void start(MessageOutput* msgOut, ObjectsCollection* objects, ConversionHelper* converter) = 0;
// resets the tool
virtual void reset() = 0;
// Called when user selects another tool.
virtual void stop() = 0;
// Called every time user left-clicks on the map (this tool being selected, of course).
virtual void mouseLeftClick(int x, int y) = 0;
// Called every time user right-clicks on the map (this tool being selected, of course).
// default behaviour is to reset the tool
virtual void mouseRightClick(int x, int y) { reset(); }
// Button's tooltip (help text).
virtual QString getToopTip() = 0;
};
Useful functions: these are the methods of the parameters passed to start():
MessageOutput* _msgOut;
ObjectsCollection* _objects;
ConversionHelper* _converter;
- change status bar text:
_msgOut->output("new message");
- add an object on the map:
_objects->add(new ...);
// values and positions are in pixels !!!!
- pick the object user clicked on:
GeometricObject* picked = _objects->nearest(Coords(x,y));
- if you've modified an existing object, do: (no need if you're deleting it)
_objects->objectModified(/*modifiedObject*/);
- conversion meters/pixels:
_converter->pixelsToMeters(distPixels)/1000.0;
// dividing by 1000 because we want kilometers
- for more, have a look at the other subclasses of DrawingHandler.
Then, you'll add a button in the toolbar. That's very easy:
In canvas.cpp, in the constructor of class Main, add the line:
addDrawingHandler(tb, group, new MyNewDrawingHandler, "myicon.png", id++);
after the similar ones.
The software will look for file "myicon.png" in the icons/ directory.But for distribution, you'll need to embed the icon in the executable. For this, use the qembed tool given with Qt to generate icons/icons.h.
Under Windows, qembed.exe and mkiconsh.bat files are given. Start by adding your icon to the list in mkiconsh.bat. Then, execute mkiconsh.bat to generate icons.h. Recompile.
Under Linux, you'll have to use Qt's qembed tool...Once you have your super new functionality working, don't hesitate to send it to me !!
Web site: http://mapannot.sourceforge.net/
Auteur: Marc Madaule
Bugs, suggestions and questions to mapannot@gmail.com
Vous avez besoin d'avoir installé:
- Microsoft Visual C++ 6,
- Qt for Windows 2.3 (non commercial) (http://www.trolltech.com).
La librairie libjpeg (version 6b) du Independent JPEG Group (ftp://ftp.uu.net/graphics/jpeg/) est fournie avec les sources dans le répertoire jpeg.
Le workspace pour VisualC++ est fourni. Normalement, ca compile...
Pour test, une carte (testmap.jpg) libre de droits (provenant de http://www.ign.fr) est fournie. (Son ratio mètres/pixel est 1744).
Je suis désolé, mais je n'ai pas linux et donc ne peux pas tester les makefiles mis à jour. En conclusion, essayez-les, corrigez-les puis soyez sympa : envoyez-les moi !
Vous avez besoin d'avoir installé: (souvent, ça l'est d'office)
- Qt (version > 2.0; 3.x fonctionne) (http://www.trolltech.com),
- libjpeg (ftp://ftp.uu.net/graphics/jpeg/).
La compilation sous Linux n'utilise pas le répertoire jpeg.
Sous Linux, Qt 3.x est gratuit et vous pouvez compiler Mapannot avec cette version.
Les fichiers Makefile.linux.qt2 et Makefile.linux.qt3 sont donnés pour, respectivement, Qt 2.x et Qt 3.x.
Il vous faudra très certainement modifier la valeur de la variable $QTDIR dans le makefile choisi.
Un petitmake -f Makefile.linux.qtX
devrait lancer les hostilités...
Pour test, une carte (testmap.jpg) libre de droits (provenant de http://www.ign.fr) est fournie. (Son ratio mètres/pixel est 1744).
Vous voulez rajouter un bouton dans la toolbar pour vous faire plaisir ? A priori, ca devrait être facile... Il faut connaitre un peu de C++, tout de même :)
Tout est dans le fichier DrawingHandler.h. Il vous faut créer une classe héritant de DrawingHandler; un exemple simple étant la classe PointDrawingHandler.La classe à sous-classer:
class DrawingHandler
{
public:
// Appelé lorsque l'utilisateur sélectionne cet outil dans la toolbar.
// Sauver les 3 paramètres dans des variables d'instance est généralement une bonne idée.
virtual void start(MessageOutput* msgOut, ObjectsCollection* objects, ConversionHelper* converter) = 0;
// Remet l'outil à zéro.
virtual void reset() = 0;
// Appelé lorsque l'utilisateur choisit un autre outil.
virtual void stop() = 0;
// Appelé chaque fois que l'utilisateur clique (bouton gauche) sur la carte (et que cet outil est sélectionné ;)
virtual void mouseLeftClick(int x, int y) = 0;
// Appelé chaque fois que l'utilisateur clique (bouton droit) sur la carte (et que cet outil est sélectionné ;)
// le comportement par défaut est de faire un reset de l'outil.
virtual void mouseRightClick(int x, int y) { reset(); }
// Le tooltip (texte d'aide) du bouton dans la toolbar.
virtual QString getToopTip() = 0;
};
Fonctions utiles : ce sont les méthodes des objets passés à la méthode start():
MessageOutput* _msgOut;
ObjectsCollection* _objects;
ConversionHelper* _converter;
- changer le texte dans la status bar:
_msgOut->output("nouveau message");
- ajouter un objet sur la carte:
_objects->add(new ...);
// les valeurs et positions de l'objet sont en pixels !!!!
- recupérer l'objet sur lequel l'utilisateur a cliqué:
GeometricObject* picked = _objects->nearest(Coords(x,y));
- si vous modifiez un objet déjà existant, alors faites: (pas besoin si vous l'effacez)
_objects->objectModified(/*objetModifié*/);
- conversion mètres/pixels:
_converter->pixelsToMeters(distPixels)/1000.0;
// on divise par 1000 pour avoir en km
- pour le reste, regardez les autres sous-classes !
Ensuite, il faut ajouter un bouton dans la toolbar. Là, c'est vraiment simple:
Dans canvas.cpp, dans le constructeur de la classe Main, ajoutez la ligne:
addDrawingHandler(tb, group, new MyNewDrawingHandler, "myicon.png", id++);
à la suite des autres.
Le programme cherchera le fichier "myicon.png" dans le répertoire icons/.Mais pour la distribution, il faut incorporer l'icône dans l'exécutable. Pour cela, il utilisez l'outil qembed fourni avec Qt qui va générer le fichier icons/icons.h.
Sous Windows, qembed.exe est fourni: éditer le fichier mkiconsh.bat et y rajouter son icône. Puis exécuter mkiconsh.bat qui va générer le fichier icons.h contenant toutes les icônes sous forme de tableaux. Enfin, recompiler. Sous Linux, il faut utiliser l'outil qembed fourni avec Qt...Une fois que vous aurez rajouté une super fonctionnalité, n'hésitez pas à me l'envoyer !!
Site web: http://mapannot.sourceforge.net/
Auteur: Marc Madaule
Bugs, suggestions et questions à mapannot@gmail.com