@@ -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+
13841407QgsRenderContext QgsVectorFileWriter::renderContext () const
13851408{
13861409 QgsRenderContext context;
0 commit comments