std::unique_ptr<QgsLineString> QgsGeometryFactory::linestringFromPolyline( const QgsPolyline &polyline ) { QVector< double > x; x.reserve( polyline.size() ); QVector< double > y; y.reserve( polyline.size() ); QgsPolyline::const_iterator it = polyline.constBegin(); for ( ; it != polyline.constEnd(); ++it ) { x << it->x(); y << it->y(); } std::unique_ptr< QgsLineString > line( new QgsLineString( x, y ) ); return line; }
void QgsDxfExport::writePolyline( const QgsPolyline& line, const QString& layer, const QString& lineStyleName, int color, double width, bool polygon ) { writeGroup( 0, "POLYLINE" ); writeGroup( 8, layer ); writeGroup( 6, lineStyleName ); writeGroup( 62, color ); writeGroup( 66, 1 ); int type = polygon ? 1 : 0; writeGroup( 70, type ); if ( width > 0 ) //width -1: use default width { writeGroup( 40, width ); writeGroup( 41, width ); } QgsPolyline::const_iterator lineIt = line.constBegin(); for ( ; lineIt != line.constEnd(); ++lineIt ) { writeVertex( *lineIt, layer ); } writeGroup( 0, "SEQEND" ); }
void QgsDxfExport::writePolylineAC1018( QTextStream& stream, const QgsPolyline& line, const QString& layer, const QString& lineStyleName, int color, double width, bool polygon ) { stream << " 0\n"; stream << "LWPOLYLINE\n"; stream << " 5\n"; stream << QString( "%1\n" ).arg( mNextHandleId++ ); stream << " 8\n"; stream << layer << "\n"; stream << "100\n"; stream << "AcDbEntity\n"; stream << "100\n"; stream << "AcDbPolyline\n"; stream << " 6\n"; stream << QString( "%1\n" ).arg( lineStyleName ); stream << " 62\n"; stream << color << "\n"; stream << " 90\n"; stream << QString( "%1\n" ).arg( line.size() ); stream << " 70\n"; int type = polygon ? 1 : 0; stream << type << "\n"; stream << " 43\n"; stream << width << "\n"; QgsPolyline::const_iterator lineIt = line.constBegin(); for ( ; lineIt != line.constEnd(); ++lineIt ) { writeVertexAC1018( stream, *lineIt ); } }
int QgsVectorLayerEditUtils::addTopologicalPoints( QgsGeometry* geom ) { if ( !L->hasGeometryType() ) return 1; if ( !geom ) { return 1; } int returnVal = 0; QGis::WkbType wkbType = geom->wkbType(); switch ( wkbType ) { //line case QGis::WKBLineString25D: case QGis::WKBLineString: { QgsPolyline theLine = geom->asPolyline(); QgsPolyline::const_iterator line_it = theLine.constBegin(); for ( ; line_it != theLine.constEnd(); ++line_it ) { if ( addTopologicalPoints( *line_it ) != 0 ) { returnVal = 2; } } break; } //multiline case QGis::WKBMultiLineString25D: case QGis::WKBMultiLineString: { QgsMultiPolyline theMultiLine = geom->asMultiPolyline(); QgsPolyline currentPolyline; for ( int i = 0; i < theMultiLine.size(); ++i ) { QgsPolyline::const_iterator line_it = currentPolyline.constBegin(); for ( ; line_it != currentPolyline.constEnd(); ++line_it ) { if ( addTopologicalPoints( *line_it ) != 0 ) { returnVal = 2; } } } break; } //polygon case QGis::WKBPolygon25D: case QGis::WKBPolygon: { QgsPolygon thePolygon = geom->asPolygon(); QgsPolyline currentRing; for ( int i = 0; i < thePolygon.size(); ++i ) { currentRing = thePolygon.at( i ); QgsPolyline::const_iterator line_it = currentRing.constBegin(); for ( ; line_it != currentRing.constEnd(); ++line_it ) { if ( addTopologicalPoints( *line_it ) != 0 ) { returnVal = 2; } } } break; } //multipolygon case QGis::WKBMultiPolygon25D: case QGis::WKBMultiPolygon: { QgsMultiPolygon theMultiPolygon = geom->asMultiPolygon(); QgsPolygon currentPolygon; QgsPolyline currentRing; for ( int i = 0; i < theMultiPolygon.size(); ++i ) { currentPolygon = theMultiPolygon.at( i ); for ( int j = 0; j < currentPolygon.size(); ++j ) { currentRing = currentPolygon.at( j ); QgsPolyline::const_iterator line_it = currentRing.constBegin(); for ( ; line_it != currentRing.constEnd(); ++line_it ) { if ( addTopologicalPoints( *line_it ) != 0 ) { returnVal = 2; } } } } break; } default: break; } return returnVal; }