Skip to content
Permalink
Browse files

Fix tick-style scalebar when subdivisions ticks height > segments tic…

…ks height

Take the subivisions ticks height into accout, for ticksscalebar box size calculation and horizontal line and labels position, only if the number of subdivisions to draw is greater than 1
  • Loading branch information
agiudiceandrea committed May 10, 2020
1 parent 65d5c14 commit 27f345f0bf950afc5b60205211b00cfcd35e3727
@@ -11,8 +11,9 @@
QgsScaleBarRenderer.Flag.FlagUsesLabelVerticalPlacement.__doc__ = "Renderer uses the QgsScaleBarSettings::labelVerticalPlacement() setting"
QgsScaleBarRenderer.Flag.FlagUsesLabelHorizontalPlacement.__doc__ = "Renderer uses the QgsScaleBarSettings::labelHorizontalPlacement() setting"
QgsScaleBarRenderer.Flag.FlagUsesAlignment.__doc__ = "Renderer uses the QgsScaleBarSettings::alignment() setting"
QgsScaleBarRenderer.Flag.FlagUsesSubdivisions.__doc__ = "Renderer uses the scalebar subdivisions"
QgsScaleBarRenderer.Flag.FlagUsesSubdivisions.__doc__ = "Renderer uses the scalebar subdivisions (see QgsScaleBarSettings::numberOfSubdivisions() )"
QgsScaleBarRenderer.Flag.FlagUsesDivisionSymbol.__doc__ = "Renderer utilizes the scalebar division symbol (see QgsScaleBarSettings::divisionLineSymbol() )"
QgsScaleBarRenderer.Flag.FlagUsesSubdivisionSymbol.__doc__ = "Renderer utilizes the scalebar subdivision symbol (see QgsScaleBarSettings::subdivisionLineSymbol() )"
QgsScaleBarRenderer.Flag.__doc__ = 'Flags which control scalebar renderer behavior.\n\n.. versionadded:: 3.14\n\n' + '* ``FlagUsesLineSymbol``: ' + QgsScaleBarRenderer.Flag.FlagUsesLineSymbol.__doc__ + '\n' + '* ``FlagUsesFillSymbol``: ' + QgsScaleBarRenderer.Flag.FlagUsesFillSymbol.__doc__ + '\n' + '* ``FlagUsesAlternateFillSymbol``: ' + QgsScaleBarRenderer.Flag.FlagUsesAlternateFillSymbol.__doc__ + '\n' + '* ``FlagRespectsUnits``: ' + QgsScaleBarRenderer.Flag.FlagRespectsUnits.__doc__ + '\n' + '* ``FlagRespectsMapUnitsPerScaleBarUnit``: ' + QgsScaleBarRenderer.Flag.FlagRespectsMapUnitsPerScaleBarUnit.__doc__ + '\n' + '* ``FlagUsesUnitLabel``: ' + QgsScaleBarRenderer.Flag.FlagUsesUnitLabel.__doc__ + '\n' + '* ``FlagUsesSegments``: ' + QgsScaleBarRenderer.Flag.FlagUsesSegments.__doc__ + '\n' + '* ``FlagUsesLabelBarSpace``: ' + QgsScaleBarRenderer.Flag.FlagUsesLabelBarSpace.__doc__ + '\n' + '* ``FlagUsesLabelVerticalPlacement``: ' + QgsScaleBarRenderer.Flag.FlagUsesLabelVerticalPlacement.__doc__ + '\n' + '* ``FlagUsesLabelHorizontalPlacement``: ' + QgsScaleBarRenderer.Flag.FlagUsesLabelHorizontalPlacement.__doc__ + '\n' + '* ``FlagUsesAlignment``: ' + QgsScaleBarRenderer.Flag.FlagUsesAlignment.__doc__ + '\n' + '* ``FlagUsesSubdivisions``: ' + QgsScaleBarRenderer.Flag.FlagUsesSubdivisions.__doc__ + '\n' + '* ``FlagUsesDivisionSymbol``: ' + QgsScaleBarRenderer.Flag.FlagUsesDivisionSymbol.__doc__ + '\n' + '* ``FlagUsesSubdivisionSymbol``: ' + QgsScaleBarRenderer.Flag.FlagUsesSubdivisionSymbol.__doc__
QgsScaleBarRenderer.Flag.FlagUsesSubdivisionsHeight.__doc__ = "Renderer uses the scalebar subdivisions height (see QgsScaleBarSettings::subdivisionsHeight() )"
QgsScaleBarRenderer.Flag.__doc__ = 'Flags which control scalebar renderer behavior.\n\n.. versionadded:: 3.14\n\n' + '* ``FlagUsesLineSymbol``: ' + QgsScaleBarRenderer.Flag.FlagUsesLineSymbol.__doc__ + '\n' + '* ``FlagUsesFillSymbol``: ' + QgsScaleBarRenderer.Flag.FlagUsesFillSymbol.__doc__ + '\n' + '* ``FlagUsesAlternateFillSymbol``: ' + QgsScaleBarRenderer.Flag.FlagUsesAlternateFillSymbol.__doc__ + '\n' + '* ``FlagRespectsUnits``: ' + QgsScaleBarRenderer.Flag.FlagRespectsUnits.__doc__ + '\n' + '* ``FlagRespectsMapUnitsPerScaleBarUnit``: ' + QgsScaleBarRenderer.Flag.FlagRespectsMapUnitsPerScaleBarUnit.__doc__ + '\n' + '* ``FlagUsesUnitLabel``: ' + QgsScaleBarRenderer.Flag.FlagUsesUnitLabel.__doc__ + '\n' + '* ``FlagUsesSegments``: ' + QgsScaleBarRenderer.Flag.FlagUsesSegments.__doc__ + '\n' + '* ``FlagUsesLabelBarSpace``: ' + QgsScaleBarRenderer.Flag.FlagUsesLabelBarSpace.__doc__ + '\n' + '* ``FlagUsesLabelVerticalPlacement``: ' + QgsScaleBarRenderer.Flag.FlagUsesLabelVerticalPlacement.__doc__ + '\n' + '* ``FlagUsesLabelHorizontalPlacement``: ' + QgsScaleBarRenderer.Flag.FlagUsesLabelHorizontalPlacement.__doc__ + '\n' + '* ``FlagUsesAlignment``: ' + QgsScaleBarRenderer.Flag.FlagUsesAlignment.__doc__ + '\n' + '* ``FlagUsesSubdivisions``: ' + QgsScaleBarRenderer.Flag.FlagUsesSubdivisions.__doc__ + '\n' + '* ``FlagUsesDivisionSymbol``: ' + QgsScaleBarRenderer.Flag.FlagUsesDivisionSymbol.__doc__ + '\n' + '* ``FlagUsesSubdivisionSymbol``: ' + QgsScaleBarRenderer.Flag.FlagUsesSubdivisionSymbol.__doc__ + '\n' + '* ``FlagUsesSubdivisionsHeight``: ' + QgsScaleBarRenderer.Flag.FlagUsesSubdivisionsHeight.__doc__
# --
@@ -25,17 +25,6 @@ custom labeling.
%End
public:

