18 #ifndef QGSDXFEXPORT_H 19 #define QGSDXFEXPORT_H 21 #include "qgis_core.h" 30 #include <QTextStream> 42 #define DXF_HANDSEED 100 43 #define DXF_HANDMAX 9999999 44 #define DXF_HANDPLOTSTYLE 0xf 67 , mLayerOutputAttributeIndex( layerOutputAttributeIndex )
81 int mLayerOutputAttributeIndex = -1;
96 Q_DECLARE_FLAGS( Flags,
Flag )
116 void setFlags( QgsDxfExport::Flags flags );
123 QgsDxfExport::Flags flags()
const;
130 void addLayers(
const QList< QgsDxfExport::DxfLayer > &layers );
138 int writeToFile( QIODevice *d,
const QString &codec );
235 static int closestColorMatch( QRgb color );
243 QString layerName(
const QString &
id,
const QgsFeature &f )
const;
259 void writeGroup(
int code,
int i )
SIP_PYNAME( writeGroupInt );
267 void writeGroup(
int code,
double d )
SIP_PYNAME( writeGroupDouble );
274 void writeGroup(
int code,
const QString &s );
293 void writeGroup(
const QColor &color,
int exactMatch = 62,
int rgbCode = 420,
int transparencyCode = 440 );
299 void writeGroupCode(
int code );
305 void writeInt(
int i );
311 void writeDouble(
double d );
317 void writeString(
const QString &s );
325 int writeHandle(
int code = 5,
int handle = 0 );
337 void writePolyline(
const QgsPointSequence &line,
const QString &layer,
const QString &lineStyleName,
const QColor &color,
double width = -1 )
SIP_SKIP;
349 void writePolyline(
const QgsCurve &curve,
const QString &layer,
const QString &lineStyleName,
const QColor &color,
double width = -1 )
SIP_SKIP;
360 void writePolygon(
const QgsRingSequence &polygon,
const QString &layer,
const QString &hatchPattern,
const QColor &color )
SIP_SKIP;
371 void writePolygon(
const QgsCurvePolygon &polygon,
const QString &layer,
const QString &hatchPattern,
const QColor &color )
SIP_SKIP;
377 void writeLine(
const QgsPoint &pt1,
const QgsPoint &pt2,
const QString &layer,
const QString &lineStyleName,
const QColor &color,
double width = -1 );
384 void writePoint(
const QString &layer,
const QColor &color,
const QgsPoint &pt )
SIP_PYNAME( writePointV2 );
391 void writeFilledCircle(
const QString &layer,
const QColor &color,
const QgsPoint &pt,
double radius )
SIP_PYNAME( writeFillCircleV2 );
398 void writeCircle(
const QString &layer,
const QColor &color,
const QgsPoint &pt,
double radius,
const QString &lineStyleName,
double width )
SIP_PYNAME( writeCircleV2 );
405 void writeText(
const QString &layer,
const QString &text,
const QgsPoint &pt,
double size,
double angle,
const QColor &color )
SIP_PYNAME( writeTextV2 );
412 void writeMText(
const QString &layer,
const QString &text,
const QgsPoint &pt,
double width,
double angle,
const QColor &color );
429 void clipValueToMapUnitScale(
double &value,
const QgsMapUnitScale &scale,
double pixelToMMFactor )
const;
432 static QString dxfLayerName(
const QString &name );
435 static QString dxfEncoding(
const QString &name );
438 static QStringList encodings();
456 void registerDxfLayer(
const QString &layerId,
QgsFeatureId fid,
const QString &layer );
462 double mSymbologyScale = 1.0;
465 bool mLayerTitleAsName =
false;
467 QTextStream mTextStream;
469 static int sDxfColors[][3];
470 static const char *DXF_ENCODINGS[][2];
472 int mSymbolLayerCounter = 0;
474 int mBlockCounter = 0;
476 QHash< const QgsSymbolLayer *, QString > mLineStyles;
477 QHash< const QgsSymbolLayer *, QString > mPointSymbolBlocks;
480 void writeHeader(
const QString &codepage );
483 void writeEntities();
491 void writeDefaultLinetypes();
492 void writeSymbolLayerLinetype(
const QgsSymbolLayer *symbolLayer );
509 QString lineStyleFromSymbolLayer(
const QgsSymbolLayer *symbolLayer );
512 static int color_distance( QRgb p1,
int index );
513 static QRgb createRgbEntry( qreal r, qreal g, qreal b );
518 QList< QPair< QgsSymbolLayer *, QgsSymbol * > > symbolLayers(
QgsRenderContext &context );
519 static int nLineTypes(
const QList< QPair< QgsSymbolLayer *, QgsSymbol *> > &symbolLayers );
521 double dashSize()
const;
522 double dotSize()
const;
523 double dashSeparatorSize()
const;
524 double sizeToMapUnits(
double s )
const;
525 static QString lineNameFromPenStyle( Qt::PenStyle style );
526 bool layerIsScaleBasedVisible(
const QgsMapLayer *layer )
const;
528 QHash<QString, int> mBlockHandles;
529 QString mBlockHandle;
532 QMap< QString, QMap<QgsFeatureId, QString> > mDxfLayerNames;
535 QHash<QString, int> mLayerNameAttribute;
536 double mFactor = 1.0;
537 bool mForce2d =
false;
539 QgsDxfExport::Flags mFlags =
nullptr;
541 void appendCurve(
const QgsCurve &
c, QVector<QgsPoint> &points, QVector<double> &bulges );
542 void appendLineString(
const QgsLineString &ls, QVector<QgsPoint> &points, QVector<double> &bulges );
543 void appendCircularString(
const QgsCircularString &cs, QVector<QgsPoint> &points, QVector<double> &bulges );
544 void appendCompoundCurve(
const QgsCompoundCurve &cc, QVector<QgsPoint> &points, QVector<double> &bulges );
547 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsDxfExport::Flags )
549 #endif // QGSDXFEXPORT_H A rectangle specified with double values.
Base class for all map layer types.
double symbologyScale() const
Returns the reference scale for output.
QgsDxfExport::SymbologyExport symbologyExport() const
Gets symbology export mode.
DxfLayer(QgsVectorLayer *vl, int layerOutputAttributeIndex=-1)
Abstract base class for all rendered symbols.
A class to represent a 2D point.
bool force2d()
Retrieve whether the output should be forced to 2d.
Curve polygon geometry type.
void setSymbologyExport(QgsDxfExport::SymbologyExport e)
Set symbology export mode.
QgsVectorLayer * layer() const
Returns the layer.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
Layers and optional attribute index to split into multiple layers using attribute value as layer name...
const QgsCoordinateReferenceSystem & crs
double ANALYSIS_EXPORT angle(QgsPoint *p1, QgsPoint *p2, QgsPoint *p3, QgsPoint *p4)
Calculates the angle between two segments (in 2 dimension, z-values are ignored)
The QgsMapSettings class contains configuration for rendering of the map.
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c
void setForce2d(bool force2d)
Force 2d output (eg.
Abstract base class for curved geometry type.
Keeps the number of features and export symbology per feature (using the first symbol level) ...
Point geometry type, with support for z-dimension and m-values.
DistanceUnit
Units of distance.
QVector< QgsPoint > QgsPointSequence
QVector< QgsPointSequence > QgsRingSequence
void setSymbologyScale(double scale)
Set reference scale for output.
Contains information about the context of a rendering operation.
QgsRectangle extent() const
Gets extent of area to export.
void setLayerTitleAsName(bool layerTitleAsName)
Enable use of title (where set) instead of layer name, when attribute index of corresponding layer in...
Struct for storing maximum and minimum scales for measurements in map units.
void setExtent(const QgsRectangle &r)
Set extent of area to export.
Line string geometry type, with support for z-dimension and m-values.
bool layerTitleAsName()
Retrieve whether layer title (where set) instead of name shall be use.
This class represents a coordinate reference system (CRS).
LabelPosition is a candidate feature label position.
Compound curve geometry type.
Circular string geometry type.
Represents a vector layer which manages a vector based data sets.
RenderUnit
Rendering size units.
int layerOutputAttributeIndex() const
Returns the attribute index used to split into multiple layers.