Skip to content

Commit 47ee439

Browse files
committedMar 13, 2013
Output units for line pattern fill symbollayer
1 parent 52611c1 commit 47ee439

File tree

6 files changed

+318
-73
lines changed

6 files changed

+318
-73
lines changed
 

‎src/core/symbology-ng/qgsfillsymbollayerv2.cpp

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -740,14 +740,32 @@ void QgsSVGFillSymbolLayer::setDefaultSvgParams()
740740
}
741741
}
742742

743-
QgsLinePatternFillSymbolLayer::QgsLinePatternFillSymbolLayer(): QgsImageFillSymbolLayer()
743+
QgsLinePatternFillSymbolLayer::QgsLinePatternFillSymbolLayer(): QgsImageFillSymbolLayer(), mDistanceUnit( QgsSymbolV2::MM ), mLineWidthUnit( QgsSymbolV2::MM ),
744+
mOffsetUnit( QgsSymbolV2::MM )
744745
{
745746
}
746747

747748
QgsLinePatternFillSymbolLayer::~QgsLinePatternFillSymbolLayer()
748749
{
749750
}
750751

752+
void QgsLinePatternFillSymbolLayer::setOutputUnit( QgsSymbolV2::OutputUnit unit )
753+
{
754+
mDistanceUnit = unit;
755+
mLineWidthUnit = unit;
756+
mOffsetUnit = unit;
757+
}
758+
759+
QgsSymbolV2::OutputUnit QgsLinePatternFillSymbolLayer::outputUnit() const
760+
{
761+
QgsSymbolV2::OutputUnit unit = mDistanceUnit;
762+
if ( mLineWidthUnit != unit || mOffsetUnit != unit )
763+
{
764+
return QgsSymbolV2::Mixed;
765+
}
766+
return unit;
767+
}
768+
751769
QgsSymbolLayerV2* QgsLinePatternFillSymbolLayer::create( const QgsStringMap& properties )
752770
{
753771
QgsLinePatternFillSymbolLayer* patternLayer = new QgsLinePatternFillSymbolLayer();
@@ -788,6 +806,20 @@ QgsSymbolLayerV2* QgsLinePatternFillSymbolLayer::create( const QgsStringMap& pro
788806
offset = properties["offset"].toDouble();
789807
}
790808
patternLayer->setOffset( offset );
809+
810+
811+
if ( properties.contains( "distance_unit" ) )
812+
{
813+
patternLayer->setDistanceUnit( QgsSymbolLayerV2Utils::decodeOutputUnit( properties["distance_unit"] ) );
814+
}
815+
if ( properties.contains( "line_width_unit" ) )
816+
{
817+
patternLayer->setLineWidthUnit( QgsSymbolLayerV2Utils::decodeOutputUnit( properties["line_width_unit"] ) );
818+
}
819+
if ( properties.contains( "offset_unit" ) )
820+
{
821+
patternLayer->setOffsetUnit( QgsSymbolLayerV2Utils::decodeOutputUnit( properties["offset_unit"] ) );
822+
}
791823
return patternLayer;
792824
}
793825

@@ -798,9 +830,10 @@ QString QgsLinePatternFillSymbolLayer::layerType() const
798830

