#3583 closed patch (fixed)
patch to use the same pal instance for labeling-ng and for diagrams
Reported by: | mhugent | Owned by: | nobody |
---|---|---|---|
Priority: | critical: causes crash or data corruption | Milestone: | Version 1.7.0 |
Component: | Build/Install | Version: | |
Keywords: | Cc: | timlinux | |
Must Fix for Release: | No | Platform: | Debian |
Platform Version: | Awaiting user input: | no |
Description
Attached is a patch that implements a new diagram mechanism using QgsPalLabling, thus considering the positions of diagrams and labels. It is the idea to remove the vector overlay classes and its diagram implementation after 1.7
Attachments (4)
Change History (14)
by , 13 years ago
Attachment: | 110309_qgis_diagrams.diff added |
---|
comment:1 by , 13 years ago
comment:2 by , 13 years ago
Cc: | added |
---|
comment:3 by , 13 years ago
Hi Tim
Please try the second patch. It should fix the build issue (by removing the vectorlayer include in the provider class). Hopefully it works...
Regards, Marco
by , 13 years ago
Attachment: | 110309_qgis_diagrams_2.diff added |
---|
by , 13 years ago
Attachment: | 110309_qgis_diagrams_3.diff added |
---|
comment:5 by , 13 years ago
With patch 3 I now get:
[ 12%] Building CXX object src/core/CMakeFiles/qgis_core.dir/qgspallabeling.cpp.o /home/timlinux/dev/cpp/qgis/src/core/qgsdiagram.cpp:195: error: redefinition of ‘QgsTextDiagram::QgsTextDiagram()’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagram.cpp:7: error: ‘QgsTextDiagram::QgsTextDiagram()’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagram.cpp:203: error: redefinition of ‘QgsTextDiagram::~QgsTextDiagram()’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagram.cpp:15: error: ‘QgsTextDiagram::~QgsTextDiagram()’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagram.cpp:207: error: redefinition of ‘void QgsTextDiagram::renderDiagram(const QgsAttributeMap&, QgsRenderContext&, const QgsDiagramSettings&, const QPointF&)’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagram.cpp:19: error: ‘virtual void QgsTextDiagram::renderDiagram(const QgsAttributeMap&, QgsRenderContext&, const QgsDiagramSettings&, const QPointF&)’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagram.cpp:292: error: redefinition of ‘void QgsTextDiagram::lineEllipseIntersection(const QPointF&, const QPointF&, const QPointF&, double, double, QList<QPointF>&) const’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagram.cpp:104: error: ‘void QgsTextDiagram::lineEllipseIntersection(const QPointF&, const QPointF&, const QPointF&, double, double, QList<QPointF>&) const’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagram.cpp:323: error: redefinition of ‘QgsPieDiagram::QgsPieDiagram()’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagram.cpp:135: error: ‘QgsPieDiagram::QgsPieDiagram()’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagram.cpp:329: error: redefinition of ‘QgsPieDiagram::~QgsPieDiagram()’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagram.cpp:141: error: ‘QgsPieDiagram::~QgsPieDiagram()’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagram.cpp:333: error: redefinition of ‘void QgsPieDiagram::renderDiagram(const QgsAttributeMap&, QgsRenderContext&, const QgsDiagramSettings&, const QPointF&)’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagram.cpp:145: error: ‘virtual void QgsPieDiagram::renderDiagram(const QgsAttributeMap&, QgsRenderContext&, const QgsDiagramSettings&, const QPointF&)’ previously defined here make[2]: *** [src/core/CMakeFiles/qgis_core.dir/qgsdiagram.cpp.o] Error 1 make[2]: *** Waiting for unfinished jobs.... /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:313: error: redefinition of ‘void QgsDiagramLayerSettings::readXML(const QDomElement&)’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:8: error: ‘void QgsDiagramLayerSettings::readXML(const QDomElement&)’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:324: error: redefinition of ‘void QgsDiagramLayerSettings::writeXML(QDomElement&, QDomDocument&) const’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:19: error: ‘void QgsDiagramLayerSettings::writeXML(QDomElement&, QDomDocument&) const’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:337: error: redefinition of ‘void QgsDiagramSettings::readXML(const QDomElement&)’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:32: error: ‘void QgsDiagramSettings::readXML(const QDomElement&)’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:362: error: redefinition of ‘void QgsDiagramSettings::writeXML(QDomElement&, QDomDocument&) const’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:57: error: ‘void QgsDiagramSettings::writeXML(QDomElement&, QDomDocument&) const’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:396: error: redefinition of ‘QgsDiagramRendererV2::QgsDiagramRendererV2()’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:91: error: ‘QgsDiagramRendererV2::QgsDiagramRendererV2()’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:400: error: redefinition of ‘QgsDiagramRendererV2::~QgsDiagramRendererV2()’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:95: error: ‘virtual QgsDiagramRendererV2::~QgsDiagramRendererV2()’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:405: error: redefinition of ‘void QgsDiagramRendererV2::setDiagram(QgsDiagram*)’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:100: error: ‘void QgsDiagramRendererV2::setDiagram(QgsDiagram*)’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:411: error: redefinition of ‘void QgsDiagramRendererV2::renderDiagram(const QgsAttributeMap&, QgsRenderContext&, const QPointF&)’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:106: error: ‘void QgsDiagramRendererV2::renderDiagram(const QgsAttributeMap&, QgsRenderContext&, const QPointF&)’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:427: error: redefinition of ‘QSizeF QgsDiagramRendererV2::sizeMapUnits(const QgsAttributeMap&, const QgsRenderContext&)’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:122: error: ‘virtual QSizeF QgsDiagramRendererV2::sizeMapUnits(const QgsAttributeMap&, const QgsRenderContext&)’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:434: error: redefinition of ‘void QgsDiagramRendererV2::convertSizeToMapUnits(QSizeF&, const QgsRenderContext&) const’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:129: error: ‘void QgsDiagramRendererV2::convertSizeToMapUnits(QSizeF&, const QgsRenderContext&) const’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:452: error: redefinition of ‘static int QgsDiagramRendererV2::dpiPaintDevice(const QPainter*)’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:147: error: ‘static int QgsDiagramRendererV2::dpiPaintDevice(const QPainter*)’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:465: error: redefinition of ‘void QgsDiagramRendererV2::_readXML(const QDomElement&)’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:160: error: ‘void QgsDiagramRendererV2::_readXML(const QDomElement&)’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:483: error: redefinition of ‘void QgsDiagramRendererV2::_writeXML(QDomElement&, QDomDocument&) const’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:178: error: ‘void QgsDiagramRendererV2::_writeXML(QDomElement&, QDomDocument&) const’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:491: error: redefinition of ‘QgsSingleCategoryDiagramRenderer::QgsSingleCategoryDiagramRenderer()’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:186: error: ‘QgsSingleCategoryDiagramRenderer::QgsSingleCategoryDiagramRenderer()’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:495: error: redefinition of ‘QgsSingleCategoryDiagramRenderer::~QgsSingleCategoryDiagramRenderer()’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:190: error: ‘virtual QgsSingleCategoryDiagramRenderer::~QgsSingleCategoryDiagramRenderer()’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:499: error: redefinition of ‘bool QgsSingleCategoryDiagramRenderer::diagramSettings(const QgsAttributeMap&, const QgsRenderContext&, QgsDiagramSettings&)’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:194: error: ‘virtual bool QgsSingleCategoryDiagramRenderer::diagramSettings(const QgsAttributeMap&, const QgsRenderContext&, QgsDiagramSettings&)’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:505: error: redefinition of ‘QList<QgsDiagramSettings> QgsSingleCategoryDiagramRenderer::diagramSettings() const’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:200: error: ‘virtual QList<QgsDiagramSettings> QgsSingleCategoryDiagramRenderer::diagramSettings() const’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:512: error: redefinition of ‘void QgsSingleCategoryDiagramRenderer::readXML(const QDomElement&)’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:207: error: ‘virtual void QgsSingleCategoryDiagramRenderer::readXML(const QDomElement&)’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:524: error: redefinition of ‘void QgsSingleCategoryDiagramRenderer::writeXML(QDomElement&, QDomDocument&) const’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:219: error: ‘virtual void QgsSingleCategoryDiagramRenderer::writeXML(QDomElement&, QDomDocument&) const’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:533: error: redefinition of ‘QgsLinearlyInterpolatedDiagramRenderer::QgsLinearlyInterpolatedDiagramRenderer()’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:228: error: ‘QgsLinearlyInterpolatedDiagramRenderer::QgsLinearlyInterpolatedDiagramRenderer()’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:537: error: redefinition of ‘QgsLinearlyInterpolatedDiagramRenderer::~QgsLinearlyInterpolatedDiagramRenderer()’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:232: error: ‘virtual QgsLinearlyInterpolatedDiagramRenderer::~QgsLinearlyInterpolatedDiagramRenderer()’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:541: error: redefinition of ‘QList<QgsDiagramSettings> QgsLinearlyInterpolatedDiagramRenderer::diagramSettings() const’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:236: error: ‘virtual QList<QgsDiagramSettings> QgsLinearlyInterpolatedDiagramRenderer::diagramSettings() const’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:548: error: redefinition of ‘bool QgsLinearlyInterpolatedDiagramRenderer::diagramSettings(const QgsAttributeMap&, const QgsRenderContext&, QgsDiagramSettings&)’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:243: error: ‘virtual bool QgsLinearlyInterpolatedDiagramRenderer::diagramSettings(const QgsAttributeMap&, const QgsRenderContext&, QgsDiagramSettings&)’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:555: error: redefinition of ‘QList<int> QgsLinearlyInterpolatedDiagramRenderer::diagramAttributes() const’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:250: error: ‘virtual QList<int> QgsLinearlyInterpolatedDiagramRenderer::diagramAttributes() const’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:565: error: redefinition of ‘QSizeF QgsLinearlyInterpolatedDiagramRenderer::diagramSize(const QgsAttributeMap&, const QgsRenderContext&)’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:260: error: ‘virtual QSizeF QgsLinearlyInterpolatedDiagramRenderer::diagramSize(const QgsAttributeMap&, const QgsRenderContext&)’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:580: error: redefinition of ‘void QgsLinearlyInterpolatedDiagramRenderer::readXML(const QDomElement&)’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:275: error: ‘virtual void QgsLinearlyInterpolatedDiagramRenderer::readXML(const QDomElement&)’ previously defined here /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:597: error: redefinition of ‘void QgsLinearlyInterpolatedDiagramRenderer::writeXML(QDomElement&, QDomDocument&) const’ /home/timlinux/dev/cpp/qgis/src/core/qgsdiagramrendererv2.cpp:292: error: ‘virtual void QgsLinearlyInterpolatedDiagramRenderer::writeXML(QDomElement&, QDomDocument&) const’ previously defined here make[2]: *** [src/core/CMakeFiles/qgis_core.dir/qgsdiagramrendererv2.cpp.o] Error 1 /home/timlinux/dev/cpp/qgis/src/core/qgspallabeling.cpp: In member function ‘virtual int QgsPalLabeling::addDiagramLayer(QgsVectorLayer*, QgsDiagramLayerSettings&)’: /home/timlinux/dev/cpp/qgis/src/core/qgspallabeling.cpp:764: warning: ‘const QgsCoordinateReferenceSystem& QgsMapLayer::srs()’ is deprecated (declared at /home/timlinux/dev/cpp/qgis/src/core/qgsmaplayer.h:227) make[1]: *** [src/core/CMakeFiles/qgis_core.dir/all] Error 2 make: *** [all] Error 2
Sorry I didnt have time to try to work out the problem myself.
Regards
Tim
follow-up: 7 comment:6 by , 13 years ago
Hi Tim
With svn patches, you always need to remove added files before applying a second time (otherwise, the content of the added file is just appended to the existing one and you get the redefinition errors).
the following should work: rm src/core/qgsdiagram.h rm src/core/qgsdiagram.cpp rm src/core/qgsdiagramrendererv2.h rm src/core/qgsdiagramrendererv2.cpp svn revert -R . patch -p0 < patchfile
then compile again
comment:7 by , 13 years ago
Replying to mhugent:
Hi Tim
With svn patches, you always need to remove added files before applying a second time (otherwise, the content of the added file is just appended to the existing one and you get the redefinition errors).
Hi. Sorry I did git reset --hard before building but I didnt notice your patch added new files so those never got cleaned away. It built successfully now.
Regards
Tim
the following should work: rm src/core/qgsdiagram.h rm src/core/qgsdiagram.cpp rm src/core/qgsdiagramrendererv2.h rm src/core/qgsdiagramrendererv2.cpp svn revert -R . patch -p0 < patchfile
then compile again
comment:8 by , 13 years ago
Hi Marco
I wanted to comment that the 'Fixed Size' box was checked for me by default, but the size defaults to 0. In the beginning of testing I couldnt figure out why no diagrams were rendering and I am sure 'normal' users will be caught out by this too.
Lastly I had issues trying to make it work together with labels for the same layer. When I enabled labelling, no diagrams showed (no matter what scale). Even after turning off labels, you have to go back to layer properties and press apply before the diagrams reappear.
Lastly it seems priority for the diagrams is set to 0 by default which I thought might be the cause of the above, but changing priority had no effect.
I'm going to attach the sample dataset I used.
Regards
Tim
comment:9 by , 13 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Applied in r15503. The mentioned issues are fixed, however there is still a couple of smaller problems that will need to be adressed in trunk (e.g. printing).
comment:10 by , 13 years ago
I've no idea if this might be related, but I now seem to have very few labels showing on the canvas. I.e., for a point file, labels seem to not be drawing as if collision avoidance is coming into play. Ticking the "Features don't act as obstacles" option does not change anything.
Hi MArco
I tried to test your patch against trunk r15388 but it fails to compile with:
Regards
Tim