Skip to content

Commit f3bb53f

Browse files
committedDec 27, 2012
Export ogr feature style in mm for line width and in ground units for line pattern
1 parent 891e665 commit f3bb53f

9 files changed

+46
-22
lines changed
 

‎src/core/qgsvectorfilewriter.cpp

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -458,8 +458,10 @@ bool QgsVectorFileWriter::addFeature( QgsFeature& feature, QgsFeatureRendererV2*
458458
{
459459
continue;
460460
}*/
461-
double wScaleFactor = widthScaleFactor( mSymbologyScaleDenominator, ( *symbolIt )->outputUnit(), outputUnit );
462-
currentStyle = ( *symbolIt )->symbolLayer( i )->ogrFeatureStyle( wScaleFactor );//"@" + it.value();
461+
double mmsf = mmScaleFactor( mSymbologyScaleDenominator, ( *symbolIt )->outputUnit(), outputUnit );
462+
double musf = mapUnitScaleFactor( mSymbologyScaleDenominator, ( *symbolIt )->outputUnit(), outputUnit );
463+
464+
currentStyle = ( *symbolIt )->symbolLayer( i )->ogrFeatureStyle( mmsf, musf );//"@" + it.value();
463465

464466
if ( mSymbologyExport == FeatureSymbology )
465467
{
@@ -1214,12 +1216,15 @@ void QgsVectorFileWriter::createSymbolLayerTable( QgsVectorLayer* vl, const Qgs
12141216
QgsSymbolV2List::iterator symbolIt = symbolList.begin();
12151217
for ( ; symbolIt != symbolList.end(); ++symbolIt )
12161218
{
1219+
double mmsf = mmScaleFactor( mSymbologyScaleDenominator, ( *symbolIt )->outputUnit(), mapUnits );
1220+
double musf = mapUnitScaleFactor( mSymbologyScaleDenominator, ( *symbolIt )->outputUnit(), mapUnits );
1221+
12171222
int nLevels = ( *symbolIt )->symbolLayerCount();
12181223
for ( int i = 0; i < nLevels; ++i )
12191224
{
12201225
mSymbolLayerTable.insert(( *symbolIt )->symbolLayer( i ), QString::number( nTotalLevels ) );
12211226
OGR_SM_AddStyle( styleManager, QString::number( nTotalLevels ).toLocal8Bit(),
1222-
( *symbolIt )->symbolLayer( i )->ogrFeatureStyle( widthScaleFactor( mSymbologyScaleDenominator, ( *symbolIt )->outputUnit(), mapUnits ) ).toLocal8Bit() );
1227+
( *symbolIt )->symbolLayer( i )->ogrFeatureStyle( mmsf, musf ).toLocal8Bit() );
12231228
++nTotalLevels;
12241229
}
12251230
}
@@ -1325,6 +1330,9 @@ QgsVectorFileWriter::WriterError QgsVectorFileWriter::exportFeaturesSymbolLevels
13251330
continue;
13261331
}
13271332

1333+
double mmsf = mmScaleFactor( mSymbologyScaleDenominator, levelIt.key()->outputUnit(), mapUnits );
1334+
double musf = mapUnitScaleFactor( mSymbologyScaleDenominator, levelIt.key()->outputUnit(), mapUnits );
1335+
13281336
int llayer = item.layer();
13291337
QList<QgsFeature>& featureList = levelIt.value();
13301338
QList<QgsFeature>::iterator featureIt = featureList.begin();
@@ -1338,8 +1346,7 @@ QgsVectorFileWriter::WriterError QgsVectorFileWriter::exportFeaturesSymbolLevels
13381346
continue;
13391347
}
13401348

1341-
QString styleString = levelIt.key()->symbolLayer( llayer )->ogrFeatureStyle( widthScaleFactor( mSymbologyScaleDenominator, levelIt.key()->outputUnit(),
1342-
mapUnits ) );
1349+
QString styleString = levelIt.key()->symbolLayer( llayer )->ogrFeatureStyle( mmsf, musf );
13431350
if ( !styleString.isEmpty() )
13441351
{
13451352
OGR_F_SetStyleString( ogrFeature, styleString.toLocal8Bit().data() );
@@ -1363,7 +1370,7 @@ QgsVectorFileWriter::WriterError QgsVectorFileWriter::exportFeaturesSymbolLevels
13631370
return ( nErrors > 0 ) ? QgsVectorFileWriter::ErrFeatureWriteFailed : QgsVectorFileWriter::NoError;
13641371
}
13651372

