I'm writing a script with python in QGIS that allows me to convert a dxf file to shp. In the dxf file I have oriented text but after the conversion I lose this information. Is it possible to keep it? this is my script :
import os
from PyQt4.QtCore import *
import datetime
print datetime.datetime.now().minute
uri="C:/Users/Lenovo/Desktop/stage_brome/restitution.dxf|layername=entities"
vlayer = QgsVectorLayer(uri, 'layer', 'ogr')
##For each sublayer, diferent type of geometry, load a layer to map.
subLayers = vlayer.dataProvider().subLayers()
types=["LineString","Point","Polygon"]
for sublayer in subLayers:
#Extract the geometry type
geom_type = sublayer.split(':')[-1]
#Set the path
url = str(uri)+"|layername=entities|geometrytype="+str(geom_type)
#Name for sub layer
dxf_file_name = os.path.splitext(os.path.basename(url))[0]
layer_name =str(dxf_file_name)+" - "+str(geom_type)
#Create layer
sub_vlayer = QgsVectorLayer(url, layer_name, 'ogr')
#Add layer to map
QgsMapLayerRegistry.instance().addMapLayer(sub_vlayer)
if geom_type in types:
#list of string that contains the name of each layer
layer_types=[]
#list of vector layers
vlayers_by_type=[]
#list of providers for each vector layer
vlayers_providers=[]
geom_types=[]
for feature in sub_vlayer.getFeatures():
#fill the lists (vector layer and it's provider and attributes of each layer)
if (feature.attributes())[0] not in layer_types:
name=(feature.attributes())[0]
layer_types.append(name)
# create vlayer
vl=QgsVectorLayer(geom_type, "temporary_points", "memory")
geom_types.append(geom_type)
pr = vl.dataProvider()
# add fields
fields=[field for field in sub_vlayer.pendingFields()]
pr.addAttributes(fields)
# tell the vector layer to fetch changes from the provider
vl.updateFields()
vlayers_by_type.append(vl)
vlayers_providers.append(pr)
error = QgsVectorFileWriter.writeAsVectorFormat(vl, "C:/Users/Lenovo/Desktop/stage_brome/output/layers/"+name+"-"+str(geom_type)+".shp", "CP1250", None, "ESRI Shapefile")
# if error != QgsVectorFileWriter.NoError:
# print "failed "------------------------------------
for feature in sub_vlayer.getFeatures():
name=(feature.attributes())[0]
if name in layer_types:
# add features
vl=vlayers_by_type[layer_types.index(name)]
pr=vlayers_providers[layer_types.index(name)]
pr.addFeatures([feature])
# update layer's extent when new features have been added
# because change of extent in provider is not propagated to the layer
geom_type=geom_types[layer_types.index(name)]
vl.updateExtents()
error = QgsVectorFileWriter.writeAsVectorFormat(vl, "C:/Users/Lenovo/Desktop/stage_brome/output/layers/"+str(name)+"-"+str(geom_type)+".shp", "CP1250", None, "ESRI Shapefile")
if error != QgsVectorFileWriter.NoError:
print "failed "+str(layer_types[vlayers_by_type.index(vl)])
print datetime.datetime.now().minute