struct ScaleBarContext
{

double segmentWidth;

QSizeF size;

double scale;

};

enum class Flag
{
FlagUsesLineSymbol,
@@ -52,10 +41,24 @@ custom labeling.
FlagUsesSubdivisions,
FlagUsesDivisionSymbol,
FlagUsesSubdivisionSymbol,
FlagUsesSubdivisionsHeight,
};
typedef QFlags<QgsScaleBarRenderer::Flag> Flags;


struct ScaleBarContext
{

double segmentWidth;

QSizeF size;

double scale;

Flags flags;

};

QgsScaleBarRenderer();
%Docstring
Constructor for QgsScaleBarRenderer.
@@ -386,6 +386,7 @@ QgsScaleBarRenderer::ScaleBarContext QgsLayoutItemScaleBar::createScaleContext()
scaleContext.size = rect().size();
scaleContext.segmentWidth = mSegmentMillimeters;
scaleContext.scale = mMap ? mMap->scale() : 1.0;
scaleContext.flags = mStyle->flags();
return scaleContext;
}

@@ -47,7 +47,15 @@ void QgsScaleBarRenderer::drawDefaultLabels( QgsRenderContext &context, const Qg

double scaledBoxContentSpace = context.convertToPainterUnits( settings.boxContentSpace(), QgsUnitTypes::RenderMillimeters );
double scaledLabelBarSpace = context.convertToPainterUnits( settings.labelBarSpace(), QgsUnitTypes::RenderMillimeters );
double scaledHeight = context.convertToPainterUnits( settings.height(), QgsUnitTypes::RenderMillimeters );
double scaledHeight;
if ( ( scaleContext.flags & Flag::FlagUsesSubdivisionsHeight ) && ( settings.numberOfSubdivisions() > 1 ) && ( settings.subdivisionsHeight() > settings.height() ) )
{
scaledHeight = context.convertToPainterUnits( settings.subdivisionsHeight(), QgsUnitTypes::RenderMillimeters );
}
else
{
scaledHeight = context.convertToPainterUnits( settings.height(), QgsUnitTypes::RenderMillimeters );
}

double currentLabelNumber = 0.0;

@@ -263,7 +271,16 @@ QSizeF QgsScaleBarRenderer::calculateBoxSize( QgsRenderContext &context, const Q
lineWidth /= context.convertToPainterUnits( 1, QgsUnitTypes::RenderMillimeters );

double width = firstLabelWidth + totalBarLength + 2 * lineWidth + largestLabelWidth + 2 * settings.boxContentSpace();
double height = settings.height() + settings.labelBarSpace() + 2 * settings.boxContentSpace() + QgsLayoutUtils::fontAscentMM( font );
double height;
if ( ( scaleContext.flags & Flag::FlagUsesSubdivisionsHeight ) && ( settings.numberOfSubdivisions() > 1 ) && ( settings.subdivisionsHeight() > settings.height() ) )
{
height = settings.subdivisionsHeight();
}
else
{
height = settings.height();
}
height += settings.labelBarSpace() + 2 * settings.boxContentSpace() + QgsLayoutUtils::fontAscentMM( font );

return QSizeF( width, height );
}
@@ -39,6 +39,30 @@ class CORE_EXPORT QgsScaleBarRenderer
{
public:

/**
* Flags which control scalebar renderer behavior.
* \since QGIS 3.14
*/
enum class Flag
{
FlagUsesLineSymbol = 1 << 0, //!< Renderer utilizes the scalebar line symbol (see QgsScaleBarSettings::lineSymbol() )
FlagUsesFillSymbol = 1 << 1, //!< Renderer utilizes the scalebar fill symbol (see QgsScaleBarSettings::fillSymbol() )
FlagUsesAlternateFillSymbol = 1 << 2, //!< Renderer utilizes the alternate scalebar fill symbol (see QgsScaleBarSettings::alternateFillSymbol() )
FlagRespectsUnits = 1 << 3, //!< Renderer respects the QgsScaleBarSettings::units() setting
FlagRespectsMapUnitsPerScaleBarUnit = 1 << 4, //!< Renderer respects the QgsScaleBarSettings::mapUnitsPerScaleBarUnit() setting
FlagUsesUnitLabel = 1 << 5, //!< Renderer uses the QgsScaleBarSettings::unitLabel() setting
FlagUsesSegments = 1 << 6, //!< Renderer uses the scalebar segments
FlagUsesLabelBarSpace = 1 << 7, //!< Renderer uses the QgsScaleBarSettings::labelBarSpace() setting
FlagUsesLabelVerticalPlacement = 1 << 8, //!< Renderer uses the QgsScaleBarSettings::labelVerticalPlacement() setting
FlagUsesLabelHorizontalPlacement = 1 << 8, //!< Renderer uses the QgsScaleBarSettings::labelHorizontalPlacement() setting
FlagUsesAlignment = 1 << 9, //!< Renderer uses the QgsScaleBarSettings::alignment() setting
FlagUsesSubdivisions = 1 << 10, //!< Renderer uses the scalebar subdivisions (see QgsScaleBarSettings::numberOfSubdivisions() )
FlagUsesDivisionSymbol = 1 << 11, //!< Renderer utilizes the scalebar division symbol (see QgsScaleBarSettings::divisionLineSymbol() )
FlagUsesSubdivisionSymbol = 1 << 12, //!< Renderer utilizes the scalebar subdivision symbol (see QgsScaleBarSettings::subdivisionLineSymbol() )
FlagUsesSubdivisionsHeight = 1 << 13, //!< Renderer uses the scalebar subdivisions height (see QgsScaleBarSettings::subdivisionsHeight() )
};
Q_DECLARE_FLAGS( Flags, Flag )

/**
* Contains parameters regarding scalebar calculations.
* \note The need to attribute the parameters vary depending on the targeted scalebar.
@@ -62,30 +86,10 @@ class CORE_EXPORT QgsScaleBarRenderer
//! Scale denominator
double scale { 1.0 };

};
//! Scalebar renderer flags
Flags flags;

/**
* Flags which control scalebar renderer behavior.
* \since QGIS 3.14
*/
enum class Flag
{
FlagUsesLineSymbol = 1 << 0, //!< Renderer utilizes the scalebar line symbol (see QgsScaleBarSettings::lineSymbol() )
FlagUsesFillSymbol = 1 << 1, //!< Renderer utilizes the scalebar fill symbol (see QgsScaleBarSettings::fillSymbol() )
FlagUsesAlternateFillSymbol = 1 << 2, //!< Renderer utilizes the alternate scalebar fill symbol (see QgsScaleBarSettings::alternateFillSymbol() )
FlagRespectsUnits = 1 << 3, //!< Renderer respects the QgsScaleBarSettings::units() setting
FlagRespectsMapUnitsPerScaleBarUnit = 1 << 4, //!< Renderer respects the QgsScaleBarSettings::mapUnitsPerScaleBarUnit() setting
FlagUsesUnitLabel = 1 << 5, //!< Renderer uses the QgsScaleBarSettings::unitLabel() setting
FlagUsesSegments = 1 << 6, //!< Renderer uses the scalebar segments
FlagUsesLabelBarSpace = 1 << 7, //!< Renderer uses the QgsScaleBarSettings::labelBarSpace() setting
FlagUsesLabelVerticalPlacement = 1 << 8, //!< Renderer uses the QgsScaleBarSettings::labelVerticalPlacement() setting
FlagUsesLabelHorizontalPlacement = 1 << 8, //!< Renderer uses the QgsScaleBarSettings::labelHorizontalPlacement() setting
FlagUsesAlignment = 1 << 9, //!< Renderer uses the QgsScaleBarSettings::alignment() setting
FlagUsesSubdivisions = 1 << 10, //!< Renderer uses the scalebar subdivisions
FlagUsesDivisionSymbol = 1 << 11, //!< Renderer utilizes the scalebar division symbol (see QgsScaleBarSettings::divisionLineSymbol() )
FlagUsesSubdivisionSymbol = 1 << 12, //!< Renderer utilizes the scalebar subdivision symbol (see QgsScaleBarSettings::subdivisionLineSymbol() )
};
Q_DECLARE_FLAGS( Flags, Flag )

/**
* Constructor for QgsScaleBarRenderer.
@@ -81,7 +81,8 @@ QgsScaleBarRenderer::Flags QgsTicksScaleBarRenderer::flags() const
Flag::FlagUsesLabelBarSpace |
Flag::FlagUsesLabelVerticalPlacement |
Flag::FlagUsesLabelHorizontalPlacement |
Flag::FlagUsesSubdivisions;
Flag::FlagUsesSubdivisions |
Flag::FlagUsesSubdivisionsHeight;
}

QgsTicksScaleBarRenderer *QgsTicksScaleBarRenderer::clone() const
@@ -100,9 +101,11 @@ void QgsTicksScaleBarRenderer::draw( QgsRenderContext &context, const QgsScaleBa
const double scaledBoxContentSpace = context.convertToPainterUnits( settings.boxContentSpace(), QgsUnitTypes::RenderMillimeters );
const QFontMetricsF fontMetrics = QgsTextRenderer::fontMetrics( context, settings.textFormat() );
const double barTopPosition = scaledBoxContentSpace + ( settings.labelVerticalPlacement() == QgsScaleBarSettings::LabelAboveSegment ? fontMetrics.ascent() + scaledLabelBarSpace : 0 );
const double middlePosition = barTopPosition + context.convertToPainterUnits( settings.height() / 2.0, QgsUnitTypes::RenderMillimeters );
const double bottomPosition = barTopPosition + context.convertToPainterUnits( settings.height(), QgsUnitTypes::RenderMillimeters );
const double scaledHeight = context.convertToPainterUnits( settings.height(), QgsUnitTypes::RenderMillimeters );
const double scaledSubdivisionsHeight = context.convertToPainterUnits( settings.subdivisionsHeight(), QgsUnitTypes::RenderMillimeters );
const double scaledMaxHeight = ( ( settings.numberOfSubdivisions() > 1 ) && ( scaledSubdivisionsHeight > scaledHeight ) ) ? scaledSubdivisionsHeight : scaledHeight;
const double middlePosition = barTopPosition + scaledMaxHeight / 2.0;
const double bottomPosition = barTopPosition + scaledMaxHeight;

const double xOffset = firstLabelXOffset( settings, context, scaleContext );

@@ -121,6 +124,35 @@ void QgsTicksScaleBarRenderer::draw( QgsRenderContext &context, const QgsScaleBa

const QList<double> positions = segmentPositions( context, scaleContext, settings );

// vertical positions
double verticalPos = 0.0;
QList<double> subTickPositionsY;
QList<double> tickPositionsY;
switch ( mTickPosition )
{
case TicksDown:
verticalPos = barTopPosition;
subTickPositionsY << verticalPos;
subTickPositionsY << verticalPos + scaledSubdivisionsHeight;
tickPositionsY << verticalPos;
tickPositionsY << verticalPos + scaledHeight;
break;
case TicksMiddle:
verticalPos = middlePosition;
subTickPositionsY << verticalPos + scaledSubdivisionsHeight / 2.0;
subTickPositionsY << verticalPos - scaledSubdivisionsHeight / 2.0;
tickPositionsY << verticalPos + scaledHeight / 2.0;
tickPositionsY << verticalPos - scaledHeight / 2.0;
break;
case TicksUp:
verticalPos = bottomPosition;
subTickPositionsY << verticalPos;
subTickPositionsY << verticalPos - scaledSubdivisionsHeight;
tickPositionsY << verticalPos;
tickPositionsY << verticalPos - scaledHeight;
break;
}

int symbolLayerCount = symbol->symbolLayerCount();
symbolLayerCount = std::max( symbolLayerCount, divisionSymbol->symbolLayerCount() );
symbolLayerCount = std::max( symbolLayerCount, subdivisionSymbol->symbolLayerCount() );
@@ -138,32 +170,11 @@ void QgsTicksScaleBarRenderer::draw( QgsRenderContext &context, const QgsScaleBa
for ( int i = 0; i < positions.size(); ++i )
{
const double thisX = context.convertToPainterUnits( positions.at( i ), QgsUnitTypes::RenderMillimeters ) + xOffset;
divisionSymbol->renderPolyline( QPolygonF() << QPointF( thisX, barTopPosition )
<< QPointF( thisX, bottomPosition ), nullptr, context, layer );
divisionSymbol->renderPolyline( QPolygonF() << QPointF( thisX, tickPositionsY.at( 0 ) )
<< QPointF( thisX, tickPositionsY.at( 1 ) ), nullptr, context, layer );
}
}

// vertical positions
double verticalPos = 0.0;
QList<double> subTickPositionsY;
switch ( mTickPosition )
{
case TicksDown:
verticalPos = barTopPosition;
subTickPositionsY << verticalPos;
subTickPositionsY << verticalPos + scaledSubdivisionsHeight;
break;
case TicksMiddle:
verticalPos = middlePosition;
subTickPositionsY << verticalPos + scaledSubdivisionsHeight / 2.0;
subTickPositionsY << verticalPos - scaledSubdivisionsHeight / 2.0;
break;
case TicksUp:
verticalPos = bottomPosition;
subTickPositionsY << verticalPos;
subTickPositionsY << verticalPos - scaledSubdivisionsHeight;
break;
}
// draw the vertical lines for right subdivisions
if ( drawSubdivisionsForThisSymbolLayer )
{
@@ -186,8 +197,8 @@ void QgsTicksScaleBarRenderer::draw( QgsRenderContext &context, const QgsScaleBa
//last vertical line
if ( drawDivisionsForThisSymbolLayer )
{
divisionSymbol->renderPolyline( QPolygonF() << QPointF( lastTickPositionX, barTopPosition )
<< QPointF( lastTickPositionX, bottomPosition ),
divisionSymbol->renderPolyline( QPolygonF() << QPointF( lastTickPositionX, tickPositionsY.at( 0 ) )
<< QPointF( lastTickPositionX, tickPositionsY.at( 1 ) ),
nullptr, context, layer );
}

@@ -529,8 +529,8 @@ void QgsLayoutScaleBarWidget::toggleStyleSpecificControls( const QString &style
mUnitLabelLabel->setEnabled( renderer ? renderer->flags() & QgsScaleBarRenderer::Flag::FlagUsesUnitLabel : true );
mSubdivisionsLabel->setEnabled( renderer ? renderer->flags() & QgsScaleBarRenderer::Flag::FlagUsesSubdivisions : true );
mNumberOfSubdivisionsSpinBox->setEnabled( renderer ? renderer->flags() & QgsScaleBarRenderer::Flag::FlagUsesSubdivisions : true );
mSubdivisionsHeightLabel->setEnabled( renderer ? renderer->flags() & QgsScaleBarRenderer::Flag::FlagUsesSubdivisions : true );
mSubdivisionsHeightSpinBox->setEnabled( renderer ? renderer->flags() & QgsScaleBarRenderer::Flag::FlagUsesSubdivisions : true );
mSubdivisionsHeightLabel->setEnabled( renderer ? renderer->flags() & QgsScaleBarRenderer::Flag::FlagUsesSubdivisionsHeight : true );
mSubdivisionsHeightSpinBox->setEnabled( renderer ? renderer->flags() & QgsScaleBarRenderer::Flag::FlagUsesSubdivisionsHeight : true );
mGroupBoxSegments->setEnabled( renderer ? renderer->flags() & QgsScaleBarRenderer::Flag::FlagUsesSegments : true );
if ( !mGroupBoxUnits->isEnabled() )
mGroupBoxSegments->setCollapsed( true );
@@ -138,6 +138,7 @@ void TestQgsLayoutScaleBar::singleBox()
scalebar->setNumberOfSegmentsLeft( 0 );
scalebar->setNumberOfSegments( 2 );
scalebar->setHeight( 5 );
scalebar->setSubdivisionsHeight( 25 ); //ensure subdivisionsHeight is non used in non tick-style scalebars
Q_NOWARN_DEPRECATED_PUSH
scalebar->setLineWidth( 1.0 );
Q_NOWARN_DEPRECATED_POP
@@ -331,6 +332,7 @@ void TestQgsLayoutScaleBar::doubleBox()
scalebar->setNumberOfSegmentsLeft( 0 );
scalebar->setNumberOfSegments( 2 );
scalebar->setHeight( 5 );
scalebar->setSubdivisionsHeight( 25 ); //ensure subdivisionsHeight is non used in non tick-style scalebars
Q_NOWARN_DEPRECATED_PUSH
scalebar->setLineWidth( 1.0 );
scalebar->setFillColor( Qt::black );
@@ -495,6 +497,7 @@ void TestQgsLayoutScaleBar::numeric()
scalebar->setNumberOfSegmentsLeft( 0 );
scalebar->setNumberOfSegments( 2 );
scalebar->setHeight( 5 );
scalebar->setSubdivisionsHeight( 25 ); //ensure subdivisionsHeight is non used in non tick-style scalebars
Q_NOWARN_DEPRECATED_PUSH
scalebar->setLineWidth( 1.0 );
Q_NOWARN_DEPRECATED_POP
@@ -760,6 +763,7 @@ void TestQgsLayoutScaleBar::steppedLine()
scalebar->setNumberOfSegmentsLeft( 2 );
scalebar->setNumberOfSegments( 2 );
scalebar->setHeight( 20 );
scalebar->setSubdivisionsHeight( 25 ); //ensure subdivisionsHeight is non used in non tick-style scalebars

std::unique_ptr< QgsLineSymbol > lineSymbol = qgis::make_unique< QgsLineSymbol >();
std::unique_ptr< QgsSimpleLineSymbolLayer > lineSymbolLayer = qgis::make_unique< QgsSimpleLineSymbolLayer >();
@@ -804,6 +808,7 @@ void TestQgsLayoutScaleBar::hollow()
scalebar->setNumberOfSegmentsLeft( 2 );
scalebar->setNumberOfSegments( 2 );
scalebar->setHeight( 20 );
scalebar->setSubdivisionsHeight( 25 ); //ensure subdivisionsHeight is non used in non tick-style scalebars

std::unique_ptr< QgsLineSymbol > lineSymbol = qgis::make_unique< QgsLineSymbol >();
std::unique_ptr< QgsSimpleLineSymbolLayer > lineSymbolLayer = qgis::make_unique< QgsSimpleLineSymbolLayer >();

0 comments on commit 27f345f

Please sign in to comment.
You can’t perform that action at this time.