admin管理员组文章数量:1574073
DWG文件转DXF
dwg文件转dxf文件主要用到的是ezdxf模块(ezdxf-addons-odafc配置),该模块支持R2018以下所有dwg格式文件的转换以及读取,非常好用。
下面是odafc读取和转换dwg文件的代码:
from ezdxf.addons import odafc
# 读取dwg文件
doc = odafc.readfile('**.dwg' # dwg文件名或者路径)
# 转换dwg文件。replace=true允许覆盖已有文件。
# 输出文件可用空字符代替'',转换后文件会默认输出到输入文件所在目录,与输入文件同名。
odafc.convert('input.dwg', 'out.dxf', version='R2000', replace=True)
未知版本的dwg文件转为dxf后,就可利用ogr模块对dxf文件进行操作,通过geometry的ExportToWkb或者ExportToWkt把几何要素转为对应的字符串格式。完整代码如下:
from osgeo import ogr
import sys
from ezdxf.addons import odafc
class file2geo:
def __init__(self, filepath, layername):
self.filepath = filepath
self.layername = layername
def dwg2wkb(self):
# dwg文件转换为2000格式的dxf文件, 因为ogr不支持读取高版本dwg
odafc.convert(self.filepath, 'out.dxf', version='R2000', replace=True)
geometry_list = []
# 图形类型列表
geomtype_list = ['AcDbEntity:AcDbPolyline', 'AcDbEntity:AcDb3dPolyline', 'AcDbEntity:AcDbCircle:AcDbArc',
'AcDbEntity:AcDbLine', 'AcDbEntity:AcDb2dPolyline']
driver = ogr.GetDriverByName('DXF')
datasource = driver.Open('out.dxf')
if datasource is None:
sys.exit('无法打开文件{0}.'.format(self.filepath))
layer = datasource.GetLayer() # dxf文件只有一个图层
feature = layer.GetFeature(0)
for key in feature.keys():
print(key, end=' ')
print()
for feature in layer:
# 根据图层名和图形类型过滤feature(图层在dxf文件中只是一个字段)
if feature.GetField('Layer') == self.layername and feature.GetField('SubClasses') in geomtype_list:
for key in feature.keys():
print(f'{feature.GetField(key)}', end=' ')
print()
geom = feature.geometry()
geometry_list.append(geom.ExportToWkb()) # 转为wkb二进制文件,如果用WKT则转为文本文件
return geometry_list
版权声明:本文标题:通过python把DWG文件转DXF文件并转为WKB格式 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1727765589a1128453.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论