Fix for #6315, and keeps centroid calc. for whole feature in adv labeling

This commit is contained in:
Larry Shaffer 2012-09-07 20:03:38 -06:00
parent 595d2a5f70
commit f143507840
4 changed files with 522 additions and 344 deletions

View File

@ -99,6 +99,8 @@ QgsLabelingGui::QgsLabelingGui( QgsPalLabeling* lbl, QgsVectorLayer* layer, QgsM
int distUnitIndex = lyr.distInMapUnits ? 1 : 0; int distUnitIndex = lyr.distInMapUnits ? 1 : 0;
mXQuadOffset = lyr.xQuadOffset; mXQuadOffset = lyr.xQuadOffset;
mYQuadOffset = lyr.yQuadOffset; mYQuadOffset = lyr.yQuadOffset;
mCentroidRadioWhole->setChecked( lyr.centroidWhole );
mCentroidFrame->setVisible( false );
switch ( lyr.placement ) switch ( lyr.placement )
{ {
case QgsPalLayerSettings::AroundPoint: case QgsPalLayerSettings::AroundPoint:
@ -106,6 +108,8 @@ QgsLabelingGui::QgsLabelingGui( QgsPalLabeling* lbl, QgsVectorLayer* layer, QgsM
radAroundCentroid->setChecked( true ); radAroundCentroid->setChecked( true );
spinDistPoint->setValue( lyr.dist ); spinDistPoint->setValue( lyr.dist );
mPointDistanceUnitComboBox->setCurrentIndex( distUnitIndex ); mPointDistanceUnitComboBox->setCurrentIndex( distUnitIndex );
mCentroidFrame->setVisible( layer->geometryType() == QGis::Polygon );
//spinAngle->setValue( lyr.angle ); //spinAngle->setValue( lyr.angle );
break; break;
case QgsPalLayerSettings::OverPoint: case QgsPalLayerSettings::OverPoint:
@ -126,6 +130,7 @@ QgsLabelingGui::QgsLabelingGui( QgsPalLabeling* lbl, QgsVectorLayer* layer, QgsM
mPointOffsetYOffsetSpinBox->setValue( lyr.yOffset ); mPointOffsetYOffsetSpinBox->setValue( lyr.yOffset );
mPointOffsetUnitsComboBox->setCurrentIndex( lyr.labelOffsetInMapUnits ? 1 : 0 ); mPointOffsetUnitsComboBox->setCurrentIndex( lyr.labelOffsetInMapUnits ? 1 : 0 );
mPointOffsetAngleSpinBox->setValue( lyr.angleOffset ); mPointOffsetAngleSpinBox->setValue( lyr.angleOffset );
mCentroidFrame->setVisible( layer->geometryType() == QGis::Polygon );
break; break;
case QgsPalLayerSettings::Line: case QgsPalLayerSettings::Line:
@ -290,6 +295,7 @@ QgsPalLayerSettings QgsLabelingGui::layerSettings()
lyr.dist = 0; lyr.dist = 0;
lyr.placementFlags = 0; lyr.placementFlags = 0;
lyr.centroidWhole = mCentroidRadioWhole->isChecked();
if (( stackedPlacement->currentWidget() == pagePoint && radAroundPoint->isChecked() ) if (( stackedPlacement->currentWidget() == pagePoint && radAroundPoint->isChecked() )
|| ( stackedPlacement->currentWidget() == pagePolygon && radAroundCentroid->isChecked() ) ) || ( stackedPlacement->currentWidget() == pagePolygon && radAroundCentroid->isChecked() ) )
{ {
@ -820,15 +826,20 @@ void QgsLabelingGui::changeBufferColor()
void QgsLabelingGui::updateOptions() void QgsLabelingGui::updateOptions()
{ {
mCentroidFrame->setVisible( false );
if (( stackedPlacement->currentWidget() == pagePoint && radAroundPoint->isChecked() ) if (( stackedPlacement->currentWidget() == pagePoint && radAroundPoint->isChecked() )
|| ( stackedPlacement->currentWidget() == pagePolygon && radAroundCentroid->isChecked() ) ) || ( stackedPlacement->currentWidget() == pagePolygon && radAroundCentroid->isChecked() ) )
{ {
stackedOptions->setCurrentWidget( pageOptionsPoint ); stackedOptions->setCurrentWidget( pageOptionsPoint );
mCentroidFrame->setVisible( stackedPlacement->currentWidget() == pagePolygon
&& radAroundCentroid->isChecked() );
} }
else if (( stackedPlacement->currentWidget() == pagePoint && radOverPoint->isChecked() ) else if (( stackedPlacement->currentWidget() == pagePoint && radOverPoint->isChecked() )
|| ( stackedPlacement->currentWidget() == pagePolygon && radOverCentroid->isChecked() ) ) || ( stackedPlacement->currentWidget() == pagePolygon && radOverCentroid->isChecked() ) )
{ {
stackedOptions->setCurrentWidget( pageOptionsPointOffset ); stackedOptions->setCurrentWidget( pageOptionsPointOffset );
mCentroidFrame->setVisible( stackedPlacement->currentWidget() == pagePolygon
&& radOverCentroid->isChecked() );
} }
else if (( stackedPlacement->currentWidget() == pageLine && radLineParallel->isChecked() ) else if (( stackedPlacement->currentWidget() == pageLine && radLineParallel->isChecked() )
|| ( stackedPlacement->currentWidget() == pagePolygon && radPolygonPerimeter->isChecked() ) || ( stackedPlacement->currentWidget() == pagePolygon && radPolygonPerimeter->isChecked() )

View File

@ -147,6 +147,7 @@ QgsPalLayerSettings::QgsPalLayerSettings()
xOffset = 0; xOffset = 0;
yOffset = 0; yOffset = 0;
angleOffset = 0; angleOffset = 0;
centroidWhole = false;
//textFont = QFont(); //textFont = QFont();
textNamedStyle = QString( "" ); textNamedStyle = QString( "" );
textColor = Qt::black; textColor = Qt::black;
@ -193,6 +194,7 @@ QgsPalLayerSettings::QgsPalLayerSettings( const QgsPalLayerSettings& s )
xOffset = s.xOffset; xOffset = s.xOffset;
yOffset = s.yOffset; yOffset = s.yOffset;
angleOffset = s.angleOffset; angleOffset = s.angleOffset;
centroidWhole = s.centroidWhole;
textFont = s.textFont; textFont = s.textFont;
textNamedStyle = s.textNamedStyle; textNamedStyle = s.textNamedStyle;
textColor = s.textColor; textColor = s.textColor;
@ -363,6 +365,7 @@ void QgsPalLayerSettings::readFromLayer( QgsVectorLayer* layer )
xOffset = layer->customProperty( "labeling/xOffset", QVariant( 0.0 ) ).toDouble(); xOffset = layer->customProperty( "labeling/xOffset", QVariant( 0.0 ) ).toDouble();
yOffset = layer->customProperty( "labeling/yOffset", QVariant( 0.0 ) ).toDouble(); yOffset = layer->customProperty( "labeling/yOffset", QVariant( 0.0 ) ).toDouble();
angleOffset = layer->customProperty( "labeling/angleOffset", QVariant( 0.0 ) ).toDouble(); angleOffset = layer->customProperty( "labeling/angleOffset", QVariant( 0.0 ) ).toDouble();
centroidWhole = layer->customProperty( "labeling/centroidWhole", QVariant( false ) ).toBool();
QString fontFamily = layer->customProperty( "labeling/fontFamily" ).toString(); QString fontFamily = layer->customProperty( "labeling/fontFamily" ).toString();
double fontSize = layer->customProperty( "labeling/fontSize" ).toDouble(); double fontSize = layer->customProperty( "labeling/fontSize" ).toDouble();
int fontWeight = layer->customProperty( "labeling/fontWeight" ).toInt(); int fontWeight = layer->customProperty( "labeling/fontWeight" ).toInt();
@ -421,6 +424,7 @@ void QgsPalLayerSettings::writeToLayer( QgsVectorLayer* layer )
layer->setCustomProperty( "labeling/xOffset", xOffset ); layer->setCustomProperty( "labeling/xOffset", xOffset );
layer->setCustomProperty( "labeling/yOffset", yOffset ); layer->setCustomProperty( "labeling/yOffset", yOffset );
layer->setCustomProperty( "labeling/angleOffset", angleOffset ); layer->setCustomProperty( "labeling/angleOffset", angleOffset );
layer->setCustomProperty( "labeling/centroidWhole", centroidWhole );
layer->setCustomProperty( "labeling/fontFamily", textFont.family() ); layer->setCustomProperty( "labeling/fontFamily", textFont.family() );
layer->setCustomProperty( "labeling/namedStyle", textNamedStyle ); layer->setCustomProperty( "labeling/namedStyle", textNamedStyle );
@ -676,10 +680,29 @@ void QgsPalLayerSettings::registerFeature( QgsVectorLayer* layer, QgsFeature& f
return; return;
} }
// whether we're going to create a centroid for polygon
bool centroidPoly = (( placement == QgsPalLayerSettings::AroundPoint
|| placement == QgsPalLayerSettings::OverPoint )
&& geom->type() == QGis::Polygon );
// CLIP the geometry if it is bigger than the extent
// don't clip if centroid is requested for whole feature
bool do_clip = false;
if ( !centroidPoly || ( centroidPoly && !centroidWhole ) )
{
do_clip = !extentGeom->contains( geom );
if ( do_clip )
{
geom = geom->intersection( extentGeom ); // creates new geometry
if ( !geom )
{
return;
}
}
}
// convert centroids to points before processing to use GEOS instead of PAL calculation // convert centroids to points before processing to use GEOS instead of PAL calculation
if (( placement == QgsPalLayerSettings::AroundPoint if ( centroidPoly )
|| placement == QgsPalLayerSettings::OverPoint )
&& geom->type() == QGis::Polygon )
{ {
QgsGeometry* centroidpt = geom->centroid(); QgsGeometry* centroidpt = geom->centroid();
if ( centroidpt->isGeosValid() && extentGeom->contains( centroidpt ) ) if ( centroidpt->isGeosValid() && extentGeom->contains( centroidpt ) )
@ -692,34 +715,17 @@ void QgsPalLayerSettings::registerFeature( QgsVectorLayer* layer, QgsFeature& f
} }
else else
{ {
// invalid geom type, skip registering feature with PAL // invalid geom type or outside extents
return; return;
} }
} }
// CLIP the geometry if it is bigger than the extent GEOSGeometry* geos_geom = geom->asGeos();
QgsGeometry* geomClipped = NULL;
GEOSGeometry* geos_geom;
bool do_clip = !extentGeom->contains( geom );
if ( do_clip )
{
geomClipped = geom->intersection( extentGeom ); // creates new geometry
if ( !geomClipped )
{
return;
}
geos_geom = geomClipped->asGeos();
}
else
{
geos_geom = geom->asGeos();
}
if ( geos_geom == NULL ) if ( geos_geom == NULL )
return; // invalid geometry return; // invalid geometry
GEOSGeometry* geos_geom_clone = GEOSGeom_clone( geos_geom ); GEOSGeometry* geos_geom_clone = GEOSGeom_clone( geos_geom );
if ( do_clip )
delete geomClipped;
//data defined position / alignment / rotation? //data defined position / alignment / rotation?
bool dataDefinedPosition = false; bool dataDefinedPosition = false;
@ -921,12 +927,11 @@ void QgsPalLayerSettings::registerFeature( QgsVectorLayer* layer, QgsFeature& f
pal::LabelPosition* lp = new LabelPosition( 1, xPos, yPos, labelX, labelY, pal::LabelPosition* lp = new LabelPosition( 1, xPos, yPos, labelX, labelY,
( angleOffset * M_PI / 180 ), 0.0, fpart ); ( angleOffset * M_PI / 180 ), 0.0, fpart );
// lp->getWidth or lp->getHeight doesn't account for rotation, get bbox instead
double amin[2], amax[2]; double amin[2], amax[2];
lp->getBoundingBox( amin, amax ); lp->getBoundingBox( amin, amax );
QgsRectangle lblrect = QgsRectangle( amin[0], amin[1], amax[0], amax[1] ); QgsRectangle lblrect = QgsRectangle( amin[0], amin[1], amax[0], amax[1] );
// labelW = lp->getWidth();
// labelH = lp->getHeight();
labelW = lblrect.width(); labelW = lblrect.width();
labelH = lblrect.height(); labelH = lblrect.height();
delete fpart; delete fpart;

View File

@ -123,6 +123,7 @@ class CORE_EXPORT QgsPalLayerSettings
int xQuadOffset, yQuadOffset; int xQuadOffset, yQuadOffset;
double xOffset, yOffset; // offset from point in mm or map units double xOffset, yOffset; // offset from point in mm or map units
double angleOffset; // rotation applied to offset labels double angleOffset; // rotation applied to offset labels
bool centroidWhole; // whether centroid calculated from whole or visible polygon
QFont textFont; QFont textFont;
QString textNamedStyle; QString textNamedStyle;
QColor textColor; QColor textColor;

View File

@ -1470,7 +1470,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>686</width> <width>686</width>
<height>485</height> <height>521</height>
</rect> </rect>
</property> </property>
<layout class="QGridLayout" name="gridLayout_13"> <layout class="QGridLayout" name="gridLayout_13">
@ -1659,7 +1659,7 @@
<item> <item>
<widget class="QStackedWidget" name="stackedPlacement"> <widget class="QStackedWidget" name="stackedPlacement">
<property name="currentIndex"> <property name="currentIndex">
<number>2</number> <number>1</number>
</property> </property>
<widget class="QWidget" name="pagePoint"> <widget class="QWidget" name="pagePoint">
<layout class="QVBoxLayout" name="verticalLayout_6"> <layout class="QVBoxLayout" name="verticalLayout_6">
@ -1762,342 +1762,471 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QStackedWidget" name="stackedOptions"> <layout class="QVBoxLayout" name="verticalLayout_11">
<property name="currentIndex"> <property name="spacing">
<number>0</number> <number>0</number>
</property> </property>
<widget class="QWidget" name="pageOptionsPoint"> <item>
<layout class="QGridLayout" name="gridLayout_7"> <widget class="QFrame" name="mCentroidFrame">
<item row="0" column="0"> <property name="frameShape">
<widget class="QLabel" name="label_21"> <enum>QFrame::NoFrame</enum>
<property name="text"> </property>
<string>Label distance</string> <property name="frameShadow">
</property> <enum>QFrame::Raised</enum>
<property name="alignment"> </property>
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <layout class="QHBoxLayout" name="horizontalLayout">
</property> <property name="leftMargin">
</widget> <number>12</number>
</item> </property>
<item row="0" column="1"> <property name="topMargin">
<widget class="QDoubleSpinBox" name="spinDistPoint"> <number>12</number>
<property name="decimals"> </property>
<number>4</number> <property name="rightMargin">
</property> <number>12</number>
<property name="maximum"> </property>
<double>999999999.000000000000000</double> <property name="bottomMargin">
</property> <number>0</number>
</widget> </property>
</item> <item>
<item row="1" column="0"> <widget class="QLabel" name="mCentroidLabel">
<widget class="QLabel" name="label_23"> <property name="sizePolicy">
<property name="text"> <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<string>Rotation</string> <horstretch>0</horstretch>
</property> <verstretch>0</verstretch>
<property name="alignment"> </sizepolicy>
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </property>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="spinAngle">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QLabel" name="label_24">
<property name="text">
<string>degrees</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QComboBox" name="mPointDistanceUnitComboBox">
<item>
<property name="text"> <property name="text">
<string>In mm</string> <string>Centroid of</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="mCentroidRadioVisible">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property> </property>
</item>
<item>
<property name="text"> <property name="text">
<string>In map units</string> <string>visible polygon</string>
</property> </property>
</item> <property name="checked">
</widget> <bool>true</bool>
</item> </property>
</layout> </widget>
</widget> </item>
<widget class="QWidget" name="pageOptionsLine"> <item>
<layout class="QVBoxLayout" name="verticalLayout_9"> <widget class="QRadioButton" name="mCentroidRadioWhole">
<item> <property name="sizePolicy">
<widget class="QCheckBox" name="chkLineAbove"> <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<property name="text"> <horstretch>0</horstretch>
<string>Above line</string> <verstretch>0</verstretch>
</property> </sizepolicy>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="chkLineOn">
<property name="text">
<string>On line</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="chkLineBelow">
<property name="text">
<string>Below line</string>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="offlineOptions" native="true">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="margin">
<number>0</number>
</property> </property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_14">
<item>
<widget class="QLabel" name="label_26">
<property name="text">
<string>Label distance</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QDoubleSpinBox" name="spinDistLine">
<property name="decimals">
<number>4</number>
</property>
<property name="maximum">
<double>999999999.000000000000000</double>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="mLineDistanceUnitComboBox">
<item>
<property name="text">
<string>In mm</string>
</property>
</item>
<item>
<property name="text">
<string>In map units</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="chkLineOrientationDependent">
<property name="text">
<string>Line orientation dependent position</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="pageOptionsEmpty"/>
<widget class="QWidget" name="pageOptionsPointOffset">
<layout class="QGridLayout" name="gridLayout_20">
<item row="1" column="0">
<widget class="QDoubleSpinBox" name="mPointOffsetXOffsetSpinBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="prefix">
<string>X </string>
</property>
<property name="suffix">
<string/>
</property>
<property name="decimals">
<number>4</number>
</property>
<property name="minimum">
<double>-9999999.000000000000000</double>
</property>
<property name="maximum">
<double>9999999.000000000000000</double>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QLabel" name="label_27">
<property name="text">
<string>degrees</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QComboBox" name="mPointOffsetUnitsComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text"> <property name="text">
<string>mm</string> <string>whole polygon</string>
</property> </property>
</item> </widget>
<item> </item>
<property name="text"> </layout>
<string>map units</string> </widget>
</property> </item>
</item> <item>
</widget> <widget class="QStackedWidget" name="stackedOptions">
</item> <property name="currentIndex">
<item row="1" column="1"> <number>1</number>
<widget class="QDoubleSpinBox" name="mPointOffsetYOffsetSpinBox"> </property>
<property name="sizePolicy"> <widget class="QWidget" name="pageOptionsPoint">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed"> <layout class="QGridLayout" name="gridLayout_7">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="prefix">
<string>Y </string>
</property>
<property name="suffix">
<string/>
</property>
<property name="decimals">
<number>4</number>
</property>
<property name="minimum">
<double>-9999999.000000000000000</double>
</property>
<property name="maximum">
<double>9999999.000000000000000</double>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_25">
<property name="text">
<string>Rotation</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="0" colspan="3">
<layout class="QGridLayout" name="gridLayout_19">
<property name="verticalSpacing">
<number>8</number>
</property>
<item row="1" column="2">
<widget class="QRadioButton" name="mPointOffsetRadioRight">
<property name="text">
<string>Right</string>
</property>
</widget>
</item>
<item row="0" column="2"> <item row="0" column="2">
<widget class="QRadioButton" name="mPointOffsetRadioAboveRight"> <widget class="QComboBox" name="mPointDistanceUnitComboBox">
<property name="text"> <item>
<string>Above Right</string> <property name="text">
</property> <string>In mm</string>
</property>
</item>
<item>
<property name="text">
<string>In map units</string>
</property>
</item>
</widget> </widget>
</item> </item>
<item row="0" column="0"> <item row="1" column="2">
<widget class="QRadioButton" name="mPointOffsetRadioAboveLeft"> <widget class="QLabel" name="label_24">
<property name="text"> <property name="text">
<string>Above Left</string> <string>degrees</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="1" column="1">
<widget class="QRadioButton" name="mPointOffsetRadioOver"> <widget class="QSpinBox" name="spinAngle">
<property name="enabled">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_23">
<property name="text"> <property name="text">
<string>Over</string> <string>Rotation</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QDoubleSpinBox" name="spinDistPoint">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="decimals">
<number>4</number>
</property>
<property name="maximum">
<double>999999999.000000000000000</double>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_21">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Label distance</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="1">
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="pageOptionsLine">
<layout class="QVBoxLayout" name="verticalLayout_9">
<item>
<widget class="QCheckBox" name="chkLineAbove">
<property name="text">
<string>Above line</string>
</property> </property>
<property name="checked"> <property name="checked">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item>
<widget class="QRadioButton" name="mPointOffsetRadioAbove"> <widget class="QCheckBox" name="chkLineOn">
<property name="text"> <property name="text">
<string>Above</string> <string>On line</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item>
<widget class="QRadioButton" name="mPointOffsetRadioLeft"> <widget class="QCheckBox" name="chkLineBelow">
<property name="text"> <property name="text">
<string>Left</string> <string>Below line</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item>
<widget class="QRadioButton" name="mPointOffsetRadioBelowLeft"> <widget class="QWidget" name="offlineOptions" native="true">
<property name="text"> <layout class="QVBoxLayout" name="verticalLayout">
<string>Below Left</string> <property name="margin">
</property> <number>0</number>
</widget> </property>
</item> <item>
<item row="2" column="1"> <layout class="QHBoxLayout" name="horizontalLayout_14">
<widget class="QRadioButton" name="mPointOffsetRadioBelow"> <item>
<property name="text"> <widget class="QLabel" name="label_26">
<string>Below</string> <property name="sizePolicy">
</property> <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
</widget> <horstretch>0</horstretch>
</item> <verstretch>0</verstretch>
<item row="2" column="2"> </sizepolicy>
<widget class="QRadioButton" name="mPointOffsetRadioBelowRight"> </property>
<property name="text"> <property name="text">
<string>Below Right</string> <string>Label distance</string>
</property> </property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QDoubleSpinBox" name="spinDistLine">
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="decimals">
<number>4</number>
</property>
<property name="maximum">
<double>999999999.000000000000000</double>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="mLineDistanceUnitComboBox">
<item>
<property name="text">
<string>In mm</string>
</property>
</item>
<item>
<property name="text">
<string>In map units</string>
</property>
</item>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="chkLineOrientationDependent">
<property name="text">
<string>Line orientation dependent position</string>
</property>
</widget>
</item>
</layout>
</widget> </widget>
</item> </item>
</layout> </layout>
</item> </widget>
<item row="2" column="1"> <widget class="QWidget" name="pageOptionsEmpty"/>
<widget class="QDoubleSpinBox" name="mPointOffsetAngleSpinBox"> <widget class="QWidget" name="pageOptionsPointOffset">
<property name="enabled"> <layout class="QGridLayout" name="gridLayout_20">
<bool>true</bool> <item row="1" column="0">
</property> <widget class="QDoubleSpinBox" name="mPointOffsetXOffsetSpinBox">
<property name="alignment"> <property name="sizePolicy">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
</property> <horstretch>0</horstretch>
<property name="minimum"> <verstretch>0</verstretch>
<double>-360.000000000000000</double> </sizepolicy>
</property> </property>
<property name="maximum"> <property name="alignment">
<double>360.000000000000000</double> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property> </property>
</widget> <property name="prefix">
</item> <string>X </string>
</layout> </property>
</widget> <property name="suffix">
</widget> <string/>
</property>
<property name="decimals">
<number>4</number>
</property>
<property name="minimum">
<double>-9999999.000000000000000</double>
</property>
<property name="maximum">
<double>9999999.000000000000000</double>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QComboBox" name="mPointOffsetUnitsComboBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="currentIndex">
<number>1</number>
</property>
<item>
<property name="text">
<string>mm</string>
</property>
</item>
<item>
<property name="text">
<string>map units</string>
</property>
</item>
</widget>
</item>
<item row="1" column="1">
<widget class="QDoubleSpinBox" name="mPointOffsetYOffsetSpinBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="prefix">
<string>Y </string>
</property>
<property name="suffix">
<string/>
</property>
<property name="decimals">
<number>4</number>
</property>
<property name="minimum">
<double>-9999999.000000000000000</double>
</property>
<property name="maximum">
<double>9999999.000000000000000</double>
</property>
</widget>
</item>
<item row="0" column="0" colspan="3">
<layout class="QGridLayout" name="gridLayout_19">
<property name="verticalSpacing">
<number>8</number>
</property>
<item row="1" column="2">
<widget class="QRadioButton" name="mPointOffsetRadioRight">
<property name="text">
<string>Right</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QRadioButton" name="mPointOffsetRadioAboveRight">
<property name="text">
<string>Above Right</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QRadioButton" name="mPointOffsetRadioAboveLeft">
<property name="text">
<string>Above Left</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QRadioButton" name="mPointOffsetRadioOver">
<property name="text">
<string>Over</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QRadioButton" name="mPointOffsetRadioAbove">
<property name="text">
<string>Above</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QRadioButton" name="mPointOffsetRadioLeft">
<property name="text">
<string>Left</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QRadioButton" name="mPointOffsetRadioBelowLeft">
<property name="text">
<string>Below Left</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QRadioButton" name="mPointOffsetRadioBelow">
<property name="text">
<string>Below</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QRadioButton" name="mPointOffsetRadioBelowRight">
<property name="text">
<string>Below Right</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_13">
<item>
<widget class="QLabel" name="label_25">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Rotation</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QDoubleSpinBox" name="mPointOffsetAngleSpinBox">
<property name="enabled">
<bool>true</bool>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="minimum">
<double>-360.000000000000000</double>
</property>
<property name="maximum">
<double>360.000000000000000</double>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_27">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>degrees</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</item> </item>
</layout> </layout>
</widget> </widget>
@ -2653,12 +2782,12 @@
<slot>setValue(int)</slot> <slot>setValue(int)</slot>
<hints> <hints>
<hint type="sourcelabel"> <hint type="sourcelabel">
<x>341</x> <x>319</x>
<y>286</y> <y>408</y>
</hint> </hint>
<hint type="destinationlabel"> <hint type="destinationlabel">
<x>415</x> <x>393</x>
<y>288</y> <y>410</y>
</hint> </hint>
</hints> </hints>
</connection> </connection>
@ -2669,12 +2798,12 @@
<slot>setValue(int)</slot> <slot>setValue(int)</slot>
<hints> <hints>
<hint type="sourcelabel"> <hint type="sourcelabel">
<x>325</x> <x>319</x>
<y>499</y> <y>547</y>
</hint> </hint>
<hint type="destinationlabel"> <hint type="destinationlabel">
<x>397</x> <x>391</x>
<y>500</y> <y>549</y>
</hint> </hint>
</hints> </hints>
</connection> </connection>
@ -2685,12 +2814,12 @@
<slot>setValue(int)</slot> <slot>setValue(int)</slot>
<hints> <hints>
<hint type="sourcelabel"> <hint type="sourcelabel">
<x>397</x> <x>391</x>
<y>500</y> <y>549</y>
</hint> </hint>
<hint type="destinationlabel"> <hint type="destinationlabel">
<x>325</x> <x>319</x>
<y>499</y> <y>547</y>
</hint> </hint>
</hints> </hints>
</connection> </connection>
@ -2701,12 +2830,44 @@
<slot>setValue(int)</slot> <slot>setValue(int)</slot>
<hints> <hints>
<hint type="sourcelabel"> <hint type="sourcelabel">
<x>415</x> <x>393</x>
<y>288</y> <y>410</y>
</hint> </hint>
<hint type="destinationlabel"> <hint type="destinationlabel">
<x>341</x> <x>319</x>
<y>286</y> <y>408</y>
</hint>
</hints>
</connection>
<connection>
<sender>radOverCentroid</sender>
<signal>toggled(bool)</signal>
<receiver>mCentroidFrame</receiver>
<slot>setVisible(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>105</x>
<y>154</y>
</hint>
<hint type="destinationlabel">
<x>362</x>
<y>131</y>
</hint>
</hints>
</connection>
<connection>
<sender>radAroundCentroid</sender>
<signal>toggled(bool)</signal>
<receiver>mCentroidFrame</receiver>
<slot>setVisible(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>141</x>
<y>187</y>
</hint>
<hint type="destinationlabel">
<x>404</x>
<y>128</y>
</hint> </hint>
</hints> </hints>
</connection> </connection>