On 16 Mar 2016 20:56, "Tom Chadwin" <[email protected]> wrote:
>
> def writeTmpLayer(layer, popup):
> usedFields = getUsedFields(layer)
> if popup != ALL_ATTRIBUTES:
> uri = TYPE_MAP[layer.wkbType()]
> crs = layer.crs()
> if crs.isValid():
> uri += '?crs=' + crs.authid()
> if popup != NO_POPUP:
> usedFields.append(popup)
> for field in usedFields:
> fieldType = layer.pendingFields().field(field).type()
> fieldType = "double" if (fieldType == QVariant.Double or
> fieldType == QVariant.Int) else (
> "string")
> uri += '&field=' + unicode(field) + ":" + fieldType
> newlayer = QgsVectorLayer(uri, layer.name(), 'memory')
> writer = newlayer.dataProvider()
> outFeat = QgsFeature()
> for feature in layer.getFeatures():
> outFeat.setGeometry(feature.geometry())
> attrs = [feature[f] for f in usedFields]
> if attrs:
> outFeat.setAttributes(attrs)
> writer.addFeatures([outFeat])
> layer = newlayer
> return layer
>
> The snippet which calls the function above and is meant to add the fields
to
> the memory layer is:
>
> if (layer.type() == layer.VectorLayer)
> cleanLayer = writeTmpLayer(layer, popup)
> if is25d(layer, canvas):
> provider = cleanLayer.dataProvider()
> provider.addAttributes([QgsField("height", QVariant.Double),
> QgsField("wallColor", QVariant.String),
> QgsField("roofColor",
> QVariant.String)])
> cleanLayer.updateFields()
>
If popup == ALL_ATTRIBUTES then your writeTmpLayer function is returning
the original layer.
Nyall
_______________________________________________
Qgis-developer mailing list
[email protected]
List info: http://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: http://lists.osgeo.org/mailman/listinfo/qgis-developer