799831
void QgsLinePatternFillSymbolLayer::startRender( QgsSymbolV2RenderContext& context )
800832
{
801-
double outlinePixelWidth = context.outputPixelSize( mLineWidth );
802-
double outputPixelDist = context.outputPixelSize( mDistance );
803-
double outputPixelOffset = context.outputPixelSize( mOffset );
833+
const QgsRenderContext& ctx = context.renderContext();
834+
double outlinePixelWidth = mLineWidth * QgsSymbolLayerV2Utils::lineWidthScaleFactor( ctx, mLineWidthUnit );
835+
double outputPixelDist = mDistance * QgsSymbolLayerV2Utils::lineWidthScaleFactor( ctx, mDistanceUnit );
836+
double outputPixelOffset = mOffset * QgsSymbolLayerV2Utils::lineWidthScaleFactor( ctx, mOffsetUnit );
804837

805838
//create image
806839
int height, width;
@@ -936,16 +969,22 @@ QgsStringMap QgsLinePatternFillSymbolLayer::properties() const
936969
map.insert( "linewidth", QString::number( mLineWidth ) );
937970
map.insert( "color", QgsSymbolLayerV2Utils::encodeColor( mColor ) );
938971
map.insert( "offset", QString::number( mOffset ) );
972+
map.insert( "distance_unit", QgsSymbolLayerV2Utils::encodeOutputUnit( mDistanceUnit ) );
973+
map.insert( "line_width_unit", QgsSymbolLayerV2Utils::encodeOutputUnit( mLineWidthUnit ) );
974+
map.insert( "offset_unit", QgsSymbolLayerV2Utils::encodeOutputUnit( mOffsetUnit ) );
939975
return map;
940976
}
941977

942978
QgsSymbolLayerV2* QgsLinePatternFillSymbolLayer::clone() const
943979
{
944-
QgsSymbolLayerV2* clonedLayer = QgsLinePatternFillSymbolLayer::create( properties() );
980+
QgsLinePatternFillSymbolLayer* clonedLayer = static_cast<QgsLinePatternFillSymbolLayer*>( QgsLinePatternFillSymbolLayer::create( properties() ) );
945981
if ( mOutline )
946982
{
947983
clonedLayer->setSubSymbol( mOutline->clone() );
948984
}
985+
clonedLayer->setDistanceUnit( mDistanceUnit );
986+
clonedLayer->setLineWidthUnit( mLineWidthUnit );
987+
clonedLayer->setOffsetUnit( mOffsetUnit );
949988
return clonedLayer;
950989
}
951990

‎src/core/symbology-ng/qgsfillsymbollayerv2.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,16 +233,31 @@ class CORE_EXPORT QgsLinePatternFillSymbolLayer: public QgsImageFillSymbolLayer
233233
void setOffset( double offset ) { mOffset = offset; }
234234
double offset() const { return mOffset; }
235235

236+
void setDistanceUnit( QgsSymbolV2::OutputUnit unit ) { mDistanceUnit = unit; }
237+
QgsSymbolV2::OutputUnit distanceUnit() const { return mDistanceUnit; }
238+
239+
void setLineWidthUnit( QgsSymbolV2::OutputUnit unit ) { mLineWidthUnit = unit; }
240+
QgsSymbolV2::OutputUnit lineWidthUnit() const { return mLineWidthUnit; }
241+
242+
void setOffsetUnit( QgsSymbolV2::OutputUnit unit ) { mOffsetUnit = unit; }
243+
QgsSymbolV2::OutputUnit offsetUnit() const { return mOffsetUnit; }
244+
245+
void setOutputUnit( QgsSymbolV2::OutputUnit unit );
246+
QgsSymbolV2::OutputUnit outputUnit() const;
247+
236248
protected:
237249
/**Distance (in mm or map units) between lines*/
238250
double mDistance;
251+
QgsSymbolV2::OutputUnit mDistanceUnit;
239252
/**Line width (in mm or map units)*/
240253
double mLineWidth;
254+
QgsSymbolV2::OutputUnit mLineWidthUnit;
241255
QColor mColor;
242256
/**Vector line angle in degrees (0 = horizontal, counterclockwise)*/
243257
double mLineAngle;
244258
/**Offset perpendicular to line direction*/
245259
double mOffset;
260+
QgsSymbolV2::OutputUnit mOffsetUnit;
246261
};
247262

248263
class CORE_EXPORT QgsPointPatternFillSymbolLayer: public QgsImageFillSymbolLayer

