Rename arrow symbol head width/height to length/thickness

Width/height naming is dependant on line direction, so for
clarity rename them to something which doesn't depend
on direction (fix #15002)
This commit is contained in:
Nyall Dawson 2016-06-14 12:54:49 +10:00
parent 09b6d58939
commit 6568da6ce0
7 changed files with 154 additions and 144 deletions

View File

@ -1,3 +1,9 @@
/** \ingroup core
* \class QgsArrowSymbolLayer
* \brief Line symbol layer used for representing lines as arrows.
* \note Added in version 2.16
*/
class QgsArrowSymbolLayer : public QgsLineSymbolLayerV2
{
%TypeHeaderCode
@ -28,57 +34,57 @@ class QgsArrowSymbolLayer : public QgsLineSymbolLayerV2
/** Return a list of attributes required to render this feature */
virtual QSet<QString> usedAttributes() const;
/** Get current arrow width */
/** Get current arrow width */
double arrowWidth() const;
/** Set the arrow width */
void setArrowWidth( double w );
void setArrowWidth( double width );
/** Get the unit for the arrow width */
QgsSymbolV2::OutputUnit arrowWidthUnit() const;
/** Set the unit for the arrow width */
void setArrowWidthUnit( QgsSymbolV2::OutputUnit u );
void setArrowWidthUnit( QgsSymbolV2::OutputUnit unit );
/** Get the scale for the arrow width */
QgsMapUnitScale arrowWidthUnitScale() const;
/** Set the scale for the arrow width */
void setArrowWidthUnitScale( const QgsMapUnitScale& s );
void setArrowWidthUnitScale( const QgsMapUnitScale& scale );
/** Get current arrow start width. Only meaningfull for single headed arrows */
double arrowStartWidth() const;
/** Set the arrow start width */
void setArrowStartWidth( double w );
void setArrowStartWidth( double width );
/** Get the unit for the arrow start width */
QgsSymbolV2::OutputUnit arrowStartWidthUnit() const;
/** Set the unit for the arrow start width */
void setArrowStartWidthUnit( QgsSymbolV2::OutputUnit u );
void setArrowStartWidthUnit( QgsSymbolV2::OutputUnit unit );
/** Get the scale for the arrow start width */
QgsMapUnitScale arrowStartWidthUnitScale() const;
/** Set the scale for the arrow start width */
void setArrowStartWidthUnitScale( const QgsMapUnitScale& s );
void setArrowStartWidthUnitScale( const QgsMapUnitScale& scale );
/** Get the current arrow head width */
double headWidth() const;
/** Set the arrow head width */
void setHeadWidth( double s );
/** Get the unit for the head width */
QgsSymbolV2::OutputUnit headWidthUnit() const;
/** Set the unit for the head width */
void setHeadWidthUnit( QgsSymbolV2::OutputUnit u );
/** Get the scale for the head width */
QgsMapUnitScale headWidthUnitScale() const;
/** Set the scale for the head width */
void setHeadWidthUnitScale( const QgsMapUnitScale& s );
/** Get the current arrow head length */
double headLength() const;
/** Set the arrow head length */
void setHeadLength( double length );
/** Get the unit for the head length */
QgsSymbolV2::OutputUnit headLengthUnit() const;
/** Set the unit for the head length */
void setHeadLengthUnit( QgsSymbolV2::OutputUnit unit );
/** Get the scale for the head length */
QgsMapUnitScale headLengthUnitScale() const;
/** Set the scale for the head length */
void setHeadLengthUnitScale( const QgsMapUnitScale& scale );
/** Get the current arrow head height */
double headHeight() const;
double headThickness() const;
/** Set the arrow head height */
void setHeadHeight( double s );
void setHeadThickness( double thickness );
/** Get the unit for the head height */
QgsSymbolV2::OutputUnit headHeightUnit() const;
QgsSymbolV2::OutputUnit headThicknessUnit() const;
/** Set the unit for the head height */
void setHeadHeightUnit( QgsSymbolV2::OutputUnit u );
void setHeadThicknessUnit( QgsSymbolV2::OutputUnit unit );
/** Get the scale for the head height */
QgsMapUnitScale headHeightUnitScale() const;
QgsMapUnitScale headThicknessUnitScale() const;
/** Set the scale for the head height */
void setHeadHeightUnitScale( const QgsMapUnitScale& s );
void setHeadThicknessUnitScale( const QgsMapUnitScale& scale );
/** Return whether it is a curved arrow or a straight one */
bool isCurved() const;
@ -101,7 +107,7 @@ class QgsArrowSymbolLayer : public QgsLineSymbolLayerV2
/** Get the current head type */
HeadType headType() const;
/** Set the head type */
void setHeadType( HeadType t );
void setHeadType( HeadType type );
/** Possible arrow types */
enum ArrowType
@ -114,7 +120,7 @@ class QgsArrowSymbolLayer : public QgsLineSymbolLayerV2
/** Get the current arrow type */
ArrowType arrowType() const;
/** Set the arrow type */
void setArrowType( ArrowType t );
void setArrowType( ArrowType type );
/**
* Should be reimplemented by subclasses to return a string map that

View File

@ -21,18 +21,18 @@ QgsArrowSymbolLayer::QgsArrowSymbolLayer()
, mArrowWidthUnit( QgsSymbolV2::MM )
, mArrowStartWidth( 1.0 )
, mArrowStartWidthUnit( QgsSymbolV2::MM )
, mHeadWidth( 1.5 )
, mHeadWidthUnit( QgsSymbolV2::MM )
, mHeadHeight( 1.5 )
, mHeadHeightUnit( QgsSymbolV2::MM )
, mHeadLength( 1.5 )
, mHeadLengthUnit( QgsSymbolV2::MM )
, mHeadThickness( 1.5 )
, mHeadThicknessUnit( QgsSymbolV2::MM )
, mHeadType( HeadSingle )
, mArrowType( ArrowPlain )
, mIsCurved( true )
, mIsRepeated( true )
, mScaledArrowWidth( 1.0 )
, mScaledArrowStartWidth( 1.0 )
, mScaledHeadWidth( 1.5 )
, mScaledHeadHeight( 1.5 )
, mScaledHeadLength( 1.5 )
, mScaledHeadThickness( 1.5 )
, mScaledOffset( 0.0 )
, mComputedHeadType( HeadSingle )
, mComputedArrowType( ArrowPlain )
@ -83,23 +83,23 @@ QgsSymbolLayerV2* QgsArrowSymbolLayer::create( const QgsStringMap& props )
if ( props.contains( "is_repeated" ) )
l->setIsRepeated( props["is_repeated"].toInt() == 1 );
if ( props.contains( "head_width" ) )
l->setHeadWidth( props["head_width"].toDouble() );
if ( props.contains( "head_length" ) )
l->setHeadLength( props["head_length"].toDouble() );
if ( props.contains( "head_width_unit" ) )
l->setHeadWidthUnit( QgsSymbolLayerV2Utils::decodeOutputUnit( props["head_width_unit"] ) );
if ( props.contains( "head_length_unit" ) )
l->setHeadLengthUnit( QgsSymbolLayerV2Utils::decodeOutputUnit( props["head_length_unit"] ) );
if ( props.contains( "head_width_unit_scale" ) )
l->setHeadWidthUnitScale( QgsSymbolLayerV2Utils::decodeMapUnitScale( props["head_width_unit_scale"] ) );
if ( props.contains( "head_length_unit_scale" ) )
l->setHeadLengthUnitScale( QgsSymbolLayerV2Utils::decodeMapUnitScale( props["head_length_unit_scale"] ) );
if ( props.contains( "head_height" ) )
l->setHeadHeight( props["head_height"].toDouble() );
if ( props.contains( "head_thickness" ) )
l->setHeadThickness( props["head_thickness"].toDouble() );
if ( props.contains( "head_height_unit" ) )
l->setHeadHeightUnit( QgsSymbolLayerV2Utils::decodeOutputUnit( props["head_height_unit"] ) );
if ( props.contains( "head_thickness_unit" ) )
l->setHeadThicknessUnit( QgsSymbolLayerV2Utils::decodeOutputUnit( props["head_thickness_unit"] ) );
if ( props.contains( "head_height_unit_scale" ) )
l->setHeadHeightUnitScale( QgsSymbolLayerV2Utils::decodeMapUnitScale( props["head_height_unit_scale"] ) );
if ( props.contains( "head_thickness_unit_scale" ) )
l->setHeadThicknessUnitScale( QgsSymbolLayerV2Utils::decodeMapUnitScale( props["head_thickness_unit_scale"] ) );
if ( props.contains( "head_type" ) )
l->setHeadType( static_cast<HeadType>( props["head_type"].toInt() ) );
@ -152,13 +152,13 @@ QgsStringMap QgsArrowSymbolLayer::properties() const
map["is_curved"] = QString::number( isCurved() ? 1 : 0 );
map["is_repeated"] = QString::number( isRepeated() ? 1 : 0 );
map["head_width"] = QString::number( headWidth() );
map["head_width_unit"] = QgsSymbolLayerV2Utils::encodeOutputUnit( headWidthUnit() );
map["head_width_unit_scale"] = QgsSymbolLayerV2Utils::encodeMapUnitScale( headWidthUnitScale() );
map["head_length"] = QString::number( headLength() );
map["head_length_unit"] = QgsSymbolLayerV2Utils::encodeOutputUnit( headLengthUnit() );
map["head_length_unit_scale"] = QgsSymbolLayerV2Utils::encodeMapUnitScale( headLengthUnitScale() );
map["head_height"] = QString::number( headHeight() );
map["head_height_unit"] = QgsSymbolLayerV2Utils::encodeOutputUnit( headHeightUnit() );
map["head_height_unit_scale"] = QgsSymbolLayerV2Utils::encodeMapUnitScale( headHeightUnitScale() );
map["head_thickness"] = QString::number( headThickness() );
map["head_thickness_unit"] = QgsSymbolLayerV2Utils::encodeOutputUnit( headThicknessUnit() );
map["head_thickness_unit_scale"] = QgsSymbolLayerV2Utils::encodeMapUnitScale( headThicknessUnitScale() );
map["head_type"] = QString::number( headType() );
map["arrow_type"] = QString::number( arrowType() );
@ -186,8 +186,8 @@ void QgsArrowSymbolLayer::startRender( QgsSymbolV2RenderContext& context )
mExpressionScope.reset( new QgsExpressionContextScope() );
mScaledArrowWidth = QgsSymbolLayerV2Utils::convertToPainterUnits( context.renderContext(), arrowWidth(), arrowWidthUnit(), arrowWidthUnitScale() );
mScaledArrowStartWidth = QgsSymbolLayerV2Utils::convertToPainterUnits( context.renderContext(), arrowStartWidth(), arrowStartWidthUnit(), arrowStartWidthUnitScale() );
mScaledHeadWidth = QgsSymbolLayerV2Utils::convertToPainterUnits( context.renderContext(), headWidth(), headWidthUnit(), headWidthUnitScale() );
mScaledHeadHeight = QgsSymbolLayerV2Utils::convertToPainterUnits( context.renderContext(), headHeight(), headHeightUnit(), headHeightUnitScale() );
mScaledHeadLength = QgsSymbolLayerV2Utils::convertToPainterUnits( context.renderContext(), headLength(), headLengthUnit(), headLengthUnitScale() );
mScaledHeadThickness = QgsSymbolLayerV2Utils::convertToPainterUnits( context.renderContext(), headThickness(), headThicknessUnit(), headThicknessUnitScale() );
mScaledOffset = QgsSymbolLayerV2Utils::convertToPainterUnits( context.renderContext(), offset(), offsetUnit(), offsetMapUnitScale() );
mComputedHeadType = headType();
mComputedArrowType = arrowType();
@ -632,22 +632,22 @@ void QgsArrowSymbolLayer::_resolveDataDefined( QgsSymbolV2RenderContext& context
mScaledArrowStartWidth = QgsSymbolLayerV2Utils::convertToPainterUnits( context.renderContext(), w, arrowStartWidthUnit(), arrowStartWidthUnitScale() );
}
}
if ( hasDataDefinedProperty( "head_width" ) )
if ( hasDataDefinedProperty( "head_length" ) )
{
context.setOriginalValueVariable( headWidth() );
double w = evaluateDataDefinedProperty( "head_width", context, QVariant(), &ok ).toDouble();
context.setOriginalValueVariable( headLength() );
double w = evaluateDataDefinedProperty( "head_length", context, QVariant(), &ok ).toDouble();
if ( ok )
{
mScaledHeadWidth = QgsSymbolLayerV2Utils::convertToPainterUnits( context.renderContext(), w, headWidthUnit(), headWidthUnitScale() );
mScaledHeadLength = QgsSymbolLayerV2Utils::convertToPainterUnits( context.renderContext(), w, headLengthUnit(), headLengthUnitScale() );
}
}
if ( hasDataDefinedProperty( "head_height" ) )
if ( hasDataDefinedProperty( "head_thickness" ) )
{
context.setOriginalValueVariable( headHeight() );
double w = evaluateDataDefinedProperty( "head_height", context, QVariant(), &ok ).toDouble();
context.setOriginalValueVariable( headThickness() );
double w = evaluateDataDefinedProperty( "head_thickness", context, QVariant(), &ok ).toDouble();
if ( ok )
{
mScaledHeadHeight = QgsSymbolLayerV2Utils::convertToPainterUnits( context.renderContext(), w, headHeightUnit(), headHeightUnitScale() );
mScaledHeadThickness = QgsSymbolLayerV2Utils::convertToPainterUnits( context.renderContext(), w, headThicknessUnit(), headThicknessUnitScale() );
}
}
if ( hasDataDefinedProperty( QgsSymbolLayerV2::EXPR_OFFSET ) )
@ -708,7 +708,7 @@ void QgsArrowSymbolLayer::renderPolyline( const QPolygonF& points, QgsSymbolV2Re
// destination point
QPointF pd( points.back() );
QPolygonF poly = curvedArrow( po, pm, pd, mScaledArrowStartWidth, mScaledArrowWidth, mScaledHeadWidth, mScaledHeadHeight, mComputedHeadType, mComputedArrowType, mScaledOffset );
QPolygonF poly = curvedArrow( po, pm, pd, mScaledArrowStartWidth, mScaledArrowWidth, mScaledHeadLength, mScaledHeadThickness, mComputedHeadType, mComputedArrowType, mScaledOffset );
mSymbol->renderPolygon( poly, /* rings */ nullptr, context.feature(), context.renderContext() );
}
// straight arrow
@ -719,7 +719,7 @@ void QgsArrowSymbolLayer::renderPolyline( const QPolygonF& points, QgsSymbolV2Re
// destination point
QPointF pd( points.at( 1 ) );
QPolygonF poly = straightArrow( po, pd, mScaledArrowStartWidth, mScaledArrowWidth, mScaledHeadWidth, mScaledHeadHeight, mComputedHeadType, mComputedArrowType, mScaledOffset );
QPolygonF poly = straightArrow( po, pd, mScaledArrowStartWidth, mScaledArrowWidth, mScaledHeadLength, mScaledHeadThickness, mComputedHeadType, mComputedArrowType, mScaledOffset );
mSymbol->renderPolygon( poly, /* rings */ nullptr, context.feature(), context.renderContext() );
}
}
@ -739,7 +739,7 @@ void QgsArrowSymbolLayer::renderPolyline( const QPolygonF& points, QgsSymbolV2Re
// destination point
QPointF pd( points.at( pIdx + 2 ) );
QPolygonF poly = curvedArrow( po, pm, pd, mScaledArrowStartWidth, mScaledArrowWidth, mScaledHeadWidth, mScaledHeadHeight, mComputedHeadType, mComputedArrowType, mScaledOffset );
QPolygonF poly = curvedArrow( po, pm, pd, mScaledArrowStartWidth, mScaledArrowWidth, mScaledHeadLength, mScaledHeadThickness, mComputedHeadType, mComputedArrowType, mScaledOffset );
mSymbol->renderPolygon( poly, /* rings */ nullptr, context.feature(), context.renderContext() );
}
// straight arrow
@ -750,7 +750,7 @@ void QgsArrowSymbolLayer::renderPolyline( const QPolygonF& points, QgsSymbolV2Re
// destination point
QPointF pd( points.at( pIdx + 1 ) );
QPolygonF poly = straightArrow( po, pd, mScaledArrowStartWidth, mScaledArrowWidth, mScaledHeadWidth, mScaledHeadHeight, mComputedHeadType, mComputedArrowType, mScaledOffset );
QPolygonF poly = straightArrow( po, pd, mScaledArrowStartWidth, mScaledArrowWidth, mScaledHeadLength, mScaledHeadThickness, mComputedHeadType, mComputedArrowType, mScaledOffset );
mSymbol->renderPolygon( poly, /* rings */ nullptr, context.feature(), context.renderContext() );
}
}
@ -769,7 +769,7 @@ void QgsArrowSymbolLayer::renderPolyline( const QPolygonF& points, QgsSymbolV2Re
// destination point
QPointF pd( points.back() );
QPolygonF poly = straightArrow( po, pd, mScaledArrowStartWidth, mScaledArrowWidth, mScaledHeadWidth, mScaledHeadHeight, mComputedHeadType, mComputedArrowType, mScaledOffset );
QPolygonF poly = straightArrow( po, pd, mScaledArrowStartWidth, mScaledArrowWidth, mScaledHeadLength, mScaledHeadThickness, mComputedHeadType, mComputedArrowType, mScaledOffset );
mSymbol->renderPolygon( poly, /* rings */ nullptr, context.feature(), context.renderContext() );
}
}
@ -786,7 +786,7 @@ void QgsArrowSymbolLayer::renderPolyline( const QPolygonF& points, QgsSymbolV2Re
// destination point
QPointF pd( points.at( pIdx + 1 ) );
QPolygonF poly = straightArrow( po, pd, mScaledArrowStartWidth, mScaledArrowWidth, mScaledHeadWidth, mScaledHeadHeight, mComputedHeadType, mComputedArrowType, mScaledOffset );
QPolygonF poly = straightArrow( po, pd, mScaledArrowStartWidth, mScaledArrowWidth, mScaledHeadLength, mScaledHeadThickness, mComputedHeadType, mComputedArrowType, mScaledOffset );
mSymbol->renderPolygon( poly, /* rings */ nullptr, context.feature(), context.renderContext() );
}
}

