[QGIS Commit] r9676 - in branches/vector_overlay_branch/src: app
core plugins
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Fri Nov 21 09:06:24 EST 2008
Author: mhugent
Date: 2008-11-21 09:06:24 -0500 (Fri, 21 Nov 2008)
New Revision: 9676
Added:
branches/vector_overlay_branch/src/core/pal/
branches/vector_overlay_branch/src/plugins/diagram_overlay/
Modified:
branches/vector_overlay_branch/src/app/qgisapp.cpp
branches/vector_overlay_branch/src/app/qgspluginregistry.cpp
branches/vector_overlay_branch/src/app/qgspluginregistry.h
branches/vector_overlay_branch/src/app/qgsvectorlayerproperties.cpp
branches/vector_overlay_branch/src/app/qgsvectorlayerproperties.h
branches/vector_overlay_branch/src/core/CMakeLists.txt
branches/vector_overlay_branch/src/core/qgsgeometry.cpp
branches/vector_overlay_branch/src/core/qgsgeometry.h
branches/vector_overlay_branch/src/core/qgsmaprenderer.cpp
branches/vector_overlay_branch/src/core/qgsmaprenderer.h
branches/vector_overlay_branch/src/core/qgsrendercontext.h
branches/vector_overlay_branch/src/core/qgsvectorlayer.cpp
branches/vector_overlay_branch/src/core/qgsvectorlayer.h
branches/vector_overlay_branch/src/plugins/CMakeLists.txt
branches/vector_overlay_branch/src/plugins/qgisplugin.h
Log:
First try to port diagram branch to 1.0. Still crashes frequently
Modified: branches/vector_overlay_branch/src/app/qgisapp.cpp
===================================================================
--- branches/vector_overlay_branch/src/app/qgisapp.cpp 2008-11-20 22:19:42 UTC (rev 9675)
+++ branches/vector_overlay_branch/src/app/qgisapp.cpp 2008-11-21 14:06:24 UTC (rev 9676)
@@ -4261,6 +4261,7 @@
switch ( pType() )
{
case QgisPlugin::RENDERER:
+ case QgisPlugin::VECTOR_OVERLAY:
case QgisPlugin::UI:
{
// UI only -- doesn't use mapcanvas
Modified: branches/vector_overlay_branch/src/app/qgspluginregistry.cpp
===================================================================
--- branches/vector_overlay_branch/src/app/qgspluginregistry.cpp 2008-11-20 22:19:42 UTC (rev 9675)
+++ branches/vector_overlay_branch/src/app/qgspluginregistry.cpp 2008-11-21 14:06:24 UTC (rev 9676)
@@ -129,3 +129,14 @@
}
}
}
+
+QList<QgsPluginMetadata*> QgsPluginRegistry::pluginData()
+{
+ QList<QgsPluginMetadata*> resultList;
+ QMap<QString, QgsPluginMetadata>::iterator it = mPlugins.begin();
+ for(; it != mPlugins.end(); ++it)
+ {
+ resultList.push_back(&(it.value()));
+ }
+ return resultList;
+}
Modified: branches/vector_overlay_branch/src/app/qgspluginregistry.h
===================================================================
--- branches/vector_overlay_branch/src/app/qgspluginregistry.h 2008-11-20 22:19:42 UTC (rev 9675)
+++ branches/vector_overlay_branch/src/app/qgspluginregistry.h 2008-11-21 14:06:24 UTC (rev 9676)
@@ -68,6 +68,9 @@
//! Dump list of plugins
void dump();
+
+ //! Returns metadata of all loaded plugins
+ QList<QgsPluginMetadata*> pluginData();
protected:
//! protected constructor
Modified: branches/vector_overlay_branch/src/app/qgsvectorlayerproperties.cpp
===================================================================
--- branches/vector_overlay_branch/src/app/qgsvectorlayerproperties.cpp 2008-11-20 22:19:42 UTC (rev 9675)
+++ branches/vector_overlay_branch/src/app/qgsvectorlayerproperties.cpp 2008-11-21 14:06:24 UTC (rev 9676)
@@ -22,6 +22,7 @@
#include "qgisapp.h"
#include "qgsapplication.h"
#include "qgsattributeactiondialog.h"
+#include "qgsapplydialog.h"
#include "qgscontexthelp.h"
#include "qgscontinuouscolordialog.h"
#include "qgscoordinatetransform.h"
@@ -30,6 +31,8 @@
#include "qgslabel.h"
#include "qgsgenericprojectionselector.h"
#include "qgslogger.h"
+#include "qgspluginmetadata.h"
+#include "qgspluginregistry.h"
#include "qgsproject.h"
#include "qgssinglesymboldialog.h"
#include "qgsuniquevaluedialog.h"
@@ -37,6 +40,7 @@
#include "qgsvectorlayerproperties.h"
#include "qgsconfig.h"
#include "qgsvectordataprovider.h"
+#include "qgsvectoroverlayplugin.h"
#ifdef HAVE_POSTGRESQL
#include "qgspgquerybuilder.h"
@@ -134,6 +138,19 @@
connect( sliderTransparency, SIGNAL( valueChanged( int ) ), this, SLOT( sliderTransparency_valueChanged( int ) ) );
+ //for each overlay plugin create a new tab
+ int position;
+ QList<QgsVectorOverlayPlugin*> overlayPluginList = overlayPlugins();
+ QList<QgsVectorOverlayPlugin*>::const_iterator it = overlayPluginList.constBegin();
+
+ for(; it != overlayPluginList.constEnd(); ++it)
+ {
+ QgsApplyDialog* d = (*it)->dialog(lyr);
+ position = tabWidget->addTab(d, (*it)->name());
+ tabWidget->setCurrentIndex(position); //ugly, but otherwise the properties dialog is a mess
+ mOverlayDialogs.push_back(d);
+ }
+
tabWidget->setCurrentIndex( 0 );
} // QgsVectorLayerProperties ctor
@@ -593,6 +610,12 @@
}
layer->setTransparency( static_cast < unsigned int >( 255 - sliderTransparency->value() ) );
+ //apply overlay dialogs
+ for(QList<QgsApplyDialog*>::iterator it = mOverlayDialogs.begin(); it != mOverlayDialogs.end(); ++it)
+ {
+ (*it)->apply();
+ }
+
// update symbology
emit refreshLegend( layer->getLayerID(), false );
@@ -1050,3 +1073,30 @@
myQSettings.setValue( "style/lastStyleDir", myFileDialog->directory().absolutePath() );
}
}
+
+QList<QgsVectorOverlayPlugin*> QgsVectorLayerProperties::overlayPlugins() const
+{
+ QList<QgsVectorOverlayPlugin*> pluginList;
+
+ QgisPlugin* thePlugin = 0;
+ QgsVectorOverlayPlugin* theOverlayPlugin = 0;
+
+ QList<QgsPluginMetadata*> pluginData = QgsPluginRegistry::instance()->pluginData();
+ for(QList<QgsPluginMetadata*>::iterator it = pluginData.begin(); it != pluginData.end(); ++it)
+ {
+ if(*it)
+ {
+ thePlugin = (*it)->plugin();
+ if(thePlugin && thePlugin->type() == QgisPlugin::VECTOR_OVERLAY)
+ {
+ theOverlayPlugin = dynamic_cast<QgsVectorOverlayPlugin*>(thePlugin);
+ if(theOverlayPlugin)
+ {
+ pluginList.push_back(theOverlayPlugin);
+ }
+ }
+ }
+ }
+
+ return pluginList;
+}
Modified: branches/vector_overlay_branch/src/app/qgsvectorlayerproperties.h
===================================================================
--- branches/vector_overlay_branch/src/app/qgsvectorlayerproperties.h 2008-11-20 22:19:42 UTC (rev 9675)
+++ branches/vector_overlay_branch/src/app/qgsvectorlayerproperties.h 2008-11-21 14:06:24 UTC (rev 9676)
@@ -30,8 +30,10 @@
class QgsMapLayer;
class QgsAttributeActionDialog;
+class QgsApplyDialog;
class QgsLabelDialog;
class QgsVectorLayer;
+class QgsVectorOverlayPlugin;
class QgsVectorLayerProperties : public QDialog, private Ui::QgsVectorLayerPropertiesBase
{
@@ -120,10 +122,15 @@
/**Actions dialog. If apply is pressed, the actions are stored for later use */
QgsAttributeActionDialog* actionDialog;
+ QList<QgsApplyDialog*> mOverlayDialogs;
+
void updateButtons();
void loadRows();
void setRow( int row, int idx, const QgsField &field );
+ /**Requests all overlay plugis from the plugin registry. Usefull for inserting their dialogs as new tabs*/
+ QList<QgsVectorOverlayPlugin*> overlayPlugins() const;
+
/**Buffer pixmap which takes the picture of renderers before they are assigned to the vector layer*/
//QPixmap bufferPixmap;
static const int context_id = 94000531;
Modified: branches/vector_overlay_branch/src/core/CMakeLists.txt
===================================================================
--- branches/vector_overlay_branch/src/core/CMakeLists.txt 2008-11-20 22:19:42 UTC (rev 9675)
+++ branches/vector_overlay_branch/src/core/CMakeLists.txt 2008-11-21 14:06:24 UTC (rev 9676)
@@ -7,6 +7,7 @@
qgis.cpp
qgsapplication.cpp
qgsattributeaction.cpp
+ qgscentralpointpositionmanager.cpp
qgsclipper.cpp
qgscontexthelp.cpp
qgscoordinatetransform.cpp
@@ -26,6 +27,8 @@
qgsmaprenderer.cpp
qgsmaptopixel.cpp
qgsmessageoutput.cpp
+ qgsoverlayobject.cpp
+ qgspalobjectpositionmanager.cpp
qgspoint.cpp
qgsproject.cpp
qgsprojectfiletransform.cpp
@@ -47,6 +50,7 @@
qgsvectordataprovider.cpp
qgsvectorfilewriter.cpp
qgsvectorlayer.cpp
+ qgsvectoroverlay.cpp
composer/qgscomposeritem.cpp
composer/qgscomposeritemgroup.cpp
@@ -63,6 +67,21 @@
composer/qgsticksscalebarstyle.cpp
composer/qgscomposition.cpp
+ pal/feature.cpp
+ pal/geomfunction.cpp
+ pal/label.cpp
+ pal/labelposition.cpp
+ pal/layer.cpp
+ pal/pal.cpp
+ pal/palstat.cpp
+ pal/pointset.cpp
+ pal/priorityqueue.cpp
+ pal/problem.cpp
+ pal/util.cpp
+ pal/linkedlist.hpp
+ pal/hashtable.hpp
+ pal/rtree.hpp
+
raster/qgscliptominmaxenhancement.cpp
raster/qgscolorrampshader.cpp
raster/qgscontrastenhancement.cpp
@@ -140,6 +159,7 @@
INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_SOURCE_DIR}
composer
+ pal
raster
renderer
symbology
@@ -162,6 +182,13 @@
ENDIF (MSVC)
ENDIF (WIN32)
+#for PAL classes
+IF (WIN32)
+ ADD_DEFINITIONS("-D_HAVE_WINDOWS_H_")
+ELSE (WIN32)
+ ADD_DEFINITIONS("-D_HAVE_PTHREAD_")
+ENDIF (WIN32)
+
#############################################################
# spatial indexing library
Modified: branches/vector_overlay_branch/src/core/qgsgeometry.cpp
===================================================================
--- branches/vector_overlay_branch/src/core/qgsgeometry.cpp 2008-11-20 22:19:42 UTC (rev 9675)
+++ branches/vector_overlay_branch/src/core/qgsgeometry.cpp 2008-11-21 14:06:24 UTC (rev 9676)
@@ -580,7 +580,19 @@
return mGeometrySize;
}
+GEOSGeometry* QgsGeometry::asGeos()
+{
+ if(mDirtyGeos)
+ {
+ if(!exportWkbToGeos())
+ {
+ return 0;
+ }
+ }
+ return mGeos;
+}
+
QGis::WkbType QgsGeometry::wkbType()
{
unsigned char *geom = asWkb(); // ensure that wkb representation exists
Modified: branches/vector_overlay_branch/src/core/qgsgeometry.h
===================================================================
--- branches/vector_overlay_branch/src/core/qgsgeometry.h 2008-11-20 22:19:42 UTC (rev 9675)
+++ branches/vector_overlay_branch/src/core/qgsgeometry.h 2008-11-21 14:06:24 UTC (rev 9676)
@@ -118,6 +118,9 @@
*/
size_t wkbSize();
+ /**Returns a geos geomtry. QgsGeometry keeps ownership, don't delete this object!*/
+ GEOSGeometry* asGeos();
+
/** Returns type of wkb (point / linestring / polygon etc.) */
QGis::WkbType wkbType();
Modified: branches/vector_overlay_branch/src/core/qgsmaprenderer.cpp
===================================================================
--- branches/vector_overlay_branch/src/core/qgsmaprenderer.cpp 2008-11-20 22:19:42 UTC (rev 9675)
+++ branches/vector_overlay_branch/src/core/qgsmaprenderer.cpp 2008-11-21 14:06:24 UTC (rev 9676)
@@ -25,8 +25,13 @@
#include "qgsmaplayer.h"
#include "qgsmaplayerregistry.h"
#include "qgsdistancearea.h"
-//#include "qgscoordinatereferencesystem.h"
+#include "qgscentralpointpositionmanager.h"
+#include "qgsoverlayobjectpositionmanager.h"
+//#include "qgspalobjectpositionmanager.h"
+#include "qgsvectorlayer.h"
+#include "qgsvectoroverlay.h"
+
#include <QDomDocument>
#include <QDomNode>
#include <QPainter>
@@ -52,6 +57,9 @@
mDestCRS = new QgsCoordinateReferenceSystem( GEO_EPSG_CRS_ID, QgsCoordinateReferenceSystem::EpsgCrsId ); //WGS 84
mOutputUnits = QgsMapRenderer::Millimeters;
+
+ //mOverlayPos = new QgsPALObjectPositionManager();
+ mOverlayPos = new QgsCentralPointPositionManager();
}
QgsMapRenderer::~QgsMapRenderer()
@@ -59,6 +67,7 @@
delete mScaleCalculator;
delete mDistArea;
delete mDestCRS;
+ delete mOverlayPos;
}
@@ -128,6 +137,12 @@
return mSize;
}
+ void QgsMapRenderer::setOverlayManager(QgsOverlayObjectPositionManager* m)
+ {
+ delete mOverlayPos;
+ mOverlayPos = m;
+ }
+
void QgsMapRenderer::adjustExtentToSize()
{
int myHeight = mSize.height();
@@ -249,6 +264,16 @@
mRenderContext.setScaleFactor( scaleFactor );
mRenderContext.setRasterScaleFactor( rasterScaleFactor );
+ bool placeOverlays = false;
+ QList<QgsVectorOverlay*> allOverlayList; //list of all overlays, used to draw them after layers have been rendered
+ if(mOverlayPos)
+ {
+ placeOverlays = true;
+ }
+
+ //add map scale to render context
+ mRenderContext.setScaleDenominator(mScale);
+
// render all layers in the stack, starting at the base
QListIterator<QString> li( mLayerSet );
li.toBack();
@@ -338,6 +363,26 @@
mRenderContext.painter()->scale( 1.0 / rasterScaleFactor, 1.0 / rasterScaleFactor );
}
+ //create overlay objects for features within the view extent
+ if(ml->type() == QgsMapLayer::VectorLayer && mOverlayPos)
+ {
+ QgsVectorLayer* vl = dynamic_cast<QgsVectorLayer*>(ml);
+ if(vl)
+ {
+ QList<QgsVectorOverlay*> thisLayerOverlayList;
+ vl->vectorOverlays(thisLayerOverlayList);
+
+ QList<QgsVectorOverlay*>::iterator overlayIt = thisLayerOverlayList.begin();
+ for(; overlayIt != thisLayerOverlayList.end(); ++overlayIt)
+ {
+ (*overlayIt)->createOverlayObjects(mRenderContext.extent());
+ allOverlayList.push_back(*overlayIt);
+ }
+
+ mOverlayPos->addLayer(vl, thisLayerOverlayList);
+ }
+ }
+
if ( !ml->draw( mRenderContext ) )
{
emit drawError( ml );
@@ -420,6 +465,18 @@
}
} // if (!mOverview)
+ //find overlay positions and draw the vector overlays
+ if(mOverlayPos)
+ {
+ mOverlayPos->findObjectPositions(mRenderContext);
+ //draw all the overlays
+ QList<QgsVectorOverlay*>::iterator allOverlayIt = allOverlayList.begin();
+ for(; allOverlayIt != allOverlayList.end(); ++allOverlayIt)
+ {
+ (*allOverlayIt)->drawOverlayObjects(mRenderContext);
+ }
+ }
+
// make sure progress bar arrives at 100%!
emit drawingProgress( 1, 1 );
Modified: branches/vector_overlay_branch/src/core/qgsmaprenderer.h
===================================================================
--- branches/vector_overlay_branch/src/core/qgsmaprenderer.h 2008-11-20 22:19:42 UTC (rev 9675)
+++ branches/vector_overlay_branch/src/core/qgsmaprenderer.h 2008-11-21 14:06:24 UTC (rev 9676)
@@ -33,6 +33,7 @@
class QgsScaleCalculator;
class QgsCoordinateReferenceSystem;
class QgsDistanceArea;
+class QgsOverlayObjectPositionManager;
/** \ingroup core
* A non GUI class for rendering a map layer set onto a QPainter.
@@ -133,6 +134,9 @@
//! change current layer set
void setLayerSet( const QStringList& layers );
+ //! Set object containing overlay placement. Takes ownership of the passed object.
+ void setOverlayManager(QgsOverlayObjectPositionManager* m);
+
//! updates extent of the layer set
void updateFullExtent();
@@ -220,6 +224,9 @@
//!Output units
OutputUnits mOutputUnits;
+
+ //!Arrangement of labels and diagrams
+ QgsOverlayObjectPositionManager* mOverlayPos;
};
#endif
Modified: branches/vector_overlay_branch/src/core/qgsrendercontext.h
===================================================================
--- branches/vector_overlay_branch/src/core/qgsrendercontext.h 2008-11-20 22:19:42 UTC (rev 9675)
+++ branches/vector_overlay_branch/src/core/qgsrendercontext.h 2008-11-21 14:06:24 UTC (rev 9676)
@@ -56,6 +56,8 @@
bool drawEditingInformation() const {return mDrawEditingInformation;}
+ double scaleDenominator() const {return mScaleDenominator;}
+
//setters
/**Sets coordinate transformation. QgsRenderContext takes ownership and deletes if necessary*/
@@ -67,6 +69,7 @@
void setScaleFactor( double factor ) {mScaleFactor = factor;}
void setRasterScaleFactor( double factor ) {mRasterScaleFactor = factor;}
void setPainter( QPainter* p ) {mPainter = p;}
+ void setScaleDenominator(double denom){mScaleDenominator = denom;}
private:
@@ -94,6 +97,9 @@
/**Factor to scale rasters*/
double mRasterScaleFactor;
+
+ /**Map scale*/
+ double mScaleDenominator;
};
#endif
Modified: branches/vector_overlay_branch/src/core/qgsvectorlayer.cpp
===================================================================
--- branches/vector_overlay_branch/src/core/qgsvectorlayer.cpp 2008-11-20 22:19:42 UTC (rev 9675)
+++ branches/vector_overlay_branch/src/core/qgsvectorlayer.cpp 2008-11-21 14:06:24 UTC (rev 9676)
@@ -67,6 +67,7 @@
#include "qgssinglesymbolrenderer.h"
#include "qgscoordinatereferencesystem.h"
#include "qgsvectordataprovider.h"
+#include "qgsvectoroverlay.h"
#include "qgslogger.h"
#ifdef Q_WS_X11
@@ -3533,3 +3534,37 @@
return mRanges[ fields[idx].name()];
}
+
+void QgsVectorLayer::addOverlay(QgsVectorOverlay* overlay)
+{
+ mOverlays.push_back(overlay);
+}
+
+void QgsVectorLayer::removeOverlay(const QString& typeName)
+{
+ for(int i = mOverlays.size() - 1; i >=0; --i)
+ {
+ if(mOverlays.at(i)->typeName() == typeName)
+ {
+ mOverlays.removeAt(i);
+ }
+ }
+}
+
+void QgsVectorLayer::vectorOverlays(QList<QgsVectorOverlay*>& overlayList)
+{
+ overlayList = mOverlays;
+}
+
+QgsVectorOverlay* QgsVectorLayer::findOverlayByType(const QString& typeName)
+{
+ QList<QgsVectorOverlay*>::iterator it = mOverlays.begin();
+ for(; it != mOverlays.end(); ++it)
+ {
+ if( (*it)->typeName() == typeName)
+ {
+ return *it;
+ }
+ }
+ return 0; //not found
+}
Modified: branches/vector_overlay_branch/src/core/qgsvectorlayer.h
===================================================================
--- branches/vector_overlay_branch/src/core/qgsvectorlayer.h 2008-11-20 22:19:42 UTC (rev 9675)
+++ branches/vector_overlay_branch/src/core/qgsvectorlayer.h 2008-11-21 14:06:24 UTC (rev 9676)
@@ -43,6 +43,7 @@
class QgsRect;
class QgsRenderer;
class QgsVectorDataProvider;
+class QgsVectorOverlay;
class QgsGeometry;
class QgsRect;
@@ -421,6 +422,18 @@
/**access range */
RangeData &range( int idx );
+ /**Adds a new overlay to this class. QgsVectorLayer takes ownership of the object*/
+ void addOverlay(QgsVectorOverlay* overlay);
+
+ /**Removes all overlays of a given type*/
+ void removeOverlay(const QString& typeName);
+
+ /**Returns pointers to the overlays of this layer*/
+ void vectorOverlays(QList<QgsVectorOverlay*>& overlayList);
+
+ /**Returns the (first) overlay of a type, e.g. diagram or label*/
+ QgsVectorOverlay* findOverlayByType(const QString& typeName);
+
public slots:
/** Select feature by its ID, optionally emit signal selectionChanged() */
void select( int featureId, bool emitSignal = TRUE );
@@ -616,6 +629,9 @@
/** Display labels */
bool mLabelOn;
+ /**List of overlays. Vector overlays will be rendered on top of all maplayers*/
+ QList<QgsVectorOverlay*> mOverlays;
+
QStringList mCommitErrors;
QMap< QString, EditType > mEditTypes;
Modified: branches/vector_overlay_branch/src/plugins/CMakeLists.txt
===================================================================
--- branches/vector_overlay_branch/src/plugins/CMakeLists.txt 2008-11-20 22:19:42 UTC (rev 9675)
+++ branches/vector_overlay_branch/src/plugins/CMakeLists.txt 2008-11-21 14:06:24 UTC (rev 9676)
@@ -24,3 +24,5 @@
SUBDIRS (coordinate_capture dxf2shp_converter)
SUBDIRS (ogr_converter)
+
+SUBDIRS (diagram_overlay)
Modified: branches/vector_overlay_branch/src/plugins/qgisplugin.h
===================================================================
--- branches/vector_overlay_branch/src/plugins/qgisplugin.h 2008-11-20 22:19:42 UTC (rev 9675)
+++ branches/vector_overlay_branch/src/plugins/qgisplugin.h 2008-11-21 14:06:24 UTC (rev 9676)
@@ -65,7 +65,8 @@
{
UI = 1, /* user interface plug-in */
MAPLAYER, /* map layer plug-in */
- RENDERER /*a plugin for a new renderer class*/
+ RENDERER, /*a plugin for a new renderer class*/
+ VECTOR_OVERLAY
};
More information about the QGIS-commit
mailing list