‎src/gui/symbology-ng/qgssymbollayerv2widget.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1322,6 +1322,17 @@ void QgsLinePatternFillSymbolLayerWidget::setSymbolLayer( QgsSymbolLayerV2* laye
13221322
mLineWidthSpinBox->setValue( mLayer->lineWidth() );
13231323
mOffsetSpinBox->setValue( mLayer->offset() );
13241324
mColorPushButton->setColor( mLayer->color() );
1325+
1326+
//units
1327+
mDistanceUnitComboBox->blockSignals( true );
1328+
mDistanceUnitComboBox->setCurrentIndex( mLayer->distanceUnit() );
1329+
mDistanceUnitComboBox->blockSignals( false );
1330+
mLineWidthUnitComboBox->blockSignals( true );
1331+
mLineWidthUnitComboBox->setCurrentIndex( mLayer->lineWidthUnit() );
1332+
mLineWidthUnitComboBox->blockSignals( false );
1333+
mOffsetUnitComboBox->blockSignals( true );
1334+
mOffsetUnitComboBox->setCurrentIndex( mLayer->offsetUnit() );
1335+
mOffsetUnitComboBox->blockSignals( false );
13251336
}
13261337
}
13271338

@@ -1380,6 +1391,33 @@ void QgsLinePatternFillSymbolLayerWidget::on_mColorPushButton_clicked()
13801391
}
13811392
}
13821393

1394+
void QgsLinePatternFillSymbolLayerWidget::on_mDistanceUnitComboBox_currentIndexChanged( int index )
1395+
{
1396+
if ( mLayer )
1397+
{
1398+
mLayer->setDistanceUnit(( QgsSymbolV2::OutputUnit ) index );
1399+
emit changed();
1400+
}
1401+
}
1402+
1403+
void QgsLinePatternFillSymbolLayerWidget::on_mLineWidthUnitComboBox_currentIndexChanged( int index )
1404+
{
1405+
if ( mLayer )
1406+
{
1407+
mLayer->setLineWidthUnit(( QgsSymbolV2::OutputUnit ) index );
1408+
emit changed();
1409+
}
1410+
}
1411+
1412+
void QgsLinePatternFillSymbolLayerWidget::on_mOffsetUnitComboBox_currentIndexChanged( int index )
1413+
{
1414+
if ( mLayer )
1415+
{
1416+
mLayer->setOffsetUnit(( QgsSymbolV2::OutputUnit ) index );
1417+
emit changed();
1418+
}
1419+
}
1420+
13831421

13841422
/////////////
13851423

‎src/gui/symbology-ng/qgssymbollayerv2widget.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,9 @@ class GUI_EXPORT QgsLinePatternFillSymbolLayerWidget : public QgsSymbolLayerV2Wi
319319
void on_mLineWidthSpinBox_valueChanged( double d );
320320
void on_mOffsetSpinBox_valueChanged( double d );
321321
void on_mColorPushButton_clicked();
322+
void on_mDistanceUnitComboBox_currentIndexChanged( int index );
323+
void on_mLineWidthUnitComboBox_currentIndexChanged( int index );
324+
void on_mOffsetUnitComboBox_currentIndexChanged( int index );
322325
};
323326

324327
//////////

‎src/ui/symbollayer/widget_linepatternfill.ui

