21 #include "qgsdxfexport.h"
82 double mmMapUnitScaleFactor,
83 const QString& layerName,
86 const QPointF& shift )
const
89 Q_UNUSED( mmMapUnitScaleFactor );
90 Q_UNUSED( layerName );
113 return QVector<qreal>();
118 return Qt::SolidLine;
134 it.value()->prepare( fields );
137 it.value()->setScale( scale );
152 columns.append( ddIt.value()->referencedColumns() );
156 QSet<QString> attributes;
157 QStringList::const_iterator it = columns.constBegin();
158 for ( ; it != columns.constEnd(); ++it )
160 attributes.insert( *it );
173 stringMap.insert( ddIt.key() +
"_expression", ddIt.value()->expression() );
198 mHorizontalAnchorPoint( HCenter ), mVerticalAnchorPoint( VCenter )
226 renderPoint( QPointF( size.width() / 2, size.height() / 2 ), context );
243 double& offsetX,
double& offsetY )
const
251 offsetX = offset.x();
252 offsetY = offset.y();
270 if ( horizontalAnchorPoint ==
HCenter && verticalAnchorPoint ==
VCenter )
277 if ( horizontalAnchorPoint ==
Left )
279 offsetX += anchorPointCorrectionX;
281 else if ( horizontalAnchorPoint ==
Right )
283 offsetX -= anchorPointCorrectionX;
287 if ( verticalAnchorPoint ==
Top )
289 offsetY += anchorPointCorrectionY;
291 else if ( verticalAnchorPoint ==
Bottom )
293 offsetY -= anchorPointCorrectionY;
300 double c = cos( angle ), s = sin( angle );
301 return QPointF( offset.x() * c - offset.y() * s, offset.x() * s + offset.y() * c );
306 if ( str.compare(
"left", Qt::CaseInsensitive ) == 0 )
310 else if ( str.compare(
"right", Qt::CaseInsensitive ) == 0 )
322 if ( str.compare(
"top", Qt::CaseInsensitive ) == 0 )
326 else if ( str.compare(
"bottom", Qt::CaseInsensitive ) == 0 )
351 points << QPointF( 0, size.height() / 2 + 0.5 ) << QPointF( size.width(), size.height() / 2 + 0.5 );
363 foreach (
const QPolygonF& ring, *rings )
371 return (
width() * e.mapUnitScaleFactor( e.symbologyScaleDenominator(),
widthUnit(), e.mapUnits() ) );
377 QPolygonF poly = QRectF( QPointF( 0, 0 ), QPointF( size.width(), size.height() ) );
393 p->setRenderHint( QPainter::Antialiasing,
false );
394 p->drawRect( points.boundingRect() );
395 p->setRenderHint( QPainter::Antialiasing,
true );
402 p->drawPolygon( points );
408 QPolygonF outerRing = points;
409 path.addPolygon( outerRing );
411 QList<QPolygonF>::const_iterator it = rings->constBegin();
412 for ( ; it != rings->constEnd(); ++it )
414 QPolygonF ring = *it;
415 path.addPolygon( ring );
424 QDomElement symbolizerElem = doc.createElement(
"se:PointSymbolizer" );
425 if ( !props.value(
"uom",
"" ).isEmpty() )
426 symbolizerElem.setAttribute(
"uom", props.value(
"uom",
"" ) );
427 element.appendChild( symbolizerElem );
virtual QSet< QString > usedAttributes() const
void drawPreviewIcon(QgsSymbolV2RenderContext &context, QSize size)
Class for parsing and evaluation of expressions (formerly called "search strings").
VerticalAnchorPoint verticalAnchorPoint() const
virtual void removeDataDefinedProperties()
QMap< QString, QgsExpression * > mDataDefinedProperties
float threshold() const
Gets the simplification threshold of the vector layer managed.
virtual Qt::PenStyle dxfPenStyle() const
virtual QgsSymbolV2::OutputUnit outputUnit() const
virtual double dxfWidth(const QgsDxfExport &e, const QgsSymbolV2RenderContext &context) const
virtual double width() const
HorizontalAnchorPoint horizontalAnchorPoint() const
const QString expression() const
Return the expression string that was given when created.
QVariant evaluate(const QgsFeature *f=NULL)
Evaluate the feature and return the result.
void startRender(QgsSymbolV2RenderContext &context)
QgsExpression * mVerticalAnchorExpression
const QgsVectorSimplifyMethod & simplifyMethod() const
Returns the simplification settings for fast rendering of features.
virtual void toSld(QDomDocument &doc, QDomElement &element, QgsStringMap props) const
static QPointF decodePoint(QString str)
Container of fields for a vector layer.
virtual void renderPolygon(const QPolygonF &points, QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context)=0
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
QgsExpression * mOffsetExpression
virtual void setOutputUnit(QgsSymbolV2::OutputUnit unit)
virtual void removeDataDefinedProperty(const QString &property)
QMap< QString, QString > QgsStringMap
static QgsMarkerSymbolLayerV2::HorizontalAnchorPoint decodeHorizontalAnchorPoint(const QString &str)
virtual QString dataDefinedPropertyString(const QString &property) const
virtual void startRender(QgsSymbolV2RenderContext &context)=0
virtual QgsExpression * expression(const QString &property) const
virtual void prepareExpressions(const QgsVectorLayer *vl, double scale=-1.0)
virtual void writeSldMarker(QDomDocument &doc, QDomElement &element, QgsStringMap props) const
bool simplifyDrawingCanbeApplied(const QgsRenderContext &renderContext, QgsVectorSimplifyMethod::SimplifyHint simplifyHint) const
Returns whether the VectorLayer can apply the specified simplification hint.
const QgsFeature * feature() const
virtual void renderPoint(const QPointF &point, QgsSymbolV2RenderContext &context)=0
virtual QVector< qreal > dxfCustomDashPattern(QgsSymbolV2::OutputUnit &unit) const
The geometries can be rendered with 'AntiAliasing' disabled because of it is '1-pixel size'...
QgsMarkerSymbolLayerV2(bool locked=false)
virtual QColor color() const
HorizontalAnchorPoint mHorizontalAnchorPoint
virtual void renderPolygonOutline(const QPolygonF &points, QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context)
virtual QColor dxfColor(const QgsSymbolV2RenderContext &context) const
virtual bool writeDxf(QgsDxfExport &e, double mmMapUnitScaleFactor, const QString &layerName, const QgsSymbolV2RenderContext *context, const QgsFeature *f, const QPointF &shift=QPointF(0.0, 0.0)) const
double ANALYSIS_EXPORT angle(Point3D *p1, Point3D *p2, Point3D *p3, Point3D *p4)
Calculates the angle between two segments (in 2 dimension, z-values are ignored)
void drawPreviewIcon(QgsSymbolV2RenderContext &context, QSize size)
virtual void renderPolyline(const QPolygonF &points, QgsSymbolV2RenderContext &context)=0
void drawPreviewIcon(QgsSymbolV2RenderContext &context, QSize size)
QgsFillSymbolLayerV2(bool locked=false)
static void createGeometryElement(QDomDocument &doc, QDomElement &element, QString geomFunc)
QgsLineSymbolLayerV2(bool locked=false)
QgsExpression * mHorizontalAnchorExpression
virtual const QgsExpression * dataDefinedProperty(const QString &property) const
static QgsMarkerSymbolLayerV2::VerticalAnchorPoint decodeVerticalAnchorPoint(const QString &str)
QgsRenderContext & renderContext()
static double lineWidthScaleFactor(const QgsRenderContext &c, QgsSymbolV2::OutputUnit u)
Returns the line width scale factor depending on the unit and the paint device.
QgsSymbolV2::OutputUnit mOffsetUnit
VerticalAnchorPoint mVerticalAnchorPoint
QgsSymbolV2::OutputUnit mSizeUnit
const QgsFields & pendingFields() const
returns field list in the to-be-committed state
void markerOffset(const QgsSymbolV2RenderContext &context, double &offsetX, double &offsetY) const
void _renderPolygon(QPainter *p, const QPolygonF &points, const QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context)
Default method to render polygon.
virtual double dxfWidth(const QgsDxfExport &e, const QgsSymbolV2RenderContext &context) const
Represents a vector layer which manages a vector based data sets.
void saveDataDefinedProperties(QgsStringMap &stringMap) const
Saves data defined properties to string map.
virtual void stopRender(QgsSymbolV2RenderContext &context)=0
static bool canbeGeneralizedByDeviceBoundingBox(const QgsRectangle &envelope, float mapToPixelTol=1.0f)
Returns whether the device-envelope can be replaced by its BBOX when is applied the specified toleran...
QgsSymbolV2::OutputUnit widthUnit() const
void copyDataDefinedProperties(QgsSymbolLayerV2 *destLayer) const
Copies data defined properties of this layer to another symbol layer.
const QgsVectorLayer * layer() const
virtual void setDataDefinedProperty(const QString &property, const QString &expressionString)
static QPointF _rotatedOffset(const QPointF &offset, double angle)