QgsSymbolLayerV2* QgsMarkerLineSymbolLayerV2::clone() const { QgsMarkerLineSymbolLayerV2* x = new QgsMarkerLineSymbolLayerV2( mRotateMarker, mInterval ); x->setSubSymbol( mMarker->clone() ); x->setOffset( mOffset ); x->setPlacement( mPlacement ); return x; }
QgsSymbolLayerV2* QgsMarkerLineSymbolLayerV2::clone() const { QgsMarkerLineSymbolLayerV2* x = new QgsMarkerLineSymbolLayerV2( mRotateMarker, mInterval ); x->setSubSymbol( mMarker->clone() ); x->setOffset( mOffset ); x->setPlacement( mPlacement ); x->setOffsetUnit( mOffsetUnit ); x->setIntervalUnit( mIntervalUnit ); //data defined properties if ( mIntervalExpression ) { x->setDataDefinedProperty( "interval", mIntervalExpression->dump() ); } if ( mOffsetExpression ) { x->setDataDefinedProperty( "offset", mOffsetExpression->dump() ); } if ( mPlacementExpression ) { x->setDataDefinedProperty( "placement", mPlacementExpression->dump() ); } return x; }
QgsSymbolLayerV2* QgsMarkerLineSymbolLayerV2::create( const QgsStringMap& props ) { bool rotate = DEFAULT_MARKERLINE_ROTATE; double interval = DEFAULT_MARKERLINE_INTERVAL; if ( props.contains( "interval" ) ) interval = props["interval"].toDouble(); if ( props.contains( "rotate" ) ) rotate = ( props["rotate"] == "1" ); QgsMarkerLineSymbolLayerV2* x = new QgsMarkerLineSymbolLayerV2( rotate, interval ); if ( props.contains( "offset" ) ) { x->setOffset( props["offset"].toDouble() ); } if ( props.contains( "placement" ) ) { if ( props["placement"] == "vertex" ) x->setPlacement( Vertex ); else if ( props["placement"] == "lastvertex" ) x->setPlacement( LastVertex ); else if ( props["placement"] == "firstvertex" ) x->setPlacement( FirstVertex ); else if ( props["placement"] == "centralpoint" ) x->setPlacement( CentralPoint ); else x->setPlacement( Interval ); } return x; }
QgsSymbolLayerV2* QgsMarkerLineSymbolLayerV2::clone() const { QgsMarkerLineSymbolLayerV2* x = new QgsMarkerLineSymbolLayerV2( mRotateMarker, mInterval ); x->setSubSymbol( mMarker->clone() ); x->setOffset( mOffset ); x->setPlacement( mPlacement ); x->setOffsetUnit( mOffsetUnit ); x->setIntervalUnit( mIntervalUnit ); copyDataDefinedProperties( x ); return x; }
QgsSymbolLayerV2* QgsMarkerLineSymbolLayerV2::create( const QgsStringMap& props ) { bool rotate = DEFAULT_MARKERLINE_ROTATE; double interval = DEFAULT_MARKERLINE_INTERVAL; if ( props.contains( "interval" ) ) interval = props["interval"].toDouble(); if ( props.contains( "rotate" ) ) rotate = ( props["rotate"] == "1" ); QgsMarkerLineSymbolLayerV2* x = new QgsMarkerLineSymbolLayerV2( rotate, interval ); if ( props.contains( "offset" ) ) { x->setOffset( props["offset"].toDouble() ); } if ( props.contains( "offset_unit" ) ) { x->setOffsetUnit( QgsSymbolLayerV2Utils::decodeOutputUnit( props["offset_unit"] ) ); } if ( props.contains( "interval_unit" ) ) { x->setIntervalUnit( QgsSymbolLayerV2Utils::decodeOutputUnit( props["interval_unit"] ) ); } if ( props.contains( "offset_along_line" ) ) { x->setOffsetAlongLine( props["offset_along_line"].toDouble() ); } if ( props.contains( "offset_along_line_unit" ) ) { x->setOffsetAlongLineUnit( QgsSymbolLayerV2Utils::decodeOutputUnit( props["offset_along_line_unit"] ) ); } if ( props.contains(( "offset_along_line_map_unit_scale" ) ) ) { x->setOffsetAlongLineMapUnitScale( QgsSymbolLayerV2Utils::decodeMapUnitScale( props["offset_along_line_map_unit_scale"] ) ); } if ( props.contains( "offset_map_unit_scale" ) ) { x->setOffsetMapUnitScale( QgsSymbolLayerV2Utils::decodeMapUnitScale( props["offset_map_unit_scale"] ) ); } if ( props.contains( "interval_map_unit_scale" ) ) { x->setIntervalMapUnitScale( QgsSymbolLayerV2Utils::decodeMapUnitScale( props["interval_map_unit_scale"] ) ); } if ( props.contains( "placement" ) ) { if ( props["placement"] == "vertex" ) x->setPlacement( Vertex ); else if ( props["placement"] == "lastvertex" ) x->setPlacement( LastVertex ); else if ( props["placement"] == "firstvertex" ) x->setPlacement( FirstVertex ); else if ( props["placement"] == "centralpoint" ) x->setPlacement( CentralPoint ); else x->setPlacement( Interval ); } //data defined properties if ( props.contains( "interval_expression" ) ) { x->setDataDefinedProperty( "interval", props["interval_expression"] ); } if ( props.contains( "offset_expression" ) ) { x->setDataDefinedProperty( "offset", props["offset_expression"] ); } if ( props.contains( "placement_expression" ) ) { x->setDataDefinedProperty( "placement", props["placement_expression"] ); } if ( props.contains( "offset_along_line_expression" ) ) { x->setDataDefinedProperty( "offset_along_line", props["offset_along_line_expression"] ); } return x; }
QgsSymbolLayerV2* QgsMarkerLineSymbolLayerV2::createFromSld( QDomElement &element ) { QgsDebugMsg( "Entered." ); QDomElement strokeElem = element.firstChildElement( "Stroke" ); if ( strokeElem.isNull() ) return NULL; QDomElement graphicStrokeElem = strokeElem.firstChildElement( "GraphicStroke" ); if ( graphicStrokeElem.isNull() ) return NULL; // retrieve vendor options bool rotateMarker = true; Placement placement = Interval; QgsStringMap vendorOptions = QgsSymbolLayerV2Utils::getVendorOptionList( element ); for ( QgsStringMap::iterator it = vendorOptions.begin(); it != vendorOptions.end(); ++it ) { if ( it.key() == "placement" ) { if ( it.value() == "points" ) placement = Vertex; else if ( it.value() == "firstPoint" ) placement = FirstVertex; else if ( it.value() == "lastPoint" ) placement = LastVertex; else if ( it.value() == "centralPoint" ) placement = CentralPoint; } else if ( it.value() == "rotateMarker" ) { rotateMarker = it.value() == "0"; } } QgsMarkerSymbolV2 *marker = 0; QgsSymbolLayerV2 *l = QgsSymbolLayerV2Utils::createMarkerLayerFromSld( graphicStrokeElem ); if ( l ) { QgsSymbolLayerV2List layers; layers.append( l ); marker = new QgsMarkerSymbolV2( layers ); } if ( !marker ) return NULL; double interval = 0.0; QDomElement gapElem = graphicStrokeElem.firstChildElement( "Gap" ); if ( !gapElem.isNull() ) { bool ok; double d = gapElem.firstChild().nodeValue().toDouble( &ok ); if ( ok ) interval = d; } double offset = 0.0; QDomElement perpOffsetElem = graphicStrokeElem.firstChildElement( "PerpendicularOffset" ); if ( !perpOffsetElem.isNull() ) { bool ok; double d = perpOffsetElem.firstChild().nodeValue().toDouble( &ok ); if ( ok ) offset = d; } QgsMarkerLineSymbolLayerV2* x = new QgsMarkerLineSymbolLayerV2( rotateMarker ); x->setPlacement( placement ); x->setInterval( interval ); x->setSubSymbol( marker ); x->setOffset( offset ); return x; }
QgsGrassEditRenderer::QgsGrassEditRenderer() : QgsFeatureRendererV2( "grassEdit" ) , mLineRenderer( 0 ) , mMarkerRenderer( 0 ) { QHash<int, QColor> colors; //colors.insert( QgsGrassVectorMap::TopoUndefined, QColor( 125, 125, 125 ) ); colors.insert( QgsGrassVectorMap::TopoLine, QColor( Qt::black ) ); colors.insert( QgsGrassVectorMap::TopoBoundaryError, QColor( Qt::red ) ); colors.insert( QgsGrassVectorMap::TopoBoundaryErrorLeft, QColor( 255, 125, 0 ) ); colors.insert( QgsGrassVectorMap::TopoBoundaryErrorRight, QColor( 255, 125, 0 ) ); colors.insert( QgsGrassVectorMap::TopoBoundaryOk, QColor( Qt::green ) ); QHash<int, QString> labels; //labels.insert( QgsGrassVectorMap::TopoUndefined, "Unknown type" ); labels.insert( QgsGrassVectorMap::TopoLine, "Line" ); labels.insert( QgsGrassVectorMap::TopoBoundaryError, "Boundary (topological error on both sides)" ); labels.insert( QgsGrassVectorMap::TopoBoundaryErrorLeft, "Boundary (topological error on the left side)" ); labels.insert( QgsGrassVectorMap::TopoBoundaryErrorRight, "Boundary (topological error on the right side)" ); labels.insert( QgsGrassVectorMap::TopoBoundaryOk, "Boundary (correct)" ); QgsCategoryList categoryList; // first/last vertex marker to distinguish vertices from nodes QgsMarkerLineSymbolLayerV2 * firstVertexMarkerLine = new QgsMarkerLineSymbolLayerV2( false ); QgsSimpleMarkerSymbolLayerV2 *markerSymbolLayer = new QgsSimpleMarkerSymbolLayerV2( QgsSimpleMarkerSymbolLayerBase::Cross2, 2 ); markerSymbolLayer->setColor( QColor( 255, 0, 0 ) ); markerSymbolLayer->setBorderColor( QColor( 255, 0, 0 ) ); markerSymbolLayer->setOutlineWidth( 0.5 ); QgsSymbolLayerV2List markerLayers; markerLayers << markerSymbolLayer; QgsMarkerSymbolV2 * markerSymbol = new QgsMarkerSymbolV2( markerLayers ); firstVertexMarkerLine->setSubSymbol( markerSymbol ); firstVertexMarkerLine->setPlacement( QgsMarkerLineSymbolLayerV2::FirstVertex ); QgsMarkerLineSymbolLayerV2 * lastVertexMarkerLine = static_cast<QgsMarkerLineSymbolLayerV2 *>( firstVertexMarkerLine->clone() ); lastVertexMarkerLine->setPlacement( QgsMarkerLineSymbolLayerV2::LastVertex ); Q_FOREACH ( int value, colors.keys() ) { QgsSymbolV2 * symbol = QgsSymbolV2::defaultSymbol( QGis::Line ); symbol->setColor( colors.value( value ) ); symbol->appendSymbolLayer( firstVertexMarkerLine->clone() ); symbol->appendSymbolLayer( lastVertexMarkerLine->clone() ); categoryList << QgsRendererCategoryV2( QVariant( value ), symbol, labels.value( value ) ); } delete firstVertexMarkerLine; delete lastVertexMarkerLine; mLineRenderer = new QgsCategorizedSymbolRendererV2( "topo_symbol", categoryList ); colors.clear(); labels.clear(); colors.insert( QgsGrassVectorMap::TopoPoint, QColor( 0, 255, 255 ) ); colors.insert( QgsGrassVectorMap::TopoCentroidIn, QColor( 0, 255, 0 ) ); colors.insert( QgsGrassVectorMap::TopoCentroidOut, QColor( 255, 0, 0 ) ); colors.insert( QgsGrassVectorMap::TopoCentroidDupl, QColor( 255, 0, 255 ) ); labels.insert( QgsGrassVectorMap::TopoPoint, "Point" ); labels.insert( QgsGrassVectorMap::TopoCentroidIn, "Centroid in area" ); labels.insert( QgsGrassVectorMap::TopoCentroidOut, "Centroid outside area" ); labels.insert( QgsGrassVectorMap::TopoCentroidDupl, "Duplicate centroid" ); categoryList.clear(); Q_FOREACH ( int value, colors.keys() ) { QgsSymbolV2 * symbol = QgsSymbolV2::defaultSymbol( QGis::Point ); symbol->setColor( colors.value( value ) ); categoryList << QgsRendererCategoryV2( QVariant( value ), symbol, labels.value( value ) ); } mMarkerRenderer = new QgsCategorizedSymbolRendererV2( "topo_symbol", categoryList ); }