Warning, /education/marble/src/DESIGN is written in an unsupported language. File is not indexed.
0001
0002 <<< WARNING: MOST OF THIS CONTENT IS NOT UP-TO-DATE >>>
0003
0004
0005 This file describes the design and structure of Marble
0006
0007 1. The main structure
0008 =====================
0009
0010 Marble, the application, currently consists two main widgets:
0011 - a MarbleWidget that contains the view of the world, and
0012 - a MarbleControlBox that controls it.
0013
0014 The MarbleWidget is a view for the model represented by the MarbleModel
0015 class, which contains all the data necessary for manipulating and
0016 displaying the map.
0017
0018
0019 1.1 Library
0020 ------------
0021
0022 The MarbleWidget is a very complex widget with lots of helper classes.
0023 MarbleWidget is contained in a library with just a few exported
0024 classes. Here we will present the exported classes of the library:
0025
0026 - MarbleWidget
0027 - MarbleModel
0028 - MarbleControlBox
0029
0030 These classes comprise the main interface to the Marble library.
0031
0032
0033 - PlacemarkModel
0034 - KAtlasThemeSelectView
0035 - LegendBrowser
0036 - SearchListView
0037 - (MarbleNavigator)
0038
0039 These are mainly parts of the more complex MarbleControlBox. The
0040 individual controls inside MarbleControlBox can be used by themselves
0041 if you want to create a simpler user interface.
0042
0043 NOTE: MarbleNavigator is currently not part of the library, but it
0044 will be moved there before the next release.
0045
0046
0047 - MapTheme
0048
0049 This class contains a set of colors, an icon some other misc data that
0050 will control the appearance of the map. By defining a new MapTheme,
0051 you can give a new appearance of an already existing map.
0052
0053
0054 - KAtlasAboutDialog (to be renamed into MarbleAboutDialog)
0055
0056 This is a special utility class which displays some information about
0057 Marble, shows the authors and will also show the license in the
0058 future.
0059
0060
0061
0062 2. The World Model
0063 ==================
0064
0065 The model of the world consists of 3 different parts, which can be
0066 viewed as separate layers:
0067
0068 - A pixel based area that is split up into tiles. Depending on the
0069 dataset, these tiles are produced from different data sources,
0070 either from satellite scans or from photographs. The tiles are
0071 stored in several different resolutions that are used in different
0072 zoom levels. The tiles are automatically generated the first time
0073 that the application is started, and are stored into
0074 $HOME/.marble/data/maps. For packaging purposes or to offer the
0075 same data to multiple users you can move these tiles into the
0076 system directory where marble gets installed (e.g.
0077 /usr/share/apps/marble/data/maps).
0078
0079 The main class of the tiles layer is the TextureMapper, which maps
0080 a tiled texture onto the projected sphere.
0081
0082 - Vectors that represent different kinds of borders -- geographical
0083 or political -- or features. Geographical borders can be
0084 coastlines, islands or lakes, but also rivers. Political borders
0085 are mostly countries, but also the states of the USA. Special
0086 features include the grid of lines that show the latitude and
0087 longitude as well as the tropics and arctics.
0088
0089 The main classes of the vectors are the GeoPolygon and the PntMap,
0090 which contain the actual vectors, but also a bounding box
0091 that specifies which area is being covered by each polygon.
0092
0093 - Points of interest, represented by the Placemark class. Right now
0094 these are mostly cities, but also some mountains and sea deeps.
0095
0096 The Placemark has a somewhat arbitrary selection of properties
0097 which comes from the Google Earth KML format. This will be
0098 restructured in future versions. Another important class is the
0099 PlacemarkContainer which collects a number of Placemarks into a
0100 container, just like the name suggests. A third level is provided
0101 by the PlacemarkManager class which manages several
0102 PlacemarkContainers (currently just one) and also imports and
0103 exports it to/from files in various file formats.
0104
0105
0106 For most maps, these 3 layers are just painted on top of each other in
0107 simple bottom top order. However, the Topographical Atlas View (the
0108 default view!) provides a special map in terms of composition:
0109
0110 The Topographical Atlas View "merges" the Texture (which contains
0111 the digital elevation data) and a Vector Layer to create a
0112 recolorized bumpmapped layer via the TextureColorizer class.
0113
0114 All map views and their use of layers get specified in a *.dgml XML
0115 file. The source format for the Placemark layer is Google Earth's KML
0116 file format which gets parsed and cached into a temporary binary file
0117 (.cache) for faster follow-up reading.
0118
0119
0120 2.1 The Tile System
0121 -------------------
0122
0123
0124 FIXME: To be written...
0125
0126
0127 2.2 The Vector System
0128 ---------------------
0129
0130 FIXME: To be written...
0131
0132 FIXME: Explain the way nodes get filtered e.g. by ClipPainter.
0133
0134 FIXME: Explain the differences between the GeoPolygon and the
0135 ScreenPolygon, and how they interact. Also the PntMap and the
0136 VectorMap.
0137
0138
0139 2.3 Placemarks
0140 --------------
0141
0142 FIXME: To be written...
0143
0144 FIXME: Explain how Placemark labels are placed so they don't cover each
0145 other.
0146
0147
0148 3. The Painting Process
0149 =======================
0150
0151 FIXME: To be written...
0152
0153
0154 4. Library
0155 ==========
0156
0157 This section describes the library in more detail than the overview
0158 above, including the internal classes that are not exported to the
0159 external applications. This section is for developers that want to
0160 develop Marble itself, and not just use the classes in his/her own
0161 application.
0162
0163
0164 4.1 The Basic Building Blocks
0165 -----------------------------
0166
0167 Quaternion
0168 GeoDataPoint, GeoPolygon, PntMap
0169 ScreenPolygon, VectorMap
0170
0171
0172 4.2. Class Overview
0173 -------------------
0174
0175 Here follows now a list of classes, their roles and how they interact.
0176
0177 Basic classes
0178 - - - - - - -
0179
0180 Quaternion A simple implementation of the mathematical concept
0181 quaternion.
0182
0183 GeoDataPoint A point on the earth, (lon, lat)
0184 GeoPolygon A path or polygon on the earth, consisting of a vector
0185 of GeoDataPoints
0186 PntMap A collection of GeoPolygons ( QVector<GeoPolygon *> )
0187 FIXME: Rename and move from GeoPolygon.h into own file.
0188
0189 ScreenPolygon A path or polygon on the screen. Uses screen
0190 coordinates. Uses floats due to antialiasing.
0191 VectorMap A Vector of ScreenPolygons.
0192 Rename FIXME
0193 GridMap The grid of lat-lon lines on the map.
0194 Another Vector of ScreenPolygons. Perhaps it should
0195 inherit or contain a VectorMap.
0196
0197 Placemark A point on the earth with some additional data. Can be
0198 selected and manipulated. Has a name. Today mostly
0199 used for cities of different size.
0200 At this point somewhat arbitrary in its choice of
0201 properties. Contains (among others):
0202 - Coordinate (GeoDataPoint)
0203 - Role (QChar) -- city, capital, etc
0204 - Population (int)
0205 - Description (QString)
0206 - Countrycode (QString)
0207 - View stuff (selected, labelstring, boundingbox, etc)
0208
0209 PlaceContainer A list of Placemarks ( QVector<Placemark *> )
0210
0211
0212 Model / View
0213 - - - - - - -
0214
0215 MarbleModel The main model. Contains (among others):
0216 - MapTheme
0217 - GridMap
0218 - VectorComposer
0219 - PlacemarkManager
0220 - PlacemarkModel
0221
0222 VectorComposer Manages the different vector sub-layers which consist
0223 of coastlines, islands, lakes, glaciers, rivers
0224 as well as borders for the countries and the US
0225 States. These are all stored in PntMaps, one for each
0226 type. FIXME: Change Name.
0227
0228 MarbleWidget The view of a MarbleModel.
0229
0230
0231 Widgets
0232 -------
0233 KAtlasControl The main window. Contains a MarbleWidget and a
0234 MarbleControlBox.
0235
0236
0237 Unsorted
0238 --------
0239
0240 class ClipPainter;
0241 class HttpFetchFile;
0242 class KAtlasAboutDialog : public QDialog, private Ui::katlasAboutDialog {
0243 class KAtlasCrossHair : public QObject {
0244 class MarbleDirs
0245 class KAtlasFlag : public QObject {
0246 class KAtlasMapScale : public QObject {
0247 class KAtlasThemeSelectView : public QListView {
0248 class KAtlasTileCreatorDialog : public QDialog, private Ui::KAtlasTileCreatorDialog {
0249 class KAtlasTileCreatorDialog: public Ui_KAtlasTileCreatorDialog {};
0250 class KAtlasViewInputHandler;
0251 class KAtlasViewPopupMenu;
0252 class KAtlasWindRose : public QObject {
0253 class KAtlasXmlHandler : public QXmlDefaultHandler {
0254 class MapTheme : public QObject
0255 class MeasureTool;
0256 class PlaceFolder : public QVector<Placemark*> {
0257 class PlacemarkInfoDialog: public Ui_PlacemarkInfoDialog {};
0258 class PlacemarkManager;
0259 class PlacemarkModel : public QAbstractListModel {
0260 class PlacemarkPainter : public QObject {
0261 class QAbstractItemModel;
0262 class QMenu;
0263 class QStandardItemModel;
0264 class SearchComboBox : public QComboBox {
0265 class SearchListView : public QListView {
0266 class TextureColorizer;
0267 class TextureLoader;
0268 class TextureMapper {
0269 class TextureTile;
0270 class TileCreator : public QObject {
0271 class TinyWebBrowser : public QTextBrowser {
0272 class katlasAboutDialog: public Ui_katlasAboutDialog {};