Map Annotation 1.5.4

- sources -

 


english

français

last update / dernière mise à jour : 08-Feb-2004


Map Annotation 1.5.4 source notes

 

  1. Compilation under Windows
  2. Compilation under Linux
  3. Adding your own functions ?
  4. Contact

 


COMPILATION UNDER WINDOWS

You need to have properly installed:

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).


COMPILATION UNDER LINUX

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)

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 do make -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).

 

ADDING YOUR OWN FUNCTIONS ?

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;


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 !!

 

CONTACT

Web site: http://mapannot.sourceforge.net/
Auteur: Marc Madaule
Bugs, suggestions and questions to mapannot@gmail.com

 

 

 

 

 


Notes à propos des sources de Map Annotation 1.5.4

 

  1. Compilation sous Windows
  2. Compilation sous Linux
  3. Rajouter des fonctionnalités ?
  4. Contact

 


COMPILATION SOUS WINDOWS

Vous avez besoin d'avoir installé:

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).


COMPILATION SOUS LINUX

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)

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 petit make -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).

 

RAJOUTER DES FONCTIONNALITES ?

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;


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 !!

 

CONTACT

Site web: http://mapannot.sourceforge.net/
Auteur: Marc Madaule
Bugs, suggestions et questions à mapannot@gmail.com