Lines changed: 98 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,31 +17,20 @@
1717
<property name="margin">
1818
<number>1</number>
1919
</property>
20-
<item row="1" column="1">
21-
<widget class="QDoubleSpinBox" name="mDistanceSpinBox">
22-
<property name="maximum">
23-
<double>999999999.000000000000000</double>
24-
</property>
25-
</widget>
26-
</item>
27-
<item row="0" column="1">
28-
<widget class="QDoubleSpinBox" name="mAngleSpinBox">
29-
<property name="maximum">
30-
<double>360.000000000000000</double>
31-
</property>
32-
</widget>
33-
</item>
34-
<item row="3" column="1">
20+
<item row="5" column="1">
3521
<widget class="QDoubleSpinBox" name="mOffsetSpinBox">
3622
<property name="decimals">
3723
<number>5</number>
3824
</property>
3925
<property name="minimum">
4026
<double>-99.000000000000000</double>
4127
</property>
28+
<property name="maximum">
29+
<double>999999999.000000000000000</double>
30+
</property>
4231
</widget>
4332
</item>
44-
<item row="2" column="1">
33+
<item row="3" column="1">
4534
<widget class="QDoubleSpinBox" name="mLineWidthSpinBox">
4635
<property name="decimals">
4736
<number>5</number>
@@ -51,28 +40,98 @@
5140
</property>
5241
</widget>
5342
</item>
43+
<item row="7" column="1">
44+
<widget class="QgsColorButtonV2" name="mColorPushButton">
45+
<property name="text">
46+
<string>Change</string>
47+
</property>
48+
</widget>
49+
</item>
50+
<item row="0" column="0">
51+
<widget class="QLabel" name="mAngleLabel">
52+
<property name="text">
53+
<string>Angle</string>
54+
</property>
55+
</widget>
56+
</item>
57+
<item row="0" column="1">
58+
<widget class="QDoubleSpinBox" name="mAngleSpinBox">
59+
<property name="maximum">
60+
<double>360.000000000000000</double>
61+
</property>
62+
</widget>
63+
</item>
64+
<item row="4" column="1">
65+
<widget class="QComboBox" name="mLineWidthUnitComboBox">
66+
<item>
67+
<property name="text">
68+
<string>Millimeter</string>
69+
</property>
70+
</item>
71+
<item>
72+
<property name="text">
73+
<string>Map unit</string>
74+
</property>
75+
</item>
76+
</widget>
77+
</item>
78+
<item row="1" column="0">
79+
<widget class="QLabel" name="mDistanceLabel">
80+
<property name="text">
81+
<string>Distance</string>
82+
</property>
83+
</widget>
84+
</item>
5485
<item row="2" column="0">
86+
<widget class="QLabel" name="mDistanceUnitLabel">
87+
<property name="text">
88+
<string>Distance unit</string>
89+
</property>
90+
</widget>
91+
</item>
92+
<item row="3" column="0">
5593
<widget class="QLabel" name="mLineWidthLabel">
5694
<property name="text">
5795
<string>Line width</string>
5896
</property>
5997
</widget>
6098
</item>
6199
<item row="4" column="0">
100+
<widget class="QLabel" name="mLineWidthUnitLabel">
101+
<property name="text">
102+
<string>Line width unit</string>
103+
</property>
104+
</widget>
105+
</item>
106+
<item row="7" column="0">
62107
<widget class="QLabel" name="mColorLabel">
63108
<property name="text">
64109
<string>Color</string>
65110
</property>
66111
</widget>
67112
</item>
68-
<item row="0" column="0">
69-
<widget class="QLabel" name="mAngleLabel">
113+
<item row="2" column="1">
114+
<widget class="QComboBox" name="mDistanceUnitComboBox">
115+
<item>
116+
<property name="text">
117+
<string>Millimeter</string>
118+
</property>
119+
</item>
120+
<item>
121+
<property name="text">
122+
<string>Map unit</string>
123+
</property>
124+
</item>
125+
</widget>
126+
</item>
127+
<item row="5" column="0">
128+
<widget class="QLabel" name="mOffsetLabel">
70129
<property name="text">
71-
<string>Angle</string>
130+
<string>Offset</string>
72131
</property>
73132
</widget>
74133
</item>
75-
<item row="5" column="0" colspan="2">
134+
<item row="8" column="0" colspan="2">
76135
<spacer name="verticalSpacer">
77136
<property name="orientation">
78137
<enum>Qt::Vertical</enum>
@@ -85,24 +144,31 @@
85144
</property>
86145
</spacer>
87146
</item>
88-
<item row="4" column="1">
89-
<widget class="QgsColorButtonV2" name="mColorPushButton">
90-
<property name="text">
91-
<string>Change</string>
147+
<item row="1" column="1">
148+
<widget class="QDoubleSpinBox" name="mDistanceSpinBox">
149+
<property name="maximum">
150+
<double>999999999.000000000000000</double>
92151
</property>
93152
</widget>
94153
</item>
95-
<item row="1" column="0">
96-
<widget class="QLabel" name="mDistanceLabel">
97-
<property name="text">
98-
<string>Distance</string>
99-
</property>
154+
<item row="6" column="1">
155+
<widget class="QComboBox" name="mOffsetUnitComboBox">
156+
<item>
157+
<property name="text">
158+
<string>Millimeter</string>
159+
</property>
160+
</item>
161+
<item>
162+
<property name="text">
163+
<string>Map unit</string>
164+
</property>
165+
</item>
100166
</widget>
101167
</item>
102-
<item row="3" column="0">
103-
<widget class="QLabel" name="mOffsetLabel">
168+
<item row="6" column="0">
169+
<widget class="QLabel" name="mOffsetUnitLabel">
104170
<property name="text">
105-
<string>Offset</string>
171+
<string>Offset unit</string>
106172
</property>
107173
</widget>
108174
</item>

