/*************************************************************************** qgsdxfexport.sip ---------------- begin : September 2013 copyright : (C) 2013 by Marco Hugentobler email : marco at sourcepole dot ch ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ class QgsDxfExport { %TypeHeaderCode #include %End public: enum SymbologyExport { NoSymbology, //export only data FeatureSymbology, //Keeps the number of features and export symbology per feature (using the first symbol level) SymbolLayerSymbology //Exports one feature per symbol layer (considering symbol levels) }; QgsDxfExport(); ~QgsDxfExport(); /** * Add layers to export * @param layers list of layers and corresponding attribute indexes that determine the layer name (-1 for original layer name or title) * @see setLayerTitleAsName */ void addLayers( const QList< QPair > &layers ); /** * Export to a dxf file in the given encoding * @param d device * @param codec encoding * @returns 0 on success, 1 on invalid device, 2 when devices is not writable */ int writeToFile( QIODevice *d, const QString& codec ); //maybe add progress dialog? other parameters (e.g. scale, dpi)? /** * Set reference scale for output * @param d scale denominator */ void setSymbologyScaleDenominator( double d ); /** * Retrieve reference scale for output * @returns reference scale * @see setSymbologyScaleDenominator */ double symbologyScaleDenominator() const; /** * Set map units * @param u unit */ void setMapUnits( QgsUnitTypes::DistanceUnit u ); /** * Retrieve map units * @returns unit * @see setMapUnits */ QgsUnitTypes::DistanceUnit mapUnits() const; /** * Set symbology export mode * @param e the mode */ void setSymbologyExport( QgsDxfExport::SymbologyExport e ); /** * Get symbology export mode * @returns mode * @see setSymbologyExport */ QgsDxfExport::SymbologyExport symbologyExport() const; /** * Set extent of area to export * @param r area to export */ void setExtent( const QgsRectangle &r ); /** * Get extent of area to export * @returns area to export * @see setExtent */ QgsRectangle extent() const; /** * Enable use of title (where set) instead of layer name, * when attribute index of corresponding layer index is -1 * @param layerTitleAsName flag * @see addLayers */ void setLayerTitleAsName( bool layerTitleAsName ); /** * Retrieve wether layer title (where set) instead of name shall be use * @returns flag * @see setLayerTitleAsName */ bool layerTitleAsName(); /** * Get DXF palette index of nearest entry for given color * @param color */ static int closestColorMatch( QRgb color ); /** * Get layer name for feature * @param id layer id of layer * @param f feature of layer * @returns layer name for feature */ QString layerName( const QString &id, const QgsFeature &f ) const; /** * Get name for layer respecting the use layer title as layer name mode * @param vl the vector layer * @returns name of layer * @see setLayerTitleAsName */ QString layerName( QgsVectorLayer *vl ) const; /** * Write a tuple of group code and integer value * @param code group code * @param i integer value * @note available in python bindings as writeGroupInt */ void writeGroup( int code, int i ) /PyName=writeGroupInt/; /** * Write a group code with a floating point value * @param code group code * @param d floating point value * @note available in python bindings as writeGroupDouble */ void writeGroup( int code, double d ) /PyName=writeGroupDouble/; /** * Write a group code with a string value * @param code group code * @param s string value */ void writeGroup( int code, const QString &s ); /** * Write a group code with a point * @param code group code * @param p point value * @param z z value of the point (defaults to 0.0) * @param skipz write point in 2d (defaults to false) * @note available in python bindings as writeGroupPoint * @deprecated use QgsPointV2 version instead */ void writeGroup( int code, const QgsPoint &p, double z = 0.0, bool skipz = false ) /PyName=writeGroupPoint/; /** * Write a group code with a point * @param code group code * @param p point value * @note available in python bindings as writeGroupPointV2 * @note added in 2.15 */ void writeGroup( int code, const QgsPointV2 &p ) /PyName=writeGroupPointV2/; /** * Write a group code with color value * @param color color * @param exactMatch group code to use if the color has an exact match in the dxf palette * @param rgbCode group code to use if the color doesn't have an exact match or has a transparency component * @param transparencyCode group code to use for transparency component * @note available in python bindings as writeGroupPoint */ void writeGroup( const QColor& color, int exactMatch = 62, int rgbCode = 420, int transparencyCode = 440 ); /** * Write a group code * @param code group code value */ void writeGroupCode( int code ); /** * Write an integer value * @param i integer value */ void writeInt( int i ); /** * Write a floating point value * @param d floating point value */ void writeDouble( double d ); /** * Write a string value * @param s string value */ void writeString( const QString &s ); /** * Write a tuple of group code and a handle * @param code group code to use * @param handle handle to use (0 generates a new handle) * @returns the used handle */ int writeHandle( int code = 5, int handle = 0 ); /** * Draw dxf primitives (LWPOLYLINE) * @param line polyline * @param layer layer name to use * @param lineStyleName line type to use * @param color color to use * @param width line width to use */ void writePolyline( const QgsPolyline &line, const QString &layer, const QString &lineStyleName, const QColor& color, double width = -1 ); /** * Draw dxf primitives (LWPOLYLINE) * @param line polyline * @param layer layer name to use * @param lineStyleName line type to use * @param color color to use * @param width line width to use * @note not available in Python bindings * @note added in 2.15 */ // void writePolyline( const QgsPointSequence &line, const QString &layer, const QString &lineStyleName, const QColor& color, double width = -1 ); /** * Draw dxf filled polygon (HATCH) * @param polygon polygon * @param layer layer name to use * @param hatchPattern hatchPattern to use * @param color color to use * @deprecated use version with QgsRingSequence */ void writePolygon( const QgsPolygon &polygon, const QString &layer, const QString &hatchPattern, const QColor& color ) /Deprecated/; /** * Draw dxf filled polygon (HATCH) * @param polygon polygon * @param layer layer name to use * @param hatchPattern hatchPattern to use * @param color color to use * @note not available in Python bindings * @note added in 2.15 */ // void writePolygon( const QgsRingSequence &polygon, const QString &layer, const QString &hatchPattern, const QColor& color ); /** * Draw dxf filled polygon (SOLID) * @param layer layer name to use * @param color color to use * @param pt1 1. point of solid * @param pt2 2. point of solid * @param pt3 3. point of solid * @param pt4 4. point of solid * @deprecated see writePolygon */ void writeSolid( const QString &layer, const QColor& color, const QgsPoint &pt1, const QgsPoint &pt2, const QgsPoint &pt3, const QgsPoint &pt4 ) /Deprecated/; //! Write line (as a polyline) void writeLine( const QgsPoint &pt1, const QgsPoint &pt2, const QString &layer, const QString &lineStyleName, const QColor& color, double width = -1 ); //! Write line (as a polyline) //! @note added in 2.15 void writeLine( const QgsPointV2 &pt1, const QgsPointV2 &pt2, const QString &layer, const QString &lineStyleName, const QColor& color, double width = -1 ); //! Write point //! @deprecated use QgsPointV2 version void writePoint( const QString &layer, const QColor& color, const QgsPoint &pt ) /Deprecated/; //! Write point //! @note available in Python bindings as writePointV2 //! @note added in 2.15 void writePoint( const QString &layer, const QColor& color, const QgsPointV2 &pt ) /PyName=writePointV2/; //! Write filled circle (as hatch) //! @deprecated use QgsPointV2 version void writeFilledCircle( const QString &layer, const QColor& color, const QgsPoint &pt, double radius ) /Deprecated/; //! Write filled circle (as hatch) //! @note available in Python bindings as writePointV2 //! @note added in 2.15 void writeFilledCircle( const QString &layer, const QColor& color, const QgsPointV2 &pt, double radius ) /PyName=writeFillCircleV2/; //! Write circle (as polyline) //! @deprecated use QgsPointV2 version void writeCircle( const QString &layer, const QColor& color, const QgsPoint &pt, double radius, const QString &lineStyleName, double width ) /Deprecated/; //! Write circle (as polyline) //! @note available in Python bindings as writeCircleV2 //! @note added in 2.15 void writeCircle( const QString &layer, const QColor& color, const QgsPointV2 &pt, double radius, const QString &lineStyleName, double width ) /PyName=writeCircleV2/; //! Write text (TEXT) //! @deprecated use QgsPointV2 version void writeText( const QString &layer, const QString &text, const QgsPoint &pt, double size, double angle, const QColor& color ) /Deprecated/; //! Write text (TEXT) //! @note available in Python bindings as writeTextV2 //! @note added in 2.15 void writeText( const QString &layer, const QString &text, const QgsPointV2 &pt, double size, double angle, const QColor& color ) /PyName=writeTextV2/; //! Write mtext (MTEXT) //! @deprecated use QgsPointV2 version void writeMText( const QString &layer, const QString &text, const QgsPoint &pt, double width, double angle, const QColor& color ) /Deprecated/; //! Write mtext (MTEXT) //! @note available in Python bindings as writeMTextV2 //! @note added in 2.15 void writeMText( const QString &layer, const QString &text, const QgsPointV2 &pt, double width, double angle, const QColor& color ); //! Calculates a scaling factor to convert from map units to a specified symbol unit. static double mapUnitScaleFactor( double scaleDenominator, QgsUnitTypes::RenderUnit symbolUnits, QgsUnitTypes::DistanceUnit mapUnits ); //! Return cleaned layer name for use in DXF static QString dxfLayerName( const QString &name ); //! return DXF encoding for Qt encoding static QString dxfEncoding( const QString &name ); //! return list of available DXF encodings static QStringList encodings(); /** Output the label * @param layerId id of the layer * @param context render context * @param label position of label * @param settings label settings * @note not available in Python bindings */ // void drawLabel( QString layerId, QgsRenderContext& context, pal::LabelPosition* label, const QgsPalLayerSettings &settings ); /** Register name of layer for feature * @param layerId id of layer * @param fid id of feature * @param layer dxf layer of feature */ void registerDxfLayer( QString layerId, QgsFeatureId fid, QString layer ); };