QgsSymbolLayerV2* QgsSimpleMarkerSymbolLayerV2::create( const QgsStringMap& props ) { QString name = DEFAULT_SIMPLEMARKER_NAME; QColor color = DEFAULT_SIMPLEMARKER_COLOR; QColor borderColor = DEFAULT_SIMPLEMARKER_BORDERCOLOR; double size = DEFAULT_SIMPLEMARKER_SIZE; double angle = DEFAULT_SIMPLEMARKER_ANGLE; QgsSymbolV2::ScaleMethod scaleMethod = DEFAULT_SCALE_METHOD; if ( props.contains( "name" ) ) name = props["name"]; if ( props.contains( "color" ) ) color = QgsSymbolLayerV2Utils::decodeColor( props["color"] ); if ( props.contains( "color_border" ) ) borderColor = QgsSymbolLayerV2Utils::decodeColor( props["color_border"] ); if ( props.contains( "size" ) ) size = props["size"].toDouble(); if ( props.contains( "angle" ) ) angle = props["angle"].toDouble(); if ( props.contains( "scale_method" ) ) scaleMethod = QgsSymbolLayerV2Utils::decodeScaleMethod( props["scale_method"] ); QgsSimpleMarkerSymbolLayerV2* m = new QgsSimpleMarkerSymbolLayerV2( name, color, borderColor, size, angle, scaleMethod ); if ( props.contains( "offset" ) ) m->setOffset( QgsSymbolLayerV2Utils::decodePoint( props["offset"] ) ); return m; }
QgsSymbolLayerV2* QgsSimpleMarkerSymbolLayerV2::clone() const { QgsSimpleMarkerSymbolLayerV2* m = new QgsSimpleMarkerSymbolLayerV2( mName, mColor, mBorderColor, mSize, mAngle, mScaleMethod ); m->setOffset( mOffset ); m->setSizeUnit( mSizeUnit ); m->setOffsetUnit( mOffsetUnit ); m->setOutlineWidth( mOutlineWidth ); m->setOutlineWidthUnit( mOutlineWidthUnit ); m->setHorizontalAnchorPoint( mHorizontalAnchorPoint ); m->setVerticalAnchorPoint( mVerticalAnchorPoint ); copyDataDefinedProperties( m ); return m; }
QgsSymbolLayerV2* QgsSimpleMarkerSymbolLayerV2::create( const QgsStringMap& props ) { QString name = DEFAULT_SIMPLEMARKER_NAME; QColor color = DEFAULT_SIMPLEMARKER_COLOR; QColor borderColor = DEFAULT_SIMPLEMARKER_BORDERCOLOR; double size = DEFAULT_SIMPLEMARKER_SIZE; double angle = DEFAULT_SIMPLEMARKER_ANGLE; QgsSymbolV2::ScaleMethod scaleMethod = DEFAULT_SCALE_METHOD; if ( props.contains( "name" ) ) name = props["name"]; if ( props.contains( "color" ) ) color = QgsSymbolLayerV2Utils::decodeColor( props["color"] ); if ( props.contains( "color_border" ) ) borderColor = QgsSymbolLayerV2Utils::decodeColor( props["color_border"] ); if ( props.contains( "size" ) ) size = props["size"].toDouble(); if ( props.contains( "angle" ) ) angle = props["angle"].toDouble(); if ( props.contains( "scale_method" ) ) scaleMethod = QgsSymbolLayerV2Utils::decodeScaleMethod( props["scale_method"] ); QgsSimpleMarkerSymbolLayerV2* m = new QgsSimpleMarkerSymbolLayerV2( name, color, borderColor, size, angle, scaleMethod ); if ( props.contains( "offset" ) ) m->setOffset( QgsSymbolLayerV2Utils::decodePoint( props["offset"] ) ); if ( props.contains( "offset_unit" ) ) m->setOffsetUnit( QgsSymbolLayerV2Utils::decodeOutputUnit( props["offset_unit"] ) ); if ( props.contains( "size_unit" ) ) m->setSizeUnit( QgsSymbolLayerV2Utils::decodeOutputUnit( props["size_unit"] ) ); if ( props.contains( "outline_width" ) ) { m->setOutlineWidth( props["outline_width"].toDouble() ); } if ( props.contains( "outline_width_unit" ) ) { m->setOutlineWidthUnit( QgsSymbolLayerV2Utils::decodeOutputUnit( props["outline_width_unit"] ) ); } if ( props.contains( "horizontal_anchor_point" ) ) { m->setHorizontalAnchorPoint( QgsMarkerSymbolLayerV2::HorizontalAnchorPoint( props[ "horizontal_anchor_point" ].toInt() ) ); } if ( props.contains( "vertical_anchor_point" ) ) { m->setVerticalAnchorPoint( QgsMarkerSymbolLayerV2::VerticalAnchorPoint( props[ "vertical_anchor_point" ].toInt() ) ); } //data defined properties if ( props.contains( "name_expression" ) ) { m->setDataDefinedProperty( "name", props["name_expression"] ); } if ( props.contains( "color_expression" ) ) { m->setDataDefinedProperty( "color", props["color_expression"] ); } if ( props.contains( "color_border_expression" ) ) { m->setDataDefinedProperty( "color_border", props["color_border_expression"] ); } if ( props.contains( "outline_width_expression" ) ) { m->setDataDefinedProperty( "outline_width", props["outline_width_expression"] ); } if ( props.contains( "size_expression" ) ) { m->setDataDefinedProperty( "size", props["size_expression"] ); } if ( props.contains( "angle_expression" ) ) { m->setDataDefinedProperty( "angle", props["angle_expression"] ); } if ( props.contains( "offset_expression" ) ) { m->setDataDefinedProperty( "offset", props["offset_expression"] ); } if ( props.contains( "horizontal_anchor_point_expression" ) ) { m->setDataDefinedProperty( "horizontal_anchor_point", props[ "horizontal_anchor_point_expression" ] ); } if ( props.contains( "vertical_anchor_point_expression" ) ) { m->setDataDefinedProperty( "vertical_anchor_point", props[ "vertical_anchor_point_expression" ] ); } return m; }
QgsSymbol* QgsSymbologyV2Conversion::symbolV2toV1( QgsSymbolV2* s ) { if ( s == NULL || s->symbolLayerCount() == 0 ) return NULL; // we will use only the first symbol layer QgsSymbolLayerV2* sl = s->symbolLayer( 0 ); switch ( sl->type() ) { case QgsSymbolV2::Marker: { QgsMarkerSymbolLayerV2* msl = static_cast<QgsMarkerSymbolLayerV2*>( sl ); QgsSymbol* sOld = new QgsSymbol( QGis::Point ); sOld->setFillColor( sl->color() ); sOld->setFillStyle( Qt::SolidPattern ); sOld->setPointSize( msl->size() ); if ( sl->layerType() == "SimpleMarker" ) { QgsSimpleMarkerSymbolLayerV2* smsl = static_cast<QgsSimpleMarkerSymbolLayerV2*>( sl ); sOld->setColor( smsl->borderColor() ); sOld->setNamedPointSymbol( "hard:" + smsl->name() ); } else if ( sl->layerType() == "SvgMarker" ) { QgsSvgMarkerSymbolLayerV2* smsl = static_cast<QgsSvgMarkerSymbolLayerV2*>( sl ); sOld->setNamedPointSymbol( "svg:" + smsl->path() ); } return sOld; } break; case QgsSymbolV2::Line: { QgsLineSymbolLayerV2* lsl = static_cast<QgsLineSymbolLayerV2*>( sl ); QgsSymbol* sOld = new QgsSymbol( QGis::Line ); sOld->setColor( sl->color() ); sOld->setLineWidth( lsl->width() ); if ( sl->layerType() == "SimpleLine" ) { // add specific settings QgsSimpleLineSymbolLayerV2* slsl = static_cast<QgsSimpleLineSymbolLayerV2*>( sl ); sOld->setLineStyle( slsl->penStyle() ); } return sOld; } case QgsSymbolV2::Fill: { QgsSymbol* sOld = new QgsSymbol( QGis::Polygon ); sOld->setFillColor( sl->color() ); if ( sl->layerType() == "SimpleFill" ) { // add specifc settings QgsSimpleFillSymbolLayerV2* sfsl = static_cast<QgsSimpleFillSymbolLayerV2*>( sl ); sOld->setColor( sfsl->borderColor() ); sOld->setLineWidth( sfsl->borderWidth() ); sOld->setLineStyle( sfsl->borderStyle() ); sOld->setFillStyle( sfsl->brushStyle() ); } return sOld; } } return NULL; // should never get here }
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 ); }
QgsSymbolLayerV2* QgsSimpleMarkerSymbolLayerV2::clone() const { QgsSimpleMarkerSymbolLayerV2* m = new QgsSimpleMarkerSymbolLayerV2( mName, mColor, mBorderColor, mSize, mAngle, mScaleMethod ); m->setOffset( mOffset ); return m; }