‎src/ui/symbollayer/widget_pointpatternfill.ui

Lines changed: 120 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<x>0</x>
88
<y>0</y>
99
<width>283</width>
10-
<height>152</height>
10+
<height>244</height>
1111
</rect>
1212
</property>
1313
<property name="windowTitle">
@@ -17,21 +17,7 @@
1717
<property name="margin">
1818
<number>1</number>
1919
</property>
20-
<item row="0" column="0">
21-
<widget class="QLabel" name="mHorizontalDistanceLabel">
22-
<property name="text">
23-
<string>Horizontal distance</string>
24-
</property>
25-
</widget>
26-
</item>
27-
<item row="1" column="0">
28-
<widget class="QLabel" name="mVerticalDistanceLabel">
29-
<property name="text">
30-
<string>Vertical distance</string>
31-
</property>
32-
</widget>
33-
</item>
34-
<item row="1" column="1">
20+
<item row="2" column="1">
3521
<widget class="QDoubleSpinBox" name="mVerticalDistanceSpinBox">
3622
<property name="decimals">
3723
<number>5</number>
@@ -42,13 +28,26 @@
4228
</widget>
4329
</item>
4430
<item row="2" column="0">
45-
<widget class="QLabel" name="mHorizontalDisplacementLabel">
31+
<widget class="QLabel" name="mVerticalDistanceLabel">
4632
<property name="text">
47-
<string>Horizontal displacement</string>
33+
<string>Vertical distance</string>
4834
</property>
4935
</widget>
5036
</item>
51-
<item row="3" column="1">
37+
<item row="8" column="0">
38+
<spacer name="verticalSpacer">
39+
<property name="orientation">
40+
<enum>Qt::Vertical</enum>
41+
</property>
42+
<property name="sizeHint" stdset="0">
43+
<size>
44+
<width>20</width>
45+
<height>40</height>
46+
</size>
47+
</property>
48+
</spacer>
49+
</item>
50+
<item row="6" column="1">
5251
<widget class="QDoubleSpinBox" name="mVerticalDisplacementSpinBox">
5352
<property name="decimals">
5453
<number>5</number>
@@ -58,20 +57,52 @@
5857
</property>
5958
</widget>
6059
</item>
61-
<item row="3" column="0">
60+
<item row="3" column="1">
61+
<widget class="QComboBox" name="mVerticalDistanceUnitComboBox">
62+
<item>
63+
<property name="text">
64+
<string>Millimeter</string>
65+
</property>
66+
</item>
67+
<item>
68+
<property name="text">
69+
<string>Map unit</string>
70+
</property>
71+
</item>
72+
</widget>
73+
</item>
74+
<item row="1" column="1">
75+
<widget class="QComboBox" name="mHorizontalDistanceUnitComboBox">
76+
<item>
77+
<property name="text">
78+
<string>Millimeter</string>
79+
</property>
80+
</item>
81+
<item>
82+
<property name="text">
83+
<string>Map unit</string>
84+
</property>
85+
</item>
86+
</widget>
87+
</item>
88+
<item row="6" column="0">
6289
<widget class="QLabel" name="mVerticalDisplacementLabel">
6390
<property name="text">
6491
<string>Vertical displacement</string>
6592
</property>
6693
</widget>
6794
</item>
68-
<item row="2" column="1">
69-
<widget class="QDoubleSpinBox" name="mHorizontalDisplacementSpinBox">
70-
<property name="decimals">
71-
<number>5</number>
95+
<item row="4" column="0">
96+
<widget class="QLabel" name="mHorizontalDisplacementLabel">
97+
<property name="text">
98+
<string>Horizontal displacement</string>
7299
</property>
73-
<property name="maximum">
74-
<double>9999999.990000000223517</double>
100+
</widget>
101+
</item>
102+
<item row="0" column="0">
103+
<widget class="QLabel" name="mHorizontalDistanceLabel">
104+
<property name="text">
105+
<string>Horizontal distance</string>
75106
</property>
76107
</widget>
77108
</item>
@@ -85,18 +116,71 @@
85116
</property>
86117
</widget>
87118
</item>
88-
<item row="4" column="0">
89-
<spacer name="verticalSpacer">
90-
<property name="orientation">
91-
<enum>Qt::Vertical</enum>
119+
<item row="4" column="1">
120+
<widget class="QDoubleSpinBox" name="mHorizontalDisplacementSpinBox">
121+
<property name="decimals">
122+
<number>5</number>
92123
</property>
93-
<property name="sizeHint" stdset="0">
94-
<size>
95-
<width>20</width>
96-
<height>40</height>
97-
</size>
124+
<property name="maximum">
125+
<double>9999999.990000000223517</double>
98126
</property>
99-
</spacer>
127+
</widget>
128+
</item>
129+
<item row="5" column="1">
130+
<widget class="QComboBox" name="mHorizontalDisplacementUnitComboBox">
131+
<item>
132+
<property name="text">
133+
<string>Millimeter</string>
134+
</property>
135+
</item>
136+
<item>
137+
<property name="text">
138+
<string>Map unit</string>
139+
</property>
140+
</item>
141+
</widget>
142+
</item>
143+
<item row="7" column="1">
144+
<widget class="QComboBox" name="mVerticalDisplacementUnitComboBox">
145+
<item>
146+
<property name="text">
147+
<string>Millimeter</string>
148+
</property>
149+
</item>
150+
<item>
151+
<property name="text">
152+
<string>Map unit</string>
153+
</property>
154+
</item>
155+
</widget>
156+
</item>
157+
<item row="1" column="0">
158+
<widget class="QLabel" name="mHorizontalDistanceUnitLabel">
159+
<property name="text">
160+
<string>Horizontal distance unit</string>
161+
</property>
162+
</widget>
163+
</item>
164+
<item row="3" column="0">
165+
<widget class="QLabel" name="mVerticalDistanceUnitLabel">
166+
<property name="text">
167+
<string>Vertical distance unit</string>
168+
</property>
169+
</widget>
170+
</item>
171+
<item row="5" column="0">
172+
<widget class="QLabel" name="mHorizontalDisplacementUnitLabel">
173+
<property name="text">
174+
<string>Horizontal displacement unit</string>
175+
</property>
176+
</widget>
177+
</item>
178+
<item row="7" column="0">
179+
<widget class="QLabel" name="mVerticalDisplacementUnitLabel">
180+
<property name="text">
181+
<string>Vertical displacement unit</string>
182+
</property>
183+
</widget>
100184
</item>
101185
</layout>
102186
</widget>

0 commit comments

Comments
 (0)
Please sign in to comment.