Showing with 46 additions and 7 deletions.
  1. +9 −0 src/core/qgscoordinatetransform.cpp
  2. +2 −0 src/core/qgscoordinatetransform.h
  3. +16 −6 src/core/qgspallabeling.cpp
  4. +19 −1 src/mapserver/qgsprojectparser.cpp
9 changes: 9 additions & 0 deletions src/core/qgscoordinatetransform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,15 @@ QgsCoordinateTransform::~QgsCoordinateTransform()
}
}

QgsCoordinateTransform* QgsCoordinateTransform::clone() const
{
QgsCoordinateTransform* tr = new QgsCoordinateTransform( sourceCrs(), destCRS() );
tr->setSourceDatumTransform( sourceDatumTransform() );
tr->setDestinationDatumTransform( destinationDatumTransform() );
tr->initialise();
return tr;
}

void QgsCoordinateTransform::setSourceCrs( const QgsCoordinateReferenceSystem& theCRS )
{
mSourceCRS = theCRS;
Expand Down
2 changes: 2 additions & 0 deletions src/core/qgscoordinatetransform.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@ class CORE_EXPORT QgsCoordinateTransform : public QObject
//! destructor
~QgsCoordinateTransform();

QgsCoordinateTransform* clone() const;

//! Enum used to indicate the direction (forward or inverse) of the transform
enum TransformDirection
{
Expand Down
22 changes: 16 additions & 6 deletions src/core/qgspallabeling.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3297,10 +3297,15 @@ int QgsPalLabeling::prepareLayer( QgsVectorLayer* layer, QSet<int>& attrIndices,
lyr.fieldIndex = fldIndex;

lyr.xform = mMapRenderer->coordinateTransform();
lyr.ct = 0;
if ( mMapRenderer->hasCrsTransformEnabled() )
lyr.ct = new QgsCoordinateTransform( layer->crs(), mMapRenderer->destinationCrs() );
else
lyr.ct = NULL;
{
const QgsCoordinateTransform* tr = mMapRenderer->transformation( layer );
if ( tr )
{
lyr.ct = tr->clone();
}
}
lyr.ptZero = lyr.xform->toMapCoordinates( 0, 0 );
lyr.ptOne = lyr.xform->toMapCoordinates( 1, 0 );

Expand All @@ -3318,10 +3323,15 @@ int QgsPalLabeling::addDiagramLayer( QgsVectorLayer* layer, QgsDiagramLayerSetti
l->setArrangementFlags( s->placementFlags );

s->palLayer = l;
s->ct = 0;
if ( mMapRenderer->hasCrsTransformEnabled() )
s->ct = new QgsCoordinateTransform( layer->crs(), mMapRenderer->destinationCrs() );
else
s->ct = NULL;
{
const QgsCoordinateTransform* tr = mMapRenderer->transformation( layer );
if ( tr )
{
s->ct = tr->clone();
}
}
s->xform = mMapRenderer->coordinateTransform();
mActiveDiagramLayers.insert( layer, *s );
return 1;
Expand Down
20 changes: 19 additions & 1 deletion src/mapserver/qgsprojectparser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4080,7 +4080,25 @@ void QgsProjectParser::addDrawingOrderEmbeddedGroup( const QDomElement& groupEle
return;
}

QDomNodeList layerNodeList = doc->elementsByTagName( "legendlayer" );
//find requested group
QString groupName = groupElem.attribute( "name" );
QDomElement embeddedGroupElem; //group element in source project file
QDomNodeList groupList = doc->elementsByTagName( "legendgroup" );
for ( int i = 0; i < groupList.size(); ++i )
{
if ( groupList.at( i ).toElement().attribute( "name" ) == groupName )
{
embeddedGroupElem = groupList.at( i ).toElement();
break;
}
}

if ( embeddedGroupElem.isNull() ) //group does not exist in project file
{
return;
}

QDomNodeList layerNodeList = embeddedGroupElem.elementsByTagName( "legendlayer" );
QDomElement layerElem;
QStringList layerNames;
QString layerName;
Expand Down