View File

@ -18,9 +18,13 @@
#include "qgssymbollayerv2.h"
/**
* This class is used for representing lines as arrows.
/** \ingroup core
* \class QgsArrowSymbolLayer
* \brief Line symbol layer used for representing lines as arrows.
* \note Added in version 2.16
*/
class CORE_EXPORT QgsArrowSymbolLayer : public QgsLineSymbolLayerV2
{
public:
@ -51,54 +55,54 @@ class CORE_EXPORT QgsArrowSymbolLayer : public QgsLineSymbolLayerV2
/** Get current arrow width */
double arrowWidth() const { return mArrowWidth; }
/** Set the arrow width */
void setArrowWidth( double w ) { mArrowWidth = w; }
void setArrowWidth( double width ) { mArrowWidth = width; }
/** Get the unit for the arrow width */
QgsSymbolV2::OutputUnit arrowWidthUnit() const { return mArrowWidthUnit; }
/** Set the unit for the arrow width */
void setArrowWidthUnit( QgsSymbolV2::OutputUnit u ) { mArrowWidthUnit = u; }
void setArrowWidthUnit( QgsSymbolV2::OutputUnit unit ) { mArrowWidthUnit = unit; }
/** Get the scale for the arrow width */
QgsMapUnitScale arrowWidthUnitScale() const { return mArrowWidthUnitScale; }
/** Set the scale for the arrow width */
void setArrowWidthUnitScale( const QgsMapUnitScale& s ) { mArrowWidthUnitScale = s; }
void setArrowWidthUnitScale( const QgsMapUnitScale& scale ) { mArrowWidthUnitScale = scale; }
/** Get current arrow start width. Only meaningfull for single headed arrows */
double arrowStartWidth() const { return mArrowStartWidth; }
/** Set the arrow start width */
void setArrowStartWidth( double w ) { mArrowStartWidth = w; }
void setArrowStartWidth( double width ) { mArrowStartWidth = width; }
/** Get the unit for the arrow start width */
QgsSymbolV2::OutputUnit arrowStartWidthUnit() const { return mArrowStartWidthUnit; }
/** Set the unit for the arrow start width */
void setArrowStartWidthUnit( QgsSymbolV2::OutputUnit u ) { mArrowStartWidthUnit = u; }
void setArrowStartWidthUnit( QgsSymbolV2::OutputUnit unit ) { mArrowStartWidthUnit = unit; }
/** Get the scale for the arrow start width */
QgsMapUnitScale arrowStartWidthUnitScale() const { return mArrowStartWidthUnitScale; }
/** Set the scale for the arrow start width */
void setArrowStartWidthUnitScale( const QgsMapUnitScale& s ) { mArrowStartWidthUnitScale = s; }
void setArrowStartWidthUnitScale( const QgsMapUnitScale& scale ) { mArrowStartWidthUnitScale = scale; }
/** Get the current arrow head width */
double headWidth() const { return mHeadWidth; }
/** Set the arrow head width */
void setHeadWidth( double s ) { mHeadWidth = s; }
/** Get the unit for the head width */
QgsSymbolV2::OutputUnit headWidthUnit() const { return mHeadWidthUnit; }
/** Set the unit for the head width */
void setHeadWidthUnit( QgsSymbolV2::OutputUnit u ) { mHeadWidthUnit = u; }
/** Get the scale for the head width */
QgsMapUnitScale headWidthUnitScale() const { return mHeadWidthUnitScale; }
/** Set the scale for the head width */
void setHeadWidthUnitScale( const QgsMapUnitScale& s ) { mHeadWidthUnitScale = s; }
/** Get the current arrow head length */
double headLength() const { return mHeadLength; }
/** Set the arrow head length */
void setHeadLength( double length ) { mHeadLength = length; }
/** Get the unit for the head length */
QgsSymbolV2::OutputUnit headLengthUnit() const { return mHeadLengthUnit; }
/** Set the unit for the head length */
void setHeadLengthUnit( QgsSymbolV2::OutputUnit unit ) { mHeadLengthUnit = unit; }
/** Get the scale for the head length */
QgsMapUnitScale headLengthUnitScale() const { return mHeadLengthUnitScale; }
/** Set the scale for the head length */
void setHeadLengthUnitScale( const QgsMapUnitScale& scale ) { mHeadLengthUnitScale = scale; }
/** Get the current arrow head height */
double headHeight() const { return mHeadHeight; }
double headThickness() const { return mHeadThickness; }
/** Set the arrow head height */
void setHeadHeight( double s ) { mHeadHeight = s; }
void setHeadThickness( double thickness ) { mHeadThickness = thickness; }
/** Get the unit for the head height */
QgsSymbolV2::OutputUnit headHeightUnit() const { return mHeadHeightUnit; }
QgsSymbolV2::OutputUnit headThicknessUnit() const { return mHeadThicknessUnit; }
/** Set the unit for the head height */
void setHeadHeightUnit( QgsSymbolV2::OutputUnit u ) { mHeadHeightUnit = u; }
void setHeadThicknessUnit( QgsSymbolV2::OutputUnit unit ) { mHeadThicknessUnit = unit; }
/** Get the scale for the head height */
QgsMapUnitScale headHeightUnitScale() const { return mHeadHeightUnitScale; }
QgsMapUnitScale headThicknessUnitScale() const { return mHeadThicknessUnitScale; }
/** Set the scale for the head height */
void setHeadHeightUnitScale( const QgsMapUnitScale& s ) { mHeadHeightUnitScale = s; }
void setHeadThicknessUnitScale( const QgsMapUnitScale& scale ) { mHeadThicknessUnitScale = scale; }
/** Return whether it is a curved arrow or a straight one */
bool isCurved() const { return mIsCurved; }
@ -121,7 +125,7 @@ class CORE_EXPORT QgsArrowSymbolLayer : public QgsLineSymbolLayerV2
/** Get the current head type */
HeadType headType() const { return mHeadType; }
/** Set the head type */
void setHeadType( HeadType t ) { mHeadType = t; }
void setHeadType( HeadType type ) { mHeadType = type; }
/** Possible arrow types */
enum ArrowType
@ -134,7 +138,7 @@ class CORE_EXPORT QgsArrowSymbolLayer : public QgsLineSymbolLayerV2
/** Get the current arrow type */
ArrowType arrowType() const { return mArrowType; }
/** Set the arrow type */
void setArrowType( ArrowType t ) { mArrowType = t; }
void setArrowType( ArrowType type ) { mArrowType = type; }
/**
* Should be reimplemented by subclasses to return a string map that
@ -173,12 +177,12 @@ class CORE_EXPORT QgsArrowSymbolLayer : public QgsLineSymbolLayerV2
QgsSymbolV2::OutputUnit mArrowStartWidthUnit;
QgsMapUnitScale mArrowStartWidthUnitScale;
double mHeadWidth;
QgsSymbolV2::OutputUnit mHeadWidthUnit;
QgsMapUnitScale mHeadWidthUnitScale;
double mHeadHeight;
QgsSymbolV2::OutputUnit mHeadHeightUnit;
QgsMapUnitScale mHeadHeightUnitScale;
double mHeadLength;
QgsSymbolV2::OutputUnit mHeadLengthUnit;
QgsMapUnitScale mHeadLengthUnitScale;
double mHeadThickness;
QgsSymbolV2::OutputUnit mHeadThicknessUnit;
QgsMapUnitScale mHeadThicknessUnitScale;
HeadType mHeadType;
ArrowType mArrowType;
@ -187,8 +191,8 @@ class CORE_EXPORT QgsArrowSymbolLayer : public QgsLineSymbolLayerV2
double mScaledArrowWidth;
double mScaledArrowStartWidth;
double mScaledHeadWidth;
double mScaledHeadHeight;
double mScaledHeadLength;
double mScaledHeadThickness;
double mScaledOffset;
HeadType mComputedHeadType;
ArrowType mComputedArrowType;

View File

@ -25,8 +25,8 @@ QgsArrowSymbolLayerWidget::QgsArrowSymbolLayerWidget( const QgsVectorLayer* vl,
mArrowWidthUnitWidget->setUnits( QgsSymbolV2::OutputUnitList() << QgsSymbolV2::MM << QgsSymbolV2::MapUnit << QgsSymbolV2::Pixel );
mArrowStartWidthUnitWidget->setUnits( QgsSymbolV2::OutputUnitList() << QgsSymbolV2::MM << QgsSymbolV2::MapUnit << QgsSymbolV2::Pixel );
mHeadWidthUnitWidget->setUnits( QgsSymbolV2::OutputUnitList() << QgsSymbolV2::MM << QgsSymbolV2::MapUnit << QgsSymbolV2::Pixel );
mHeadHeightUnitWidget->setUnits( QgsSymbolV2::OutputUnitList() << QgsSymbolV2::MM << QgsSymbolV2::MapUnit << QgsSymbolV2::Pixel );
mHeadLengthUnitWidget->setUnits( QgsSymbolV2::OutputUnitList() << QgsSymbolV2::MM << QgsSymbolV2::MapUnit << QgsSymbolV2::Pixel );
mHeadThicknessUnitWidget->setUnits( QgsSymbolV2::OutputUnitList() << QgsSymbolV2::MM << QgsSymbolV2::MapUnit << QgsSymbolV2::Pixel );
mOffsetUnitWidget->setUnits( QgsSymbolV2::OutputUnitList() << QgsSymbolV2::MM << QgsSymbolV2::MapUnit << QgsSymbolV2::Pixel );
mOffsetSpin->setClearValue( 0.0 );
@ -49,12 +49,12 @@ void QgsArrowSymbolLayerWidget::setSymbolLayer( QgsSymbolLayerV2* layer )
mArrowStartWidthUnitWidget->setUnit( mLayer->arrowStartWidthUnit() );
mArrowStartWidthUnitWidget->setMapUnitScale( mLayer->arrowStartWidthUnitScale() );
mHeadWidthSpin->setValue( mLayer->headWidth() );
mHeadWidthUnitWidget->setUnit( mLayer->headWidthUnit() );
mHeadWidthUnitWidget->setMapUnitScale( mLayer->headWidthUnitScale() );
mHeadHeightSpin->setValue( mLayer->headHeight() );
mHeadHeightUnitWidget->setUnit( mLayer->headHeightUnit() );
mHeadHeightUnitWidget->setMapUnitScale( mLayer->headHeightUnitScale() );
mHeadLengthSpin->setValue( mLayer->headLength() );
mHeadLengthUnitWidget->setUnit( mLayer->headLengthUnit() );
mHeadLengthUnitWidget->setMapUnitScale( mLayer->headLengthUnitScale() );
mHeadThicknessSpin->setValue( mLayer->headThickness() );
mHeadThicknessUnitWidget->setUnit( mLayer->headThicknessUnit() );
mHeadThicknessUnitWidget->setMapUnitScale( mLayer->headThicknessUnitScale() );
mHeadTypeCombo->setCurrentIndex( mLayer->headType() );
mArrowTypeCombo->setCurrentIndex( mLayer->arrowType() );
@ -68,8 +68,8 @@ void QgsArrowSymbolLayerWidget::setSymbolLayer( QgsSymbolLayerV2* layer )
registerDataDefinedButton( mArrowWidthDDBtn, "arrow_width", QgsDataDefinedButton::Double, QgsDataDefinedButton::doubleDesc() );
registerDataDefinedButton( mArrowStartWidthDDBtn, "arrow_start_width", QgsDataDefinedButton::Double, QgsDataDefinedButton::doubleDesc() );
registerDataDefinedButton( mHeadWidthDDBtn, "head_width", QgsDataDefinedButton::Double, QgsDataDefinedButton::doubleDesc() );
registerDataDefinedButton( mHeadHeightDDBtn, "head_height", QgsDataDefinedButton::Double, QgsDataDefinedButton::doubleDesc() );
registerDataDefinedButton( mHeadWidthDDBtn, "head_length", QgsDataDefinedButton::Double, QgsDataDefinedButton::doubleDesc() );
registerDataDefinedButton( mHeadHeightDDBtn, "head_thickness", QgsDataDefinedButton::Double, QgsDataDefinedButton::doubleDesc() );
registerDataDefinedButton( mHeadTypeDDBtn, "head_type", QgsDataDefinedButton::Int, QgsDataDefinedButton::intDesc() );
registerDataDefinedButton( mArrowTypeDDBtn, "arrow_type", QgsDataDefinedButton::Int, QgsDataDefinedButton::intDesc() );
registerDataDefinedButton( mOffsetDDBtn, "offset", QgsDataDefinedButton::String, QgsDataDefinedButton::doubleDesc() );
@ -99,21 +99,21 @@ void QgsArrowSymbolLayerWidget::on_mArrowStartWidthSpin_valueChanged( double d )
emit changed();
}
void QgsArrowSymbolLayerWidget::on_mHeadWidthSpin_valueChanged( double d )
void QgsArrowSymbolLayerWidget::on_mHeadLengthSpin_valueChanged( double d )
{
if ( !mLayer )
return;
mLayer->setHeadWidth( d );
mLayer->setHeadLength( d );
emit changed();
}
void QgsArrowSymbolLayerWidget::on_mHeadHeightSpin_valueChanged( double d )
void QgsArrowSymbolLayerWidget::on_mHeadThicknessSpin_valueChanged( double d )
{
if ( !mLayer )
return;
mLayer->setHeadHeight( d );
mLayer->setHeadThickness( d );
emit changed();
}
@ -137,23 +137,23 @@ void QgsArrowSymbolLayerWidget::on_mArrowStartWidthUnitWidget_changed()
emit changed();
}
void QgsArrowSymbolLayerWidget::on_mHeadWidthUnitWidget_changed()
void QgsArrowSymbolLayerWidget::on_mHeadLengthUnitWidget_changed()
{
if ( !mLayer )
return;
mLayer->setHeadWidthUnit( mHeadWidthUnitWidget->unit() );
mLayer->setHeadWidthUnitScale( mHeadWidthUnitWidget->getMapUnitScale() );
mLayer->setHeadLengthUnit( mHeadLengthUnitWidget->unit() );
mLayer->setHeadLengthUnitScale( mHeadLengthUnitWidget->getMapUnitScale() );
emit changed();
}
void QgsArrowSymbolLayerWidget::on_mHeadHeightUnitWidget_changed()
void QgsArrowSymbolLayerWidget::on_mHeadThicknessUnitWidget_changed()
{
if ( !mLayer )
return;
mLayer->setHeadHeightUnit( mHeadHeightUnitWidget->unit() );
mLayer->setHeadHeightUnitScale( mHeadHeightUnitWidget->getMapUnitScale() );
mLayer->setHeadThicknessUnit( mHeadThicknessUnitWidget->unit() );
mLayer->setHeadThicknessUnitScale( mHeadThicknessUnitWidget->getMapUnitScale() );
emit changed();
}

View File

@ -51,10 +51,10 @@ class GUI_EXPORT QgsArrowSymbolLayerWidget: public QgsSymbolLayerV2Widget, priva
void on_mArrowStartWidthSpin_valueChanged( double d );
void on_mArrowStartWidthUnitWidget_changed();
void on_mHeadWidthSpin_valueChanged( double d );
void on_mHeadWidthUnitWidget_changed();
void on_mHeadHeightSpin_valueChanged( double d );
void on_mHeadHeightUnitWidget_changed();
void on_mHeadLengthSpin_valueChanged( double d );
void on_mHeadLengthUnitWidget_changed();
void on_mHeadThicknessSpin_valueChanged( double d );
void on_mHeadThicknessUnitWidget_changed();
void on_mHeadTypeCombo_currentIndexChanged( int );
void on_mArrowTypeCombo_currentIndexChanged( int );

View File

@ -72,7 +72,7 @@
<item row="5" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QgsDoubleSpinBox" name="mHeadHeightSpin">
<widget class="QgsDoubleSpinBox" name="mHeadThicknessSpin">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>1</horstretch>
@ -91,7 +91,7 @@
</widget>
</item>
<item>
<widget class="QgsUnitSelectionWidget" name="mHeadHeightUnitWidget" native="true"/>
<widget class="QgsUnitSelectionWidget" name="mHeadThicknessUnitWidget" native="true"/>
</item>
</layout>
</item>
@ -222,7 +222,7 @@
<item row="5" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Head height</string>
<string>Head thickness</string>
</property>
</widget>
</item>
@ -236,7 +236,7 @@
<item row="4" column="0">
<widget class="QLabel" name="label_9">
<property name="text">
<string>Head width</string>
<string>Head length</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
@ -246,7 +246,7 @@
<item row="4" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<widget class="QgsDoubleSpinBox" name="mHeadWidthSpin">
<widget class="QgsDoubleSpinBox" name="mHeadLengthSpin">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>1</horstretch>
@ -268,7 +268,7 @@
</widget>
</item>
<item>
<widget class="QgsUnitSelectionWidget" name="mHeadWidthUnitWidget" native="true"/>
<widget class="QgsUnitSelectionWidget" name="mHeadLengthUnitWidget" native="true"/>
</item>
</layout>
</item>
@ -356,16 +356,16 @@
</layout>
</widget>
<customwidgets>
<customwidget>
<class>QgsDataDefinedButton</class>
<extends>QToolButton</extends>
<header>qgsdatadefinedbutton.h</header>
</customwidget>
<customwidget>
<class>QgsDoubleSpinBox</class>
<extends>QDoubleSpinBox</extends>
<header>qgsdoublespinbox.h</header>
</customwidget>
<customwidget>
<class>QgsDataDefinedButton</class>
<extends>QToolButton</extends>
<header>qgsdatadefinedbutton.h</header>
</customwidget>
<customwidget>
<class>QgsUnitSelectionWidget</class>
<extends>QWidget</extends>

View File

@ -77,13 +77,13 @@ class TestQgsArrowSymbolLayer(unittest.TestCase):
def test_1(self):
sym = self.lines_layer.rendererV2().symbol()
sym_layer = QgsArrowSymbolLayer.create({'head_width': '6.5', 'head_height': '6.5'})
sym_layer = QgsArrowSymbolLayer.create({'head_length': '6.5', 'head_thickness': '6.5'})
dd = QgsDataDefined("(@geometry_point_num % 4) * 2")
sym_layer.setDataDefinedProperty("arrow_width", dd)
dd2 = QgsDataDefined("(@geometry_point_num % 4) * 2")
sym_layer.setDataDefinedProperty("head_width", dd2)
sym_layer.setDataDefinedProperty("head_length", dd2)
dd3 = QgsDataDefined("(@geometry_point_num % 4) * 2")
sym_layer.setDataDefinedProperty("head_height", dd3)
sym_layer.setDataDefinedProperty("head_thickness", dd3)
fill_sym = QgsFillSymbolV2.createSimple({'color': '#8bcfff', 'outline_color': '#000000', 'outline_style': 'solid', 'outline_width': '1'})
sym_layer.setSubSymbol(fill_sym)
sym.changeSymbolLayer(0, sym_layer)
@ -99,7 +99,7 @@ class TestQgsArrowSymbolLayer(unittest.TestCase):
def test_2(self):
sym = self.lines_layer.rendererV2().symbol()
# double headed
sym_layer = QgsArrowSymbolLayer.create({'arrow_width': '5', 'head_width': '4', 'head_height': '6', 'head_type': '2'})
sym_layer = QgsArrowSymbolLayer.create({'arrow_width': '5', 'head_length': '4', 'head_thickness': '6', 'head_type': '2'})
fill_sym = QgsFillSymbolV2.createSimple({'color': '#8bcfff', 'outline_color': '#000000', 'outline_style': 'solid', 'outline_width': '1'})
sym_layer.setSubSymbol(fill_sym)
sym.changeSymbolLayer(0, sym_layer)
@ -115,7 +115,7 @@ class TestQgsArrowSymbolLayer(unittest.TestCase):
def test_3(self):
sym = self.lines_layer.rendererV2().symbol()
# double headed
sym_layer = QgsArrowSymbolLayer.create({'arrow_width': '7', 'head_width': '6', 'head_height': '8', 'head_type': '0', 'arrow_type': '1', 'is_curved': '0'})
sym_layer = QgsArrowSymbolLayer.create({'arrow_width': '7', 'head_length': '6', 'head_thickness': '8', 'head_type': '0', 'arrow_type': '1', 'is_curved': '0'})
fill_sym = QgsFillSymbolV2.createSimple({'color': '#8bcfff', 'outline_color': '#000000', 'outline_style': 'solid', 'outline_width': '1'})
sym_layer.setSubSymbol(fill_sym)
sym.changeSymbolLayer(0, sym_layer)
@ -133,7 +133,7 @@ class TestQgsArrowSymbolLayer(unittest.TestCase):
def test_unrepeated(self):
sym = self.lines_layer.rendererV2().symbol()
# double headed
sym_layer = QgsArrowSymbolLayer.create({'arrow_width': '7', 'head_width': '6', 'head_height': '8', 'head_type': '0', 'arrow_type': '0'})
sym_layer = QgsArrowSymbolLayer.create({'arrow_width': '7', 'head_length': '6', 'head_thickness': '8', 'head_type': '0', 'arrow_type': '0'})
# no repetition
sym_layer.setIsRepeated(False)
fill_sym = QgsFillSymbolV2.createSimple({'color': '#8bcfff', 'outline_color': '#000000', 'outline_style': 'solid', 'outline_width': '1'})