1366-
double QgsVectorFileWriter::widthScaleFactor( double scaleDenominator, QgsSymbolV2::OutputUnit symbolUnits, QGis::UnitType mapUnits )
1373+
double QgsVectorFileWriter::mmScaleFactor( double scaleDenominator, QgsSymbolV2::OutputUnit symbolUnits, QGis::UnitType mapUnits )
13671374
{
13681375
if ( symbolUnits == QgsSymbolV2::MM )
13691376
{
@@ -1381,6 +1388,22 @@ double QgsVectorFileWriter::widthScaleFactor( double scaleDenominator, QgsSymbol
13811388
return 1.0; //todo: map units
13821389
}
13831390

1391+
double QgsVectorFileWriter::mapUnitScaleFactor( double scaleDenominator, QgsSymbolV2::OutputUnit symbolUnits, QGis::UnitType mapUnits )
1392+
{
1393+
if ( symbolUnits == QgsSymbolV2::MapUnit )
1394+
{
1395+
return 1.0;
1396+
}
1397+
else
1398+
{
1399+
if ( symbolUnits == QgsSymbolV2::MM && mapUnits == QGis::Meters )
1400+
{
1401+
return scaleDenominator / 1000;
1402+
}
1403+
}
1404+
return 1.0;
1405+
}
1406+
13841407
QgsRenderContext QgsVectorFileWriter::renderContext() const
13851408
{
13861409
QgsRenderContext context;

‎src/core/qgsvectorfilewriter.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,8 @@ class CORE_EXPORT QgsVectorFileWriter
203203

204204
/**Writes features considering symbol level order*/
205205
WriterError exportFeaturesSymbolLevels( QgsVectorLayer* layer, const QgsCoordinateTransform* ct, QString* errorMessage = 0 );
206-
double widthScaleFactor( double scaleDenominator, QgsSymbolV2::OutputUnit symbolUnits, QGis::UnitType mapUnits );
206+
double mmScaleFactor( double scaleDenominator, QgsSymbolV2::OutputUnit symbolUnits, QGis::UnitType mapUnits );
207+
double mapUnitScaleFactor( double scaleDenominator, QgsSymbolV2::OutputUnit symbolUnits, QGis::UnitType mapUnits );
207208
QgsRenderContext renderContext() const;
208209
void startRender( QgsVectorLayer* vl ) const;
209210
void stopRender( QgsVectorLayer* vl ) const;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,14 +175,14 @@ void QgsSimpleFillSymbolLayerV2::toSld( QDomDocument &doc, QDomElement &element,
175175
QgsSymbolLayerV2Utils::createDisplacementElement( doc, symbolizerElem, mOffset );
176176
}
177177

178-
QString QgsSimpleFillSymbolLayerV2::ogrFeatureStyle( double widthScaleFactor ) const
178+
QString QgsSimpleFillSymbolLayerV2::ogrFeatureStyle( double mmScaleFactor, double mapUnitScaleFactor ) const
179179
{
180180
//brush
181181
QString symbolStyle;
182182
symbolStyle.append( QgsSymbolLayerV2Utils::ogrFeatureStyleBrush( mColor ) );
183183
symbolStyle.append( ";" );
184184
//pen
185-
symbolStyle.append( QgsSymbolLayerV2Utils::ogrFeatureStylePen( mBorderWidth, widthScaleFactor, mBorderColor ) );
185+
symbolStyle.append( QgsSymbolLayerV2Utils::ogrFeatureStylePen( mBorderWidth, mmScaleFactor, mapUnitScaleFactor, mBorderColor ) );
186186
return symbolStyle;
187187
}
188188

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ class CORE_EXPORT QgsSimpleFillSymbolLayerV2 : public QgsFillSymbolLayerV2
5757

5858
void toSld( QDomDocument &doc, QDomElement &element, QgsStringMap props ) const;
5959

60-
QString ogrFeatureStyle( double widthScaleFactor ) const;
60+
QString ogrFeatureStyle( double mmScaleFactor, double mapUnitScaleFactor ) const;
6161

6262
Qt::BrushStyle brushStyle() const { return mBrushStyle; }
6363
void setBrushStyle( Qt::BrushStyle style ) { mBrushStyle = style; }

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,17 +195,17 @@ void QgsSimpleLineSymbolLayerV2::toSld( QDomDocument &doc, QDomElement &element,
195195
}
196196
}
197197

198-
QString QgsSimpleLineSymbolLayerV2::ogrFeatureStyle( double widthScaleFactor ) const
198+
QString QgsSimpleLineSymbolLayerV2::ogrFeatureStyle( double mmScaleFactor, double mapUnitScaleFactor ) const
199199
{
200200
if ( mUseCustomDashPattern )
201201
{
202-
return QgsSymbolLayerV2Utils::ogrFeatureStylePen( mWidth, widthScaleFactor,
202+
return QgsSymbolLayerV2Utils::ogrFeatureStylePen( mWidth, mmScaleFactor, mapUnitScaleFactor,
203203
mPen.color(), mPenJoinStyle,
204204
mPenCapStyle, mOffset, &mCustomDashVector );
205205
}
206206
else
207207
{
208-
return QgsSymbolLayerV2Utils::ogrFeatureStylePen( mWidth, widthScaleFactor, mPen.color(), mPenJoinStyle,
208+
return QgsSymbolLayerV2Utils::ogrFeatureStylePen( mWidth, mmScaleFactor, mapUnitScaleFactor, mPen.color(), mPenJoinStyle,
209209
mPenCapStyle, mOffset );
210210
}
211211
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class CORE_EXPORT QgsSimpleLineSymbolLayerV2 : public QgsLineSymbolLayerV2
5656

5757
void toSld( QDomDocument &doc, QDomElement &element, QgsStringMap props ) const;
5858

59-
QString ogrFeatureStyle( double widthScaleFactor ) const;
59+
QString ogrFeatureStyle( double mmScaleFactor, double mapUnitScaleFactor ) const;
6060

6161
// new stuff
6262

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class CORE_EXPORT QgsSymbolLayerV2
5454
virtual void toSld( QDomDocument &doc, QDomElement &element, QgsStringMap props ) const
5555
{ Q_UNUSED( props ); element.appendChild( doc.createComment( QString( "SymbolLayerV2 %1 not implemented yet" ).arg( layerType() ) ) ); }
5656

57-
virtual QString ogrFeatureStyle( double widthScaleFactor ) const { Q_UNUSED( widthScaleFactor ); return QString(); }
57+
virtual QString ogrFeatureStyle( double mmScaleFactor, double mapUnitScaleFactor ) const { Q_UNUSED( mmScaleFactor ); Q_UNUSED( mapUnitScaleFactor ); return QString(); }
5858

5959
virtual QgsStringMap properties() const = 0;
6060

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2095,7 +2095,7 @@ void QgsSymbolLayerV2Utils::labelTextToSld( QDomDocument &doc, QDomElement &elem
20952095
}
20962096
}
20972097

2098-
QString QgsSymbolLayerV2Utils::ogrFeatureStylePen( double width, double widthScaleFactor, const QColor& c,
2098+
QString QgsSymbolLayerV2Utils::ogrFeatureStylePen( double width, double mmScaleFactor, double mapUnitScaleFactor, const QColor& c,
20992099
Qt::PenJoinStyle joinStyle,
21002100
Qt::PenCapStyle capStyle,
21012101
double offset,
@@ -2107,7 +2107,7 @@ QString QgsSymbolLayerV2Utils::ogrFeatureStylePen( double width, double widthSca
21072107
penStyle.append( c.name() );
21082108
penStyle.append( ",w:" );
21092109
//dxf driver writes ground units as mm? Should probably be changed in ogr
2110-
penStyle.append( QString::number( width * widthScaleFactor ) );
2110+
penStyle.append( QString::number( width * mmScaleFactor ) );
21112111
penStyle.append( "mm" );
21122112

21132113
//dash dot vector
@@ -2121,8 +2121,8 @@ QString QgsSymbolLayerV2Utils::ogrFeatureStylePen( double width, double widthSca
21212121
{
21222122
penStyle.append( " " );
21232123
}
2124-
penStyle.append( QString::number( *pIt * widthScaleFactor ) );
2125-
penStyle.append( "mm" );
2124+
penStyle.append( QString::number( *pIt * mapUnitScaleFactor ) );
2125+
penStyle.append( "g" );
21262126
}
21272127
penStyle.append( "\"" );
21282128
}
@@ -2161,8 +2161,8 @@ QString QgsSymbolLayerV2Utils::ogrFeatureStylePen( double width, double widthSca
21612161
if ( !doubleNear( offset, 0.0 ) )
21622162
{
21632163
penStyle.append( ",dp:" );
2164-
penStyle.append( QString::number( offset * widthScaleFactor ) );
2165-
penStyle.append( "mm" );
2164+
penStyle.append( QString::number( offset * mapUnitScaleFactor ) );
2165+
penStyle.append( "g" );
21662166
}
21672167

21682168
penStyle.append( ")" );

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ class CORE_EXPORT QgsSymbolLayerV2Utils
167167
/**Create ogr feature style string for pen
168168
@param width linewidth in mm
169169
@param c line color*/
170-
static QString ogrFeatureStylePen( double width, double widthScaleFactor, const QColor& c,
170+
static QString ogrFeatureStylePen( double width, double mmScaleFactor, double mapUnitsScaleFactor, const QColor& c,
171171
Qt::PenJoinStyle joinStyle = Qt::MiterJoin,
172172
Qt::PenCapStyle capStyle = Qt::FlatCap,
173173
double offset = 0.0,

0 commit comments

Comments
 (0)
Please sign in to comment.