[Qgis-developer] New adv labeling freeze-thaw tools
John C. Tull
jctull at gmail.com
Tue Jul 17 14:35:46 PDT 2012
I look forward to seeing this in trunk. Thanks for the great contribution.
John
On Jul 17, 2012, at 2:28 PM, Larry Shaffer wrote:
> I've updated and extensively tested this new tool (not all platforms)
> and it works very well. I have sent in a pull request:
>
> https://github.com/qgis/Quantum-GIS/pull/193
>
> Again, here's the intro video:
> http://vimeo.com/dakotacarto/freezethawlabels
> (Note: I haven't had much sleep, so the video is a bit rough.)
>
> As an unexpected added bonus (well, unexpected to me), the tool helps
> greatly with slow label rendering options, like a polygon layer's
> 'free' and 'horizontal' modes. After the PAL labeling engine finishes
> with those modes during a canvas refresh (sometimes taking several
> minutes), just use the freeze label tool on the result. The subsequent
> canvas refreshes are magnitudes faster.
>
> Marco H., thank you for your help on this, and thanks to sourcepole
> and Martin for doing such a great job of coding the advanced labeling
> engine. I would have never been able to produce this tool had it not
> been for the excellent existing and flexible code.
>
> Regards,
>
> Larry Shaffer
> Dakota Cartography
> Black Hills, South Dakota
>
>
> On Mon, Jul 16, 2012 at 9:45 AM, Marco Hugentobler
> <marco.hugentobler at sourcepole.ch> wrote:
>> Hi Larry
>>
>>> If you have the time to look at the constructor for
>>> QgsMapToolFreezeLabels (the FIXME), you'll notice I could not find a
>>> way to make the signal/slot connections from there. Currently they are
>>> in qgisapp.cpp, but I would prefer to not pollute that core file with
>>> any more of my tool's code than necessary. What's the simplest way to
>>> create the connections from inside my QObject-inherited tool instead?
>>
>>
>> The slot methods need to be declared as slots in the header file, like this:
>>
>> public slots:
>>
>> //! Update frozen label highlights on canvas render finished
>> void updateFrozenLabels();
>> //! Render rectangles around frozen labels
>> void highlightFrozenLabels();
>>
>> Currently, they are just normal public methods.
>>
>> Regards,
>> Marco
>>
>> Am 16.07.2012 11:35, schrieb Larry Shaffer:
>>>
>>> On Mon, Jul 16, 2012 at 2:18 AM, Marco Hugentobler
>>> <marco.hugentobler at sourcepole.ch> wrote:
>>>>
>>>> Hi Larry
>>>>
>>>> Excellent work, thank you!
>>>> The freeze/thaw tool will be a great addition to the label tool bar.
>>>>
>>>> I wonder if the tool could also be active if x/y is data defined and
>>>> rotation not (currently, x/y/rotation need to be data defined to use the
>>>> tool).
>>>
>>> Yes, that is an unnecessary restriction. I'll make the rotation field
>>> optional.
>>>
>>>> On a detail level, in QgsMapToolFreezeLabels::highlightLabel you could
>>>> probably use QgsMapRenderer::mapToLayerCoordinates to transform the
>>>> rectangle (instead of mCoordTransform ).
>>>
>>> Will make the change. Thanks.
>>>
>>> If you have the time to look at the constructor for
>>> QgsMapToolFreezeLabels (the FIXME), you'll notice I could not find a
>>> way to make the signal/slot connections from there. Currently they are
>>> in qgisapp.cpp, but I would prefer to not pollute that core file with
>>> any more of my tool's code than necessary. What's the simplest way to
>>> create the connections from inside my QObject-inherited tool instead?
>>>
>>> Regards,
>>> Larry
>>>
>>>
>>>
>>>> Am 16.07.2012 05:31, schrieb Larry Shaffer:
>>>>
>>>> Hi,
>>>>
>>>> The current large-format project I'm working on requires me to layout,
>>>> for print, thousands of labels. So I spent the last couple of days
>>>> making two new tools for the advanced labeling toolbar that allow the
>>>> user to interactively 'freeze' (write coords and rotation info to
>>>> attribute table) and 'thaw' (revert from data-defined to dynamic) any
>>>> rendered labels.
>>>>
>>>> *Show Frozen Labels*
>>>>
>>>> This tool highlights frozen labels for all visible layers. Blue
>>>> highlighted labels are frozen, green are frozen and editable (parent
>>>> layer's in edit mode).
>>>>
>>>> *Freeze/Thaw Labels*
>>>>
>>>> This tool allows the user to interactively choose, by single or
>>>> marquee selection, labels to freeze or thaw. The in-memory attribute
>>>> table is immediately updated and results shown to user. This tool
>>>> allows the user to interactively manipulate the PAL labeling engine to
>>>> find the best solutions for their frozen labels.
>>>>
>>>> Since the topic and how the tool interacts with the labeling engine is
>>>> more complicated, I made an intro video. (Note: I haven't had much
>>>> sleep recently, so it's a bit rough.)
>>>>
>>>> http://vimeo.com/dakotacarto/freezethawlabels
>>>>
>>>>
>>>> This is my first C++ project, so I'd be really happy if someone
>>>> audited the code before I squash the commits and send a pull request:
>>>>
>>>> https://github.com/dakcarto/Quantum-GIS/tree/feature_freeze-thaw-labels
>>>>
>>>> Only tested on Mac, as of now. Nothing platform-specific about it though.
>>>>
>>>> Regards,
>>>>
>>>> Larry Shaffer
>>>> Dakota Cartography
>>>> Black Hills, South Dakota
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Qgis-developer mailing list
>>>> Qgis-developer at lists.osgeo.org
>>>> http://lists.osgeo.org/mailman/listinfo/qgis-developer
>>>>
>>>>
>>>>
>>>> --
>>>> Dr. Marco Hugentobler
>>>> Sourcepole - Linux & Open Source Solutions
>>>> Weberstrasse 5, CH-8004 Zürich, Switzerland
>>>> marco.hugentobler at sourcepole.ch http://www.sourcepole.ch
>>>> Technical Advisor QGIS Project Steering Committee
>>>>
>>>>
>>>> _______________________________________________
>>>> Qgis-developer mailing list
>>>> Qgis-developer at lists.osgeo.org
>>>> http://lists.osgeo.org/mailman/listinfo/qgis-developer
>>>>
>>
>>
>> --
>> Dr. Marco Hugentobler
>> Sourcepole - Linux & Open Source Solutions
>> Weberstrasse 5, CH-8004 Zürich, Switzerland
>> marco.hugentobler at sourcepole.ch http://www.sourcepole.ch
>> Technical Advisor QGIS Project Steering Committee
>>
> _______________________________________________
> Qgis-developer mailing list
> Qgis-developer at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/qgis-developer
More information about the Qgis-developer
mailing list